From 2b1057cae03abd7422c00bcd0f34490f05a9ec16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=83=C2=A9?= Date: Mon, 24 Jun 2024 08:49:52 +0000 Subject: [PATCH 001/422] Section styles: improve performance and conceptual consistency. These changes involve: - Move shared variation definitions from styles.blocks.variations to styles.variations - Remove blockTypes from styles.variations. - Do not register shared variations from theme style variation or primary theme.json files. - Move the merging of theme.json data into the WP_Theme_JSON_Resolver and WP_Theme_JSON classes. These changes improve performance and are more future-proof API wise. See conversation at https://github.com/WordPress/gutenberg/issues/62686 Props aaronrobertshaw, oandregal, andrewserong, joemcgill, talldanwp, andrewserong, ramonopoly, richtabor, youknowriad. See #61312, #61451. git-svn-id: https://develop.svn.wordpress.org/trunk@58466 602fd350-edb4-49c9-b593-d223f7449a82 --- .../block-supports/block-style-variations.php | 209 +----------------- .../class-wp-theme-json-resolver.php | 116 +++++++++- src/wp-includes/class-wp-theme-json.php | 78 ++++++- ...class-wp-rest-global-styles-controller.php | 16 +- src/wp-includes/theme-i18n.json | 9 - .../theme.json | 53 ++++- .../block-supports/block-style-variations.php | 28 +-- .../rest-global-styles-controller.php | 29 ++- tests/phpunit/tests/theme/wpThemeJson.php | 86 +++++++ .../tests/theme/wpThemeJsonResolver.php | 91 ++++++++ 10 files changed, 454 insertions(+), 261 deletions(-) diff --git a/src/wp-includes/block-supports/block-style-variations.php b/src/wp-includes/block-supports/block-style-variations.php index bb663ee754fae..5d92ecfb12734 100644 --- a/src/wp-includes/block-supports/block-style-variations.php +++ b/src/wp-includes/block-supports/block-style-variations.php @@ -212,176 +212,6 @@ function wp_render_block_style_variation_class_name( $block_content, $block ) { return $tags->get_updated_html(); } -/** - * Collects block style variation data for merging with theme.json data. - * - * @since 6.6.0 - * @access private - * - * @param array $variations Shared block style variations. - * - * @return array Block variations data to be merged under `styles.blocks`. - */ -function wp_resolve_block_style_variations( $variations ) { - $variations_data = array(); - - if ( empty( $variations ) ) { - return $variations_data; - } - - $have_named_variations = ! wp_is_numeric_array( $variations ); - - foreach ( $variations as $key => $variation ) { - $supported_blocks = $variation['blockTypes'] ?? array(); - - /* - * Standalone theme.json partial files for block style variations - * will have their styles under a top-level property by the same name. - * Variations defined within an existing theme.json or theme style - * variation will themselves already be the required styles data. - */ - $variation_data = $variation['styles'] ?? $variation; - - if ( empty( $variation_data ) ) { - continue; - } - - /* - * Block style variations read in via standalone theme.json partials - * need to have their name set to the kebab case version of their title. - */ - $variation_name = $have_named_variations ? $key : ( $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] ) ); - - foreach ( $supported_blocks as $block_type ) { - // Add block style variation data under current block type. - $path = array( $block_type, 'variations', $variation_name ); - _wp_array_set( $variations_data, $path, $variation_data ); - } - } - - return $variations_data; -} - -/** - * Merges variations data with existing theme.json data ensuring that the - * current theme.json data values take precedence. - * - * @since 6.6.0 - * @access private - * - * @param array $variations_data Block style variations data keyed by block type. - * @param WP_Theme_JSON_Data $theme_json Current theme.json data. - * @param string $origin Origin for the theme.json data. - * - * @return WP_Theme_JSON The merged theme.json data. - */ -function wp_merge_block_style_variations_data( $variations_data, $theme_json, $origin = 'theme' ) { - if ( empty( $variations_data ) ) { - return $theme_json; - } - - $variations_theme_json_data = array( - 'version' => WP_Theme_JSON::LATEST_SCHEMA, - 'styles' => array( 'blocks' => $variations_data ), - ); - - $variations_theme_json = new WP_Theme_JSON_Data( $variations_theme_json_data, $origin ); - - /* - * Merge the current theme.json data over shared variation data so that - * any explicit per block variation values take precedence. - */ - return $variations_theme_json->update_with( $theme_json->get_data() ); -} - -/** - * Merges any shared block style variation definitions from a theme style - * variation into their appropriate block type within theme json styles. Any - * custom user selections already made will take precedence over the shared - * style variation value. - * - * @since 6.6.0 - * @access private - * - * @param WP_Theme_JSON_Data $theme_json Current theme.json data. - * - * @return WP_Theme_JSON_Data - */ -function wp_resolve_block_style_variations_from_theme_style_variation( $theme_json ) { - $theme_json_data = $theme_json->get_data(); - $shared_variations = $theme_json_data['styles']['blocks']['variations'] ?? array(); - $variations_data = wp_resolve_block_style_variations( $shared_variations ); - - return wp_merge_block_style_variations_data( $variations_data, $theme_json, 'user' ); -} - -/** - * Merges block style variation data sourced from standalone partial - * theme.json files. - * - * @since 6.6.0 - * @access private - * - * @param WP_Theme_JSON_Data $theme_json Current theme.json data. - * - * @return WP_Theme_JSON_Data - */ -function wp_resolve_block_style_variations_from_theme_json_partials( $theme_json ) { - $block_style_variations = WP_Theme_JSON_Resolver::get_style_variations( 'block' ); - $variations_data = wp_resolve_block_style_variations( $block_style_variations ); - - return wp_merge_block_style_variations_data( $variations_data, $theme_json ); -} - -/** - * Merges shared block style variations registered within the - * `styles.blocks.variations` property of the primary theme.json file. - * - * @since 6.6.0 - * @access private - * - * @param WP_Theme_JSON_Data $theme_json Current theme.json data. - * - * @return WP_Theme_JSON_Data - */ -function wp_resolve_block_style_variations_from_primary_theme_json( $theme_json ) { - $theme_json_data = $theme_json->get_data(); - $block_style_variations = $theme_json_data['styles']['blocks']['variations'] ?? array(); - $variations_data = wp_resolve_block_style_variations( $block_style_variations ); - - return wp_merge_block_style_variations_data( $variations_data, $theme_json ); -} - -/** - * Merges block style variations registered via the block styles registry with a - * style object, under their appropriate block types within theme.json styles. - * Any variation values defined within the theme.json specific to a block type - * will take precedence over these shared definitions. - * - * @since 6.6.0 - * @access private - * - * @param WP_Theme_JSON_Data $theme_json Current theme.json data. - * - * @return WP_Theme_JSON_Data - */ -function wp_resolve_block_style_variations_from_styles_registry( $theme_json ) { - $registry = WP_Block_Styles_Registry::get_instance(); - $styles = $registry->get_all_registered(); - $variations_data = array(); - - foreach ( $styles as $block_type => $variations ) { - foreach ( $variations as $variation_name => $variation ) { - if ( ! empty( $variation['style_data'] ) ) { - $path = array( $block_type, 'variations', $variation_name ); - _wp_array_set( $variations_data, $path, $variation['style_data'] ); - } - } - } - - return wp_merge_block_style_variations_data( $variations_data, $theme_json ); -} - /** * Enqueues styles for block style variations. * @@ -399,53 +229,30 @@ function wp_enqueue_block_style_variation_styles() { add_filter( 'render_block', 'wp_render_block_style_variation_class_name', 10, 2 ); add_action( 'wp_enqueue_scripts', 'wp_enqueue_block_style_variation_styles', 1 ); -// Resolve block style variations from all their potential sources. The order here is deliberate. -add_filter( 'wp_theme_json_data_theme', 'wp_resolve_block_style_variations_from_primary_theme_json', 10, 1 ); -add_filter( 'wp_theme_json_data_theme', 'wp_resolve_block_style_variations_from_theme_json_partials', 10, 1 ); -add_filter( 'wp_theme_json_data_theme', 'wp_resolve_block_style_variations_from_styles_registry', 10, 1 ); - -add_filter( 'wp_theme_json_data_user', 'wp_resolve_block_style_variations_from_theme_style_variation', 10, 1 ); - /** - * Registers any block style variations contained within the provided - * theme.json data. + * Registers block style variations read in from theme.json partials. * * @since 6.6.0 * @access private * * @param array $variations Shared block style variations. */ -function wp_register_block_style_variations_from_theme_json_data( $variations ) { +function wp_register_block_style_variations_from_theme_json_partials( $variations ) { if ( empty( $variations ) ) { - return $variations; + return; } - $registry = WP_Block_Styles_Registry::get_instance(); - $have_named_variations = ! wp_is_numeric_array( $variations ); - - foreach ( $variations as $key => $variation ) { - $supported_blocks = $variation['blockTypes'] ?? array(); + $registry = WP_Block_Styles_Registry::get_instance(); - /* - * Standalone theme.json partial files for block style variations - * will have their styles under a top-level property by the same name. - * Variations defined within an existing theme.json or theme style - * variation will themselves already be the required styles data. - */ - $variation_data = $variation['styles'] ?? $variation; - - if ( empty( $variation_data ) ) { + foreach ( $variations as $variation ) { + if ( empty( $variation['blockTypes'] ) || empty( $variation['styles'] ) ) { continue; } - /* - * Block style variations read in via standalone theme.json partials - * need to have their name set to the kebab case version of their title. - */ - $variation_name = $have_named_variations ? $key : ( $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] ) ); + $variation_name = $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] ); $variation_label = $variation['title'] ?? $variation_name; - foreach ( $supported_blocks as $block_type ) { + foreach ( $variation['blockTypes'] as $block_type ) { $registered_styles = $registry->get_registered_styles_for_block( $block_type ); // Register block style variation if it hasn't already been registered. diff --git a/src/wp-includes/class-wp-theme-json-resolver.php b/src/wp-includes/class-wp-theme-json-resolver.php index a67ea80db4f89..a22d7b8d93031 100644 --- a/src/wp-includes/class-wp-theme-json-resolver.php +++ b/src/wp-includes/class-wp-theme-json-resolver.php @@ -231,7 +231,7 @@ protected static function has_same_registered_blocks( $origin ) { * @since 5.9.0 Theme supports have been inlined and the `$theme_support_data` argument removed. * @since 6.0.0 Added an `$options` parameter to allow the theme data to be returned without theme supports. * @since 6.6.0 Add support for 'default-font-sizes' and 'default-spacing-sizes' theme supports. - * Register the block style variations coming from the partials and the theme.json. + * Added registration and merging of block style variations from partial theme.json files and the block styles registry. * * @param array $deprecated Deprecated. Not used. * @param array $options { @@ -258,13 +258,29 @@ public static function get_theme_data( $deprecated = array(), $options = array() $theme_json_data = array( 'version' => WP_Theme_JSON::LATEST_SCHEMA ); } - // Register variations defined by the theme. - $variations = $theme_json_data['styles']['blocks']['variations'] ?? array(); - wp_register_block_style_variations_from_theme_json_data( $variations ); - - // Register variations defined by theme partials (theme.json files in the styles directory). + /* + * Register variations defined by theme partials (theme.json files in the styles directory). + * This is required so the variations pass sanitization of theme.json data. + */ $variations = static::get_style_variations( 'block' ); - wp_register_block_style_variations_from_theme_json_data( $variations ); + wp_register_block_style_variations_from_theme_json_partials( $variations ); + + /* + * Source variations from the block registry and block style variation files. Then, merge them into the existing theme.json data. + * + * In case the same style properties are defined in several sources, this is how we should resolve the values, + * from higher to lower priority: + * + * - styles.blocks.blockType.variations from theme.json + * - styles.variations from theme.json + * - variations from block style variation files + * - variations from block styles registry + * + * See test_add_registered_block_styles_to_theme_data and test_unwraps_block_style_variations. + * + */ + $theme_json_data = static::inject_variations_from_block_style_variation_files( $theme_json_data, $variations ); + $theme_json_data = static::inject_variations_from_block_styles_registry( $theme_json_data ); /** * Filters the data provided by the theme for global styles and settings. @@ -579,10 +595,6 @@ public static function get_user_data() { unset( $decoded_data['isGlobalStylesUserThemeJSON'] ); $config = $decoded_data; } - - // Register variations defined by the user. - $variations = $config['styles']['blocks']['variations'] ?? array(); - wp_register_block_style_variations_from_theme_json_data( $variations ); } /** This filter is documented in wp-includes/class-wp-theme-json-resolver.php */ @@ -885,7 +897,7 @@ public static function get_resolved_theme_uris( $theme_json ) { * * @since 6.6.0 * - * @param WP_Theme_JSON $theme_json A theme json instance. + * @param WP_Theme_JSON $theme_json A theme json instance. * @return WP_Theme_JSON Theme merged with resolved paths, if any found. */ public static function resolve_theme_file_uris( $theme_json ) { @@ -907,4 +919,84 @@ public static function resolve_theme_file_uris( $theme_json ) { return $theme_json; } + + /** + * Adds variations sourced from block style variations files to the supplied theme.json data. + * + * @since 6.6.0 + * + * @param array $data Array following the theme.json specification. + * @param array $variations Shared block style variations. + * @return array Theme json data including shared block style variation definitions. + */ + private static function inject_variations_from_block_style_variation_files( $data, $variations ) { + if ( empty( $variations ) ) { + return $data; + } + + foreach ( $variations as $variation ) { + if ( empty( $variation['styles'] ) || empty( $variation['blockTypes'] ) ) { + continue; + } + + $variation_name = $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] ); + + foreach ( $variation['blockTypes'] as $block_type ) { + // First, override partial styles with any top-level styles. + $top_level_data = $data['styles']['variations'][ $variation_name ] ?? array(); + if ( ! empty( $top_level_data ) ) { + $variation['styles'] = array_replace_recursive( $variation['styles'], $top_level_data ); + } + + // Then, override styles so far with any block-level styles. + $block_level_data = $data['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array(); + if ( ! empty( $block_level_data ) ) { + $variation['styles'] = array_replace_recursive( $variation['styles'], $block_level_data ); + } + + $path = array( 'styles', 'blocks', $block_type, 'variations', $variation_name ); + _wp_array_set( $data, $path, $variation['styles'] ); + } + } + + return $data; + } + + /** + * Adds variations sourced from the block styles registry to the supplied theme.json data. + * + * @since 6.6.0 + * + * @param array $data Array following the theme.json specification. + * @return array Theme json data including shared block style variation definitions. + */ + private static function inject_variations_from_block_styles_registry( $data ) { + $registry = WP_Block_Styles_Registry::get_instance(); + $styles = $registry->get_all_registered(); + + foreach ( $styles as $block_type => $variations ) { + foreach ( $variations as $variation_name => $variation ) { + if ( empty( $variation['style_data'] ) ) { + continue; + } + + // First, override registry styles with any top-level styles. + $top_level_data = $data['styles']['variations'][ $variation_name ] ?? array(); + if ( ! empty( $top_level_data ) ) { + $variation['style_data'] = array_replace_recursive( $variation['style_data'], $top_level_data ); + } + + // Then, override styles so far with any block-level styles. + $block_level_data = $data['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array(); + if ( ! empty( $block_level_data ) ) { + $variation['style_data'] = array_replace_recursive( $variation['style_data'], $block_level_data ); + } + + $path = array( 'styles', 'blocks', $block_type, 'variations', $variation_name ); + _wp_array_set( $data, $path, $variation['style_data'] ); + } + } + + return $data; + } } diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 311705b9adaa1..63e24340732cf 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -743,8 +743,8 @@ public static function get_element_class_name( $element ) { * Constructor. * * @since 5.8.0 - * @since 6.6.0 Key spacingScale by origin, and Pre-generate the - * spacingSizes from spacingScale. + * @since 6.6.0 Key spacingScale by origin, and Pre-generate the spacingSizes from spacingScale. + * Added unwrapping of shared block style variations into block type variations if registered. * * @param array $theme_json A structure that follows the theme.json schema. * @param string $origin Optional. What source of data this object represents. @@ -759,6 +759,7 @@ public function __construct( $theme_json = array( 'version' => self::LATEST_SCHE $valid_block_names = array_keys( static::get_blocks_metadata() ); $valid_element_names = array_keys( static::ELEMENTS ); $valid_variations = static::get_valid_block_style_variations(); + $this->theme_json = static::unwrap_shared_block_style_variations( $this->theme_json, $valid_variations ); $this->theme_json = static::sanitize( $this->theme_json, $valid_block_names, $valid_element_names, $valid_variations ); $this->theme_json = static::maybe_opt_in_into_settings( $this->theme_json ); @@ -802,6 +803,73 @@ public function __construct( $theme_json = array( 'version' => self::LATEST_SCHE } } + /** + * Unwraps shared block style variations. + * + * It takes the shared variations (styles.variations.variationName) and + * applies them to all the blocks that have the given variation registered + * (styles.blocks.blockType.variations.variationName). + * + * For example, given the `core/paragraph` and `core/group` blocks have + * registered the `section-a` style variation, and given the following input: + * + * { + * "styles": { + * "variations": { + * "section-a": { "color": { "background": "backgroundColor" } } + * } + * } + * } + * + * It returns the following output: + * + * { + * "styles": { + * "blocks": { + * "core/paragraph": { + * "variations": { + * "section-a": { "color": { "background": "backgroundColor" } } + * }, + * }, + * "core/group": { + * "variations": { + * "section-a": { "color": { "background": "backgroundColor" } } + * } + * } + * } + * } + * } + * + * @since 6.6.0 + * + * @param array $theme_json A structure that follows the theme.json schema. + * @param array $valid_variations Valid block style variations. + * @return array Theme json data with shared variation definitions unwrapped under appropriate block types. + */ + private static function unwrap_shared_block_style_variations( $theme_json, $valid_variations ) { + if ( empty( $theme_json['styles']['variations'] ) || empty( $valid_variations ) ) { + return $theme_json; + } + + $new_theme_json = $theme_json; + $variations = $new_theme_json['styles']['variations']; + + foreach ( $valid_variations as $block_type => $registered_variations ) { + foreach ( $registered_variations as $variation_name ) { + $block_level_data = $new_theme_json['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array(); + $top_level_data = $variations[ $variation_name ] ?? array(); + $merged_data = array_replace_recursive( $top_level_data, $block_level_data ); + if ( ! empty( $merged_data ) ) { + _wp_array_set( $new_theme_json, array( 'styles', 'blocks', $block_type, 'variations', $variation_name ), $merged_data ); + } + } + } + + unset( $new_theme_json['styles']['variations'] ); + + return $new_theme_json; + } + /** * Enables some opt-in settings if theme declared support. * @@ -967,12 +1035,6 @@ protected static function sanitize( $input, $valid_block_names, $valid_element_n $schema['settings']['blocks'] = $schema_settings_blocks; $schema['settings']['typography']['fontFamilies'] = static::schema_in_root_and_per_origin( static::FONT_FAMILY_SCHEMA ); - /* - * Shared block style variations can be registered from the theme.json data so we can't - * validate them against pre-registered block style variations. - */ - $schema['styles']['blocks']['variations'] = null; - // Remove anything that's not present in the schema. foreach ( array( 'styles', 'settings' ) as $subtree ) { if ( ! isset( $input[ $subtree ] ) ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php index 1453e6d1def38..0cb54c91ed3de 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php @@ -265,13 +265,9 @@ protected function prepare_item_for_database( $request ) { $config['styles'] = $existing_config['styles']; } - // Register theme-defined variations. - WP_Theme_JSON_Resolver::get_theme_data(); - - // Register user-defined variations. - if ( ! empty( $config['styles']['blocks']['variations'] ) ) { - wp_register_block_style_variations_from_theme_json_data( $config['styles']['blocks']['variations'] ); - } + // Register theme-defined variations e.g. from block style variation partials under `/styles`. + $variations = WP_Theme_JSON_Resolver::get_style_variations( 'block' ); + wp_register_block_style_variations_from_theme_json_partials( $variations ); if ( isset( $request['settings'] ) ) { $config['settings'] = $request['settings']; @@ -635,8 +631,12 @@ public function get_theme_items( $request ) { } $response = array(); - $variations = WP_Theme_JSON_Resolver::get_style_variations(); + // Register theme-defined variations e.g. from block style variation partials under `/styles`. + $partials = WP_Theme_JSON_Resolver::get_style_variations( 'block' ); + wp_register_block_style_variations_from_theme_json_partials( $partials ); + + $variations = WP_Theme_JSON_Resolver::get_style_variations(); foreach ( $variations as $variation ) { $variation_theme_json = new WP_Theme_JSON( $variation ); $resolved_theme_uris = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $variation_theme_json ); diff --git a/src/wp-includes/theme-i18n.json b/src/wp-includes/theme-i18n.json index 8bda329add4ce..7ce52317ed65d 100644 --- a/src/wp-includes/theme-i18n.json +++ b/src/wp-includes/theme-i18n.json @@ -80,15 +80,6 @@ } } }, - "styles": { - "blocks": { - "variations": { - "*": { - "title": "Style variation name" - } - } - } - }, "customTemplates": [ { "title": "Custom template name" diff --git a/tests/phpunit/data/themedir1/block-theme-child-with-block-style-variations/theme.json b/tests/phpunit/data/themedir1/block-theme-child-with-block-style-variations/theme.json index a471d8f326a4a..fee9382dce147 100644 --- a/tests/phpunit/data/themedir1/block-theme-child-with-block-style-variations/theme.json +++ b/tests/phpunit/data/themedir1/block-theme-child-with-block-style-variations/theme.json @@ -1,4 +1,55 @@ { "$schema": "https://schemas.wp.org/trunk/theme.json", - "version": 3 + "version": 3, + "styles": { + "variations": { + "outline": { + "color": { + "background": "green", + "text": "white" + } + }, + "block-style-variation-a": { + "color": { + "background": "darkseagreen" + }, + "typography": { + "fontSize": "2em", + "lineHeight": "1.4em" + } + } + }, + "blocks": { + "core/button": { + "variations": { + "outline": { + "color": { + "background": "red" + } + } + } + }, + "core/media-text": { + "variations": { + "block-style-variation-a": { + "color": { + "background": "blue" + }, + "typography": { + "fontSize": "1.5em" + } + } + } + }, + "core/heading": { + "variations": { + "block-style-variation-b": { + "typography": { + "fontSize": "3em" + } + } + } + } + } + } } diff --git a/tests/phpunit/tests/block-supports/block-style-variations.php b/tests/phpunit/tests/block-supports/block-style-variations.php index c9115ad68ef2d..bc5a6b93b8310 100644 --- a/tests/phpunit/tests/block-supports/block-style-variations.php +++ b/tests/phpunit/tests/block-supports/block-style-variations.php @@ -62,15 +62,11 @@ public function filter_set_theme_root() { * * @ticket 61312 * @ticket 61440 + * @ticket 61451 */ public function test_add_registered_block_styles_to_theme_data() { switch_theme( 'block-theme' ); - // Register theme-defined variations. - WP_Theme_JSON_Resolver::get_theme_data(); - // Register user-defined variations. - WP_Theme_JSON_Resolver::get_user_data(); - $variation_styles_data = array( 'color' => array( 'background' => 'darkslateblue', @@ -125,14 +121,6 @@ public function test_add_registered_block_styles_to_theme_data() { $group_styles = $theme_json['styles']['blocks']['core/group'] ?? array(); $expected = array( 'variations' => array( - // @ticket 61440 - 'WithSlug' => array( - 'color' => array( - 'background' => 'aliceblue', - 'text' => 'midnightblue', - ), - ), - 'my-variation' => $variation_styles_data, /* * The following block style variations are registered @@ -151,12 +139,24 @@ public function test_add_registered_block_styles_to_theme_data() { 'text' => 'lightblue', ), ), + + /* + * Manually registered variations. + * @ticket 61440 + */ + 'WithSlug' => array( + 'color' => array( + 'background' => 'aliceblue', + 'text' => 'midnightblue', + ), + ), + 'my-variation' => $variation_styles_data, ), ); unregister_block_style( 'core/group', 'my-variation' ); unregister_block_style( 'core/group', 'WithSlug' ); - $this->assertSameSetsWithIndex( $expected, $group_styles ); + $this->assertSameSetsWithIndex( $expected, $group_styles, 'Variation data does not match' ); } } diff --git a/tests/phpunit/tests/rest-api/rest-global-styles-controller.php b/tests/phpunit/tests/rest-api/rest-global-styles-controller.php index 8e80aa2dfaf33..d4d0aef8e10d2 100644 --- a/tests/phpunit/tests/rest-api/rest-global-styles-controller.php +++ b/tests/phpunit/tests/rest-api/rest-global-styles-controller.php @@ -609,6 +609,7 @@ public function test_update_item_invalid_styles_css() { * * @covers WP_REST_Global_Styles_Controller_Gutenberg::update_item * @ticket 61312 + * @ticket 61451 */ public function test_update_item_with_custom_block_style_variations() { wp_set_current_user( self::$admin_id ); @@ -616,6 +617,18 @@ public function test_update_item_with_custom_block_style_variations() { grant_super_admin( self::$admin_id ); } + /* + * For variations to be resolved they have to have been registered + * via either a theme.json partial or through the WP_Block_Styles_Registry. + */ + register_block_style( + 'core/group', + array( + 'name' => 'fromThemeStyleVariation', + 'label' => 'From Theme Style Variation', + ) + ); + $group_variations = array( 'fromThemeStyleVariation' => array( 'color' => array( @@ -629,16 +642,16 @@ public function test_update_item_with_custom_block_style_variations() { $request->set_body_params( array( 'styles' => array( - 'blocks' => array( - 'variations' => array( - 'fromThemeStyleVariation' => array( - 'blockTypes' => array( 'core/group', 'core/columns' ), - 'color' => array( - 'background' => '#000000', - 'text' => '#ffffff', - ), + 'variations' => array( + 'fromThemeStyleVariation' => array( + 'blockTypes' => array( 'core/group', 'core/columns' ), + 'color' => array( + 'background' => '#000000', + 'text' => '#ffffff', ), ), + ), + 'blocks' => array( 'core/group' => array( 'variations' => $group_variations, ), diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 3c5431a32018f..9e596dbed85ea 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -3930,6 +3930,92 @@ public function test_sanitize_for_unregistered_style_variations() { $this->assertSameSetsWithIndex( $expected, $sanitized_theme_json, 'Sanitized theme.json styles does not match' ); } + /** + * @ticket 61451 + */ + public function test_unwraps_block_style_variations() { + register_block_style( + array( 'core/paragraph', 'core/group' ), + array( + 'name' => 'myVariation', + 'label' => 'My variation', + ) + ); + + $input = new WP_Theme_JSON( + array( + 'version' => WP_Theme_JSON::LATEST_SCHEMA, + 'styles' => array( + 'variations' => array( + 'myVariation' => array( + 'color' => array( + 'background' => 'topLevel', + 'gradient' => 'topLevel', + ), + 'typography' => array( + 'fontFamily' => 'topLevel', + ), + ), + ), + 'blocks' => array( + 'core/paragraph' => array( + 'variations' => array( + 'myVariation' => array( + 'color' => array( + 'background' => 'blockLevel', + 'text' => 'blockLevel', + ), + 'outline' => array( + 'offset' => 'blockLevel', + ), + ), + ), + ), + ), + ), + ) + ); + + $expected = array( + 'version' => WP_Theme_JSON::LATEST_SCHEMA, + 'styles' => array( + 'blocks' => array( + 'core/paragraph' => array( + 'variations' => array( + 'myVariation' => array( + 'color' => array( + 'background' => 'blockLevel', + 'gradient' => 'topLevel', + 'text' => 'blockLevel', + ), + 'typography' => array( + 'fontFamily' => 'topLevel', + ), + 'outline' => array( + 'offset' => 'blockLevel', + ), + ), + ), + ), + 'core/group' => array( + 'variations' => array( + 'myVariation' => array( + 'color' => array( + 'background' => 'topLevel', + 'gradient' => 'topLevel', + ), + 'typography' => array( + 'fontFamily' => 'topLevel', + ), + ), + ), + ), + ), + ), + ); + $this->assertSameSetsWithIndex( $expected, $input->get_raw_data(), 'Unwrapped block style variations do not match' ); + } + /** * @ticket 57583 * diff --git a/tests/phpunit/tests/theme/wpThemeJsonResolver.php b/tests/phpunit/tests/theme/wpThemeJsonResolver.php index 0cb102b7accf4..5ad65e8862218 100644 --- a/tests/phpunit/tests/theme/wpThemeJsonResolver.php +++ b/tests/phpunit/tests/theme/wpThemeJsonResolver.php @@ -1321,4 +1321,95 @@ public function test_get_resolved_theme_uris() { $this->assertSame( $expected_data, $actual ); } + + /** + * Tests that block style variations data gets merged in the following + * priority order, from highest priority to lowest. + * + * - `styles.blocks.blockType.variations` from theme.json + * - `styles.variations` from theme.json + * - variations from block style variation files under `/styles` + * - variations from `WP_Block_Styles_Registry` + * + * @ticket 61451 + */ + public function test_block_style_variation_merge_order() { + switch_theme( 'block-theme-child-with-block-style-variations' ); + + /* + * Register style for a block that isn't included in the block style variation's partial + * theme.json's blockTypes. The name must match though so we can ensure the partial's + * styles do not get applied to this block. + */ + register_block_style( + 'core/heading', + array( + 'name' => 'block-style-variation-b', + 'label' => 'Heading only variation', + ) + ); + + // Register variation for a block that will be partially overridden at all levels. + register_block_style( + 'core/media-text', + array( + 'name' => 'block-style-variation-a', + 'label' => 'Block Style Variation A', + 'style_data' => array( + 'color' => array( + 'background' => 'pink', + 'gradient' => 'var(--custom)', + ), + ), + ) + ); + + $data = WP_Theme_JSON_Resolver::get_theme_data()->get_raw_data(); + $block_styles = $data['styles']['blocks'] ?? array(); + $actual = array_intersect_key( + $block_styles, + array_flip( array( 'core/button', 'core/media-text', 'core/heading' ) ) + ); + $expected = array( + 'core/button' => array( + 'variations' => array( + 'outline' => array( + 'color' => array( + 'background' => 'red', + 'text' => 'white', + ), + ), + ), + ), + 'core/media-text' => array( + 'variations' => array( + 'block-style-variation-a' => array( + 'color' => array( + 'background' => 'blue', + 'gradient' => 'var(--custom)', + 'text' => 'aliceblue', + ), + 'typography' => array( + 'fontSize' => '1.5em', + 'lineHeight' => '1.4em', + ), + ), + ), + ), + 'core/heading' => array( + 'variations' => array( + 'block-style-variation-b' => array( + 'typography' => array( + 'fontSize' => '3em', + ), + ), + ), + ), + ); + + unregister_block_style( 'core/heading', 'block-style-variation-b' ); + unregister_block_style( 'core/media-text', 'block-style-variation-a' ); + + $this->assertSameSetsWithIndex( $expected, $actual, 'Merged variation styles do not match.' ); + } } From e3e226f0494d86e65b289fba49d9b29b61a4c756 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 24 Jun 2024 10:25:23 +0000 Subject: [PATCH 002/422] Twenty Twenty-Three: Resolves aubergine variation background implementation height impact on header. The aubergine header causes issues when a block can change the page height. This resolves that swapping to clamp. Props annezazu, sabernhardt, mikachan. Fixes #58475. git-svn-id: https://develop.svn.wordpress.org/trunk@58467 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwentythree/styles/aubergine.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-content/themes/twentytwentythree/styles/aubergine.json b/src/wp-content/themes/twentytwentythree/styles/aubergine.json index 235b04b212425..485eaf5fac80d 100644 --- a/src/wp-content/themes/twentytwentythree/styles/aubergine.json +++ b/src/wp-content/themes/twentytwentythree/styles/aubergine.json @@ -11,7 +11,7 @@ "slug": "secondary-base" }, { - "gradient": "linear-gradient(180deg, var(--wp--preset--color--base) 0 min(24rem, 10%), var(--wp--preset--color--secondary) 0% 30%, var(--wp--preset--color--base) 100%)", + "gradient": "linear-gradient(180deg, var(--wp--preset--color--base) 0 clamp(10vh, 24rem, 14vh), var(--wp--preset--color--secondary) 0% 30%, var(--wp--preset--color--base) 100%)", "name": "Base to Secondary to Base", "slug": "base-secondary-base" }, From d5e09512c3f02a0151c968e49c324d12e3cf1ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=83=C2=A9?= Date: Mon, 24 Jun 2024 10:32:01 +0000 Subject: [PATCH 003/422] Format: fix spaces for @param. Props oandregal, mukesh27. See #61451. git-svn-id: https://develop.svn.wordpress.org/trunk@58468 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json-resolver.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json-resolver.php b/src/wp-includes/class-wp-theme-json-resolver.php index a22d7b8d93031..5caaf0bb7e1c4 100644 --- a/src/wp-includes/class-wp-theme-json-resolver.php +++ b/src/wp-includes/class-wp-theme-json-resolver.php @@ -925,7 +925,7 @@ public static function resolve_theme_file_uris( $theme_json ) { * * @since 6.6.0 * - * @param array $data Array following the theme.json specification. + * @param array $data Array following the theme.json specification. * @param array $variations Shared block style variations. * @return array Theme json data including shared block style variation definitions. */ @@ -967,7 +967,7 @@ private static function inject_variations_from_block_style_variation_files( $dat * * @since 6.6.0 * - * @param array $data Array following the theme.json specification. + * @param array $data Array following the theme.json specification. * @return array Theme json data including shared block style variation definitions. */ private static function inject_variations_from_block_styles_registry( $data ) { From 9c022260d6d0d4d0bbb2b2bc275df4e18a14044a Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 24 Jun 2024 11:17:38 +0000 Subject: [PATCH 004/422] Twenty Seventeen: Resolves default border style visibility for pullquote block. When a border color and width was added to the pullquote block but no border style was chosen the border was not visible. The expectation is that the border has a solid style by default when a color is selected. Props pranitdugad, poena, sabernhardt. Fixes #61362. git-svn-id: https://develop.svn.wordpress.org/trunk@58469 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyseventeen/assets/css/blocks.css | 2 +- .../themes/twentyseventeen/assets/css/editor-blocks.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css index 350f49e930de5..4ba4e6c5321e2 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css @@ -166,7 +166,7 @@ p.has-drop-cap:not(:focus)::first-letter { /* Pullquote */ .wp-block-pullquote { - border: 0; + border: 0 solid; } .wp-block-pullquote__citation, diff --git a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css index 0937f936b3296..8bb2ae62a4270 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css @@ -646,7 +646,7 @@ html[lang="th"] .edit-post-visual-editor * { /* Pullquote */ .wp-block-pullquote { - border: 0; + border: 0 solid; } .wp-block-pullquote.alignleft blockquote > .editor-rich-text p, From 8ee7211a7aaad429755cc786805924b220cce3e9 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Mon, 24 Jun 2024 14:36:22 +0000 Subject: [PATCH 005/422] Editor: Fix Path Traversal issue on Windows in Template-Part Block. Props xknown. git-svn-id: https://develop.svn.wordpress.org/trunk@58470 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 32d6739518b00..90e605f5e99be 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -6199,6 +6199,9 @@ function validate_file( $file, $allowed_files = array() ) { return 0; } + // Normalize path for Windows servers + $file = wp_normalize_path( $file ); + // `../` on its own is not allowed: if ( '../' === $file ) { return 1; From 5f269d34d4e92be349d6dc0b5f5bcd96f95a38d8 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Mon, 24 Jun 2024 14:40:47 +0000 Subject: [PATCH 006/422] Editor: Sanitize Template Part HTML tag on save. Props xknown, peterwilsoncc, jorbin, bernhard-reiter, azaozz. git-svn-id: https://develop.svn.wordpress.org/trunk@58471 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 36 ++++++++++++++++++++++++++++++---- src/wp-includes/formatting.php | 3 ++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index decc4896c378a..5ef250a863d09 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -1725,7 +1725,7 @@ function _filter_block_content_callback( $matches ) { * @return array The filtered and sanitized block object result. */ function filter_block_kses( $block, $allowed_html, $allowed_protocols = array() ) { - $block['attrs'] = filter_block_kses_value( $block['attrs'], $allowed_html, $allowed_protocols ); + $block['attrs'] = filter_block_kses_value( $block['attrs'], $allowed_html, $allowed_protocols, $block ); if ( is_array( $block['innerBlocks'] ) ) { foreach ( $block['innerBlocks'] as $i => $inner_block ) { @@ -1741,6 +1741,7 @@ function filter_block_kses( $block, $allowed_html, $allowed_protocols = array() * non-allowable HTML. * * @since 5.3.1 + * @since 6.5.5 Added the `$block_context` parameter. * * @param string[]|string $value The attribute value to filter. * @param array[]|string $allowed_html An array of allowed HTML elements and attributes, @@ -1748,14 +1749,18 @@ function filter_block_kses( $block, $allowed_html, $allowed_protocols = array() * for the list of accepted context names. * @param string[] $allowed_protocols Optional. Array of allowed URL protocols. * Defaults to the result of wp_allowed_protocols(). + * @param array $block_context Optional. The block the attribute belongs to, in parsed block array format. * @return string[]|string The filtered and sanitized result. */ -function filter_block_kses_value( $value, $allowed_html, $allowed_protocols = array() ) { +function filter_block_kses_value( $value, $allowed_html, $allowed_protocols = array(), $block_context = null ) { if ( is_array( $value ) ) { foreach ( $value as $key => $inner_value ) { - $filtered_key = filter_block_kses_value( $key, $allowed_html, $allowed_protocols ); - $filtered_value = filter_block_kses_value( $inner_value, $allowed_html, $allowed_protocols ); + $filtered_key = filter_block_kses_value( $key, $allowed_html, $allowed_protocols, $block_context ); + $filtered_value = filter_block_kses_value( $inner_value, $allowed_html, $allowed_protocols, $block_context ); + if ( isset( $block_context['blockName'] ) && 'core/template-part' === $block_context['blockName'] ) { + $filtered_value = filter_block_core_template_part_attributes( $filtered_value, $filtered_key, $allowed_html ); + } if ( $filtered_key !== $key ) { unset( $value[ $key ] ); } @@ -1769,6 +1774,29 @@ function filter_block_kses_value( $value, $allowed_html, $allowed_protocols = ar return $value; } + +/** + * Sanitizes the value of the Template Part block's `tagName` attribute. + * + * @since 6.5.5 + * + * @param string $attribute_value The attribute value to filter. + * @param string $attribute_name The attribute name. + * @param array[]|string $allowed_html An array of allowed HTML elements and attributes, + * or a context name such as 'post'. See wp_kses_allowed_html() + * for the list of accepted context names. + * @return string The sanitized attribute value. + */ +function filter_block_core_template_part_attributes( $attribute_value, $attribute_name, $allowed_html ) { + if ( empty( $attribute_value ) || 'tagName' !== $attribute_name ) { + return $attribute_value; + } + if ( ! is_array( $allowed_html ) ) { + $allowed_html = wp_kses_allowed_html( $allowed_html ); + } + return isset( $allowed_html[ $attribute_value ] ) ? $attribute_value : ''; +} + /** * Parses blocks out of a content string, and renders those appropriate for the excerpt. * diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index 2068e5f3a70fb..85ca2452123d4 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -4790,12 +4790,13 @@ static function ( $matches ) { * Escapes an HTML tag name. * * @since 2.5.0 + * @since 6.5.5 Allow hyphens in tag names (i.e. custom elements). * * @param string $tag_name * @return string */ function tag_escape( $tag_name ) { - $safe_tag = strtolower( preg_replace( '/[^a-zA-Z0-9_:]/', '', $tag_name ) ); + $safe_tag = strtolower( preg_replace( '/[^a-zA-Z0-9-_:]/', '', $tag_name ) ); /** * Filters a string cleaned and escaped for output as an HTML tag. * From 0479ab33156b9b33442ff1a44e49299b0b6d5312 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Mon, 24 Jun 2024 14:43:08 +0000 Subject: [PATCH 007/422] HTML API: Run URL attributes through `esc_url()`. Props dmsnell, xknown, jorbin, gziolo. git-svn-id: https://develop.svn.wordpress.org/trunk@58472 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 5ba8aebc039e4..ec9e2c43912f5 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2972,8 +2972,16 @@ public function set_attribute( $name, $value ) { if ( true === $value ) { $updated_attribute = $name; } else { + $tag_name = $this->get_tag(); + $comparable_name = strtolower( $name ); + + /* + * Escape URL attributes. + * + * @see https://html.spec.whatwg.org/#attributes-3 + */ $escaped_new_value = esc_attr( $value ); - $updated_attribute = "{$name}=\"{$escaped_new_value}\""; + $updated_attribute = wp_kses_one_attr( "{$comparable_name}=\"{$escaped_new_value}\"", $tag_name ); } /* From 9e94297d20b2899674154bc424641395de5db3b6 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Mon, 24 Jun 2024 14:55:32 +0000 Subject: [PATCH 008/422] HTML API: Code improvements following [58472]. Props xknown, jorbin. Unprops audrasjb. git-svn-id: https://develop.svn.wordpress.org/trunk@58473 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-tag-processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index ec9e2c43912f5..4ed0c28136c93 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2980,8 +2980,8 @@ public function set_attribute( $name, $value ) { * * @see https://html.spec.whatwg.org/#attributes-3 */ - $escaped_new_value = esc_attr( $value ); - $updated_attribute = wp_kses_one_attr( "{$comparable_name}=\"{$escaped_new_value}\"", $tag_name ); + $escaped_new_value = in_array( $comparable_name, wp_kses_uri_attributes() ) ? esc_url( $value ) : esc_attr( $value ); + $updated_attribute = "{$name}=\"{$escaped_new_value}\""; } /* From 8afc34a066281682b4a856050f7c624ffb1742a5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 24 Jun 2024 15:12:53 +0000 Subject: [PATCH 009/422] Tests: Use `assertSame()` in `WP_Theme_JSON` tests. This ensures that not only the return values match the expected results, but also that their type is the same. Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable. Follow-up to [55959], [55986], [57547], [57716], [58244], [58422]. See #60706. git-svn-id: https://develop.svn.wordpress.org/trunk@58478 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/theme/wpThemeJson.php | 70 +++++++++++------------ 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 9e596dbed85ea..bea22948a500f 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -5241,20 +5241,20 @@ public function test_internal_syntax_is_converted_to_css_variables() { ); $styles = $result->get_raw_data()['styles']; - $this->assertEquals( 'var(--wp--preset--color--primary)', $styles['color']['background'], 'Top level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--secondary)', $styles['color']['text'], 'Top level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--primary)', $styles['color']['background'], 'Top level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--secondary)', $styles['color']['text'], 'Top level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--pri)', $styles['elements']['link']['color']['background'], 'Element top level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--sec)', $styles['elements']['link']['color']['text'], 'Element top level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--pri)', $styles['elements']['link']['color']['background'], 'Element top level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--sec)', $styles['elements']['link']['color']['text'], 'Element top level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--font-size--small)', $styles['blocks']['core/post-terms']['typography']['fontSize'], 'Top block level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--secondary)', $styles['blocks']['core/post-terms']['color']['background'], 'Top block level: Assert the internal variables are convert to CSS custom variables.' ); + $this->assertSame( 'var(--wp--preset--font-size--small)', $styles['blocks']['core/post-terms']['typography']['fontSize'], 'Top block level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--secondary)', $styles['blocks']['core/post-terms']['color']['background'], 'Top block level: Assert the internal variables are convert to CSS custom variables.' ); - $this->assertEquals( 'var(--wp--preset--color--p)', $styles['blocks']['core/navigation']['elements']['link']['color']['background'], 'Elements block level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--s)', $styles['blocks']['core/navigation']['elements']['link']['color']['text'], 'Elements block level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--p)', $styles['blocks']['core/navigation']['elements']['link']['color']['background'], 'Elements block level: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--s)', $styles['blocks']['core/navigation']['elements']['link']['color']['text'], 'Elements block level: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--font-size--s)', $styles['blocks']['core/quote']['variations']['plain']['typography']['fontSize'], 'Style variations: Assert the originally correct values are still correct.' ); - $this->assertEquals( 'var(--wp--preset--color--s)', $styles['blocks']['core/quote']['variations']['plain']['color']['background'], 'Style variations: Assert the internal variables are convert to CSS custom variables.' ); + $this->assertSame( 'var(--wp--preset--font-size--s)', $styles['blocks']['core/quote']['variations']['plain']['typography']['fontSize'], 'Style variations: Assert the originally correct values are still correct.' ); + $this->assertSame( 'var(--wp--preset--color--s)', $styles['blocks']['core/quote']['variations']['plain']['color']['background'], 'Style variations: Assert the internal variables are convert to CSS custom variables.' ); } /** @@ -5401,42 +5401,42 @@ public function test_resolve_variables() { $styles = $theme_json::resolve_variables( $theme_json )->get_raw_data()['styles']; - $this->assertEquals( $primary_color, $styles['color']['background'], 'Top level: Assert values are converted' ); - $this->assertEquals( $raw_color_value, $styles['color']['text'], 'Top level: Assert raw values stay intact' ); + $this->assertSame( $primary_color, $styles['color']['background'], 'Top level: Assert values are converted' ); + $this->assertSame( $raw_color_value, $styles['color']['text'], 'Top level: Assert raw values stay intact' ); - $this->assertEquals( $contrast_color, $styles['elements']['button']['color']['text'], 'Elements: color' ); - $this->assertEquals( $small_font, $styles['elements']['button']['typography']['fontSize'], 'Elements: font-size' ); + $this->assertSame( $contrast_color, $styles['elements']['button']['color']['text'], 'Elements: color' ); + $this->assertSame( $small_font, $styles['elements']['button']['typography']['fontSize'], 'Elements: font-size' ); - $this->assertEquals( $large_font, $styles['blocks']['core/quote']['typography']['fontSize'], 'Blocks: font-size' ); - $this->assertEquals( $primary_color, $styles['blocks']['core/quote']['color']['background'], 'Blocks: color' ); - $this->assertEquals( $raw_color_value, $styles['blocks']['core/post-terms']['color']['background'], 'Blocks: Raw color value stays intact' ); - $this->assertEquals( $small_font, $styles['blocks']['core/post-terms']['typography']['fontSize'], 'Block core/post-terms: font-size' ); - $this->assertEquals( + $this->assertSame( $large_font, $styles['blocks']['core/quote']['typography']['fontSize'], 'Blocks: font-size' ); + $this->assertSame( $primary_color, $styles['blocks']['core/quote']['color']['background'], 'Blocks: color' ); + $this->assertSame( $raw_color_value, $styles['blocks']['core/post-terms']['color']['background'], 'Blocks: Raw color value stays intact' ); + $this->assertSame( $small_font, $styles['blocks']['core/post-terms']['typography']['fontSize'], 'Block core/post-terms: font-size' ); + $this->assertSame( "linear-gradient(90deg, $primary_color 0%, $secondary_color 35%, var(--wp--undefined--color--secondary) 100%)", $styles['blocks']['core/more']['color']['background'], 'Blocks: multiple colors and undefined color' ); - $this->assertEquals( 'var(--undefined--font-size--small)', $styles['blocks']['core/more']['typography']['fontSize'], 'Blocks: undefined font-size ' ); - $this->assertEquals( "calc($small_font + 20px)", $styles['blocks']['core/comment-content']['typography']['fontSize'], 'Blocks: font-size in random place' ); - $this->assertEquals( $primary_color, $styles['blocks']['core/comment-content']['color']['text'], 'Blocks: text color with fallback' ); - $this->assertEquals( $primary_color, $styles['blocks']['core/comment-content']['color']['background'], 'Blocks: background color with var as fallback' ); - $this->assertEquals( $primary_color, $styles['blocks']['core/navigation']['elements']['link']['color']['background'], 'Block element: background color' ); - $this->assertEquals( $secondary_color, $styles['blocks']['core/navigation']['elements']['link']['color']['text'], 'Block element: text color' ); - $this->assertEquals( $large_font, $styles['blocks']['core/navigation']['elements']['link']['typography']['fontSize'], 'Block element: font-size' ); + $this->assertSame( 'var(--undefined--font-size--small)', $styles['blocks']['core/more']['typography']['fontSize'], 'Blocks: undefined font-size ' ); + $this->assertSame( "calc($small_font + 20px)", $styles['blocks']['core/comment-content']['typography']['fontSize'], 'Blocks: font-size in random place' ); + $this->assertSame( $primary_color, $styles['blocks']['core/comment-content']['color']['text'], 'Blocks: text color with fallback' ); + $this->assertSame( $primary_color, $styles['blocks']['core/comment-content']['color']['background'], 'Blocks: background color with var as fallback' ); + $this->assertSame( $primary_color, $styles['blocks']['core/navigation']['elements']['link']['color']['background'], 'Block element: background color' ); + $this->assertSame( $secondary_color, $styles['blocks']['core/navigation']['elements']['link']['color']['text'], 'Block element: text color' ); + $this->assertSame( $large_font, $styles['blocks']['core/navigation']['elements']['link']['typography']['fontSize'], 'Block element: font-size' ); - $this->assertEquals( + $this->assertSame( "var(--undefined--color--primary, $small_font)", $styles['blocks']['core/comments']['color']['text'], 'Blocks: text color with undefined var and fallback' ); - $this->assertEquals( + $this->assertSame( $primary_color, $styles['blocks']['core/comments']['color']['background'], 'Blocks: background color with variable and undefined fallback' ); - $this->assertEquals( $small_font, $styles['blocks']['core/quote']['variations']['plain']['typography']['fontSize'], 'Block variations: font-size' ); - $this->assertEquals( $secondary_color, $styles['blocks']['core/quote']['variations']['plain']['color']['background'], 'Block variations: color' ); + $this->assertSame( $small_font, $styles['blocks']['core/quote']['variations']['plain']['typography']['fontSize'], 'Block variations: font-size' ); + $this->assertSame( $secondary_color, $styles['blocks']['core/quote']['variations']['plain']['color']['background'], 'Block variations: color' ); /* * As with wp_get_global_styles(), WP_Theme_JSON::resolve_variables may be called with merged data from * WP_Theme_JSON_Resolver. WP_Theme_JSON_Resolver::get_block_data() sets blockGap for supported blocks to `null` if the value is not defined. @@ -5445,7 +5445,7 @@ public function test_resolve_variables() { $styles['blocks']['core/post-template']['spacing']['blockGap'], 'Blocks: Post Template spacing.blockGap should be null' ); - $this->assertEquals( + $this->assertSame( $spacing, $styles['blocks']['core/columns']['spacing']['blockGap'], 'Blocks: Columns spacing.blockGap should match' @@ -5471,7 +5471,7 @@ public function test_get_block_style_variation_selector( $selector, $expected ) $actual = $func->invoke( null, 'custom', $selector ); - $this->assertEquals( $expected, $actual ); + $this->assertSame( $expected, $actual ); } /** @@ -5584,7 +5584,7 @@ public function test_scope_style_node_selectors() { ), ); - $this->assertEquals( $expected, $actual ); + $this->assertSame( $expected, $actual ); } /** @@ -5621,7 +5621,7 @@ public function test_opt_out_of_block_style_variations_by_default() { $block_nodes = $func->invoke( null, $theme_json, $selectors ); $button_variations = $block_nodes[0]['variations'] ?? array(); - $this->assertEquals( array(), $button_variations ); + $this->assertSame( array(), $button_variations ); } /** @@ -5665,6 +5665,6 @@ public function test_opt_in_to_block_style_variations() { ), ); - $this->assertEquals( $expected, $button_variations ); + $this->assertSame( $expected, $button_variations ); } } From 14efb0d2937a489107e68421a663026e2dc2afc5 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Mon, 24 Jun 2024 18:36:48 +0000 Subject: [PATCH 010/422] Update packages to include latest changes. Props desrosj. git-svn-id: https://develop.svn.wordpress.org/trunk@58553 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 104 +++++++++++------------ package.json | 12 +-- src/wp-includes/blocks/template-part.php | 2 +- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c7774a55816b..064ede8cfde96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.2", + "@wordpress/block-directory": "5.0.3", "@wordpress/block-editor": "13.0.2", - "@wordpress/block-library": "9.0.2", + "@wordpress/block-library": "9.0.3", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.2", "@wordpress/commands": "1.0.2", @@ -24,7 +24,7 @@ "@wordpress/compose": "7.0.1", "@wordpress/core-commands": "1.0.2", "@wordpress/core-data": "7.0.2", - "@wordpress/customize-widgets": "5.0.2", + "@wordpress/customize-widgets": "5.0.3", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.2", @@ -32,9 +32,9 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.2", - "@wordpress/edit-site": "6.0.2", - "@wordpress/edit-widgets": "6.0.2", + "@wordpress/edit-post": "8.0.3", + "@wordpress/edit-site": "6.0.3", + "@wordpress/edit-widgets": "6.0.3", "@wordpress/editor": "14.0.2", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", @@ -6166,9 +6166,9 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.2.tgz", - "integrity": "sha512-zTaAeNlAPFwvRsd64jvzIx2hn26KxsohUc6RbU/2sHmW1DkL9Vnl70gqy1zNqGnPK/yE4uu9tO3+afWKOeorbQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.3.tgz", + "integrity": "sha512-0HQPBrrV1ns5+7iPluoGiK8lKZjefPffIr8W/KbkJCIkweQWQ0J1CYEpG7f7EGwnZ2PuEIyyChsy3Y/WH6FTOg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", @@ -6179,7 +6179,7 @@ "@wordpress/compose": "^7.0.1", "@wordpress/core-data": "^7.0.2", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.2", + "@wordpress/edit-post": "^8.0.3", "@wordpress/editor": "^14.0.2", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", @@ -6263,9 +6263,9 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.2.tgz", - "integrity": "sha512-vOtZyo0FcuJMAbXhxGjGGg0XPSrJrxrPnIVNjtC6EW99aeMSeFGgubvSUuAGYPsIfDbWkd+8sQZrY8/n9LI6Wg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.3.tgz", + "integrity": "sha512-SUn0RRUnZUaGnPyz3SzFTj5CsCDN2iJikHX46LB1AU78vw0ZBI8BplgZV/l7sAPJlx+hfSmWry97iDqo6bl1lw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", @@ -6560,13 +6560,13 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.2.tgz", - "integrity": "sha512-1c2WADmhLatzMirEQKzxJUniGbyfGdeA6E9wSxZ4l3mpihs8+PFkC0FMClVcv9IjcLVKJoD1erCY6KJdM4bodg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.3.tgz", + "integrity": "sha512-TUhuluS/h2uZuaxkG2DobQC4sbBPteqVrL5tkid2CuYQygna0VnsSlE0N5W2/UVDLcmCovNrtBqp6j9Ru/eGaQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/components": "^28.0.2", "@wordpress/compose": "^7.0.1", @@ -6826,15 +6826,15 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.2.tgz", - "integrity": "sha512-+QfgBK+wvPxz44BbodLLTf2HfawajNSZ8UaMFjG5+jgA4gron5I57mSCKEfcfDSPLtiQRnr6gVA+C+NpmSa06Q==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.3.tgz", + "integrity": "sha512-lHAB8Vf3MWOHZRvcrTacS5aGl0Bwy7oWRd0FoUjvp5hiRdFhhnCA6w957odzmUvKrNXzN4+9Z2y969qAexaVBw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/commands": "^1.0.2", "@wordpress/components": "^28.0.2", @@ -6873,9 +6873,9 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.2.tgz", - "integrity": "sha512-BHNJAV3sRgbNoM5iUOByrEC+7Bc61YA2Q2dfqeSeh8wyND0JReIKTLCKOFmx44eSr8EuWwB5qdH5tQbmW2O5Rg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.3.tgz", + "integrity": "sha512-O9cjfWdJ6a2vfi+LBnXTcoIlOz+OcHrEQT5ghz/AOD6pXMS74IsWbgvNnHFOGFs/QTvsH3tE5UHnPEpn08zpSQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", @@ -6883,7 +6883,7 @@ "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/commands": "^1.0.2", "@wordpress/components": "^28.0.2", @@ -6935,14 +6935,14 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.2.tgz", - "integrity": "sha512-hCDMSDPAT8nlt/9U8jtYYnlawc7Xkf31CMhvSCcEu55nMYVppJxqgbs1E/KXmIW/6ljTmyo/uR6bPsS3GPEGvw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.3.tgz", + "integrity": "sha512-bYpg2Uq7QRuEUhfaczdTxPZnEhhJ921Ln+nW7GGCb5o6Eq8tNpyk4888HN6qfo+h1LUZNhW9RZOz8z1gq6AXPA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/components": "^28.0.2", "@wordpress/compose": "^7.0.1", @@ -37906,9 +37906,9 @@ } }, "@wordpress/block-directory": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.2.tgz", - "integrity": "sha512-zTaAeNlAPFwvRsd64jvzIx2hn26KxsohUc6RbU/2sHmW1DkL9Vnl70gqy1zNqGnPK/yE4uu9tO3+afWKOeorbQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.3.tgz", + "integrity": "sha512-0HQPBrrV1ns5+7iPluoGiK8lKZjefPffIr8W/KbkJCIkweQWQ0J1CYEpG7f7EGwnZ2PuEIyyChsy3Y/WH6FTOg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", @@ -37919,7 +37919,7 @@ "@wordpress/compose": "^7.0.1", "@wordpress/core-data": "^7.0.2", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.2", + "@wordpress/edit-post": "^8.0.3", "@wordpress/editor": "^14.0.2", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", @@ -37987,9 +37987,9 @@ } }, "@wordpress/block-library": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.2.tgz", - "integrity": "sha512-vOtZyo0FcuJMAbXhxGjGGg0XPSrJrxrPnIVNjtC6EW99aeMSeFGgubvSUuAGYPsIfDbWkd+8sQZrY8/n9LI6Wg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.3.tgz", + "integrity": "sha512-SUn0RRUnZUaGnPyz3SzFTj5CsCDN2iJikHX46LB1AU78vw0ZBI8BplgZV/l7sAPJlx+hfSmWry97iDqo6bl1lw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", @@ -38222,13 +38222,13 @@ } }, "@wordpress/customize-widgets": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.2.tgz", - "integrity": "sha512-1c2WADmhLatzMirEQKzxJUniGbyfGdeA6E9wSxZ4l3mpihs8+PFkC0FMClVcv9IjcLVKJoD1erCY6KJdM4bodg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.3.tgz", + "integrity": "sha512-TUhuluS/h2uZuaxkG2DobQC4sbBPteqVrL5tkid2CuYQygna0VnsSlE0N5W2/UVDLcmCovNrtBqp6j9Ru/eGaQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/components": "^28.0.2", "@wordpress/compose": "^7.0.1", @@ -38413,15 +38413,15 @@ } }, "@wordpress/edit-post": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.2.tgz", - "integrity": "sha512-+QfgBK+wvPxz44BbodLLTf2HfawajNSZ8UaMFjG5+jgA4gron5I57mSCKEfcfDSPLtiQRnr6gVA+C+NpmSa06Q==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.3.tgz", + "integrity": "sha512-lHAB8Vf3MWOHZRvcrTacS5aGl0Bwy7oWRd0FoUjvp5hiRdFhhnCA6w957odzmUvKrNXzN4+9Z2y969qAexaVBw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/commands": "^1.0.2", "@wordpress/components": "^28.0.2", @@ -38452,9 +38452,9 @@ } }, "@wordpress/edit-site": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.2.tgz", - "integrity": "sha512-BHNJAV3sRgbNoM5iUOByrEC+7Bc61YA2Q2dfqeSeh8wyND0JReIKTLCKOFmx44eSr8EuWwB5qdH5tQbmW2O5Rg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.3.tgz", + "integrity": "sha512-O9cjfWdJ6a2vfi+LBnXTcoIlOz+OcHrEQT5ghz/AOD6pXMS74IsWbgvNnHFOGFs/QTvsH3tE5UHnPEpn08zpSQ==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", @@ -38462,7 +38462,7 @@ "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/commands": "^1.0.2", "@wordpress/components": "^28.0.2", @@ -38506,14 +38506,14 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.2.tgz", - "integrity": "sha512-hCDMSDPAT8nlt/9U8jtYYnlawc7Xkf31CMhvSCcEu55nMYVppJxqgbs1E/KXmIW/6ljTmyo/uR6bPsS3GPEGvw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.3.tgz", + "integrity": "sha512-bYpg2Uq7QRuEUhfaczdTxPZnEhhJ921Ln+nW7GGCb5o6Eq8tNpyk4888HN6qfo+h1LUZNhW9RZOz8z1gq6AXPA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.2", + "@wordpress/block-library": "^9.0.3", "@wordpress/blocks": "^13.0.2", "@wordpress/components": "^28.0.2", "@wordpress/compose": "^7.0.1", diff --git a/package.json b/package.json index ad1e5ffdf4aab..802538953b095 100644 --- a/package.json +++ b/package.json @@ -83,9 +83,9 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.2", + "@wordpress/block-directory": "5.0.3", "@wordpress/block-editor": "13.0.2", - "@wordpress/block-library": "9.0.2", + "@wordpress/block-library": "9.0.3", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.2", "@wordpress/commands": "1.0.2", @@ -93,7 +93,7 @@ "@wordpress/compose": "7.0.1", "@wordpress/core-commands": "1.0.2", "@wordpress/core-data": "7.0.2", - "@wordpress/customize-widgets": "5.0.2", + "@wordpress/customize-widgets": "5.0.3", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.2", @@ -101,9 +101,9 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.2", - "@wordpress/edit-site": "6.0.2", - "@wordpress/edit-widgets": "6.0.2", + "@wordpress/edit-post": "8.0.3", + "@wordpress/edit-site": "6.0.3", + "@wordpress/edit-widgets": "6.0.3", "@wordpress/editor": "14.0.2", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", diff --git a/src/wp-includes/blocks/template-part.php b/src/wp-includes/blocks/template-part.php index b9cae2d48ed17..be867c4ced166 100644 --- a/src/wp-includes/blocks/template-part.php +++ b/src/wp-includes/blocks/template-part.php @@ -161,7 +161,7 @@ function render_block_core_template_part( $attributes ) { global $wp_embed; $content = $wp_embed->autoembed( $content ); - if ( empty( $attributes['tagName'] ) ) { + if ( empty( $attributes['tagName'] ) || tag_escape( $attributes['tagName'] ) !== $attributes['tagName'] ) { $area_tag = 'div'; if ( $area_definition && isset( $area_definition['area_tag'] ) ) { $area_tag = $area_definition['area_tag']; From 02879a14dc3d2af2b4a27f7cfb49b94bc641429d Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Mon, 24 Jun 2024 18:40:45 +0000 Subject: [PATCH 011/422] WordPress 6.6 Beta 4. git-svn-id: https://develop.svn.wordpress.org/trunk@58554 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 1c92ec2d24e68..3a052e665da6d 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.6-beta3-58440-src'; +$wp_version = '6.6-beta4-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From a4e5209d2ee0eaf514ec5e3b430637696b85166e Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Mon, 24 Jun 2024 19:14:37 +0000 Subject: [PATCH 012/422] Post WordPress 6.6 Beta 4. git-svn-id: https://develop.svn.wordpress.org/trunk@58555 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 3a052e665da6d..ceb43392eabe4 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.6-beta4-src'; +$wp_version = '6.6-beta4-58555-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From e3aa011388d5061b6a6d331c004c87477310acc5 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 24 Jun 2024 19:22:38 +0000 Subject: [PATCH 013/422] Twenty Nineteen: Fixes button block padding within the editor. The button block padding was not the same in the editor and front. This resolves that issue with the font size having being resolved in a previous ticket. Props pitamdey, sabernhardt. Fixes #61235. git-svn-id: https://develop.svn.wordpress.org/trunk@58556 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/style-editor.css | 1 + src/wp-content/themes/twentynineteen/style-editor.scss | 1 + 2 files changed, 2 insertions(+) diff --git a/src/wp-content/themes/twentynineteen/style-editor.css b/src/wp-content/themes/twentynineteen/style-editor.css index 3a388463438cb..4619b0177f14e 100644 --- a/src/wp-content/themes/twentynineteen/style-editor.css +++ b/src/wp-content/themes/twentynineteen/style-editor.css @@ -999,6 +999,7 @@ figcaption, font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 0.88889em; font-weight: bold; + padding: 16.72px 22px; } .wp-block-button .wp-block-button__link:not(.has-text-color) { diff --git a/src/wp-content/themes/twentynineteen/style-editor.scss b/src/wp-content/themes/twentynineteen/style-editor.scss index 508dda9566437..de3c8a7c9352c 100644 --- a/src/wp-content/themes/twentynineteen/style-editor.scss +++ b/src/wp-content/themes/twentynineteen/style-editor.scss @@ -393,6 +393,7 @@ figcaption, @include font-family( $font__heading ); font-size: $font__size-sm; font-weight: bold; + padding: ($font__size_base * .76) $font__size_base; &:not(.has-text-color) { color: #fff; From c2e7ab3c097d818b6fb2e93ab3088ed23f9f6144 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 24 Jun 2024 19:50:00 +0000 Subject: [PATCH 014/422] Twenty Twenty and Twenty Twenty-One: Fixes code tag showing outside of section area. The code tag had a formatting issue where it was showing outside of the section area. This resolves it in both themes. Props ravipatel, SergeyBiryukov, poena, sabernhardt, peterwilsoncc. Fixes #52780. git-svn-id: https://develop.svn.wordpress.org/trunk@58557 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/style-rtl.css | 3 +++ src/wp-content/themes/twentytwenty/style.css | 3 +++ src/wp-content/themes/twentytwentyone/assets/css/ie.css | 4 ++++ src/wp-content/themes/twentytwentyone/assets/css/ie.css.map | 2 +- .../themes/twentytwentyone/assets/sass/04-elements/misc.scss | 4 ++++ src/wp-content/themes/twentytwentyone/style-rtl.css | 4 ++++ src/wp-content/themes/twentytwentyone/style.css | 4 ++++ src/wp-content/themes/twentytwentyone/style.css.map | 2 +- 8 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index 6bb7052119399..7ede0961e0e2e 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -598,6 +598,9 @@ pre code { padding: 0; } +.entry-content > code { + display: block; +} /* Media ------------------------------------- */ diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index de5ba3bf75547..c82a942688bb6 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -602,6 +602,9 @@ pre code { padding: 0; } +.entry-content > code { + display: block; +} /* Media ------------------------------------- */ diff --git a/src/wp-content/themes/twentytwentyone/assets/css/ie.css b/src/wp-content/themes/twentytwentyone/assets/css/ie.css index a6f9bf189d878..87d14784e5264 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/ie.css +++ b/src/wp-content/themes/twentytwentyone/assets/css/ie.css @@ -1661,6 +1661,10 @@ pre { overflow-x: auto; } +.entry-content > code { + display: block; +} + /* * text-underline-offset doesn't work in Chrome at all 👎 * But looks nice in Safari/Firefox, so let's keep it and diff --git a/src/wp-content/themes/twentytwentyone/assets/css/ie.css.map b/src/wp-content/themes/twentytwentyone/assets/css/ie.css.map index b8dc9cdaa08c7..de1173cf9f2e7 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/ie.css.map +++ b/src/wp-content/themes/twentytwentyone/assets/css/ie.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../style.css","../../assets/sass/01-settings/file-header.scss","../../assets/sass/style.scss","../../assets/sass/01-settings/global.scss","../../assets/sass/03-generic/normalize.scss","../../assets/sass/03-generic/breakpoints.scss","../../assets/sass/03-generic/vertical-margins.scss","../../assets/sass/03-generic/reset.scss","../../assets/sass/03-generic/clearings.scss","../../assets/sass/04-elements/blockquote.scss","../../assets/sass/04-elements/forms.scss","../../assets/sass/04-elements/media.scss","../../assets/sass/04-elements/misc.scss","../../assets/sass/04-elements/links.scss","../../assets/sass/05-blocks/audio/_style.scss","../../assets/sass/05-blocks/button/_style.scss","../../assets/sass/02-tools/mixins.scss","../../assets/sass/05-blocks/code/_style.scss","../../assets/sass/05-blocks/columns/_style.scss","../../assets/sass/05-blocks/cover/_style.scss","../../assets/sass/05-blocks/file/_style.scss","../../assets/sass/05-blocks/gallery/_style.scss","../../assets/sass/05-blocks/group/_style.scss","../../assets/sass/05-blocks/heading/_style.scss","../../assets/sass/05-blocks/image/_style.scss","../../assets/sass/05-blocks/latest-comments/_style.scss","../../assets/sass/05-blocks/latest-posts/_style.scss","../../assets/sass/05-blocks/legacy/_style.scss","../../assets/sass/05-blocks/list/_style.scss","../../assets/sass/05-blocks/media-text/_style.scss","../../assets/sass/05-blocks/navigation/_style.scss","../../assets/sass/05-blocks/paragraph/_style.scss","../../assets/sass/05-blocks/preformatted/_style.scss","../../assets/sass/05-blocks/pullquote/_style.scss","../../assets/sass/05-blocks/query-loop/_style.scss","../../assets/sass/05-blocks/quote/_style.scss","../../assets/sass/05-blocks/rss/_style.scss","../../assets/sass/05-blocks/search/_style.scss","../../assets/sass/05-blocks/separator/_style.scss","../../assets/sass/05-blocks/social-icons/_style.scss","../../assets/sass/05-blocks/table/_style.scss","../../assets/sass/05-blocks/tag-clould/_style.scss","../../assets/sass/05-blocks/verse/_style.scss","../../assets/sass/05-blocks/video/_style.scss","../../assets/sass/05-blocks/utilities/_font-sizes.scss","../../assets/sass/05-blocks/utilities/_style.scss","../../assets/sass/06-components/header.scss","../../assets/sass/06-components/footer.scss","../../assets/sass/06-components/single.scss","../../assets/sass/06-components/posts-and-pages.scss","../../assets/sass/06-components/entry.scss","../../assets/sass/06-components/archives.scss","../../assets/sass/06-components/404.scss","../../assets/sass/06-components/search.scss","../../assets/sass/06-components/comments.scss","../../assets/sass/06-components/navigation.scss","../../assets/sass/06-components/footer-navigation.scss","../../assets/sass/06-components/pagination.scss","../../assets/sass/06-components/widgets.scss","../../assets/sass/07-utilities/a11y.scss","../../assets/sass/07-utilities/color-palette.scss","../../assets/sass/07-utilities/measure.scss","../../assets/sass/07-utilities/ie.scss"],"names":[],"mappings":"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","file":"ie.css"} \ No newline at end of file +{"version":3,"sources":["../../style.css","../../assets/sass/01-settings/file-header.scss","../../assets/sass/style.scss","../../assets/sass/01-settings/global.scss","../../assets/sass/03-generic/normalize.scss","../../assets/sass/03-generic/breakpoints.scss","../../assets/sass/03-generic/vertical-margins.scss","../../assets/sass/03-generic/reset.scss","../../assets/sass/03-generic/clearings.scss","../../assets/sass/04-elements/blockquote.scss","../../assets/sass/04-elements/forms.scss","../../assets/sass/04-elements/media.scss","../../assets/sass/04-elements/misc.scss","../../assets/sass/04-elements/links.scss","../../assets/sass/05-blocks/audio/_style.scss","../../assets/sass/05-blocks/button/_style.scss","../../assets/sass/02-tools/mixins.scss","../../assets/sass/05-blocks/code/_style.scss","../../assets/sass/05-blocks/columns/_style.scss","../../assets/sass/05-blocks/cover/_style.scss","../../assets/sass/05-blocks/file/_style.scss","../../assets/sass/05-blocks/gallery/_style.scss","../../assets/sass/05-blocks/group/_style.scss","../../assets/sass/05-blocks/heading/_style.scss","../../assets/sass/05-blocks/image/_style.scss","../../assets/sass/05-blocks/latest-comments/_style.scss","../../assets/sass/05-blocks/latest-posts/_style.scss","../../assets/sass/05-blocks/legacy/_style.scss","../../assets/sass/05-blocks/list/_style.scss","../../assets/sass/05-blocks/media-text/_style.scss","../../assets/sass/05-blocks/navigation/_style.scss","../../assets/sass/05-blocks/paragraph/_style.scss","../../assets/sass/05-blocks/preformatted/_style.scss","../../assets/sass/05-blocks/pullquote/_style.scss","../../assets/sass/05-blocks/query-loop/_style.scss","../../assets/sass/05-blocks/quote/_style.scss","../../assets/sass/05-blocks/rss/_style.scss","../../assets/sass/05-blocks/search/_style.scss","../../assets/sass/05-blocks/separator/_style.scss","../../assets/sass/05-blocks/social-icons/_style.scss","../../assets/sass/05-blocks/table/_style.scss","../../assets/sass/05-blocks/tag-clould/_style.scss","../../assets/sass/05-blocks/verse/_style.scss","../../assets/sass/05-blocks/video/_style.scss","../../assets/sass/05-blocks/utilities/_font-sizes.scss","../../assets/sass/05-blocks/utilities/_style.scss","../../assets/sass/06-components/header.scss","../../assets/sass/06-components/footer.scss","../../assets/sass/06-components/single.scss","../../assets/sass/06-components/posts-and-pages.scss","../../assets/sass/06-components/entry.scss","../../assets/sass/06-components/archives.scss","../../assets/sass/06-components/404.scss","../../assets/sass/06-components/search.scss","../../assets/sass/06-components/comments.scss","../../assets/sass/06-components/navigation.scss","../../assets/sass/06-components/footer-navigation.scss","../../assets/sass/06-components/pagination.scss","../../assets/sass/06-components/widgets.scss","../../assets/sass/07-utilities/a11y.scss","../../assets/sass/07-utilities/color-palette.scss","../../assets/sass/07-utilities/measure.scss","../../assets/sass/07-utilities/ie.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;;;;;;;;;;;;;;;;;CAAA;ACEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;AA4EA,wCAAA;AC9EA,cAAA;AAKA;EAEC,gBAAA;EAIA,cAAA;EAYA,gBAAA;EAKA,aAAA;EA4BA,wBAAA;EASA,WAAA,EAeA,oDAAA,EACA,aAAA,EAEA,kCAAA,EACA,kCAAA;EAEA,YAAA;EAMA,cAAA;EAGA,UAAA;EAYA,gBAAA;EAKA,YAAA;EAmBA,UAAA;EAUA,WAAA;EAiBA,oBAAA;EAkBA,eAAA;EAQA,WAAA;EAOA,sBAAA;EAyBA,iBAAA;EAKA,YAAA;EAMA,qBAAA;AH2DD;AI9RA,2EAAA;AAEA;+EAAA;AAGA;;;EAAA;AAKA;EACC,iBAAA,EAAA,MAAA;EACA,8BAAA,EAAA,MAAA;AJgTD;;AI7SA;+EAAA;AAGA;;EAAA;AAIA;EACC,SAAA;AJ8SD;;AI3SA;;EAAA;AAIA;EACC,cAAA;AJ6SD;;AI1SA;;;EAAA;AAKA;EACC,cAAA;EACA,gBAAA;AJ4SD;;AIzSA;+EAAA;AAGA;;;EAAA;AAKA;EACC,uBAAA,EAAA,MAAA;EACA,SAAA,EAAA,MAAA;EACA,iBAAA,EAAA,MAAA;AJ0SD;;AIvSA;;;EAAA;AAKA;EACC,sBAAA,EAAA,MAAA;EACA,cAAA,EAAA,MAAA;AJySD;;AItSA;+EAAA;AAGA;;EAAA;AAIA;EACC,6BAAA;EACA,8BAAA;AJuSD;;AIpSA;;;EAAA;AAKA;EACC,mBAAA,EAAA,MAAA;EACA,0BAAA,EAAA,MAAA;EACA,6BAAA,EAAA,MAAA;AJsSD;;AInSA;;EAAA;AAIA;;EAEC,mBAAA;AJqSD;;AIlSA;;;EAAA;AAKA;;;EAGC,sBAAA,EAAA,MAAA;EACA,cAAA,EAAA,MAAA;AJoSD;;AIjSA;;EAAA;AAIA;EACC,cAAA;AJmSD;;AIhSA;;;EAAA;AAKA;;EAEC,cAAA;EACA,cAAA;EACA,kBAAA;EACA,wBAAA;AJkSD;;AI/RA;EACC,eAAA;AJkSD;;AI/RA;EACC,WAAA;AJkSD;;AI/RA;+EAAA;AAGA;;EAAA;AAIA;EACC,kBAAA;AJgSD;;AI7RA;+EAAA;AAGA;;;EAAA;AAKA;;;;;EAKC,oBAAA,EAAA,MAAA;EACA,eAAA,EAAA,MAAA;EACA,iBAAA,EAAA,MAAA;EACA,SAAA,EAAA,MAAA;AJ8RD;;AI3RA;;;EAAA;AAKA;QACQ,MAAA;EACP,iBAAA;AJ6RD;;AI1RA;;;EAAA;AAKA;SACS,MAAA;EACR,oBAAA;AJ4RD;;AIzRA;;EAAA;AAIA;;;;EAIC,0BAAA;AJ2RD;;AIxRA;;EAAA;AAIA;;;;EAIC,kBAAA;EACA,UAAA;AJ0RD;;AIvRA;;EAAA;AAIA;;;;EAIC,8BAAA;AJyRD;;AItRA;;EAAA;AAIA;EACC,8BAAA;AJwRD;;AIrRA;;;;;EAAA;AAOA;EACC,sBAAA,EAAA,MAAA;EACA,cAAA,EAAA,MAAA;EACA,cAAA,EAAA,MAAA;EACA,eAAA,EAAA,MAAA;EACA,UAAA,EAAA,MAAA;EACA,mBAAA,EAAA,MAAA;AJuRD;;AIpRA;;EAAA;AAIA;EACC,wBAAA;AJsRD;;AInRA;;EAAA;AAIA;EACC,cAAA;AJqRD;;AIlRA;;;EAAA;AAKA;;EAEC,sBAAA,EAAA,MAAA;EACA,UAAA,EAAA,MAAA;AJoRD;;AIjRA;;EAAA;AAIA;;EAEC,YAAA;AJmRD;;AIhRA;;;EAAA;AAKA;EACC,6BAAA,EAAA,MAAA;EACA,oBAAA,EAAA,MAAA;AJkRD;;AI/QA;;EAAA;AAIA;EACC,wBAAA;AJiRD;;AI9QA;;;EAAA;AAKA;EACC,0BAAA,EAAA,MAAA;EACA,aAAA,EAAA,MAAA;AJgRD;;AI7QA;+EAAA;AAGA;;EAAA;AAIA;EACC,cAAA;AJ8QD;;AI3QA;;EAAA;AAIA;EACC,kBAAA;AJ6QD;;AI1QA;+EAAA;AAGA;;EAAA;;AAQA;;EAAA;AAIA;EACC,aAAA;AJ0QD;;AKtmBA;;EAAA;AAIA;;EAAA;AA4EA;;EAAA;AA8BA;;EAAA;AAGA;EACC,6BAAA;AL8hBD;AKtnBE;EAuFF;EACC;EL8hBD;AAfA;AKnkBE;EAmDF;EACC;EL8hBD;AATA;AKthBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL4hBD;AKtnBE;EAuFF;EACC;EL8hBD;AAfA;AKnkBE;EAmDF;EACC;EL8hBD;AATA;AKthBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL4hBD;AKtnBE;EAuFF;EACC;EL8hBD;AAfA;AKnkBE;EAmDF;EACC;EL8hBD;AATA;AKthBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL4hBD;AKtnBE;EAuFF;EACC;EL8hBD;AAfA;AKnkBE;EAmDF;EACC;EL8hBD;AATA;AKthBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL4hBD;AKtnBE;EAuFF;EACC;EL8hBD;AAfA;AKnkBE;EAmDF;EACC;EL8hBD;AATA;;AKhhBA;EACC,6BAAA;AL+hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;AL+hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;AL+hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AKhhBA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AK7nBE;EA6FF;EACC;EL+hBD;AAtBA;;AKnkBE;EAyDF;EACC;EL+hBD;AAhBA;;AK1gBA;EACC,eAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAA;AL6hBD;;AKpoBE;EA2GD;IACC,eAAA;IACA,WAAA;IACA,iBAAA;IACA,kBAAA;EL6hBA;AACF;AK1hBA;EACC,iBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AL4hBD;AKnpBE;EAmHF;EAGC;EL6hBD;AA5CA;AKnkBE;EA+EF;EAGC;EL6hBD;AAtCA;AK1fA;EACC,iBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AL4hBD;AKnpBE;EAmHF;EAGC;EL6hBD;AA5CA;AKnkBE;EA+EF;EAGC;EL6hBD;AAtCA;AK1fA;EACC,iBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AL4hBD;AKnpBE;EAmHF;EAGC;EL6hBD;AA5CA;AKnkBE;EA+EF;EAGC;EL6hBD;AAtCA;AK1fA;EACC,iBAAA;EACA,kBAAA;EACA,yBAAA;EACA,eAAA;AL4hBD;AKnpBE;EAmHF;EAGC;EL6hBD;AA5CA;AKnkBE;EA+EF;EAGC;EL6hBD;AAtCA;;AK7mBE;EAqJD;IAEC,aAAA;IACA,iEAAA;IAEA,aAAA;IACA,kBAAA;ELggBA;EK3pBA;IAqJD;IAGC;ILmgBA;EApDF;EKnkBE;IAiHD;IAGC;ILmgBA;EA9CF;AA+CA;AK5pBE;EAyKD;IAEC,aAAA;IACA,iBAAA;IAEA,aAAA;IACA,kEAAA;ELofA;EKnqBA;IAyKD;IAMC;ILofA;EA5DF;EKnkBE;IAqID;IAMC;ILofA;EAtDF;AAuDA;AM9rBA;;;;;;;EAAA;AASA;;;EAAA;AAIA;EAIC,iBAAA;EACA,oBAAA;EACA,iBAAA;EACA,kBAAA;AN+rBD;;AM5rBA;EACC,iBAAA;EACA,oBAAA;AN+rBD;AK9rBE;ECHF;IAKE,oBAAA;ENgsBA;AACF;;AM7rBA;;;EAAA;AAIA;EACC,gBAAA;EACA,mBAAA;ANgsBD;AM9rBC;EACC,aAAA;ANgsBF;AM7rBC;EACC,gBAAA;AN+rBF;;AM3rBA;;EAAA;AAOA;;EAAA;AAOA;;EAAA;AAQA;;;EAAA;AAIA;EAKC,gBAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;ANirBD;;AM9qBA;;;EAAA;AAIA;EAOC,gBAAA;EACA,mBAAA;ANgrBD;AMxrBA;EAOC,gBAAA;EACA,mBAAA;ANgrBD;AKxvBE;ECgEF;IAWE,gBAAA;IACA,mBAAA;ENsrBA;EMlsBF;IAWE,gBAAA;IACA,mBAAA;ENsrBA;AACF;AMprBC;;;;;;EACC,aAAA;AN2rBF;AMxrBC;;;;;;EACC,gBAAA;AN+rBF;;AM3rBA;EAEC,gBAAA;EACA,mBAAA;AN8rBD;AKzxBE;ECwFF;IAME,gBAAA;IACA,mBAAA;ENgsBA;AACF;;AM7rBA;;;EAAA;AAKA;EAKC,gBAAA;EACA,mBAAA;AN+rBD;AM7rBC;;;;;EACC,aAAA;ANmsBF;AMhsBC;;;;;EACC,gBAAA;ANssBF;;AMjsBA;;;EAAA;AAMC;EAKC,aAAA;AN8rBF;AM3rBC;EAEC,gBAAA;AN4rBF;AMxrBC;EAEC,gBAAA;ANyrBF;;AOn2BA;;EAAA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;EAwBC,UAAA;EACA,SAAA;EACA,kCAAA;EACA,mCAAA;APq2BD;;AOl2BA;;;;EAAA;AAMA;EAEC,6CAAA;EACA,sBAAA;EAGA,gIAAA;EACA,gBAAA;APi2BD;;AO91BA;;EAAA;AAKC;EAGC,mBAAA;AP61BF;;AOx1BA;EACC,kBAAA;EACA,mBAAA;EACA,cAAA;EACA,gBAAA;EACA,yBAAA;AP21BD;;AQ/5BA;;;;;;;;;;;;EAYC,WAAA;EACA,cAAA;EACA,mBAAA;ARs6BD;;AQn6BA;;;;;;EAMC,WAAA;ARs6BD;;AEl2BA,yHAAA;AO3FA;EACC,UAAA;EACA,kBAAA;EACA,wBAAA;ATi8BD;AS/7BC;EACC,gBAAA;EACA,mBAAA;ATi8BF;AS/7BE;EACC,aAAA;ATi8BH;AS97BE;EACC,gBAAA;ATg8BH;AS57BC;EACC,sBAAA;EACA,gIAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;AT87BF;AS37BC;EAEC,mBAAA;EAEA,sBAAA;AT67BF;AS17BC;EAGC,qBAAA;AT07BF;ASx7BE;EACC,mBAAA;EACA,kBAAA;EACA,cAAA;AT07BH;ASv7BE;EAEC,eAAA;EACA,sBAAA;AT07BH;ASt7BC;EACC,mBAAA;ATw7BF;ASr7BC;EACC,YAAA;EACA,kBAAA;EACA,WAAA;ATu7BF;ASp7BC;EAGC,cAAA;EACA,kBAAA;ATs7BF;AKp+BE;EIpBF;IAsEE,kBAAA;ETs7BA;ESp7BA;IACC,OAAA;ETs7BD;AACF;;AUhgCA;EAeC,yBAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,aAAA;EAEA,aAAA;EACA,eAAA;AVkgCD;AUhgCC;EACC,cAAA;EACA,mBAAA;EACA,2BAAA;AVghCF;AU7gCC;;;;;;;;;;;;;;;EACC,YAAA;AV6hCF;AU1hCC;EACC,oCAAA;AV0iCF;;AUniCC;EACC,oBAAA;AVsiCF;AUpiCE;EACC,sBAAA;AVsiCH;;AUjiCA;EACC,YAAA;EACA,YAAA;AVoiCD;;AUjiCA;;EAGC,aAAA;EACA,cAAA;AVmiCD;;AUhiCA;EACC,yBAAA;EACA,cAAA;EACA,qBAAA;EACA,wBAAA;EACA,gBAAA;EACA,gBAAA;EACA,4BAAA;EACA,gLAAA;EACA,uCAAA;AVmiCD;AUjiCC;EACC,mBAAA;EACA,2BAAA;AVmiCF;AUhiCC;EACC,oMAAA;EACA,uCAAA;AVkiCF;;AU9hCA;EACC,WAAA;AViiCD;;AU9hCA;EACC,mBAAA;EACA,gBAAA;EACA,mBAAA;AViiCD;;AU9hCA;;;;CAAA;AAKA;EAEC;IAEC,wBAAA;IACA,qBAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;IACA,yBAAA;IACA,gBAAA;EVgiCA;EU9hCA;;IACC,YAAA;EViiCD;EU9hCA;IACC,oCAAA;EViiCD;EU3hCA;IACC,mBAAA;IACA,2BAAA;EV6hCD;EU1hCA;IACC,WAAA;IACA,UAAA;IACA,cAAA;IACA,SAAA;IACA,QAAA;IACA,kBAAA;IACA,UAAA;IACA,YAAA;IACA,yBAAA;IACA,aAAA;IACA,cAAA;IACA,wBAAA;EV4hCD;EUzhCA;IACC,cAAA;EV2hCD;EUzhCC;IACC,UAAA;EV2hCF;EUthCD;IACC,kBAAA;EVwhCA;EUthCA;IACC,mBAAA;IACA,2BAAA;EVwhCD;EUrhCA;IACC,WAAA;IACA,UAAA;IACA,cAAA;IACA,SAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;IACA,kBAAA;IACA,mBAAA;EVuhCD;EUphCA;IACC,yBAAA;EVshCD;EUphCC;IACC,UAAA;EVshCF;EUlhCC;IACC,mBAAA;IACA,2BAAA;EVohCF;AACF;AU/gCA;EAEC,qBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;AVihCD;;AU9gCA;;CAAA;AAGA;EAEC;IACC,wBAAA,EAAA,uDAAA;IACA,WAAA,EAAA,4CAAA;IACA,WAAA;IACA,mBAAA;IACA,kBAAA;IACA,oBAAA;EVghCA;EU9gCA;IACC,YAAA;EVghCD;EU5gCD;IACC,wBAAA;IACA,yBAAA;IACA,YAAA;IACA,WAAA;IACA,kBAAA;IACA,mBAAA;IACA,eAAA;EV8gCA;EU3gCD;IACC,yBAAA;IACA,YAAA;IACA,WAAA;IACA,kBAAA;IACA,mBAAA;IACA,eAAA;IACA,sBAAA;EV6gCA;AACF;AU1gCA;EACC,WAAA;EACA,WAAA;EACA,kBAAA;EACA,oBAAA;EACA,qBAAA;EACA,uBAAA;EACA,kBAAA;EACA,eAAA;AV4gCD;;AUpgCA;EAJC,mBAAA;EACA,kBAAA;AVihCD;;AUzgCA;EACC,yBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,mBAAA;EACA,eAAA;AV4gCD;;AUzgCA;EACC,aAAA;EACA,qBAAA;EACA,aAAA;AV4gCD;AU1gCC;EACC,iBAAA;AV4gCF;AUvgCE;EACC,sBAAA;AVygCH;AUtgCE;EACC,mBAAA;AVwgCH;AUrgCE;EAEC,gBAAA;AVsgCH;AUngCE;EAEC,mBAAA;EACA,eAAA;EACA,mBAAA;AVogCH;;AU//BA;EACC,UAAA;AVkgCD;;AU//BA;EACC,iBAAA;AVkgCD;;AU//BA;EACC,aAAA;EACA,eAAA;AVkgCD;AUhgCC;EACC,WAAA;EACA,gBAAA;AVkgCF;AU//BC;EACC,YAAA;EACA,gBAAA;EACA,kBAAA;AVigCF;AU9/BC;EACC,gBAAA;AVggCF;AK7xCE;EK4RD;IAGE,iBAAA;EVkgCD;AACF;;AWx0CA;EACC,YAAA;EAEA,sBAAA;AX20CD;;AWx0CA,0BAAA;;AAKA,uDAAA;AACA;;;;EAIC,eAAA;AX20CD;;AWx0CA,mBAAA;AACA;EAIC,mBAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;AX20CD;AWz0CC;;;;;;;EAEC,gBAAA;AXg1CF;;AW50CA,cAAA;AACA;;;EAGC,YAAA;EACA,gBAAA;EACA,aAAA;EACA,UAAA;AX+0CD;;AY33CA,2EAAA;AACA;;EAEC,gBAAA;AZ83CD;;AY33CA;;;;EAIC,kBAAA;AZ83CD;;AY33CA;EACC,gBAAA;EACA,gBAAA;AZ83CD;;AY33CA;EACC,cAAA;AZ83CD;;Aaj5CA;;;;EAAA;AAKA;EACC,eAAA;EACA,cAAA;EACA,0BAAA;EACA,6BAAA;Abo5CD;;Aaj5CA;EACC,6BAAA;EACA,8BAAA;Abo5CD;;Aaj5CA;EAEC,+CAAA;EACA,8BAAA;EAEA,kDAAA;EACA,8BAAA;EACA,oCAAA;Abk5CD;Aa/4CC;EACC,gBAAA;EACA,WAAA;EACA,qBAAA;Abi5CF;Aa/4CE;EACC,WAAA;Abi5CH;Aa54CC;EACC,8BAAA;EACA,WAAA;Ab84CF;Aa54CE;EACC,WAAA;Ab84CH;Aa14CC;EAEC,+CAAA;EACA,8BAAA;EACA,oBAAA;Ab24CF;Aaz4CE;EACC,cAAA;EACA,yBAAA;Ab24CH;Aav4CC;EACC,gBAAA;Aby4CF;Aat4CC;EACC,2BAAA;Abw4CF;;Aah4CC;EAEC,cAAA;Abk4CF;;AE12CA,4HAAA;AYhGC;EACC,mBAAA;EACA,0BAAA;Ad88CF;;Ael9CA;;EAAA;AAGA;ECmBC,6BAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,gIAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;AhBy8CD;AgBn8CE;EACC,cAAA;AhB28CH;AgBr8CI;EACC,cAAA;AhBs9CL;AgB58CG;EACC,yBAAA;AhB69CJ;AgBv9CC;;;;;;;;;;;;;EAEC,6BAAA;EACA,0BAAA;EACA,cAAA;AhBo+CF;AgBh+CC;;;;;;;EACC,oBAAA;EACA,gCAAA;AhBw+CF;AgBp+CC;EACC,0CAAA;EACA,sCAAA;EACA,cAAA;AhB4+CF;;Ae5iDA;;EAAA;AAeI;EACC,cAAA;AfsiDL;AepiDK;EACC,cAAA;AfsiDN;Ae5hDI;EACC,yBAAA;AfiiDL;Ae3hDE;;EAEC,qCAAA;EACA,wCAAA;EACA,yBAAA;Af6hDH;AenhDG;EAGC,0BAAA;AfmhDJ;Ae3gDI;EACC,cAAA;AfghDL;Ae1gDI;EACC,cAAA;Af4gDL;AevgDG;EACC,6BAAA;AfygDJ;AergDE;EAGC,oCAAA;EACA,oCAAA;EACA,yBAAA;AfsgDH;AepgDG;EACC,oCAAA;EACA,yBAAA;AfugDJ;AepgDG;EACC,yBAAA;AfugDJ;AejgDC;EACC,gBAAA;AfmgDF;;Ae//CA;EAEC,mBAAA;EACA,2BAAA;AfkgDD;;AiB1nDA;EACC,qBAAA;EACA,gBAAA;EACA,mBAAA;EACA,oBAAA;EACA,aAAA;AjB6nDD;AiB3nDC;EACC,cAAA;EACA,gBAAA;EACA,gBAAA;EACA,cAAA;AjB6nDF;;AkBtoDC;EACC,WAAA;AlByoDF;AkBpoDE;EACC,gBAAA;EACA,mBAAA;AlBsoDH;AKtnDE;EalBA;IAKE,gBAAA;IACA,mBAAA;ElBuoDF;AACF;AkBroDG;EACC,aAAA;AlBuoDJ;AkB/nDE;EACC,gBAAA;AlBooDH;AkBhoDC;EACC,mBAAA;AlBkoDF;AKxoDE;EaKD;IAIE,mBAAA;ElBmoDD;AACF;AKzmDE;Ea/BD;IAQE,gBAAA;ElBooDD;AACF;AkBjoDC;EAEC,6BAAA;AlBkoDF;AK7nDE;EaCE;IACC,kBAAA;IACA,gBAAA;IACA,UAAA;ElB+nDH;EkBjnDI;IACC,yBAAA;IACA,aAAA;ElB4nDL;EkBvnDG;IAEC,kBAAA;ElBynDJ;EkBtnDG;IACC,aAAA;ElBwnDJ;AACF;AkB9mDG;EAOC,kBAAA;EACA,mBAAA;AlBgnDJ;;AmBptDA;EAYC,sBAAA;EACA,iBAAA;EACA,mBAAA;EACA,sBAAA;EAkBA,sCAAA;EAUA,8DAAA;EA+DA,iBAAA;EAKA,qHAAA;AnBinDD;AmB7tDC;;EACC,WAAA;AnBguDF;AmB7tDC;;EACC,aAAA;EACA,gBAAA;AnBguDF;AmBxtDC;EAGC,mBAAA;EACA,gBAAA;EACA,mBAAA;AnB6tDF;AmB3tDE;;;;;;EACC,mBAAA;AnBkuDH;AmB/tDE;EACC,cAAA;AnBsuDH;AmB/tDE;EAGC,WAAA;AnBouDH;AmB/tDC;EACC,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,kBAAA;EACA,mBAAA;EACA,UAAA;AnBkuDF;AGriDA;EgBnMC;EACC;EnBuuDF;AAn+CA;AmBrQC;EACC,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,kBAAA;EACA,mBAAA;EACA,UAAA;AnBkuDF;AGriDA;EgBnMC;EACC;EnBuuDF;AAn+CA;AmB7PE;;EACC,gBAAA;AnBmuDH;AmBhuDE;;EACC,kBAAA;AnBmuDH;AmBhuDE;;EACC,iBAAA;AnBmuDH;AmB/tDC;EAEC,wBAAA;AnBiuDF;AmB/tDE;EACC,gBAAA;EACA,mBAAA;AnBkuDH;AK/wDE;Ec2CA;IAKE,gBAAA;IACA,mBAAA;EnBouDF;AACF;AmBluDG;;EACC,aAAA;AnBquDJ;AmBluDG;;EACC,gBAAA;AnBquDJ;AmBhuDC;;;EAEC,aAAA;AnBmuDF;AmBjuDE;EACC,gBAAA;EACA,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;AnBquDH;AmBjuDC;;;EAEC,uBAAA;AnBouDF;AmBhuDC;EACC,yBAAA;AnBmuDF;AmB/tDC;;EACC,uBAAA;AnBkuDF;;AoBh1DC;;;EAGC,gBAAA;ApBm1DF;AoBh1DC;EACC,qBAAA;ApBk1DF;;AqB51DA;EAEC,cAAA;ArB81DD;AqB51DC;EAIC,uBAAA;ArB41DF;AqB11DE;EACC,SAAA;EAEA,WAAA;EACA,eAAA;ArB41DH;AqB11DG;EACC,WAAA;ArB61DJ;AqB31DI;EACC,6BAAA;EACA,0BAAA;EACA,qBAAA;ArB81DL;AqBz1DE;;EACC,mBAAA;ArB41DH;;AsBx3DA;EAIC,cAAA;EACA,WAAA;EAEA,kBAAA;AtBu3DD;AsBr3DC;EAEC,WAAA;EACA,cAAA;EACA,WAAA;AtBs3DF;AsBl3DC;EACC,iBAAA;EACA,kBAAA;AtBo3DF;AsBl3DE;EACC,gBAAA;EACA,mBAAA;AtBo3DH;AKj3DE;EiBLA;IASE,gBAAA;IACA,mBAAA;EtBi3DF;AACF;AsB/2DG;EACC,aAAA;AtBi3DJ;AsB92DG;EACC,gBAAA;AtBg3DJ;AsB32DC;EACC,aAAA;AtB62DF;AKh4DE;EiBkBD;IAIE,aAAA;EtB82DD;AACF;AsB12DC;EACC,yBAAA;EACA,aAAA;AtB42DF;AsBr2DE;EAEC,4BAAA;EACA,wBAAA;EACA,kBAAA;AtBw2DH;;AuB16DA;EAYC,WAAA;EACA,gIAAA;EACA,mBAAA;AvB66DD;AuB36DC;EACC,gBAAA;AvBw7DF;;AuBp7DA;EAEC,eAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AGjuDA;EoB1NA;EAEC;EvBy7DD;AA/pDA;;AuB5RA;EAEC,eAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AGjuDA;EoB1NA;EAEC;EvBy7DD;AA/pDA;;AuBrRA;EAEC,kBAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AGxuDA;EoBnNA;EAEC;EvBy7DD;AAtqDA;;AuBrRA;EAEC,kBAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AGxuDA;EoBnNA;EAEC;EvBy7DD;AAtqDA;;AuB9QA;EAEC,eAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AG/uDA;EoB5MA;EAEC;EvBy7DD;AA7qDA;;AuB9QA;EAEC,eAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AG/uDA;EoB5MA;EAEC;EvBy7DD;AA7qDA;;AuBvQA;EAEC,iBAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AuBp7DA;EAEC,mBAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AuBp7DA;EAEC,eAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AvBu7DD;;AwBt/DA;EACC,kBAAA;AxBy/DD;AwBv/DC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;AxBy/DF;AwBt/DC;EACC,iBAAA;AxBw/DF;AwBr/DC;EACC,kBAAA;AxBu/DF;AwBp/DC;EACC,mBAAA;AxBs/DF;;AwBj/DA;;EAEC,aAAA;EACA,gBAAA;AxBo/DD;AwBj/DC;;EACC,aAAA;AxBo/DF;;AwB/+DA;EAEC,yBAAA;AxBk/DD;;AwB/+DA;EACC,aAAA;AxBk/DD;;AKpgEE;EmByBA;;IAGE,cAAA;ExB8+DF;AACF;AKjhEE;EmB+BA;;IAME,cAAA;IACA,eAAA;ExBi/DF;AACF;;AyB5iEA;EACC,eAAA;AzB+iED;AyB7iEC;EACC,mBAAA;AzB+iEF;AyB5iEC;EACC,gBAAA;EAEA,2BAAA;EACA,gBAAA;EACA,mBAAA;AzB6iEF;AyB3iEE;EACC,aAAA;AzB6iEH;AyB1iEE;EACC,gBAAA;AzB4iEH;AyBxiEC;EACC,gIAAA;AzB0iEF;AyBviEC;EACC,cAAA;EACA,kBAAA;AzByiEF;AyBtiEC;EACC,kBAAA;EACA,gBAAA;EACA,SAAA;AzBwiEF;;A0B3kEA;EACC,eAAA;A1B8kED;A0B3kEC;EACC,gBAAA;EACA,mBAAA;A1B6kEF;A0B3kEE;EACC,aAAA;A1B6kEH;A0B1kEE;EACC,gBAAA;A1B4kEH;A0BxkEC;EACC,aAAA;EACA,gBAAA;A1B0kEF;A0BvkEC;EACC,qBAAA;EACA,sBAAA;A1BykEF;A0BvkEE;EACC,mBAAA;A1BykEH;A0BjkEE;EAUC,gBAAA;A1B6jEH;A0BzjEC;EACC,gBAAA;EACA,mBAAA;A1B2jEF;A0BzjEE;EACC,aAAA;A1B2jEH;A0BxjEE;EACC,gBAAA;A1B0jEH;A0BrjEC;EACC,qBAAA;EACA,gIAAA;EACA,eAAA;EACA,mBAAA;EACA,gBAAA;EACA,mBAAA;A1BujEF;AG74DA;EuBhLC;EAGC;E1B0jEF;AA30DA;A0BzOC;EACC,mBAAA;EACA,gBAAA;A1BsjEF;A0BljEC;EACC,cAAA;EACA,kBAAA;EACA,gBAAA;A1BojEF;A0BhjEC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;A1BkjEF;A0BhjEE;EAEC,mBAAA;A1BijEH;A0B5iEC;EAEC,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;A1B8iEF;A0B1iEC;EACC,kBAAA;EACA,mBAAA;A1B4iEF;A0B1iEE;EAEC,eAAA;EACA,gBAAA;A1B2iEH;A0BtiEC;EACC,6BAAA;EACA,gCAAA;A1BwiEF;A0BtiEE;EAEC,oBAAA;EACA,gCAAA;EACA,gBAAA;EACA,mBAAA;A1BwiEH;A0BtiEG;;EACC,iBAAA;EACA,mBAAA;A1ByiEJ;A0BriEE;EAEC,oCAAA;EACA,gCAAA;A1BsiEH;A0BpiEG;EACC,SAAA;EACA,iBAAA;EACA,mBAAA;A1BsiEJ;A0BpiEI;EACC,oBAAA;A1BsiEL;A0BhiEG;EAEE;IACC,UAAA;E1BiiEJ;E0BliEG;IACC,UAAA;E1BoiEJ;E0BriEG;IACC,UAAA;E1BuiEJ;E0BxiEG;IACC,UAAA;E1B0iEJ;E0B3iEG;IACC,UAAA;E1B6iEJ;AACF;A0BriEE;EACC,yBAAA;EACA,kBAAA;A1BuiEH;A0BriEG;EACC,oBAAA;A1BuiEJ;A0BniEE;EACC,gBAAA;EACA,mBAAA;A1BqiEH;;A2BptEA;EACC,qBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;A3ButED;A2BrtEC;EACC,cAAA;A3ButEF;A2BptEC;EACC,oBAAA;A3BstEF;A2BntEC;EACC,cAAA;A3BqtEF;A2BltEC;EACC,iBAAA;A3BotEF;A2BjtEC;EACC,cAAA;A3BmtEF;A2BhtEC;EACC,cAAA;A3BktEF;A2B/sEC;EACC,iBAAA;A3BitEF;A2B9sEC;EACC,iBAAA;A3BgtEF;A2B7sEC;EACC,gBAAA;A3B+sEF;A2B5sEC;EACC,iBAAA;A3B8sEF;;A2B1sEA;EACC,cAAA;A3B6sED;;A2BzsEA;EACC,mBAAA;A3B4sED;;A4BjwEA;EAEC,gIAAA;EACA,SAAA;EACA,kBAAA;A5BowED;A4B5vEC;;;EAJC,2BAAA;EACA,UAAA;A5B0wEF;A4BvwEC;;EAEC,iBAAA;A5BqwEF;;A4BhwEA;EACC,qBAAA;A5BmwED;A4BjwEC;EACC,uBAAA;A5BmwEF;;A4B/vEA;EACC,wBAAA;A5BkwED;A4BhwEC;EACC,uBAAA;A5BkwEF;;A4B9vEA;EACC,gIAAA;EACA,iBAAA;A5BiwED;;A4B9vEA;EACC,SAAA;EACA,kBAAA;A5BiwED;;A6BzyEC;EACC,aAAA;EACA,gBAAA;A7B4yEF;A6BzyEC;EACC,oBAAA;A7B2yEF;A6BxyEC;EACC,aAAA;A7B0yEF;AKhxEE;EwB3BD;IAIE,aAAA;E7B2yED;AACF;A6BzyEE;EACC,gBAAA;EACA,mBAAA;A7B2yEH;AKryEE;EwBRA;IAKE,gBAAA;IACA,mBAAA;E7B4yEF;AACF;A6B1yEG;EACC,aAAA;A7B4yEJ;A6BzyEG;EACC,gBAAA;A7B2yEJ;AKjzEE;EwBYD;IAEE,iBAAA;IACA,oBAAA;E7BuyED;AACF;A6BnyEC;EACC,yBAAA;A7BqyEF;;A8Bj1EE;EACC,gIAAA;EACA,kBAAA;EACA,mBAAA;A9Bo1EH;A8Bh1EC;EACC,UAAA;A9Bk1EF;A8B10EG;EACC,gBAAA;A9B40EJ;A8Bz0EG;EACC,YAAA;EACA,OAAA;EACA,sBAAA;EACA,UAAA;EACA,UAAA;EACA,iBAAA;EACA,YAAA;A9B20EJ;A8Bz0EI;EACC,aAAA;A9B20EL;A8Bp0EG;EACC,mBAAA;EACA,SAAA;EACA,UAAA;EACA,kBAAA;EACA,SAAA;EACA,yBAAA;A9Bs0EJ;A8Bp0EI;EAEC,WAAA;EACA,cAAA;EACA,kBAAA;EACA,QAAA;EACA,UAAA;EACA,UAAA;EACA,mBAAA;EACA,iCAAA;EACA,4BAAA;A9Bq0EL;A8Bl0EI;EACC,SAAA;EACA,iCAAA;A9Bo0EL;A8BzzEG;EACC,mBAAA;A9B8zEJ;A8BnzEI;EAEC,cAAA;A9BozEL;A8BjzEI;EACC,0BAAA;EACA,6BAAA;A9BmzEL;A8B9yEE;EACC,mBAAA;A9BgzEH;;A+Bn5EA;EAEC,gBAAA;A/Bq5ED;A+Bl5EC;EACC,aAAA;A/Bo5EF;A+Bh5EC;EACC,cAAA;A/Bk5EF;;AgC75EA;EACC,gBAAA;EACA,gBAAA;AhCg6ED;;AiCl6EA;EACC,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;EACA,0BAAA;EACA,kBAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;EAyCA;;IAAA;AjC+3ED;;AGrsEA;E8B/OA;EASC;EjC26ED;AAnoEA;AiCnSC;EACC,mBAAA;EACA,YAAA;EACA,cAAA;EACA,kBAAA;EACA,OAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;AjCw6EF;AiCr6EC;EACC,gIAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,SAAA;AjCu6EF;AiCp6EC;EACC,gBAAA;AjCs6EF;AiCn6EC;EACC,mBAAA;AjCq6EF;AiCl6EC;EAGC,mBAAA;EACA,cAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;AjCo6EF;AiC95EC;EACC,gBAAA;AjCg6EF;AiC35EE;;EAEC,kBAAA;AjC65EH;AiCz5EC;EAEC,6BAAA;AjC05EF;AKt8EE;E4B0CD;EAEC;EjC05EF;AA/1DA;AKnkBE;E4BMD;EAEC;EjC05EF;AAz1DA;AiCnkBC;EAEC,6BAAA;AjC05EF;AKt8EE;E4B0CD;EAEC;EjC05EF;AA/1DA;AKnkBE;E4BMD;EAEC;EjC05EF;AAz1DA;AiC9jBC;EAEC,eAAA;AjCw5EF;AiCr5EC;EACC,cAAA;EACA,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,qBAAA;AjCu5EF;AiCr5EE;EAPD;IAQE,cAAA;EjCw5ED;AACF;AiCt5EE;EACC,gBAAA;AjCw5EH;AiCr5EE;EACC,SAAA;EACA,kBAAA;AjCu5EH;AiCr5EG;EACC,eAAA;AjCu5EJ;AG1wEA;E8B9IG;EACC;EjCu5EJ;AAxsEA;AiC3ME;;;EAGC,mBAAA;AjCq5EH;AiCl5EE;EAEC,aAAA;AjCm5EH;AiCj5EG;EACC,kBAAA;AjCm5EJ;;AkClgFC;EACC,aAAA;AlCqgFF;AK9+EE;E6BxBD;IAIE,aAAA;ElCsgFD;AACF;;AmC7gFA;EACC,iBAAA;EACA,gIAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;EA8CA;;IAAA;AnCq+ED;AmCjhFC;EACC,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;EACA,oBAAA;EACA,uBAAA;AnCmhFF;AmChhFC;EACC,YAAA;EACA,SAAA;AnCkhFF;AmC/gFC;;;EAGC,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,oBAAA;EACA,uBAAA;AnCihFF;AmC/gFE;;;;;;;;;EAIC,mBAAA;AnCshFH;AmClhFC;EAGC,kBAAA;AnCkhFF;AmCrhFC;EAGC,kBAAA;AnCkhFF;AmCrhFC;EAGC,kBAAA;AnCkhFF;AmC9gFC;EAGC,mBAAA;AnC8gFF;AmCxgFC;EACC,2BAAA;EACA,gBAAA;EACA,kBAAA;AnC0gFF;AmCvgFE;EACC,aAAA;AnCygFH;AmCrgFE;EACC,YAAA;EACA,iBAAA;AnCugFH;AmCngFC;EACC,iBAAA;AnCqgFF;AmCngFE;EACC,aAAA;AnCqgFH;AmChgFC;EAEC,eAAA;EACA,gBAAA;EAEA,qDAAA;EACA,gBAAA;EACA,mBAAA;AnCggFF;AmC9/EE;EACC,kBAAA;EACA,kBAAA;EACA,iBAAA;AnCggFH;AG92EA;EgCrJE;EACC;EnCkgFH;AA5yEA;AmCvNE;EACC,kBAAA;EACA,kBAAA;EACA,iBAAA;AnCggFH;AG92EA;EgCrJE;EACC;EnCkgFH;AA5yEA;AmCjNE;EACC,kBAAA;EACA,iBAAA;EACA,WAAA;AnC+/EH;AGn3EA;EgC/IE;EACC;EnCigFH;AAjzEA;AmCjNE;EACC,kBAAA;EACA,iBAAA;EACA,WAAA;AnC+/EH;AGn3EA;EgC/IE;EACC;EnCigFH;AAjzEA;AmCxMG;EACC,aAAA;AnC2/EJ;AmCv/EG;EACC,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;AnCy/EJ;AG73EA;EgCjIG;EAEC;EnC4/EJ;AA3zEA;AmCnMG;EACC,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;AnCy/EJ;AG73EA;EgCjIG;EAEC;EnC4/EJ;AA3zEA;AmC1LE;EAGC,cAAA;EACA,mBAAA;AnCy/EH;AKhmFE;E8B6DD;IA8CE,kBAAA;EnCy/ED;EmCv/EC;IACC,OAAA;EnCy/EF;EmCt/EC;IACC,eAAA;IACA,mBAAA;EnCw/EF;EmCt/EE;IACC,QAAA;EnCw/EH;EmCp/EC;IACC,eAAA;IACA,gBAAA;EnCs/EF;EmC/+EA;IACC,eAAA;IACA,mBAAA;EnCm/ED;EmCj/EC;IACC,QAAA;EnCm/EF;EmC/+EA;IACC,eAAA;IACA,gBAAA;EnCi/ED;AAZF;;AoCvoFA;EACC,eAAA;ApCupFD;AoCrpFC;EACC,gBAAA;ApCupFF;AoCnpFC;EACC,gBAAA;EACA,mBAAA;ApCqpFF;AoCnpFE;EACC,aAAA;ApCqpFH;AoClpFE;EACC,gBAAA;ApCopFH;AoC9oFE;EACC,mBAAA;ApCgpFH;AoCxoFE;EAUC,gBAAA;ApCooFH;AoChoFC;EACC,gBAAA;EACA,mBAAA;ApCkoFF;AoChoFE;EACC,aAAA;ApCkoFH;AoC/nFE;EACC,gBAAA;ApCioFH;AoC5nFC;EACC,qBAAA;EACA,gIAAA;EACA,eAAA;EACA,mBAAA;EACA,gBAAA;EACA,mBAAA;ApC8nFF;AGj9EA;EiCnLC;EAGC;EpCioFF;AA/4EA;AoC3OC;EACC,cAAA;EACA,kBAAA;EACA,gBAAA;ApC4nFF;AoCxnFC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;ApC0nFF;AoCxnFE;EAEC,mBAAA;ApCynFH;AoCpnFC;EAEC,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;ApCsnFF;AoClnFC;EACC,kBAAA;EACA,mBAAA;ApConFF;AoClnFE;EAEC,eAAA;EACA,gBAAA;ApCmnFH;;AqC5tFA;EACC,6BAAA;ArC+tFD;;AKtsFE;EgC1BF;EACC;ErC+tFD;AA/lEA;;AKnkBE;EgC9DF;EACC;ErC+tFD;AAzlEA;AqCloBE;EACC,uBAAA;ArC6tFH;AqCztFC;EACC,mBAAA;EACA,gBAAA;EACA,mBAAA;ArC2tFF;AqCxtFC;EACC,yBAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EAEA,cAAA;EACA,aAAA;ArCytFF;AqCvtFE;EACC,cAAA;EACA,qBAAA;ArCytFH;AqCttFE;EACC,gCAAA;ArCwtFH;AqCptFC;EACC,cAAA;EACA,cAAA;ArCstFF;AqCptFE;EACC,iBAAA;ArCstFH;AqCptFG;EACC,WAAA;EACA,YAAA;EACA,kBAAA;ArCstFJ;AqC/sFG;EACC,oCAAA;EACA,yBAAA;ArCitFJ;AqC9sFG;EACC,yBAAA;ArCgtFJ;AqCzsFE;EACC,sBAAA;EACA,yBAAA;EACA,gBAAA;EACA,YAAA;ArC2sFH;AqCzsFG;EACC,gCAAA;ArC2sFJ;AqCxsFG;EACC,cAAA;EACA,eAAA;EACA,kBAAA;ArC0sFJ;AqCvsFI;EACC,cAAA;EACA,oBAAA;EACA,2BAAA;ArCysFL;AqCrsFG;EACC,kBAAA;ArCusFJ;AqChsFI;EACC,cAAA;ArCqsFL;AqCnsFK;EACC,yBAAA;EACA,WAAA;ArCqsFN;AqCjsFI;EACC,iBAAA;ArCmsFL;;AqC5rFA;EACC,gBAAA;ArC+rFD;;AsCnzFA;EACC,kBAAA;EAEA,WAAA;EACA,iBAAA;EACA,kBAAA;AtCszFD;AsCpzFC;EALA,gCAAA;AtCg0FD;AsC3zFC;EAEC,UAAA;EAiBA;;IAAA;AtCwyFF;AsCvzFE;EACC,6BAAA;AtCyzFH;AK3yFE;EiCfA;EACC;EtCyzFH;AApsEA;AKnkBE;EiCnDA;EACC;EtCyzFH;AA9rEA;AsCtnBG;EACC,6BAAA;AtCszFJ;AK9yFE;EiCTC;EACC;EtCszFJ;AAvsEA;AKnkBE;EiC7CC;EACC;EtCszFJ;AAjsEA;AsClnBG;EACC,eAAA;AtCqzFJ;AsC9yFE;EACC,wBAAA;AtCgzFH;AsC3yFG;EAEC,wCAAA;AtC4yFJ;AsC1yFI;EACC,8BAAA;AtC4yFL;AsCxyFG;EACC,cAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;AtC0yFJ;AG3mFA;EmCnMG;EAEC;EtC4yFJ;AAziFA;AsC7PE;EAIC,0BAAA;AtCqyFH;AuCr1FE;EACC,cAAA;AvC21FH;AuCx1FE;EAEC,gBAAA;AvCy1FH;;AwCv2FA;;EAEC,WAAA;EACA,gBAAA;EACA,yBAAA;AxC02FD;AwCx2FC;;;;EAEC,kBAAA;AxC42FF;AwCz2FC;EACC,gIAAA;AxC42FF;AwCz2FC;EAEC,aAAA;EACA,iBAAA;AxC62FF;AwC12FC;EACC,cAAA;EACA,eAAA;AxC62FF;AwC12FC;EAKC,cAAA;AxC62FF;AwC12FC;EACC,qBAAA;AxC62FF;AwC32FE;;;;EAEC,eAAA;AxC+2FH;AwC52FE;EACC,yBAAA;AxC+2FH;AwC52FE;EACC,0CAAA;AxC+2FH;;AwCx2FC;;EAEC,uBAAA;EACA,SAAA;EACA,kBAAA;EACA,cAAA;EACA,sBAAA;EACA,kBAAA;AxC22FF;AwCx2FC;EACC,iBAAA;AxC02FF;AwCv2FC;;EAEC,mBAAA;EACA,iBAAA;AxCy2FF;AwCt2FC;EACC,iBAAA;EACA,gBAAA;EACA,mBAAA;EACA,mBAAA;AxCw2FF;;AwCp2FA;EACC,gBAAA;EACA,gBAAA;AxCu2FD;AwCr2FC;EACC,WAAA;EACA,sBAAA;AxCu2FF;AwCr2FE;EACC,kBAAA;AxCu2FH;AwCn2FC;EACC,YAAA;AxCq2FF;;AyCn8FC;EACC,kBAAA;EACA,mBAAA;AzCs8FF;;A0C18FA;EACC,gIAAA;A1C68FD;;A2C58FC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;A3C+8FF;;A2C38FA;EACC,gBAAA;EACA,WAAA;EACA,sBAAA;A3C88FD;;A4Cz9FC;EAEC,eAAA;A5C49FF;A4Cz9FC;EAEC,mBAAA;A5C29FF;A4Cx9FC;EAKC,kBAAA;A5C09FF;A4Cv9FC;EAEC,iBAAA;EACA,gBAAA;A5Cy9FF;A4Ct9FC;EAIC,iBAAA;EACA,gBAAA;A5Cw9FF;AGzwFA;EyCpNC;EAIC;E5Cy9FF;AAvsFA;A4CtRC;EAIC,iBAAA;EACA,gBAAA;A5Cw9FF;AGzwFA;EyCpNC;EAIC;E5Cy9FF;AAvsFA;A4CtRC;EAIC,iBAAA;EACA,gBAAA;A5Cw9FF;AGzwFA;EyCpNC;EAIC;E5Cy9FF;AAvsFA;A4CtRC;EAIC,iBAAA;EACA,gBAAA;A5Cw9FF;AGzwFA;EyCpNC;EAIC;E5Cy9FF;AAvsFA;A4C9QC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;A5Cq9FF;AG/wFA;EyC5MC;EAEC;E5Cy9FF;AA7sFA;A4C9QC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;A5Cq9FF;AG/wFA;EyC5MC;EAEC;E5Cy9FF;AA7sFA;A4CrQC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;A5Ck9FF;AGrxFA;EyCnMC;EAEC;E5Cs9FF;AAntFA;A4CrQC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;A5Ck9FF;AGrxFA;EyCnMC;EAEC;E5Cs9FF;AAntFA;;A6CjTA,qBAAA;AAEA;;EAAA;AAQA;;EAAA;AAGA;EAEC,aAAA;EACA,gBAAA;EAEA,aAAA;A7C+/FD;;A6C1/FA;EACC,6BAAA;A7C6/FD;;AK3/FE;EwCHF;EACC;E7C6/FD;AAp5EA;;AKnkBE;EwCvCF;EACC;E7C6/FD;AA94EA;;AK7mBE;EwCID;IAEC,aAAA;IACA,WAAA;IAEA,aAAA;IACA,kBAAA;IACA,mBAAA;E7Cy/FA;E6Ct/FD;IACC,qEAAA;E7Cw/FA;EKvgGA;IwCcD;IACC;I7Cw/FA;EAh6EF;EKnkBE;IwCtBD;IACC;I7Cw/FA;EA15EF;AA25EA;A6Cr/FA;;EAAA;AAGA;EACC,WAAA;EACA,cAAA;EACA,WAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;A7Cu/FD;;A6Cp/FA;;EAAA;AAGA;EAEC,aAAA;EACA,mBAAA;A7Cs/FD;;A6Cj/FA;EACC,6BAAA;A7Co/FD;;AK/hGE;EwC0CF;EACC;E7Co/FD;AAx7EA;;AKnkBE;EwCMF;EACC;E7Co/FD;AAl7EA;;AK7mBE;EwCiDD;IAEC,aAAA;IACA,YAAA;IAEA,aAAA;IACA,iBAAA;E7Cg/FA;E6C7+FD;IACC,qEAAA;E7C++FA;EK1iGA;IwC0DD;IACC;I7C++FA;EAn8EF;EKnkBE;IwCsBD;IACC;I7C++FA;EA77EF;AA87EA;A6C3+FA;;EAEC,aAAA;A7C6+FD;;A6C1+FA;;EAAA;;AAYA;;EAAA;AAGA;EACC,WAAA;A7Cw+FD;;A6C99FA;EACC,2BAAA;A7Ci+FD;;A6C99FA;EACC,yBAAA;A7Ci+FD;;A6C79FA;EACC,4BAAA;A7Cg+FD;;A6C59FA;EACC,gIAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,kBAAA;EACA,WAAA;EACA,uBAAA;EACA,eAAA;A7C+9FD;;AG/3FA;E0CxGA;EAQC;E7C+9FD;AA7zFA;;A6C/JA;EACC,WAAA;EACA,cAAA;EACA,WAAA;EACA,iBAAA;A7C+9FD;;A6C59FA;EACC,aAAA;A7C+9FD;AK/lGE;EwC+HF;IAIE,cAAA;E7Cg+FA;AACF;;AEzhGA,4LAAA;A4CpGA;EAEC,aAAA;EACA,uBAAA;EACA,eAAA;EACA,aAAA;A9CgoGD;A8C9nGC;EACC,mBAAA;A9CgoGF;AK/mGE;EyCzBF;IAYE,iBAAA;E9CgoGA;AACF;AKhlGE;EyC7DF;IAgBE,iBAAA;E9CioGA;AACF;;A8C7nGA;EACC,cAAA;EACA,mBAAA;A9CgoGD;A8C9nGC;EACC,eAAA;EACA,WAAA;EACA,kBAAA;A9CgoGF;AKnoGE;EyCJF;IAWE,qBAAA;IACA,eAAA;E9CgoGA;AACF;;A8C5nGA;EAEC,cAAA;EACA,gIAAA;EACA,iBAAA;EACA,sBAAA;EACA,yBAAA;EACA,gBAAA;EACA,kBAAA;A9C8nGD;A8C5nGC;EAEC,mBAAA;A9C8nGF;A8C5nGE;EAHA,mBAAA;A9CkoGF;A8CznGE;EAEC,cAAA;A9C0nGH;AK7pGE;EyCaF;IA4BE,iBAAA;E9CwnGA;AACF;;A8CpnGA;EACC,mBAAA;EACA,gIAAA;EACA,mBAAA;EACA,gBAAA;A9CunGD;;A8CpnGA;EACC,8BAAA;A9CunGD;;A8CnnGA;EAEC,cAAA;A9CqnGD;A8CnnGC;EACC,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,kBAAA;A9CqnGF;A8ClnGC;EACC,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,YAAA;EACA,qBAAA;EACA,WAAA;A9ConGF;AKhsGE;EyCiFA;IACC,gBAAA;IACA,iBAAA;IACA,YAAA;IACA,WAAA;E9CknGD;AACF;;AK9sGE;EyC0GG;IACC,kBAAA;IACA,iBAAA;IACA,aAAA;IACA,QAAA;E9CwmGJ;E8CtmGI;IACC,aAAA;E9CwmGL;E8CrmGI;IACC,4BAAA;E9CumGL;E8CjmGC;IACC,uBAAA;E9CmmGF;E8CjmGE;IACC,8BAAA;E9CmmGH;E8CjmGG;IACC,6BAAA;E9CmmGJ;E8C/lGE;IACC,eAAA;E9CimGH;E8C5lGG;IACC,aAAA;E9C8lGJ;E8C3lGG;IACC,kBAAA;IACA,MAAA;E9C6lGJ;E8C1lGG;IACC,kBAAA;IACA,cAAA;IACA,iBAAA;E9C4lGJ;E8C1lGI;IAGC,kBAAA;IACA,mBAAA;IACA,mBAAA;E9C0lGL;E8C/kGE;IACC,eAAA;IACA,6BAAA;E9CilGH;E8C5kGA;IACC,uBAAA;E9C8kGD;AACF;A+CpxGA;EACC,cAAA;EACA,oBAAA;A/CsxGD;A+ClxGC;EACC,iBAAA;A/CoxGF;AKxwGE;E0CPA;IACC,gBAAA;E/CkxGD;AACF;;A+C7wGA;EACC,iBAAA;EACA,cAAA;EACA,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,6BAAA;A/CgxGD;A+C9wGC;EACC,yBAAA;EACA,iBAAA;A/CgxGF;A+C7wGC;EAEC,gBAAA;A/C+wGF;AKpvGE;E0C1CF;IAmBE,aAAA;IACA,mBAAA;E/C+wGA;E+C7wGA;IACC,kBAAA;E/C+wGD;E+C5wGA;;IAEC,mBAAA;IACA,iBAAA;E/C8wGD;E+C3wGA;IACC,iBAAA;E/C6wGD;AACF;A+C7vGE;EACC,cAAA;A/CwwGH;A+CtwGG;EACC,cAAA;A/CwwGJ;A+CpwGG;EACC,WAAA;A/CswGJ;;AgDr1GA;EACC,gCAAA;EACA,oBAAA;EACA,mBAAA;AhDw1GD;;AgDr1GA;EACC,mBAAA;EACA,iBAAA;EACA,gBAAA;AhDw1GD;;AgDr1GA;EACC,mBAAA;EACA,oBAAA;EACA,gBAAA;AhDw1GD;;AiDn2GA;EACC,mBAAA;AjDs2GD;;AiDl2GA;EACC,WAAA;AjDq2GD;AiDn2GC;EACC,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;AjDq2GF;AiDn2GE;EACC,cAAA;AjDq2GH;;AkDz3GA;EAEC,cAAA;EACA,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,yBAAA;AlD23GD;;AGlpGA;E+C/OA;EAGC;ElD83GD;AAhlGA;AkDzSC;EACC,mBAAA;EACA,6BAAA;AlD23GF;AkDz3GE;EACC,cAAA;AlD23GH;AkDx3GE;EACC,cAAA;AlD03GH;AkDv3GE;EACC,mBAAA;AlDy3GH;;AkDp3GA;EACC,eAAA;AlDu3GD;;AGnqGA;E+CrNA;EACC;ElDu3GD;AAjmGA;;AkDnRA;EACC,gBAAA;EACA,gBAAA;AlDu3GD;;AkDp3GA;;EAAA;AAIA;EAEC,gIAAA;AlDs3GD;;AkDj3GC;EACC,qBAAA;AlDo3GF;AkDh3GC;EAEC,yBAAA;EACA,0BAAA;AlDi3GF;AkDx2GA;EAEC,cAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;EACA,cAAA;AlDy2GD;AkDv2GC;EACC,qBAAA;AlDy2GF;AkDt2GC;EACC,mBAAA;AlDw2GF;AkDt2GE;EAEC,cAAA;AlDu2GH;AkDp2GE;EACC,mBAAA;AlDs2GH;;AkDh2GA;EACC,gBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gCAAA;AlDm2GD;;AkDh2GA;EACC,oCAAA;AlDm2GD;;AkDh2GA;EACC,iBAAA;EACA,oBAAA;EACA,iBAAA;EACA,iBAAA;EACA,6BAAA;EACA,oCAAA;EACA,aAAA;EACA,qCAAA;EACA,gBAAA;AlDm2GD;AkDj2GC;;EAEC,yBAAA;EACA,iBAAA;AlDm2GF;AkDh2GC;EACC,mBAAA;AlDk2GF;AkD/1GC;;;;EAIC,cAAA;AlDi2GF;AK38GE;E6CgHA;IACC,cAAA;ElDi2GD;EkD91GA;;IAEC,gBAAA;ElDg2GD;AACF;;AkD51GA;;EAAA;AAIA;EAEC,kBAAA;AlD61GD;AkDt1GC;EACC,cAAA;EACA,WAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;AlDw1GF;;AkDp1GA;;EAAA;AAIA;EACC,kBAAA;EACA,eAAA;EACA,6BAAA;AlDs1GD;AKz+GE;E6CgJF;EAGC;ElDs1GD;AAl4FA;AKnkBE;E6C4GF;EAGC;ElDs1GD;AA53FA;AkDxdC;EACC,gBAAA;AlDs1GF;AkDh1GE;EACC,qBAAA;EACA,mBAAA;EACA,kBAAA;AlDk1GH;AkD/0GE;EACC,qBAAA;EACA,kBAAA;EACA,8BAAA;AlDi1GH;AKt/GE;E6CkKA;EAGC;ElDi1GH;AA/4FA;AKnkBE;E6C8HA;EAGC;ElDi1GH;AAz4FA;AkDlcE;EACC,gIAAA;EACA,iBAAA;EACA,eAAA;AlD60GH;AkD10GE;EACC,eAAA;EACA,gBAAA;EACA,mBAAA;AlD40GH;;AmD1hHA;EACC,eAAA;AnD6hHD;;AG/yGA;EgD/OA;EACC;EnD6hHD;AA7uGA;;AmD7SA;EAEC,gBAAA;AnD6hHD;;AmD1hHA;EACC,gBAAA;AnD6hHD;;AmD1hHA;EACC,gCAAA;EACA,oBAAA;AnD6hHD;;AmDhhHG;EACC,iBAAA;AnD2hHJ;AmDjhHE;EACC,gBAAA;AnD2hHH;AmDrhHE;;;;;;EAEC,cAAA;AnD2hHH;AmDnhHG;EACC,kBAAA;AnDuhHJ;;AmDjhHA;EACC,gBAAA;EACA,kBAAA;EACA,gBAAA;AnDohHD;;AGv2GA;EgDhLA;EAEC;EnDqhHD;AAryGA;;AoDjTA;EACC,iBAAA;EACA,mBAAA;ApDylHD;;AqD3lHA;EACC,gBAAA;ArD8lHD;;AsD/lHA;;EAAA;AAKC;EACC,gBAAA;EACA,mBAAA;AtDgmHF;AsD9lHE;EACC,aAAA;AtDgmHH;AsD7lHE;EACC,gBAAA;AtD+lHH;AsDzlHE;EACC,kBAAA;EACA,kBAAA;EACA,SAAA;AtD2lHH;AsDxlHE;EACC,qBAAA;EACA,kBAAA;AtD0lHH;AsDvlHE;EACC,uBAAA;AtDylHH;;AsDnlHA;;EAAA;AAIA;EAEC,kBAAA;EACA,sBAAA;AtDqlHD;AGn5GA;EmDrMA;EAEC;EtDslHD;AAj1GA;AsDvQA;EAEC,kBAAA;EACA,sBAAA;AtDqlHD;AGn5GA;EmDrMA;EAEC;EtDslHD;AAj1GA;;AsDjQA;EACC,aAAA;EACA,8BAAA;AtDqlHD;AsDjlHE;EACC,gIAAA;EACA,eAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;AtDmlHH;;AsD9kHA,8BAAA;AACA;EACC,iBAAA;AtDilHD;;AsD9kHA;;EAAA;AAGA;EACC,eAAA;EACA,gBAAA;AtDilHD;AsD/kHC;EACC,gBAAA;EACA,mBAAA;AtDilHF;;AsD5kHA;EACC,gBAAA;EACA,eAAA;AtD+kHD;AsD7kHC;EACC,gBAAA;EACA,mBAAA;AtD+kHF;;AK9oHE;EiDoEF;IAGE,mBAAA;EtD6kHA;AACF;;AsD1kHA;;EAAA;AAKC;EACC,gBAAA;EACA,kBAAA;AtD2kHF;AK7pHE;EiDgFD;IAKE,gBAAA;IACA,gBAAA;EtD4kHD;AACF;AsD1kHE;EACC,gIAAA;EACA,mBAAA;EACA,iBAAA;EACA,aAAA;EACA,qBAAA;EACA,sBAAA;AtD4kHH;AsDvkHC;EACC,cAAA;EACA,eAAA;EACA,oBAAA;AtDykHF;AsDvkHE;EACC,iBAAA;AtDykHH;AKnrHE;EiD8EF;IAkCE,qBAAA;EtDukHA;EsDrkHA;IACC,kBAAA;EtDukHD;AACF;;AsDnkHA;EACC,mBAAA;EACA,gBAAA;AtDskHD;;AsDnkHA;EACC,cAAA;AtDskHD;;AsDnkHA;EACC,aAAA;AtDskHD;;AsDnkHA;EAEC,gIAAA;AtDskHD;;AsDlkHA;EACC,kBAAA;EACA,mBAAA;AtDqkHD;AsDnkHC;EACC,gBAAA;EACA,mBAAA;AtDqkHF;AsDlkHC;EACC,SAAA;AtDokHF;;AsDhkHA;EACC,qBAAA;AtDmkHD;;AsD/jHA;EAEC,gBAAA;EACA,mBAAA;AtDkkHD;;AsD/jHA;EACC,gBAAA;AtDkkHD;;AsD/jHA;EACC,gBAAA;EACA,mBAAA;AtDkkHD;AsDhkHC;EACC,aAAA;AtDkkHF;AsD/jHC;EACC,gBAAA;AtDikHF;AsD/jHE;EACC,mBAAA;AtDikHH;;AsD5jHA;EACC,gBAAA;AtD+jHD;AsD7jHC;EACC,mBAAA;AtD+jHF;;AsD3jHA;EACC,aAAA;EACA,eAAA;AtD8jHD;AsD5jHC;EACC,gBAAA;AtD8jHF;AsD3jHC;EACC,mBAAA;AtD6jHF;AsD1jHC;;EAEC,WAAA;AtD4jHF;AsDzjHC;;EAEC,aAAA;EACA,YAAA;AtD2jHF;AKtxHE;EiDwND;;IAME,gBAAA;EtD6jHD;AACF;AsD1jHC;EAEC,eAAA;EACA,mBAAA;AtD4jHF;;AsDxjHA;EACC,mBAAA;AtD2jHD;AsDzjHC;EACC,aAAA;AtD2jHF;AsDxjHC;EACC,gBAAA;AtD0jHF;AsDvjHC;EAKC,cAAA;EACA,mBAAA;EACA,mBAAA;EACA,WAAA;EACA,gBAAA;AtDyjHF;AsDtjHC;EACC,aAAA;AtDwjHF;AKnzHE;EiDgQA;IACC,kBAAA;EtDsjHD;EsDnjHA;IAEC,cAAA;EtDojHD;AACF;;AuDj1HA;EACC,aAAA;EACA,8BAAA;EACA,kBAAA;EACA,QAAA;EACA,iBAAA;EACA,mBAAA;AvDo1HD;AK10HE;EkDhBF;IASE,aAAA;EvDq1HA;AACF;AuDl1HC;EACC,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,6BAAA;EACA,YAAA;EACA,cAAA;AvDo1HF;AuDl1HE;EACC,aAAA;EACA,mBAAA;AvDo1HH;AuDl1HG;EACC,gBAAA;AvDo1HJ;AuDh1HG;EACC,kBAAA;EACA,SAAA;AvDk1HJ;AuDt0HI;EACC,aAAA;AvD20HL;AuDx0HI;EACC,aAAA;AvD00HL;AuDx0HK;EACC,uDAAA;EACA,wBAAA;AvD00HN;AuDl0HC;EACC,WAAA;EACA,YAAA;EACA,yBAAA;AvDo0HF;AuDl0HE;EACC,gBAAA;AvDo0HH;;AuD/zHA;EACC,kBAAA;EACA,QAAA;EACA,QAAA;EACA,cAAA;EACA,kBAAA;EACA,iBAAA;EACA,aAAA;EACA,gBAAA;AvDk0HD;AuD/zHC;EACC,eAAA;EACA,kBAAA;EACA,UAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EAEA,8BAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,2BAAA;AvDg0HF;AuD9zHE;EAhBD;IAiBE,iCAAA;EvDi0HD;AACF;AKx5HE;EkDqED;IAqBE,aAAA;IACA,YAAA;IACA,kBAAA;IACA,gBAAA;IACA,6BAAA;EvDk0HD;EuDh0HC;IACC,eAAA;IACA,yCAAA;EvDk0HF;EuD/zHC;IACC,SAAA;EvDi0HF;EGjtHD;IoDjHE;IACC;IvDi0HF;EAppHF;EuD1KG;IACC,0BAAA;EvDg0HF;EGptHD;IoD7GE;IACC;IvDg0HF;EAvpHF;EuDtKG;IACC,yBAAA;EvD+zHF;EuDzzHD;IAGE,WAAA;IACA,eAAA;IACA,UAAA;EvD2zHD;AANF;AuDlzHE;EACC,kBAAA;EACA,mBAAA;EACA,UAAA;EACA,wBAAA;AvD2zHH;AK37HE;EkDuIC;IACC,sCAAA;EvDuzHF;AACF;AK17HE;EkDoDF;IAoFE,kBAAA;IACA,iBAAA;EvDszHA;EuDnzHA;IACC,mBAAA;IACA,UAAA;IACA,kBAAA;IACA,UAAA;IACA,6BAAA;IACA,iBAAA;IACA,eAAA;EvDqzHD;EuD5yHA;IACC,aAAA;EvDizHD;EuD1yHC;IACC,YAAA;EvD+yHF;AACF;AuD1yHC;EACC,aAAA;EACA,2BAAA;EACA,eAAA;EACA,gBAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;AvD4yHF;AKr+HE;EkDiLD;IAWE,qBAAA;EvD6yHD;EuD3yHC;IACC,eAAA;EvD6yHF;AACF;AuD1yHE;EACC,cAAA;EACA,kBAAA;EACA,WAAA;AvD4yHH;AK5+HE;EkD6LA;IAME,SAAA;IACA,cAAA;EvD6yHF;EuD3yHE;IACC,eAAA;EvD6yHH;AACF;AuDxyHE;EACC,aAAA;EACA,wBAAA;EACA,WAAA;EACA,UAAA;EACA,uBAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;EACA,YAAA;AvD0yHH;AuDxyHG;EACC,0BAAA;AvD0yHJ;AKzgIE;EkDmNA;IAgBE,aAAA;EvD0yHF;AACF;AuDxyHG;;EAEC,YAAA;EACA,aAAA;EACA,mBAAA;AvD0yHJ;AuDxyHI;;EACC,gBAAA;AvD2yHL;AuDvyHG;EACC,aAAA;AvDyyHJ;AuDnyHI;EACC,aAAA;AvDqyHL;AuDlyHI;EACC,aAAA;AvDoyHL;AuD9xHE;EAEC,kBAAA;AvD+xHH;AuD5xHI;EALF;IAMG,yBAAA;EvD+xHH;AACF;AKniIE;EkD6PA;IAWE,OAAA;IACA,SAAA;IACA,sBAAA;IACA,kBAAA;IACA,SAAA;IACA,gBAAA;IACA,cAAA;EvD+xHF;EuD7xHE;IAEC,WAAA;IACA,cAAA;IACA,kBAAA;IACA,QAAA;IACA,UAAA;IACA,UAAA;IACA,mBAAA;IACA,iCAAA;IACA,4BAAA;EvD8xHH;EuD3xHE;IACC,SAAA;IACA,iCAAA;EvD6xHH;EuD1xHE;IACC,mBAAA;EvD4xHH;EuDzxHE;IAEC,eAAA;IACA,OAAA;IAEA,eAAA;IACA,WAAA;EvDyxHH;EuDvxHG;IAGC,eAAA;IACA,UAAA;IAEA,eAAA;IACA,WAAA;EvDsxHJ;EuD7xHG;IAGC,eAAA;IACA,UAAA;IAEA,eAAA;IACA,WAAA;EvDsxHJ;EuDlxHE;IAEC,eAAA;IACA,QAAA;IAEA,eAAA;IACA,UAAA;EvDkxHH;EuDhxHG;IAGC,eAAA;IACA,UAAA;IAEA,eAAA;IACA,WAAA;EvD+wHJ;EuDtxHG;IAGC,eAAA;IACA,UAAA;IAEA,eAAA;IACA,WAAA;EvD+wHJ;AACF;AuDxwHC;EACC,cAAA;AvD0wHF;AK3lIE;EkDoVD;IAGE,mBAAA;IACA,kBAAA;EvDwwHD;EuDrwHC;IACC,aAAA;EvDuwHF;EuDrwHE;IACC,kBAAA;IACA,mBAAA;EvDuwHH;EuDrwHG;IACC,iBAAA;EvDuwHJ;AACF;AuDhwHC;EACC,cAAA;EACA,gIAAA;EACA,mBAAA;EACA,mBAAA;EACA,eAAA;EACA,qBAAA;AvDkwHF;AKnnIE;EkD2WD;IASE,cAAA;IACA,gIAAA;IACA,kBAAA;IACA,mBAAA;EvDmwHD;AACF;AuDjwHE;EACC,aAAA;AvDmwHH;AuDhwHE;EAGC,cAAA;AvDgwHH;AuD7vHE;EACC,0BAAA;EACA,6BAAA;AvD+vHH;AuD5vHE;EACC,kBAAA;EACA,cAAA;EACA,iBAAA;EACA,8BAAA;AvD8vHH;AuD1vHC;;EAEC,0BAAA;EACA,4BAAA;AvD4vHF;AuD1vHE;;EACC,0BAAA;EACA,6BAAA;AvD6vHH;AuDxvHC;EACC,SAAA;EACA,UAAA;EACA,gBAAA;EACA,iBAAA;EACA,yBAAA;AvD0vHF;AuDxvHE;EACC,YAAA;AvD0vHH;AK/pIE;EkD4aC;IACC,UAAA;EvDsvHF;AACF;AK1qIE;EkD2bE;IACC,gBAAA;EvDkvHH;AACF;AuD9uHG;EACC,kBAAA;EACA,cAAA;EACA,mBAAA;EACA,kBAAA;AvDgvHJ;AK/qIE;EkD2bC;IAOE,eAAA;IACA,kBAAA;EvDivHH;AACF;AuDzuHE;EACC,aAAA;AvD2uHH;AKxrIE;EkDkdC;IACC,qBAAA;IACA,YAAA;EvDyuHF;EuDtuHC;IACC,aAAA;EvDwuHF;AACF;AuDnuHC;EACC,cAAA;EACA,WAAA;EACA,eAAA;EACA,oBAAA;EACA,gBAAA;AvDquHF;AuDnuHE;EACC,qBAAA;AvDquHH;;AKjtIE;EkDofD;IACC,eAAA;IACA,eAAA;IACA,WAAA;EvDiuHA;AACF;AuD7tHA;EAEC;IACC,UAAA;EvD8tHA;EuD3tHD;IACC,UAAA;EvD6tHA;AACF;AwDpvIA;EACC,gBAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,gIAAA;AxDsvID;;AwDnvIA;EACC,aAAA;EACA,uBAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;AxDsvID;AwDpvIC;EACC,eAAA;EAEA,cAAA;AxDqvIF;AwDnvIE;EACC,kBAAA;EACA,cAAA;AxDqvIH;AwDnvIG;EAGC,cAAA;AxDmvIJ;AwDhvIG;EACC,0BAAA;EACA,6BAAA;EACA,8BAAA;EACA,cAAA;AxDkvIJ;AwD3uIK;EACC,aAAA;AxD6uIN;AwDtuIK;EACC,UAAA;AxDwuIN;AwDluIE;EACC,sBAAA;EACA,aAAA;AxDouIH;AwDluIG;EACC,qBAAA;AxDouIJ;AwDjuIG;EARD;IASE,+BAAA;ExDouIF;AACF;AwDhuIC;;EAEC,aAAA;AxDkuIF;;AyD3yIA,6BAAA;AAMC;EAFA,cAAA;AzDgzID;AyD9yIC;EAEC,qBAAA;AzD4yIF;AyD1yIE;EACC,cAAA;EACA,0BAAA;EACA,6BAAA;AzD4yIH;AyDzyIE;EACC,cAAA;AzD2yIH;AyDxyIE;EACC,cAAA;AzD0yIH;AyDpyIE;EACC,eAAA;EACA,gBAAA;AzDsyIH;AyDnyIE;;EAEC,aAAA;EACA,sBAAA;AzDqyIH;AyDlyIE;EACC,kBAAA;AzDoyIH;AKryIE;EoDbD;IAkBE,aAAA;IACA,uBAAA;IACA,eAAA;EzDoyID;EyDlyIC;IAEC,cAAA;IACA,sBAAA;IACA,mBAAA;IACA,2BAAA;EzDoyIF;EyDjyIC;IACC,iBAAA;EzDmyIF;AACF;AyD/xIC;EACC,qBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;AzDiyIF;AyD9xIC;EAEC,SAAA;EACA,iBAAA;AzDgyIF;AyD7xIC;EAEC,SAAA;EACA,gBAAA;AzD+xIF;;AyD1xIA;EAEC,iBAAA;AzD4xID;AKlzIE;EoDoBF;IAKE,iBAAA;EzD6xIA;AACF;AyDzxIC;EACC,gBAAA;EACA,cAAA;AzD2xIF;AyDxxIC;EACC,qBAAA;EACA,gIAAA;EACA,iBAAA;EACA,gBAAA;EACA,gBAAA;AzD0xIF;AKl0IE;EoDmCD;IAOE,kBAAA;EzD4xID;AACF;AK32IE;EoDkFD;IAEE,8BAAA;EzD2xID;AACF;AyDxxIC;EAEC,gBAAA;EACA,mBAAA;AzD0xIF;AyDxxIE;;EACC,aAAA;AzD2xIH;AyDxxIE;;EACC,gBAAA;AzD2xIH;;AyDrxIA;EAGC,6BAAA;EACA,iBAAA;EACA,iBAAA;AzDuxID;AKh2IE;EoDoEF;IAQE,iBAAA;EzDyxIA;AACF;AyDpxIC;EACC,iBAAA;AzDuxIF;AyDrxIE;EACC,cAAA;AzDwxIH;AyDnxIG;EAGC,cAAA;AzDwxIJ;AyDlxIG;EAGC,WAAA;AzDuxIJ;AyDlxIC;EACC,cAAA;EACA,gIAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;AzDqxIF;AyDnxIE;;EACC,0BAAA;AzDsxIH;AyDnxIE;;EACC,6BAAA;AzDsxIH;AyDnxIE;;EACC,cAAA;AzDsxIH;AyDnxIE;;EACC,eAAA;AzDsxIH;AyDnxIE;;EACC,iBAAA;AzDsxIH;AyDnxIE;;EACC,kBAAA;AzDsxIH;AKt6IE;EoDsJA;;IACC,aAAA;IACA,eAAA;EzDoxID;EyDjxIA;;IACC,aAAA;EzDoxID;EyDlxIC;;;IAEC,qBAAA;IACA,cAAA;EzDqxIF;AACF;AK39IE;EoD4MA;;IACC,aAAA;EzDmxID;AACF;;AyD9wIA;EACC,iBAAA;EACA,iBAAA;AzDixID;AK57IE;EoDyKF;IAKE,4BAAA;EzDkxIA;AACF;AyDhxIC;EACC,kBAAA;AzDkxIF;;A0DlgJA;EAEC,iBAAA;EACA,oBAAA;EACA,cAAA;EACA,mBAAA;EACA,gIAAA;A1DogJD;AKx9IE;EqDlDF;IASE,aAAA;IACA,qCAAA;IACA,gBAAA;E1DqgJA;AACF;AKv8IE;EqD1EF;IAeE,qCAAA;E1DsgJA;AACF;AKlgJE;EqDpBF;IAmBE,gBAAA;E1DugJA;AACF;A0DngJE;EACC,gBAAA;EACA,yBAAA;A1DqgJH;A0DlgJE;EACC,gBAAA;A1DogJH;A0DhgJC;EACC,WAAA;EACA,cAAA;EACA,WAAA;A1DkgJF;;A0D5/IC;EAMC,gBAAA;EACA,gBAAA;A1D+/IF;A0D5/IC;EACC,kBAAA;A1D8/IF;A0D3/IC;EACC,mBAAA;A1D6/IF;A0D9+IC;EACC,eAAA;A1Dy/IF;A0Dt/IC;EACC,qBAAA;EACA,UAAA;A1Dw/IF;A0Dt/IE;EACC,gBAAA;A1Dw/IH;A0Dr/IE;EAEC,iBAAA;A1Ds/IH;A0Dn/IE;EACC,aAAA;A1Dq/IH;A0Dj/IC;EAEC,0BAAA;EACA,4BAAA;EACA,mCAAA;A1Dm/IF;A0D3+IE;EAHC,cAAA;A1Dq/IH;A0Dl/IE;EAEC,6BAAA;A1Dg/IH;;A0D1+IA;EACC,aAAA;EACA,eAAA;EACA,YAAA;EACA,6BAAA;A1D6+ID;;AK1kJE;EqDyFF;EAIC;E1D6+ID;AAn+HA;;AKnkBE;EqDqDF;EAIC;E1D6+ID;AA79HA;A0D9gBC;EACC,WAAA;EACA,gBAAA;EACA,gBAAA;A1D6+IF;A0D1+IC;EACC,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;A1D4+IF;A0Dz+IC;EACC,gBAAA;EACA,iBAAA;A1D2+IF;;A0Dr+IC;EACC,kBAAA;EACA,wBAAA;EACA,mBAAA;A1Dw+IF;A0Dr+IC;EACC,cAAA;EACA,mBAAA;A1Du+IF;;A0Dn+IA;EACC,aAAA;A1Ds+ID;;AE7gJA,0FAAA;AyDpHA;EACC,SAAA;EACA,8BAAA;EACA,6BAAA;EACA,qBAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,UAAA;EACA,6BAAA;EACA,UAAA;EACA,4BAAA;EACA,kBAAA;A3DqoJD;;A2DloJA;EACC,yBAAA;EACA,kBAAA;EACA,0CAAA;EACA,qBAAA;EACA,uBAAA;EACA,eAAA;EACA,cAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,YAAA;EACA,SAAA;EACA,mBAAA;EACA,uBAAA;EACA,qBAAA;EACA,QAAA;EACA,WAAA;EACA,eAAA;A3DqoJD;;A2DloJA,qDAAA;AACA;EACC,UAAA;A3DqoJD;A4DvqJC;EAEC,WAAA;A5D6qJF;A4DtqJC;EAEC,cAAA;A5D4qJF;A4DrqJC;EAEC,cAAA;A5D2qJF;A4DpqJC;EAEC,cAAA;A5D0qJF;A4DnqJC;EAEC,cAAA;A5DyqJF;A4DlqJC;EAEC,cAAA;A5DwqJF;A4DjqJC;EAEC,cAAA;A5DuqJF;A4DhqJC;EAEC,cAAA;A5DsqJF;A4D/pJC;EAEC,cAAA;A5DqqJF;A4D9pJC;EAEC,WAAA;A5DoqJF;;A4D5pJC;;;;;;;;EAQC,mBAAA;A5D+pJF;A4DzpJC;EAEC,sBAAA;A5D+pJF;A4DxpJC;EAEC,yBAAA;A5D8pJF;A4DvpJC;EAEC,yBAAA;A5D6pJF;A4DtpJC;EAEC,yBAAA;A5D4pJF;A4DrpJC;EAEC,yBAAA;A5D2pJF;A4DppJC;EAEC,yBAAA;A5D0pJF;A4DnpJC;EAEC,yBAAA;A5DypJF;A4DlpJC;EAEC,yBAAA;A5DwpJF;A4DjpJC;EAEC,yBAAA;A5DupJF;A4DhpJC;EAEC,yBAAA;A5DspJF;A4D/oJC;EAEC,sBAAA;A5DqpJF;;A4D9oJC;EAGG,WAAA;A5D+oJJ;A4DxnJE;EAMC;A5DgoJH;;A4D1nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A4D7nJA;EACC,qDAAA;A5DgoJD;;A6Dh5JA;EAGC,gBAAA;A7Dm5JD;;A6Dh5JA;;;;;;;;;;;EAWC,eAAA;A7Dm5JD;A8Dl6JE;;;;;;;;;;;EAWC,WAAA;A9Dw6JH;A8Dr6JE;;;;EAIC,UAAA;A9Du6JH;A8Dp6JE;EACC,gBAAA;A9Ds6JH;AK76JE;EyDaE;;IAEC,sBAAA;E9Dm6JH;AACF;A8D/5JE;EACC,cAAA;A9Di6JH;A8D75JC;EACC,cAAA;A9D+5JF;A8D55JC;EACC,eAAA;A9D85JF","file":"ie.css"} \ No newline at end of file diff --git a/src/wp-content/themes/twentytwentyone/assets/sass/04-elements/misc.scss b/src/wp-content/themes/twentytwentyone/assets/sass/04-elements/misc.scss index 9fe7247a2613f..b5e65a1c86107 100644 --- a/src/wp-content/themes/twentytwentyone/assets/sass/04-elements/misc.scss +++ b/src/wp-content/themes/twentytwentyone/assets/sass/04-elements/misc.scss @@ -15,3 +15,7 @@ pre { white-space: pre; overflow-x: auto; } + +.entry-content > code { + display: block; +} diff --git a/src/wp-content/themes/twentytwentyone/style-rtl.css b/src/wp-content/themes/twentytwentyone/style-rtl.css index 66d5cbad35d55..32d227633b05d 100644 --- a/src/wp-content/themes/twentytwentyone/style-rtl.css +++ b/src/wp-content/themes/twentytwentyone/style-rtl.css @@ -1555,6 +1555,10 @@ pre { overflow-x: auto; } +.entry-content > code { + display: block; +} + /* * text-underline-offset doesn't work in Chrome at all 👎 * But looks nice in Safari/Firefox, so let's keep it and diff --git a/src/wp-content/themes/twentytwentyone/style.css b/src/wp-content/themes/twentytwentyone/style.css index 11a1355a02815..8500e2d240d95 100644 --- a/src/wp-content/themes/twentytwentyone/style.css +++ b/src/wp-content/themes/twentytwentyone/style.css @@ -1565,6 +1565,10 @@ pre { overflow-x: auto; } +.entry-content > code { + display: block; +} + /* * text-underline-offset doesn't work in Chrome at all 👎 * But looks nice in Safari/Firefox, so let's keep it and diff --git a/src/wp-content/themes/twentytwentyone/style.css.map b/src/wp-content/themes/twentytwentyone/style.css.map index 6a10bbf256cae..66c4e95b5dbd7 100644 --- a/src/wp-content/themes/twentytwentyone/style.css.map +++ b/src/wp-content/themes/twentytwentyone/style.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["assets/sass/01-settings/file-header.scss","assets/sass/style.scss","assets/sass/01-settings/global.scss","assets/sass/03-generic/normalize.scss","assets/sass/03-generic/breakpoints.scss","assets/sass/03-generic/vertical-margins.scss","assets/sass/03-generic/reset.scss","assets/sass/03-generic/clearings.scss","assets/sass/04-elements/blockquote.scss","assets/sass/04-elements/forms.scss","assets/sass/04-elements/media.scss","assets/sass/04-elements/misc.scss","assets/sass/04-elements/links.scss","assets/sass/05-blocks/audio/_style.scss","assets/sass/05-blocks/button/_style.scss","assets/sass/02-tools/mixins.scss","assets/sass/05-blocks/code/_style.scss","assets/sass/05-blocks/columns/_style.scss","assets/sass/05-blocks/cover/_style.scss","assets/sass/05-blocks/file/_style.scss","assets/sass/05-blocks/gallery/_style.scss","assets/sass/05-blocks/group/_style.scss","assets/sass/05-blocks/heading/_style.scss","assets/sass/05-blocks/image/_style.scss","assets/sass/05-blocks/latest-comments/_style.scss","assets/sass/05-blocks/latest-posts/_style.scss","assets/sass/05-blocks/legacy/_style.scss","assets/sass/05-blocks/list/_style.scss","assets/sass/05-blocks/media-text/_style.scss","assets/sass/05-blocks/navigation/_style.scss","assets/sass/05-blocks/paragraph/_style.scss","assets/sass/05-blocks/preformatted/_style.scss","assets/sass/05-blocks/pullquote/_style.scss","assets/sass/05-blocks/query-loop/_style.scss","assets/sass/05-blocks/quote/_style.scss","assets/sass/05-blocks/rss/_style.scss","assets/sass/05-blocks/search/_style.scss","assets/sass/05-blocks/separator/_style.scss","assets/sass/05-blocks/social-icons/_style.scss","assets/sass/05-blocks/table/_style.scss","assets/sass/05-blocks/tag-clould/_style.scss","assets/sass/05-blocks/verse/_style.scss","assets/sass/05-blocks/video/_style.scss","assets/sass/05-blocks/utilities/_font-sizes.scss","assets/sass/05-blocks/utilities/_style.scss","assets/sass/06-components/header.scss","assets/sass/06-components/footer.scss","assets/sass/06-components/single.scss","assets/sass/06-components/posts-and-pages.scss","assets/sass/06-components/entry.scss","assets/sass/06-components/archives.scss","assets/sass/06-components/404.scss","assets/sass/06-components/search.scss","assets/sass/06-components/comments.scss","assets/sass/06-components/navigation.scss","assets/sass/06-components/footer-navigation.scss","assets/sass/06-components/pagination.scss","assets/sass/06-components/widgets.scss","assets/sass/07-utilities/a11y.scss","assets/sass/07-utilities/color-palette.scss","assets/sass/07-utilities/measure.scss","assets/sass/07-utilities/ie.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;ACEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EA;AC9EA;AAKA;AAEC;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;E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AAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAOD;EACC;;AAEA;EACC;;;AAKH;EACC;EACA;;;AAGD;AAAA;AAGC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAKA;EAEC;AAAA;IAEC;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;AAAA;IACC;;EAGD;AAAA;IACC;;EAMD;IACC;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAEA;IACC;;EAKH;IACC;;EAEA;IACC;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAEA;IACC;;EAID;IACC;IACA;;;AAMJ;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAGA;EAEC;IACC;IACA;IACA;IACA;IACA;IACA;;EAEA;IACC;;EAIF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;AAKA;EACC;;AAGD;EACC;;AAGD;EAEC;;AAGD;EAEC;EACA;EACA;;;AAKH;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;;AL7RA;EK4RD;IAGE;;;;ACrUH;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;AAAA;AA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;;AAOA;AAAA;AAAA;EAEC;EACA;EACA;;;AClEH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYC;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAIF;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AC/DD;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKF;AAAA;EAEC;EACA;;AAGA;AAAA;EACC;;;AAKF;AAAA;EAEC;;;AAGD;EACC;;;AnBlBC;EmByBA;AAAA;IAGE;;;AnBlCF;EmB+BA;AAAA;IAME;IACA;;;;AC1DJ;EACC;;AAEA;EACC;;AAGD;EACC;AAEA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;;;ACnCF;EACC;;AAGA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;AAKF;EAUC;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAID;EACC;EACA;EACA;;AAID;EACC;EACA;EACA;;AAEA;EAEC;;AAKF;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;EACA;;AAEA;EAEC;EACA;;AAKF;EACC;EACA;;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AAEA;AAAA;EACC;EACA;;AAIF;EAEC;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAMF;EAEE;IACC;;EADD;IACC;;EADD;IACC;;EADD;IACC;;EADD;IACC;;;AASJ;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;;AC/KH;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAID;EACC;;;ACrDD;AAAA;EAEC;EACA;EACA;;AAGA;AAAA;EACC;EACA;;AAGD;AAAA;EACC;EACA;EACA;;;AAIF;EACC;;AAEA;EACC;;;AAIF;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;EACA;;;ACxCA;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AxB0BA;EwB3BD;IAIE;;;AAGD;EACC;EACA;;AxBMD;EwBRA;IAKE;IACA;;;AAGD;EACC;;AAGD;EACC;;AxBNF;EwBYD;IAEE;IACA;;;AAKF;EACC;;;AC5CA;EACC;EACA;EACA;;AAIF;EACC;;AAQC;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAOF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAQH;EACC;;AAEA;EACC;;AAWA;EAEC;;AAGD;EACC;EACA;;AAKH;EACC;;;ACnGH;EAEC;;AAGA;EACC;;AAID;EACC;;;ACXF;EACC;EACA;;;ACFD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAyCA;AAAA;AAAA;;AAvCA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;;AAMD;EACC;;AAKA;AAAA;EAEC;;AAIF;EAEC;;AAGD;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAEA;EAPD;IAQE;;;AAGD;EACC;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;;AAGD;EAEC;;AAEA;EACC;;;AC/GH;EACC;;A7BuBA;E6BxBD;IAIE;;;;ACNH;EACC;EACA;EACA;EACA;EACA;EACA;AA8CA;AAAA;AAAA;;AA5CA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;;AAIF;EAGC;;AAID;EAGC;;AAMD;EACC;EACA;EACA;;AAGA;EACC;;AAID;EACC;EACA;;AAIF;EACC;;AAEA;EACC;;AAKF;EAEC;EACA;AAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;A9BvGD;E8B6DD;IA8CE;;EAEA;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAIF;IACC;IACA;;;A9B5HF;E8BmIA;IACC;IACA;;EAEA;IACC;;EAIF;IACC;IACA;;;;AClKH;EACC;;AAEA;EACC;;AAID;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAMD;EACC;;AAEA;EACC;;AAKF;EAUC;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;EACA;EACA;;AAID;EACC;EACA;EACA;;AAEA;EAEC;;AAKF;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;EACA;;AAEA;EAEC;EACA;;;ACzGH;EACC;;AAIC;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAOD;EACC;EACA;;AAGD;EACC;;AAOF;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;AAGA;EACC;EACA;EACA;;AAIF;EACC;;AAGA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;;AAOL;EACC;;;ACpHD;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAKA;EACC;;AAGD;EACC;;AAOF;EACC;;AAKA;EAEC;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;;AAIF;EAIC;;;ACtDF;EACC;;AAKA;EACC;;AAGD;EAEC;;;ACdH;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EAEC;EACA;;AAGD;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAGD;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;EACC;;AAGD;AAAA;EACC;;;AAOF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAIF;EACC;;;AC9FD;EACC;EACA;;;ACJF;EACC;;;ACCA;EACC;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;;;ACXA;AAAA;EAEC;;AAGD;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;;AAGD;AAAA;EAEC;EACA;;AAGD;AAAA;AAAA;AAAA;EAIC;EACA;;AAGD;AAAA;EAEC;EACA;EAGA;;AAGD;AAAA;EAEC;EACA;EAGA;;;AClDF;AAEA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;AAEC;EACA;EAEA;;;AAKD;EACC;;;AxCEC;EwCID;AAEC;IACA;AAEA;IACA;IACA;;EAGD;IACC;;;AAIF;AAAA;AAAA;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAGA;EAEC;EACA;;;AAKD;EACC;;;AxC3CC;EwCiDD;AAEC;IACA;AAEA;IACA;;EAGD;IACC;;;AAKF;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAGA;EACC;;;AAQD;AAAA;AAAA;AAGA;EACC;;;AAUD;EACC;;;AAGD;EACC;;;AAID;EACC;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;AxChIC;EwC+HF;IAIE;;;;A3CxDF;A4CpGA;EAEC;EACA;EACA;EACA;;AAEA;EACC;;AzCiBA;EyCzBF;IAYE;;;AzCiDA;EyC7DF;IAgBE;;;;AAKF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AzCHA;EyCJF;IAWE;IACA;;;;AAKF;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EAGC;;AAGD;EAEC;;AzCnCD;EyCaF;IA4BE;;;;AAKF;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAID;EAEC;;AAEA;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AzC5EA;EyCiFA;IACC;IACA;IACA;IACA;;;;AzC3FD;EyC0GG;IACC;IACA;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;EAMJ;IACC;;EAEA;IACC;;EAEA;IACC;;EAIF;IACC;;EAKA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;IACA;;EAEA;IAGC;IACA;IACA;;EAWH;IACC;IACA;;EAKH;IACC;;;ACrMH;EACC;EACA;;AAIA;EACC;;A1CYA;E0CPA;IACC;;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;AAAA;EAEC;;A1C2BA;E0C1CF;IAmBE;IACA;;EAEA;IACC;;EAGD;AAAA;IAEC;IACA;;EAGD;IACC;;;AAIF;EACC;;AAEA;EAGC;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;;AAID;EACC;;;AC/EJ;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;ACXD;EACC;;;AAID;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;;ACpBH;EAEC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AAIA;AAAA;EAEC;;;AAKA;EACC;;AAID;EAEC;EACA;;AASF;EAEC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EAEC;;AAGD;EACC;;;AAMH;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEC;EACA;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;EAIC;;A7C1GA;E6CiFF;IA6BE;;EAEA;IACC;;EAGD;AAAA;IAEC;;;;AAKH;AAAA;AAAA;AAIA;EAEC;;AAOA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAIF;AAAA;AAAA;AAIA;EACC;EACA;EACA;;AAEA;EACC;;AAMA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AC9MH;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAaE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAUF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAQA;AAAA;AAAA;EACC;;;AAMJ;EACC;EACA;EACA;;;AClED;EACC;EACA;;;ACFD;EACC;;;ACDD;AAAA;AAAA;AAKC;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAMD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAMH;AAAA;AAAA;AAIA;AAAA;EAEC;EACA;;;AAGD;EACC;EACA;;AAIC;EACC;EACA;EACA;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;AAAA;AAAA;AAGA;EACC;EACA;;AAEA;EACC;EACA;;;AAKF;EACC;EACA;;AAEA;EACC;EACA;;;AjD/DA;EiDoEF;AAAA;IAGE;;;;AAIF;AAAA;AAAA;AAKC;EACC;EACA;;AjDlFA;EiDgFD;IAKE;IACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAKF;EACC;EACA;EACA;;AAEA;EACC;;AjD1GD;EiD8EF;IAkCE;;EAEA;IACC;;;;AAKH;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;;;AAID;AAAA;EAEC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EACC;;;AAKH;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;AAAA;EAEC;;AAGD;AAAA;EAEC;EACA;;AjD3NA;EiDwND;AAAA;IAME;;;AAIF;AAAA;EAEC;EACA;;;AAIF;EACC;;AAEA;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA;EACA;EACA;;AAGD;EACC;;AjD3PA;EiDgQA;IACC;;EAGD;IAEC;;;;AC5RH;EACC;EACA;EACA;EACA;EACA;EACA;;AlDUC;EkDhBF;IASE;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAID;EACC;EACA;;AAGD;EACC;;AAQA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;;AAQL;EACC;EACA;EACA;;AAEA;EACC;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAhBD;IAiBE;;;AlDtFD;EkDqED;IAqBE;IACA;IACA;IACA;IACA;;EAEA;IACC;IACA;;EAGD;IACC;;EAGD;IACC;;EAGD;IACC;;;AlD9GF;EkDoHD;IAGE;IACA;IACA;;;AAGD;EACC;EACA;EACA;EACA;;AlDhID;EkDuIC;IACC;;;AlDlIF;EkDoDF;IAoFE;IACA;;EAGA;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;EAID;IACC;;EAID;IACC;;EAEA;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AlDzLA;EkDiLD;IAWE;;EAEA;IACC;;;AAIF;EACC;EACA;EACA;;AlDhMD;EkD6LA;IAME;IACA;;EAEA;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AlD/NF;EkDmNA;IAgBE;;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;;AAMA;EACC;;AAGD;EACC;;AAMH;EAEC;;AAGC;EALF;IAMG;;;AlDnQH;EkD6PA;IAWE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;IACA;;EAGD;IACC;;EAGD;AAEC;IACA;AAEA;IACA;;EAEA;AAGC;IACA;AAEA;IACA;;EAIF;AAEC;IACA;AAEA;IACA;;EAEA;AAGC;IACA;AAEA;IACA;;;AAQL;EACC;;AlDjVA;EkDoVD;IAGE;IACA;;EAGA;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;;AAQL;EACC;EACA;EACA;EACA;EACA;EACA;;AlDjXA;EkD2WD;IASE;IACA;IACA;IACA;;;AAGD;EACC;;AAGD;EAGC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAIF;AAAA;EAEC;EACA;;AAEA;AAAA;EACC;EACA;;AAKF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AlDraD;EkD4aC;IACC;;;AlDnbF;EkD2bE;IACC;;;AAKF;EACC;EACA;EACA;EACA;;AlD/bF;EkD2bC;IAOE;IACA;;;AASH;EACC;;AlD7cD;EkDkdC;IACC;IACA;;EAGD;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AlD5eD;EkDofD;IACC;IACA;IACA;;;AAKF;EAEC;IACC;;EAGD;IACC;;;ACthBF;EACC;EACA;EACA;EACA;EACA;;;AAGD;EAC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","file":"style.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["assets/sass/01-settings/file-header.scss","assets/sass/style.scss","assets/sass/01-settings/global.scss","assets/sass/03-generic/normalize.scss","assets/sass/03-generic/breakpoints.scss","assets/sass/03-generic/vertical-margins.scss","assets/sass/03-generic/reset.scss","assets/sass/03-generic/clearings.scss","assets/sass/04-elements/blockquote.scss","assets/sass/04-elements/forms.scss","assets/sass/04-elements/media.scss","assets/sass/04-elements/misc.scss","assets/sass/04-elements/links.scss","assets/sass/05-blocks/audio/_style.scss","assets/sass/05-blocks/button/_style.scss","assets/sass/02-tools/mixins.scss","assets/sass/05-blocks/code/_style.scss","assets/sass/05-blocks/columns/_style.scss","assets/sass/05-blocks/cover/_style.scss","assets/sass/05-blocks/file/_style.scss","assets/sass/05-blocks/gallery/_style.scss","assets/sass/05-blocks/group/_style.scss","assets/sass/05-blocks/heading/_style.scss","assets/sass/05-blocks/image/_style.scss","assets/sass/05-blocks/latest-comments/_style.scss","assets/sass/05-blocks/latest-posts/_style.scss","assets/sass/05-blocks/legacy/_style.scss","assets/sass/05-blocks/list/_style.scss","assets/sass/05-blocks/media-text/_style.scss","assets/sass/05-blocks/navigation/_style.scss","assets/sass/05-blocks/paragraph/_style.scss","assets/sass/05-blocks/preformatted/_style.scss","assets/sass/05-blocks/pullquote/_style.scss","assets/sass/05-blocks/query-loop/_style.scss","assets/sass/05-blocks/quote/_style.scss","assets/sass/05-blocks/rss/_style.scss","assets/sass/05-blocks/search/_style.scss","assets/sass/05-blocks/separator/_style.scss","assets/sass/05-blocks/social-icons/_style.scss","assets/sass/05-blocks/table/_style.scss","assets/sass/05-blocks/tag-clould/_style.scss","assets/sass/05-blocks/verse/_style.scss","assets/sass/05-blocks/video/_style.scss","assets/sass/05-blocks/utilities/_font-sizes.scss","assets/sass/05-blocks/utilities/_style.scss","assets/sass/06-components/header.scss","assets/sass/06-components/footer.scss","assets/sass/06-components/single.scss","assets/sass/06-components/posts-and-pages.scss","assets/sass/06-components/entry.scss","assets/sass/06-components/archives.scss","assets/sass/06-components/404.scss","assets/sass/06-components/search.scss","assets/sass/06-components/comments.scss","assets/sass/06-components/navigation.scss","assets/sass/06-components/footer-navigation.scss","assets/sass/06-components/pagination.scss","assets/sass/06-components/widgets.scss","assets/sass/07-utilities/a11y.scss","assets/sass/07-utilities/color-palette.scss","assets/sass/07-utilities/measure.scss","assets/sass/07-utilities/ie.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;ACEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EA;AC9EA;AAKA;AAEC;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;E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AAA;AAAA;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAOD;EACC;;AAEA;EACC;;;AAKH;EACC;EACA;;;AAGD;AAAA;AAGC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAKA;EAEC;AAAA;IAEC;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;AAAA;IACC;;EAGD;AAAA;IACC;;EAMD;IACC;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAEA;IACC;;EAKH;IACC;;EAEA;IACC;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAEA;IACC;;EAID;IACC;IACA;;;AAMJ;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAGA;EAEC;IACC;IACA;IACA;IACA;IACA;IACA;;EAEA;IACC;;EAIF;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;AAKA;EACC;;AAGD;EACC;;AAGD;EAEC;;AAGD;EAEC;EACA;EACA;;;AAKH;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;;AL7RA;EK4RD;IAGE;;;;ACrUH;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;AAAA;AA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AKF;EACC;EACA;;AAOA;AAAA;AAAA;EAEC;EACA;EACA;;;AClEH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYC;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;;AAIF;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;;;AC/DD;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKF;AAAA;EAEC;EACA;;AAGA;AAAA;EACC;;;AAKF;AAAA;EAEC;;;AAGD;EACC;;;AnBlBC;EmByBA;AAAA;IAGE;;;AnBlCF;EmB+BA;AAAA;IAME;IACA;;;;AC1DJ;EACC;;AAEA;EACC;;AAGD;EACC;AAEA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;;;ACnCF;EACC;;AAGA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;AAKF;EAUC;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAID;EACC;EACA;EACA;;AAID;EACC;EACA;EACA;;AAEA;EAEC;;AAKF;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;EACA;;AAEA;EAEC;EACA;;AAKF;EACC;EACA;;AAEA;AAAA;EAEC;EACA;EACA;EACA;;AAEA;AAAA;EACC;EACA;;AAIF;EAEC;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAMF;EAEE;IACC;;EADD;IACC;;EADD;IACC;;EADD;IACC;;EADD;IACC;;;AASJ;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;;AC/KH;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAID;EACC;;;ACrDD;AAAA;EAEC;EACA;EACA;;AAGA;AAAA;EACC;EACA;;AAGD;AAAA;EACC;EACA;EACA;;;AAIF;EACC;;AAEA;EACC;;;AAIF;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;EACA;;;ACxCA;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AxB0BA;EwB3BD;IAIE;;;AAGD;EACC;EACA;;AxBMD;EwBRA;IAKE;IACA;;;AAGD;EACC;;AAGD;EACC;;AxBNF;EwBYD;IAEE;IACA;;;AAKF;EACC;;;AC5CA;EACC;EACA;EACA;;AAIF;EACC;;AAQC;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAOF;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAQH;EACC;;AAEA;EACC;;AAWA;EAEC;;AAGD;EACC;EACA;;AAKH;EACC;;;ACnGH;EAEC;;AAGA;EACC;;AAID;EACC;;;ACXF;EACC;EACA;;;ACFD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAyCA;AAAA;AAAA;;AAvCA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;;AAMD;EACC;;AAKA;AAAA;EAEC;;AAIF;EAEC;;AAGD;EAEC;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAEA;EAPD;IAQE;;;AAGD;EACC;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;;AAGD;EAEC;;AAEA;EACC;;;AC/GH;EACC;;A7BuBA;E6BxBD;IAIE;;;;ACNH;EACC;EACA;EACA;EACA;EACA;EACA;AA8CA;AAAA;AAAA;;AA5CA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIC;;AAIF;EAGC;;AAID;EAGC;;AAMD;EACC;EACA;EACA;;AAGA;EACC;;AAID;EACC;EACA;;AAIF;EACC;;AAEA;EACC;;AAKF;EAEC;EACA;AAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;EAGC;EACA;;A9BvGD;E8B6DD;IA8CE;;EAEA;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAIF;IACC;IACA;;;A9B5HF;E8BmIA;IACC;IACA;;EAEA;IACC;;EAIF;IACC;IACA;;;;AClKH;EACC;;AAEA;EACC;;AAID;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAMD;EACC;;AAEA;EACC;;AAKF;EAUC;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;;AAID;EACC;EACA;EACA;;AAID;EACC;EACA;EACA;;AAEA;EAEC;;AAKF;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;EACA;;AAEA;EAEC;EACA;;;ACzGH;EACC;;AAIC;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAIF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAOD;EACC;EACA;;AAGD;EACC;;AAOF;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;;AAGA;EACC;EACA;EACA;;AAIF;EACC;;AAGA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;;AAOL;EACC;;;ACpHD;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;AAiBA;AAAA;AAAA;;AAfA;EACC;;AAKA;EACC;;AAGD;EACC;;AAOF;EACC;;AAKA;EAEC;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;;AAIF;EAIC;;;ACtDF;EACC;;AAKA;EACC;;AAGD;EAEC;;;ACdH;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;EACC;;AAGD;AAAA;AAAA;AAAA;EAEC;EACA;;AAGD;AAAA;EACC;EACA;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;EAKC;;AAGD;AAAA;EACC;;AAEA;AAAA;AAAA;AAAA;EAEC;;AAGD;AAAA;EACC;;AAGD;AAAA;EACC;;;AAOF;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAIF;EACC;;;AC9FD;EACC;EACA;;;ACJF;EACC;;;ACCA;EACC;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;;;ACXA;AAAA;EAEC;;AAGD;AAAA;EAEC;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;;AAGD;AAAA;EAEC;EACA;;AAGD;AAAA;AAAA;AAAA;EAIC;EACA;;AAGD;AAAA;EAEC;EACA;EAGA;;AAGD;AAAA;EAEC;EACA;EAGA;;;AClDF;AAEA;AAAA;AAAA;AAQA;AAAA;AAAA;AAGA;AAEC;EACA;EAEA;;;AAKD;EACC;;;AxCEC;EwCID;AAEC;IACA;AAEA;IACA;IACA;;EAGD;IACC;;;AAIF;AAAA;AAAA;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAGA;EAEC;EACA;;;AAKD;EACC;;;AxC3CC;EwCiDD;AAEC;IACA;AAEA;IACA;;EAGD;IACC;;;AAKF;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAGA;EACC;;;AAQD;AAAA;AAAA;AAGA;EACC;;;AAUD;EACC;;;AAGD;EACC;;;AAID;EACC;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;AxChIC;EwC+HF;IAIE;;;;A3CxDF;A4CpGA;EAEC;EACA;EACA;EACA;;AAEA;EACC;;AzCiBA;EyCzBF;IAYE;;;AzCiDA;EyC7DF;IAgBE;;;;AAKF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AzCHA;EyCJF;IAWE;IACA;;;;AAKF;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EAGC;;AAGD;EAEC;;AzCnCD;EyCaF;IA4BE;;;;AAKF;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAID;EAEC;;AAEA;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AzC5EA;EyCiFA;IACC;IACA;IACA;IACA;;;;AzC3FD;EyC0GG;IACC;IACA;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;EAMJ;IACC;;EAEA;IACC;;EAEA;IACC;;EAIF;IACC;;EAKA;IACC;;EAGD;IACC;IACA;;EAGD;IACC;IACA;IACA;;EAEA;IAGC;IACA;IACA;;EAWH;IACC;IACA;;EAKH;IACC;;;ACrMH;EACC;EACA;;AAIA;EACC;;A1CYA;E0CPA;IACC;;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;AAAA;EAEC;;A1C2BA;E0C1CF;IAmBE;IACA;;EAEA;IACC;;EAGD;AAAA;IAEC;IACA;;EAGD;IACC;;;AAIF;EACC;;AAEA;EAGC;;AAGD;EACC;;AAGD;EACC;;AAEA;EACC;;AAID;EACC;;;AC/EJ;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;ACXD;EACC;;;AAID;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;;ACpBH;EAEC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AAIA;AAAA;EAEC;;;AAKA;EACC;;AAID;EAEC;EACA;;AASF;EAEC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EAEC;;AAGD;EACC;;;AAMH;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEC;EACA;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;EAIC;;A7C1GA;E6CiFF;IA6BE;;EAEA;IACC;;EAGD;AAAA;IAEC;;;;AAKH;AAAA;AAAA;AAIA;EAEC;;AAOA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAIF;AAAA;AAAA;AAIA;EACC;EACA;EACA;;AAEA;EACC;;AAMA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AC9MH;EACC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAaE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAUF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACC;;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;AAQA;AAAA;AAAA;EACC;;;AAMJ;EACC;EACA;EACA;;;AClED;EACC;EACA;;;ACFD;EACC;;;ACDD;AAAA;AAAA;AAKC;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAMD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAMH;AAAA;AAAA;AAIA;AAAA;EAEC;EACA;;;AAGD;EACC;EACA;;AAIC;EACC;EACA;EACA;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;AAAA;AAAA;AAGA;EACC;EACA;;AAEA;EACC;EACA;;;AAKF;EACC;EACA;;AAEA;EACC;EACA;;;AjD/DA;EiDoEF;AAAA;IAGE;;;;AAIF;AAAA;AAAA;AAKC;EACC;EACA;;AjDlFA;EiDgFD;IAKE;IACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAKF;EACC;EACA;EACA;;AAEA;EACC;;AjD1GD;EiD8EF;IAkCE;;EAEA;IACC;;;;AAKH;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AAAA;EAEC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;;;AAID;AAAA;EAEC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAEA;EACC;;;AAKH;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;AAAA;EAEC;;AAGD;AAAA;EAEC;EACA;;AjD3NA;EiDwND;AAAA;IAME;;;AAIF;AAAA;EAEC;EACA;;;AAIF;EACC;;AAEA;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;EAKC;EACA;EACA;EACA;EACA;;AAGD;EACC;;AjD3PA;EiDgQA;IACC;;EAGD;IAEC;;;;AC5RH;EACC;EACA;EACA;EACA;EACA;EACA;;AlDUC;EkDhBF;IASE;;;AAID;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAID;EACC;EACA;;AAGD;EACC;;AAQA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;;AAQL;EACC;EACA;EACA;;AAEA;EACC;;;AAKH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAhBD;IAiBE;;;AlDtFD;EkDqED;IAqBE;IACA;IACA;IACA;IACA;;EAEA;IACC;IACA;;EAGD;IACC;;EAGD;IACC;;EAGD;IACC;;;AlD9GF;EkDoHD;IAGE;IACA;IACA;;;AAGD;EACC;EACA;EACA;EACA;;AlDhID;EkDuIC;IACC;;;AlDlIF;EkDoDF;IAoFE;IACA;;EAGA;IACC;IACA;IACA;IACA;IACA;IACA;IACA;;EAID;IACC;;EAID;IACC;;EAID;IACC;;EAEA;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AlDzLA;EkDiLD;IAWE;;EAEA;IACC;;;AAIF;EACC;EACA;EACA;;AlDhMD;EkD6LA;IAME;IACA;;EAEA;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AlD/NF;EkDmNA;IAgBE;;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;;AAMA;EACC;;AAGD;EACC;;AAMH;EAEC;;AAGC;EALF;IAMG;;;AlDnQH;EkD6PA;IAWE;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IAEC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGD;IACC;IACA;;EAGD;IACC;;EAGD;AAEC;IACA;AAEA;IACA;;EAEA;AAGC;IACA;AAEA;IACA;;EAIF;AAEC;IACA;AAEA;IACA;;EAEA;AAGC;IACA;AAEA;IACA;;;AAQL;EACC;;AlDjVA;EkDoVD;IAGE;IACA;;EAGA;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;;AAQL;EACC;EACA;EACA;EACA;EACA;EACA;;AlDjXA;EkD2WD;IASE;IACA;IACA;IACA;;;AAGD;EACC;;AAGD;EAGC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAIF;AAAA;EAEC;EACA;;AAEA;AAAA;EACC;EACA;;AAKF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AlDraD;EkD4aC;IACC;;;AlDnbF;EkD2bE;IACC;;;AAKF;EACC;EACA;EACA;EACA;;AlD/bF;EkD2bC;IAOE;IACA;;;AASH;EACC;;AlD7cD;EkDkdC;IACC;IACA;;EAGD;IACC;;;AAMH;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;;AlD5eD;EkDofD;IACC;IACA;IACA;;;AAKF;EAEC;IACC;;EAGD;IACC;;;ACthBF;EACC;EACA;EACA;EACA;EA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","file":"style.css"} \ No newline at end of file From 5655fb0a4a064ef38a8db596f39a6a85da4ce4bc Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 25 Jun 2024 03:09:43 +0000 Subject: [PATCH 015/422] HTML API: Add missing subclass methods to HTML Processor and add token provenance. This patch introduces two related changes: - It adds missing subclass methods on the HTML Processor which needed to be implemented since it started visiting virtual nodes. These methods need to account for the fact that not all tokens truly exist. - It adds a new concept and internal method, `is_virtual()`, indicating if the currently-matched token comes from the raw text in the input HTML document or if it was the byproduct of semantic parsing rules. This internal method and new vocabulary around token provenance considerably simplifies the logic spread throughout the rest of the class and its subclass methods. Developed in https://github.com/WordPress/wordpress-develop/pull/6860 Discussed in https://core.trac.wordpress.org/ticket/61348 Follow-up to [58304]. Props dmsnell, jonsurrell, gziolo. See #61348. git-svn-id: https://develop.svn.wordpress.org/trunk@58558 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 218 ++++++++++++++---- .../html-api/class-wp-html-stack-event.php | 23 +- 2 files changed, 186 insertions(+), 55 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 528c222335b75..0eb597edcd803 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -349,13 +349,19 @@ public function __construct( $html, $use_the_static_create_methods_instead = nul $this->state->stack_of_open_elements->set_push_handler( function ( WP_HTML_Token $token ) { - $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::PUSH ); + $is_virtual = ! isset( $this->state->current_token ) || $this->is_tag_closer(); + $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; + $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; + $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::PUSH, $provenance ); } ); $this->state->stack_of_open_elements->set_pop_handler( function ( WP_HTML_Token $token ) { - $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::POP ); + $is_virtual = ! isset( $this->state->current_token ) || ! $this->is_tag_closer(); + $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; + $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; + $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::POP, $provenance ); } ); @@ -569,11 +575,26 @@ public function next_token() { * @return bool Whether the current tag is a tag closer. */ public function is_tag_closer() { - return isset( $this->current_element ) - ? ( WP_HTML_Stack_Event::POP === $this->current_element->operation ) + return $this->is_virtual() + ? ( WP_HTML_Stack_Event::POP === $this->current_element->operation && '#tag' === $this->get_token_type() ) : parent::is_tag_closer(); } + /** + * Indicates if the currently-matched token is virtual, created by a stack operation + * while processing HTML, rather than a token found in the HTML text itself. + * + * @since 6.6.0 + * + * @return bool Whether the current token is virtual. + */ + private function is_virtual() { + return ( + isset( $this->current_element->provenance ) && + 'virtual' === $this->current_element->provenance + ); + } + /** * Indicates if the currently-matched tag matches the given breadcrumbs. * @@ -1440,7 +1461,7 @@ public function get_tag() { return null; } - if ( isset( $this->current_element ) ) { + if ( $this->is_virtual() ) { return $this->current_element->token->node_name; } @@ -1459,6 +1480,27 @@ public function get_tag() { } } + /** + * Indicates if the currently matched tag contains the self-closing flag. + * + * No HTML elements ought to have the self-closing flag and for those, the self-closing + * flag will be ignored. For void elements this is benign because they "self close" + * automatically. For non-void HTML elements though problems will appear if someone + * intends to use a self-closing element in place of that element with an empty body. + * For HTML foreign elements and custom elements the self-closing flag determines if + * they self-close or not. + * + * This function does not determine if a tag is self-closing, + * but only if the self-closing flag is present in the syntax. + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @return bool Whether the currently matched tag contains the self-closing flag. + */ + public function has_self_closing_flag() { + return $this->is_virtual() ? false : parent::has_self_closing_flag(); + } + /** * Returns the node name represented by the token. * @@ -1480,11 +1522,9 @@ public function get_tag() { * @return string|null Name of the matched token. */ public function get_token_name() { - if ( isset( $this->current_element ) ) { - return $this->current_element->token->node_name; - } - - return parent::get_token_name(); + return $this->is_virtual() + ? $this->current_element->token->node_name + : parent::get_token_name(); } /** @@ -1510,9 +1550,16 @@ public function get_token_name() { * @return string|null What kind of token is matched, or null. */ public function get_token_type() { - if ( isset( $this->current_element ) ) { - $node_name = $this->current_element->token->node_name; - if ( ctype_upper( $node_name[0] ) ) { + if ( $this->is_virtual() ) { + /* + * This logic comes from the Tag Processor. + * + * @todo It would be ideal not to repeat this here, but it's not clearly + * better to allow passing a token name to `get_token_type()`. + */ + $node_name = $this->current_element->token->node_name; + $starting_char = $node_name[0]; + if ( 'A' <= $starting_char && 'Z' >= $starting_char ) { return '#tag'; } @@ -1546,25 +1593,38 @@ public function get_token_type() { * @return string|true|null Value of attribute or `null` if not available. Boolean attributes return `true`. */ public function get_attribute( $name ) { - if ( isset( $this->current_element ) ) { - // Closing tokens cannot contain attributes. - if ( WP_HTML_Stack_Event::POP === $this->current_element->operation ) { - return null; - } - - $node_name = $this->current_element->token->node_name; - - // Only tags can contain attributes. - if ( 'A' > $node_name[0] || 'Z' < $node_name[0] ) { - return null; - } + return $this->is_virtual() ? null : parent::get_attribute( $name ); + } - if ( $this->current_element->token->bookmark_name === (string) $this->bookmark_counter ) { - return parent::get_attribute( $name ); - } - } + /** + * Updates or creates a new attribute on the currently matched tag with the passed value. + * + * For boolean attributes special handling is provided: + * - When `true` is passed as the value, then only the attribute name is added to the tag. + * - When `false` is passed, the attribute gets removed if it existed before. + * + * For string attributes, the value is escaped using the `esc_attr` function. + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @param string $name The attribute name to target. + * @param string|bool $value The new attribute value. + * @return bool Whether an attribute value was set. + */ + public function set_attribute( $name, $value ) { + return $this->is_virtual() ? false : parent::set_attribute( $name, $value ); + } - return null; + /** + * Remove an attribute from the currently-matched tag. + * + * @since 6.6.0 Subclassed for HTML Processor. + * + * @param string $name The attribute name to remove. + * @return bool Whether an attribute was removed. + */ + public function remove_attribute( $name ) { + return $this->is_virtual() ? false : parent::remove_attribute( $name ); } /** @@ -1594,18 +1654,63 @@ public function get_attribute( $name ) { * @return array|null List of attribute names, or `null` when no tag opener is matched. */ public function get_attribute_names_with_prefix( $prefix ) { - if ( isset( $this->current_element ) ) { - if ( WP_HTML_Stack_Event::POP === $this->current_element->operation ) { - return null; - } + return $this->is_virtual() ? null : parent::get_attribute_names_with_prefix( $prefix ); + } - $mark = $this->bookmarks[ $this->current_element->token->bookmark_name ]; - if ( 0 === $mark->length ) { - return null; - } - } + /** + * Adds a new class name to the currently matched tag. + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @param string $class_name The class name to add. + * @return bool Whether the class was set to be added. + */ + public function add_class( $class_name ) { + return $this->is_virtual() ? false : parent::add_class( $class_name ); + } + + /** + * Removes a class name from the currently matched tag. + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @param string $class_name The class name to remove. + * @return bool Whether the class was set to be removed. + */ + public function remove_class( $class_name ) { + return $this->is_virtual() ? false : parent::remove_class( $class_name ); + } + + /** + * Returns if a matched tag contains the given ASCII case-insensitive class name. + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @param string $wanted_class Look for this CSS class name, ASCII case-insensitive. + * @return bool|null Whether the matched tag contains the given class name, or null if not matched. + */ + public function has_class( $wanted_class ) { + return $this->is_virtual() ? null : parent::has_class( $wanted_class ); + } - return parent::get_attribute_names_with_prefix( $prefix ); + /** + * Generator for a foreach loop to step through each class name for the matched tag. + * + * This generator function is designed to be used inside a "foreach" loop. + * + * Example: + * + * $p = WP_HTML_Processor::create_fragment( "
" ); + * $p->next_tag(); + * foreach ( $p->class_list() as $class_name ) { + * echo "{$class_name} "; + * } + * // Outputs: "free lang-en " + * + * @since 6.6.0 Subclassed for the HTML Processor. + */ + public function class_list() { + return $this->is_virtual() ? null : parent::class_list(); } /** @@ -1629,17 +1734,30 @@ public function get_attribute_names_with_prefix( $prefix ) { * @return string */ public function get_modifiable_text() { - if ( isset( $this->current_element ) ) { - if ( WP_HTML_Stack_Event::POP === $this->current_element->operation ) { - return ''; - } + return $this->is_virtual() ? '' : parent::get_modifiable_text(); + } - $mark = $this->bookmarks[ $this->current_element->token->bookmark_name ]; - if ( 0 === $mark->length ) { - return ''; - } - } - return parent::get_modifiable_text(); + /** + * Indicates what kind of comment produced the comment node. + * + * Because there are different kinds of HTML syntax which produce + * comments, the Tag Processor tracks and exposes this as a type + * for the comment. Nominally only regular HTML comments exist as + * they are commonly known, but a number of unrelated syntax errors + * also produce comments. + * + * @see self::COMMENT_AS_ABRUPTLY_CLOSED_COMMENT + * @see self::COMMENT_AS_CDATA_LOOKALIKE + * @see self::COMMENT_AS_INVALID_HTML + * @see self::COMMENT_AS_HTML_COMMENT + * @see self::COMMENT_AS_PI_NODE_LOOKALIKE + * + * @since 6.6.0 Subclassed for the HTML Processor. + * + * @return string|null + */ + public function get_comment_type() { + return $this->is_virtual() ? null : parent::get_comment_type(); } /** diff --git a/src/wp-includes/html-api/class-wp-html-stack-event.php b/src/wp-includes/html-api/class-wp-html-stack-event.php index 1f58063276992..aa4763cd399fc 100644 --- a/src/wp-includes/html-api/class-wp-html-stack-event.php +++ b/src/wp-includes/html-api/class-wp-html-stack-event.php @@ -56,14 +56,27 @@ class WP_HTML_Stack_Event { */ public $operation; + /** + * Indicates if the stack element is a real or virtual node. + * + * @since 6.6.0 + * + * @var string + */ + public $provenance; + /** * Constructor function. * - * @param WP_HTML_Token $token Token associated with stack event, always an opening token. - * @param string $operation One of self::PUSH or self::POP. + * @since 6.6.0 + * + * @param WP_HTML_Token $token Token associated with stack event, always an opening token. + * @param string $operation One of self::PUSH or self::POP. + * @param string $provenance "virtual" or "real". */ - public function __construct( $token, $operation ) { - $this->token = $token; - $this->operation = $operation; + public function __construct( $token, $operation, $provenance ) { + $this->token = $token; + $this->operation = $operation; + $this->provenance = $provenance; } } From 551bddc4962d5c350a95226138e6ca86d1d6c768 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 08:51:15 +0000 Subject: [PATCH 016/422] HTML API: Remove unused `$tag_name` variable in `WP_HTML_Tag_Processor::set_attribute`. Follow-up to [58472], [58473]. Props davidbinda. Fixes #61494. git-svn-id: https://develop.svn.wordpress.org/trunk@58559 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-tag-processor.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 4ed0c28136c93..8fc75938c9384 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2972,7 +2972,6 @@ public function set_attribute( $name, $value ) { if ( true === $value ) { $updated_attribute = $name; } else { - $tag_name = $this->get_tag(); $comparable_name = strtolower( $name ); /* From 56b20eaed0b1b75b1a69883ee39f797eaae876db Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 08:57:40 +0000 Subject: [PATCH 017/422] Docs: Fix apostrophe usage in `wp-admin/includes/class-wp-list-table.php`. Props truptikanzariya, mukesh27. Fixes 61490. See 60699. git-svn-id: https://develop.svn.wordpress.org/trunk@58560 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-list-table.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/class-wp-list-table.php b/src/wp-admin/includes/class-wp-list-table.php index 820fc5e84020d..2879a0a356736 100644 --- a/src/wp-admin/includes/class-wp-list-table.php +++ b/src/wp-admin/includes/class-wp-list-table.php @@ -995,10 +995,10 @@ protected function get_items_per_page( $option, $default_value = 20 ) { * - `edit_comments_per_page` * - `sites_network_per_page` * - `site_themes_network_per_page` - * - `themes_network_per_page'` + * - `themes_network_per_page` * - `users_network_per_page` * - `edit_post_per_page` - * - `edit_page_per_page'` + * - `edit_page_per_page` * - `edit_{$post_type}_per_page` * - `edit_post_tag_per_page` * - `edit_category_per_page` From 2b843107920cbe14027366ca71627bfa30f9fb93 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 25 Jun 2024 12:43:06 +0000 Subject: [PATCH 018/422] Docs: Correct DocBlock formatting in `wp-includes/blocks.php`. Follow-up to [58471]. Props david.binda, narenin, sabernhardt, shital-patel, SergeyBiryukov. Fixes #61493. git-svn-id: https://develop.svn.wordpress.org/trunk@58561 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 5ef250a863d09..26e5e0c96b409 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -1774,17 +1774,16 @@ function filter_block_kses_value( $value, $allowed_html, $allowed_protocols = ar return $value; } - /** * Sanitizes the value of the Template Part block's `tagName` attribute. * * @since 6.5.5 * - * @param string $attribute_value The attribute value to filter. - * @param string $attribute_name The attribute name. - * @param array[]|string $allowed_html An array of allowed HTML elements and attributes, - * or a context name such as 'post'. See wp_kses_allowed_html() - * for the list of accepted context names. + * @param string $attribute_value The attribute value to filter. + * @param string $attribute_name The attribute name. + * @param array[]|string $allowed_html An array of allowed HTML elements and attributes, + * or a context name such as 'post'. See wp_kses_allowed_html() + * for the list of accepted context names. * @return string The sanitized attribute value. */ function filter_block_core_template_part_attributes( $attribute_value, $attribute_name, $allowed_html ) { From c2575c525a06c8b6584be0dca3a6be301a6fde92 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 25 Jun 2024 12:47:56 +0000 Subject: [PATCH 019/422] Build/Test Tools: Update npm dependencies for Bundled Themes. This updates the npm dependencies for the Twenty Nineteen, Twenty Twenty, and Twenty Twenty-One themes. `npm audit fix` has also been run. See #61498. git-svn-id: https://develop.svn.wordpress.org/trunk@58562 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentynineteen/package-lock.json | 249 +- .../themes/twentynineteen/package.json | 6 +- .../themes/twentytwenty/package-lock.json | 5040 ++++++++--------- .../themes/twentytwenty/package.json | 8 +- .../themes/twentytwentyone/package-lock.json | 770 +-- .../themes/twentytwentyone/package.json | 24 +- 6 files changed, 3006 insertions(+), 3091 deletions(-) diff --git a/src/wp-content/themes/twentynineteen/package-lock.json b/src/wp-content/themes/twentynineteen/package-lock.json index bddc2b8c1a076..6e51d68695591 100644 --- a/src/wp-content/themes/twentynineteen/package-lock.json +++ b/src/wp-content/themes/twentynineteen/package-lock.json @@ -8,12 +8,12 @@ "name": "twentynineteen", "version": "2.8.0", "devDependencies": { - "@wordpress/browserslist-config": "^5.31.0", - "autoprefixer": "^10.4.16", + "@wordpress/browserslist-config": "^6.1.0", + "autoprefixer": "^10.4.19", "chokidar-cli": "^3.0.0", "node-sass": "^9.0.0", "npm-run-all": "^4.1.5", - "postcss": "^8.4.32", + "postcss": "^8.4.38", "postcss-cli": "^11.0.0", "postcss-focus-within": "^8.0.1", "rtlcss": "^4.1.1" @@ -187,12 +187,13 @@ "dev": true }, "node_modules/@wordpress/browserslist-config": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.31.0.tgz", - "integrity": "sha512-fjglKNuqMKfGXrxuqea8ndTLkga9MfnyBBYuniGZ7cQo3iOhOn6ZqlfKygZdAuZ19FOwQWaQ+9W9MpOtU/4oCA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/abbrev": { @@ -312,9 +313,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -331,9 +332,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -374,21 +375,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -405,10 +406,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -513,9 +514,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true, "funding": [ { @@ -852,9 +853,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.509", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.509.tgz", - "integrity": "sha512-G5KlSWY0zzhANtX15tkikHl4WB7zil2Y65oT52EZUL194abjUXBZym12Ht7Bhuwm/G3LJFEqMADyv2Cks56dmg==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "node_modules/emoji-regex": { @@ -929,9 +930,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -972,9 +973,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -1390,9 +1391,9 @@ "dev": true }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "node_modules/is-arrayish": { @@ -2211,9 +2212,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/node-sass": { @@ -2661,9 +2662,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -2700,9 +2701,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -2721,7 +2722,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3578,9 +3579,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3791,14 +3792,14 @@ } }, "node_modules/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -3808,9 +3809,9 @@ } }, "node_modules/tar/node_modules/minipass": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" @@ -3907,9 +3908,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -3926,8 +3927,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -4201,9 +4202,9 @@ "dev": true }, "@wordpress/browserslist-config": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.31.0.tgz", - "integrity": "sha512-fjglKNuqMKfGXrxuqea8ndTLkga9MfnyBBYuniGZ7cQo3iOhOn6ZqlfKygZdAuZ19FOwQWaQ+9W9MpOtU/4oCA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", "dev": true }, "abbrev": { @@ -4296,14 +4297,14 @@ "dev": true }, "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -4332,24 +4333,24 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" } }, "cacache": { @@ -4429,9 +4430,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true }, "chalk": { @@ -4672,9 +4673,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.509", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.509.tgz", - "integrity": "sha512-G5KlSWY0zzhANtX15tkikHl4WB7zil2Y65oT52EZUL194abjUXBZym12Ht7Bhuwm/G3LJFEqMADyv2Cks56dmg==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "emoji-regex": { @@ -4740,9 +4741,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-string-regexp": { @@ -4774,9 +4775,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -5097,9 +5098,9 @@ "dev": true }, "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "is-arrayish": { @@ -5732,9 +5733,9 @@ } }, "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node-sass": { @@ -6060,9 +6061,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -6084,14 +6085,14 @@ "dev": true }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-cli": { @@ -6674,9 +6675,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "spdx-correct": { @@ -6855,23 +6856,23 @@ } }, "tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { "minipass": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz", - "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true } } @@ -6940,13 +6941,13 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "util-deprecate": { diff --git a/src/wp-content/themes/twentynineteen/package.json b/src/wp-content/themes/twentynineteen/package.json index 51907c9145585..0f69fb7c75d2b 100644 --- a/src/wp-content/themes/twentynineteen/package.json +++ b/src/wp-content/themes/twentynineteen/package.json @@ -11,12 +11,12 @@ "npm": ">=10.2.3" }, "devDependencies": { - "@wordpress/browserslist-config": "^5.31.0", - "autoprefixer": "^10.4.16", + "@wordpress/browserslist-config": "^6.1.0", + "autoprefixer": "^10.4.19", "chokidar-cli": "^3.0.0", "node-sass": "^9.0.0", "npm-run-all": "^4.1.5", - "postcss": "^8.4.32", + "postcss": "^8.4.38", "postcss-cli": "^11.0.0", "postcss-focus-within": "^8.0.1", "rtlcss": "^4.1.1" diff --git a/src/wp-content/themes/twentytwenty/package-lock.json b/src/wp-content/themes/twentytwenty/package-lock.json index a169d81a20be7..9715ec551e429 100644 --- a/src/wp-content/themes/twentytwenty/package-lock.json +++ b/src/wp-content/themes/twentytwenty/package-lock.json @@ -9,11 +9,11 @@ "version": "2.6.0", "license": "GPL-2.0-or-later", "devDependencies": { - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/scripts": "^26.19.0", - "autoprefixer": "^10.4.16", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/scripts": "^28.1.0", + "autoprefixer": "^10.4.19", "concurrently": "^8.2.2", - "postcss": "^8.4.32", + "postcss": "^8.4.38", "postcss-cli": "^11.0.0", "rtlcss": "^4.1.1", "stylelint-a11y": "^1.2.3" @@ -37,65 +37,18 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", @@ -136,9 +89,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz", + "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -150,18 +103,18 @@ }, "peerDependencies": { "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -265,34 +218,37 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -311,12 +267,13 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -354,9 +311,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -421,30 +378,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -488,14 +445,15 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -549,9 +507,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1612,16 +1570,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", - "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1631,6 +1589,47 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", @@ -1954,33 +1953,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1989,13 +1988,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2076,9 +2075,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2641,14 +2640,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -2664,9 +2663,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -2689,9 +2688,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2748,19 +2747,11 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -2768,86 +2759,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pkgr/utils/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pkgr/utils/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pkgr/utils/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.11", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", @@ -2945,9 +2856,9 @@ } }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "dependencies": { "b4a": "^1.6.4", @@ -3828,9 +3739,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/send": { @@ -3983,16 +3894,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz", - "integrity": "sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/type-utils": "6.15.0", - "@typescript-eslint/utils": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -4018,34 +3929,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4053,22 +3949,16 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", - "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -4088,13 +3978,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", - "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4105,13 +3995,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz", - "integrity": "sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/utils": "6.15.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -4132,9 +4022,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", - "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4145,16 +4035,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", - "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -4171,26 +4062,35 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4198,24 +4098,18 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz", - "integrity": "sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -4229,46 +4123,25 @@ "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", - "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -4482,35 +4355,24 @@ } }, "node_modules/@wordpress/api-fetch": { - "version": "6.45.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.45.0.tgz", - "integrity": "sha512-87GhllJcdlxqLugQUx/hL+PE4z7Aqf+AFs8CgzN5/V7INq9IFlIjcbm5TpI4WrGVDSa2puA0tMrjhR/FWXF3NQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.1.0.tgz", + "integrity": "sha512-mtEJi9IBPCRtNxyhP1VAwcLmncpQzt7CQX8rxhC4eAMnicamCG/fwZ3pFEKGXk3MUul3Bl1Q7y/UhdMtCGktGg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.48.0", - "@wordpress/url": "^3.49.0" + "@wordpress/i18n": "^5.1.0", + "@wordpress/url": "^4.1.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/babel-plugin-import-jsx-pragma": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.31.0.tgz", - "integrity": "sha512-WlHCRCLBft3bSqE7FLB09w1gHG6QUQ7WAQpSDdcn6wRuLX45ZeMeT6YDqUdJdlYPRBx6Ke9WzrmAT7PrGLZi1Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@babel/core": "^7.12.9" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/babel-preset-default": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.32.0.tgz", - "integrity": "sha512-B1S+JujsX3kZWp1jnSuvUu+hlJhp9j1TSlOmar+yuVCjH0vx/aW/58onKvCFNPTy3gJ00bSsYa3BctoCHs456A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.1.0.tgz", + "integrity": "sha512-3KXhocrFT+PKVXHWeCwTphPr2RRWiIx9mQBuFlNfTlf/zd2fMob4ZIHkG6zNsidP+afnFTdrZR3tTI0TL9/uAg==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", @@ -4519,57 +4381,62 @@ "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^4.31.0", - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/warning": "^2.48.0", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/warning": "^3.1.0", "browserslist": "^4.21.10", "core-js": "^3.31.0", - "react": "^18.2.0" + "react": "^18.3.0" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/base-styles": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.39.0.tgz", - "integrity": "sha512-Obc6fKAnqzuWQSLgoce2yxhwMLd0nu4j7k3pVkBSzuitPw1LokmzHcHWPpgpMGR1T8CzKuj0Wsybcr2n3Xtyug==", - "dev": true + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-5.1.0.tgz", + "integrity": "sha512-HVUuN+y9UwnIgLQj1lYC71jP+JPWuW9WWCVSLPVwKTJtwrxAVKxSf3PLUaXRhhhNt5NXSqev2wuR3qQbZJ/L+g==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } }, "node_modules/@wordpress/browserslist-config": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.31.0.tgz", - "integrity": "sha512-fjglKNuqMKfGXrxuqea8ndTLkga9MfnyBBYuniGZ7cQo3iOhOn6ZqlfKygZdAuZ19FOwQWaQ+9W9MpOtU/4oCA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.31.0.tgz", - "integrity": "sha512-Xpm8EEhi6e8GL1juYh/70AFbcE/ZVXJ3p47KMkkEsn5t+hG9QHjKe2lTj98v2r3rB+ampoK+whdV1w6gItXYpw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.1.0.tgz", + "integrity": "sha512-Dodnc0yn6Q7jZW2S5hUFa/3Ls6/OVUp6mXsPr6HvaTZsy9IzrNJJdTiIbk5nNRXDFt7Yv+f8CB/QIdwV0tweag==", "dev": true, "dependencies": { - "json2php": "^0.0.7", - "webpack-sources": "^3.2.2" + "json2php": "^0.0.7" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { - "webpack": "^4.8.3 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.16.0.tgz", - "integrity": "sha512-CktRj5/Cc/pAvTHXIAPIMrmmnb0VjtXbTGSjYG6pW/JI2YAmpwY2yBA+DlHJjqOIpcjDDj+sSsJomRSxT2chwQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.1.0.tgz", + "integrity": "sha512-lGA7/6S1Rsa9Zf7qnAs1nOWn8lPpg8vBOwUWHPBqV1a79r7nsD2KQqsrqsKy8wIJ763fIt5LljjD9VSca0UtIQ==", "dev": true, "dependencies": { - "@wordpress/api-fetch": "^6.45.0", - "@wordpress/keycodes": "^3.48.0", - "@wordpress/url": "^3.49.0", + "@wordpress/api-fetch": "^7.1.0", + "@wordpress/keycodes": "^4.1.0", + "@wordpress/url": "^4.1.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "get-port": "^5.1.1", @@ -4578,23 +4445,24 @@ "web-vitals": "^3.5.0" }, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "@playwright/test": ">=1" } }, "node_modules/@wordpress/eslint-plugin": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.5.0.tgz", - "integrity": "sha512-wwg4NTMSdiDbkJCFNirn1Oq+Q6wKKWXXmuhsRvK4KsIkayqHavmebnE9bctAiz4ZXI5+URpj8w/IdxYev8acYw==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-19.1.0.tgz", + "integrity": "sha512-/qh8Q5VWg6xoVS6x5KnRmLQeKIquVs/kmHkgatljF9mqPV4QVL12LQoc4DO0QbQq5Jz2aqk/jod/UHYwEWrv+Q==", "dev": true, "dependencies": { "@babel/eslint-parser": "^7.16.0", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", - "@wordpress/babel-preset-default": "^7.32.0", - "@wordpress/prettier-config": "^3.5.0", + "@wordpress/babel-preset-default": "^8.1.0", + "@wordpress/prettier-config": "^4.1.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", @@ -4609,8 +4477,8 @@ "requireindex": "^1.2.0" }, "engines": { - "node": ">=14", - "npm": ">=6.14.4" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "@babel/core": ">=7", @@ -4643,25 +4511,26 @@ } }, "node_modules/@wordpress/hooks": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.48.0.tgz", - "integrity": "sha512-vFmjpq/XN2bYgz67BS2ZC0n4P1FZUi0UPv8PTMKK+dzCPhQRYrJb8DRhBafwu2mXRzw4rO7vmVTCNJQM6xVObQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.1.0.tgz", + "integrity": "sha512-uJ2zyLLs6AwWuEdLGv/P7oSXJuX27Ym6JglzWGBavxAKNXpTCCjiJwgxlZJbSjT3BzhRsRGl3bUMmzt3eh50Pg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" }, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/i18n": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.48.0.tgz", - "integrity": "sha512-CEaBkh1o1lArLqSv9misdmu4hNhs15Fc1tu9t/CzVWPhm7JkkZUi/+mfdAsQmMuON4lJLZKfOjjcRIfTq9YHhA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.1.0.tgz", + "integrity": "sha512-zNJiudByLnpIVhIS45hr92r53t+wRYp9a6XOJ585xNYeUmoUpymY5GTdLSrExmQaytMhV5cSXSn3qMMDBMjUsg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.48.0", + "@wordpress/hooks": "^4.1.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", @@ -4671,36 +4540,39 @@ "pot-to-php": "tools/pot-to-php.js" }, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/jest-console": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.19.0.tgz", - "integrity": "sha512-x35izGNCLo7xoK770I7O/+m6sE/a9lmo6QqyDoR1AZaUwk0PAY35EGrbbi3FfXeReTXBRNJ1MpnQyvskg8o/Gw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.1.0.tgz", + "integrity": "sha512-yTgZ+JdM3e2dhhfMtEJLDZwmUWAv2a4Asy+1uu/ZzY+ChsPPBNgHLxQtyTOknnyJtfwLm+gQfFxpiS/OwyzMVQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "jest-matcher-utils": "^29.6.2" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "jest": ">=29" } }, "node_modules/@wordpress/jest-preset-default": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.19.0.tgz", - "integrity": "sha512-9BbUDZaa6Cg9dz+JyfOe30C8JJrhCkyaFqCqSNJEcyB4KK83qp2QRkblVXABmHarw4oPfg+OJLLALIAA045a0w==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-12.1.0.tgz", + "integrity": "sha512-Qp+2PFMkJw+dh+y/OlUkV7AoRwK6q3Cd0gXXotChO7wi6/xp7LeFmdjjRIC5IERQ0AeaWUS44MF5lb0GSSmCEQ==", "dev": true, "dependencies": { - "@wordpress/jest-console": "^7.19.0", + "@wordpress/jest-console": "^8.1.0", "babel-jest": "^29.6.2" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "@babel/core": ">=7", @@ -4708,77 +4580,81 @@ } }, "node_modules/@wordpress/keycodes": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.48.0.tgz", - "integrity": "sha512-VhNsfx5h1haKafyiXNW8o+goVLq2mLNhZUTwk3qc07dLfwW/kg6h2zrdWyYYJzRb2UhLd+DXbBcvukRnFUm3Aw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.1.0.tgz", + "integrity": "sha512-ibAR7qg4q7082s9kOPnZ0Hqb6KM/zjAZBjEH2Yrc2jwLJ83QDGKDWCSx6dNYkN7m9jGpH52w8j4nz1wcbFZSiw==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.48.0" + "@wordpress/i18n": "^5.1.0" }, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/npm-package-json-lint-config": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.33.0.tgz", - "integrity": "sha512-GBVGcn6xAqrWQueSlMVMHoebGsHvildWwcJ/lIpxh7i7V/VBoc9Z8rdUEKAip6lTjZx+mCmzXQH4hU3QdNA/RA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.1.0.tgz", + "integrity": "sha512-eYT737t5i051V2RG5+/dP/3uXvtoR2e+liewKbgkanvdKotRT2XbXdiDSodiSjF8N7f8YrthvMF4Y2Mw9AVtSQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "npm-package-json-lint": ">=6.0.0" } }, "node_modules/@wordpress/postcss-plugins-preset": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.32.0.tgz", - "integrity": "sha512-+4+chYW8pRd7Irzm8lXom5Axs765q4me1mT+FBskfotUroAvoJtmfAybmyhIvTirTwLaN7ugOYiSBjAD6M7+rg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.1.0.tgz", + "integrity": "sha512-t6szmy/pmhx0vu8Spa1sBMN6XX94bMXVfKZ/Az1X1R+bzgya+PAGhJBYZL9szHGzavW9aaiA32xPRc8Rr0YfcA==", "dev": true, "dependencies": { - "@wordpress/base-styles": "^4.39.0", + "@wordpress/base-styles": "^5.1.0", "autoprefixer": "^10.2.5" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "postcss": "^8.0.0" } }, "node_modules/@wordpress/prettier-config": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.5.0.tgz", - "integrity": "sha512-Nzp6TWu+nx1fzgqqa34/MdBiRDT/Yoqo8jFHBrYhx1kV3BPg8m5lvyGxNmzqoR3hZQatGkBJYdFlLs0WeAGGDQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.1.0.tgz", + "integrity": "sha512-sWqX/hKvXne6QhTGWW8LbYSiNc2xLfuVcInrBaam4uMvZeCqWQUS90VAhNvBF0e6wRnMFqxcUKDF1xDGmVheGA==", "dev": true, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "prettier": ">=3" } }, "node_modules/@wordpress/scripts": { - "version": "26.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.19.0.tgz", - "integrity": "sha512-m3QYlgpWRfIqCfU4jWKwGeA12Qkt6d9CMewEIxIBGVlEGd/sL5rU1fM7LKNBEbSPQpaOTWJApNGWPcW75Fwp+w==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.1.0.tgz", + "integrity": "sha512-BWmYA0fqOhfMcl20ppcJA/nw/zixt0FP6KPV+IiI560qpSHx6ZZieU354oX/5Vdaoe4O3ahPlGdUr9fWcprApQ==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^7.32.0", - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/dependency-extraction-webpack-plugin": "^4.31.0", - "@wordpress/e2e-test-utils-playwright": "^0.16.0", - "@wordpress/eslint-plugin": "^17.5.0", - "@wordpress/jest-preset-default": "^11.19.0", - "@wordpress/npm-package-json-lint-config": "^4.33.0", - "@wordpress/postcss-plugins-preset": "^4.32.0", - "@wordpress/prettier-config": "^3.5.0", - "@wordpress/stylelint-config": "^21.31.0", + "@wordpress/babel-preset-default": "^8.1.0", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/dependency-extraction-webpack-plugin": "^6.1.0", + "@wordpress/e2e-test-utils-playwright": "^1.1.0", + "@wordpress/eslint-plugin": "^19.1.0", + "@wordpress/jest-preset-default": "^12.1.0", + "@wordpress/npm-package-json-lint-config": "^5.1.0", + "@wordpress/postcss-plugins-preset": "^5.1.0", + "@wordpress/prettier-config": "^4.1.0", + "@wordpress/stylelint-config": "^22.1.0", "adm-zip": "^0.5.9", "babel-jest": "^29.6.2", "babel-loader": "^8.2.3", @@ -4806,7 +4682,6 @@ "minimist": "^1.2.0", "npm-package-json-lint": "^6.4.0", "npm-packlist": "^3.0.0", - "playwright-core": "1.39.0", "postcss": "^8.4.5", "postcss-loader": "^6.2.1", "prettier": "npm:wp-prettier@3.0.3", @@ -4814,6 +4689,7 @@ "react-refresh": "^0.14.0", "read-pkg-up": "^7.0.1", "resolve-bin": "^0.4.0", + "rtlcss-webpack-plugin": "^4.0.7", "sass": "^1.35.2", "sass-loader": "^12.1.0", "source-map-loader": "^3.0.0", @@ -4829,51 +4705,54 @@ "wp-scripts": "bin/wp-scripts.js" }, "engines": { - "node": ">=14", - "npm": ">=6.14.4" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { - "@playwright/test": "^1.39.0", + "@playwright/test": "^1.43.0", "react": "^18.0.0", "react-dom": "^18.0.0" } }, "node_modules/@wordpress/stylelint-config": { - "version": "21.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.31.0.tgz", - "integrity": "sha512-rorpVMYfFaNWYzg4psfUMpWLkxhD3uwWip6mf96mo/i8De4wxAz6DwKlCPIa4j74SLTiIMrdwXb2qJFNQcjQng==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-22.1.0.tgz", + "integrity": "sha512-5XgYdcReIBecKCem5i1kbf3YnqocWW2nW1mnm6oPJpkimih2f/CWJQUtgATtdsgMjsgDVoQcrfQ9OrJeokB3fA==", "dev": true, "dependencies": { "stylelint-config-recommended": "^6.0.0", "stylelint-config-recommended-scss": "^5.0.2" }, "engines": { - "node": ">=14" + "node": ">=18.12.0", + "npm": ">=8.19.2" }, "peerDependencies": { "stylelint": "^14.2" } }, "node_modules/@wordpress/url": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.49.0.tgz", - "integrity": "sha512-AARE9FMGEf3bf/EKb+OhFivgps38s5fRGFMqeHImP8JvKAt6xc7Q6IrpFOTXkI2BOWA4ERK//PAygR8PR5bgVA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.1.0.tgz", + "integrity": "sha512-6Yi9EbTgUGJgsm6XtfO4By8q2+9pTzWkxzx27ShKGF+PqIgIZjiDssf2NfD/oNUevIy48LbQMbyEyK+9r2Bw9A==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "remove-accents": "^0.5.0" }, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@wordpress/warning": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.48.0.tgz", - "integrity": "sha512-M8KB8OdxHHxLDPy/1DuSi4SKYrR4/LL2jLWS9GkTa0eSe7PKxIscXH3Q0giFwcREkz80J0rFuADCInCuyIr5Kg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.1.0.tgz", + "integrity": "sha512-NKFqBXszT9YFpZJQQyEYqvTtkXse3XT3CDyV8gGWSeKhY4be1nDtFyGdZYYREGXccsGb8ftUmpilTDEVwNnsMA==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18.12.0", + "npm": ">=8.19.2" } }, "node_modules/@xtuc/ieee754": { @@ -5157,12 +5036,12 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/arr-union": { @@ -5175,13 +5054,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5194,15 +5076,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -5230,17 +5113,38 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5285,31 +5189,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { + "node_modules/array.prototype.toreversed": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -5355,15 +5275,6 @@ "node": ">=8" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5371,9 +5282,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -5390,9 +5301,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -5408,10 +5319,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5420,9 +5334,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, "engines": { "node": ">=4" @@ -5440,18 +5354,18 @@ } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", "dev": true }, "node_modules/babel-jest": { @@ -5544,19 +5458,35 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", @@ -5621,12 +5551,43 @@ "@babel/core": "^7.0.0" } }, + "node_modules/babel-runtime": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "integrity": "sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "dev": true, + "optional": true + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5648,9 +5609,9 @@ ] }, "node_modules/basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -5662,15 +5623,6 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5701,13 +5653,13 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -5715,7 +5667,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -5778,18 +5730,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5801,21 +5741,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -5832,10 +5772,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -5946,21 +5886,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -5971,14 +5896,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6054,9 +5984,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true, "funding": [ { @@ -6800,9 +6730,9 @@ } }, "node_modules/core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", "dev": true, "hasInstallScript": true, "funding": { @@ -6811,12 +6741,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -7213,9 +7143,9 @@ "dev": true }, "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "engines": { "node": ">= 14" @@ -7235,6 +7165,57 @@ "node": ">=12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -7328,6 +7309,38 @@ } } }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -7352,200 +7365,6 @@ "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-browser/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -7559,17 +7378,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -7694,15 +7516,6 @@ "node": ">= 0.6.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -7888,9 +7701,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "node_modules/emittery": { @@ -8016,50 +7829,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8068,26 +7888,70 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-module-lexer": { @@ -8096,15 +7960,27 @@ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -8137,9 +8013,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -8306,9 +8182,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -8372,9 +8248,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -8383,7 +8259,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", "eslint": "^7.0.0 || ^8.0.0", "jest": "*" }, @@ -8508,26 +8384,11 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8535,16 +8396,10 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.1.tgz", - "integrity": "sha512-11Ox5LCl2wY7gGkp9UOyew70o9qvii1daAH+h/MFobRVRNcy7sVlH+jm0HQdgcvcru6285GvpjpUyoa051j03Q==", + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "~0.41.0", @@ -8561,7 +8416,7 @@ "node": ">=16" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { @@ -8576,26 +8431,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8613,34 +8453,28 @@ "spdx-license-ids": "^3.0.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "engines": { "node": ">=4.0" @@ -8665,19 +8499,19 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.0.tgz", - "integrity": "sha512-hQc+2zbnMeXcIkg+pKZtVa+3Yqx4WY7SMkn1PLZ4VbBEU7jJIpVn9347P8BBhTbz6ne85aXvQf30kvexcqBeWw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", @@ -8695,27 +8529,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -8725,9 +8561,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -9201,17 +9037,17 @@ "dev": true }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -9249,9 +9085,9 @@ "dev": true }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -9440,9 +9276,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -9606,9 +9442,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -9716,9 +9552,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -9819,16 +9655,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9879,13 +9719,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -9895,52 +9736,20 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/gettext-parser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", @@ -10027,12 +9836,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10146,21 +9956,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -10182,12 +9992,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10197,9 +10007,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -10353,9 +10163,9 @@ } }, "node_modules/http-link-header": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz", - "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", "dev": true, "engines": { "node": ">=6.0.0" @@ -10603,12 +10413,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -10641,11 +10451,18 @@ "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", "dev": true }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/ipaddr.js": { "version": "2.1.0", @@ -10665,15 +10482,33 @@ "node": ">=8" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10785,6 +10620,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -10890,52 +10740,22 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -11054,21 +10874,27 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11117,12 +10943,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -11150,10 +10976,13 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11171,13 +11000,16 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12117,6 +11949,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -12298,9 +12136,9 @@ "dev": true }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "node_modules/language-tags": { @@ -12558,9 +12396,9 @@ } }, "node_modules/lighthouse/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" @@ -13731,6 +13569,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -13759,28 +13613,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13790,39 +13645,45 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14015,9 +13876,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -14027,9 +13888,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -14040,9 +13901,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -14053,13 +13914,12 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { @@ -14223,9 +14083,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -14343,18 +14203,6 @@ "node": ">=8" } }, - "node_modules/playwright-core": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", - "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", - "dev": true, - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", @@ -14370,10 +14218,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -14392,7 +14249,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -15285,9 +15142,9 @@ } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -15297,9 +15154,9 @@ } }, "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -15310,9 +15167,9 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -15530,9 +15387,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -15566,9 +15423,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" @@ -15764,15 +15621,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -15817,14 +15675,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -16058,19 +15917,29 @@ "node": ">=12.0.0" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "node_modules/rtlcss-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/rtlcss-webpack-plugin/-/rtlcss-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-ouSbJtgcLBBQIsMgarxsDnfgRqm/AS4BKls/mz/Xb6HSl+PdEzefTR+Wz5uWQx4odoX0g261Z7yb3QBz0MTm0g==", "dev": true, "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" + "babel-runtime": "~6.25.0", + "rtlcss": "^3.5.0" + } + }, + "node_modules/rtlcss-webpack-plugin/node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rtlcss": "bin/rtlcss.js" } }, "node_modules/run-con": { @@ -16130,13 +15999,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -16168,15 +16037,18 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16471,29 +16343,32 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16572,14 +16447,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16702,26 +16581,26 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -16730,9 +16609,9 @@ } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -16741,12 +16620,6 @@ "node": ">= 14" } }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -16757,9 +16630,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -16954,14 +16827,30 @@ "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamx": { - "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -17006,35 +16895,52 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17044,28 +16950,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17414,12 +17323,12 @@ "dev": true }, "node_modules/synckit": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", - "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "dependencies": { - "@pkgr/utils": "^2.4.2", + "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" }, "engines": { @@ -17585,6 +17494,15 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17615,18 +17533,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -17730,12 +17636,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -17848,29 +17754,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -17880,16 +17787,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -17899,14 +17807,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18034,19 +17948,10 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -18063,8 +17968,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -18275,9 +18180,9 @@ } }, "node_modules/web-vitals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.0.tgz", - "integrity": "sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", + "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==", "dev": true }, "node_modules/webidl-conversions": { @@ -18385,9 +18290,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" @@ -18510,9 +18415,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -18894,31 +18799,34 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -19012,9 +18920,9 @@ } }, "node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -19151,50 +19059,13 @@ } }, "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { @@ -19227,9 +19098,9 @@ } }, "@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz", + "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==", "dev": true, "requires": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -19238,14 +19109,14 @@ } }, "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, @@ -19322,28 +19193,31 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } }, "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-member-expression-to-functions": { @@ -19356,12 +19230,13 @@ } }, "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "requires": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-module-transforms": { @@ -19387,9 +19262,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -19433,24 +19308,24 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/helper-validator-option": { @@ -19482,14 +19357,15 @@ } }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -19530,9 +19406,9 @@ } }, "@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -20212,17 +20088,51 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", - "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + } + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -20464,42 +20374,42 @@ } }, "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } }, @@ -20550,9 +20460,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true }, "@eslint/eslintrc": { @@ -20987,14 +20897,14 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -21004,9 +20914,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/source-map": { @@ -21026,9 +20936,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -21076,74 +20986,11 @@ "fastq": "^1.6.0" } }, - "@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true - }, - "open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "requires": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } + "@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.11", @@ -21195,9 +21042,9 @@ } }, "tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "requires": { "b4a": "^1.6.4", @@ -21893,9 +21740,9 @@ "dev": true }, "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "@types/send": { @@ -22046,16 +21893,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz", - "integrity": "sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/type-utils": "6.15.0", - "@typescript-eslint/utils": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -22065,167 +21912,132 @@ }, "dependencies": { "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true } } }, "@typescript-eslint/parser": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", - "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", - "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "requires": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" } }, "@typescript-eslint/type-utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz", - "integrity": "sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/utils": "6.15.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", - "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", - "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" } }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "brace-expansion": "^2.0.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true } } }, "@typescript-eslint/utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz", - "integrity": "sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true } } }, "@typescript-eslint/visitor-keys": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", - "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "requires": { - "@typescript-eslint/types": "6.15.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "dependencies": { @@ -22402,26 +22214,20 @@ "dev": true }, "@wordpress/api-fetch": { - "version": "6.45.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.45.0.tgz", - "integrity": "sha512-87GhllJcdlxqLugQUx/hL+PE4z7Aqf+AFs8CgzN5/V7INq9IFlIjcbm5TpI4WrGVDSa2puA0tMrjhR/FWXF3NQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.1.0.tgz", + "integrity": "sha512-mtEJi9IBPCRtNxyhP1VAwcLmncpQzt7CQX8rxhC4eAMnicamCG/fwZ3pFEKGXk3MUul3Bl1Q7y/UhdMtCGktGg==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.48.0", - "@wordpress/url": "^3.49.0" + "@wordpress/i18n": "^5.1.0", + "@wordpress/url": "^4.1.0" } }, - "@wordpress/babel-plugin-import-jsx-pragma": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.31.0.tgz", - "integrity": "sha512-WlHCRCLBft3bSqE7FLB09w1gHG6QUQ7WAQpSDdcn6wRuLX45ZeMeT6YDqUdJdlYPRBx6Ke9WzrmAT7PrGLZi1Q==", - "dev": true - }, "@wordpress/babel-preset-default": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.32.0.tgz", - "integrity": "sha512-B1S+JujsX3kZWp1jnSuvUu+hlJhp9j1TSlOmar+yuVCjH0vx/aW/58onKvCFNPTy3gJ00bSsYa3BctoCHs456A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.1.0.tgz", + "integrity": "sha512-3KXhocrFT+PKVXHWeCwTphPr2RRWiIx9mQBuFlNfTlf/zd2fMob4ZIHkG6zNsidP+afnFTdrZR3tTI0TL9/uAg==", "dev": true, "requires": { "@babel/core": "^7.16.0", @@ -22430,45 +22236,43 @@ "@babel/preset-env": "^7.16.0", "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^4.31.0", - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/warning": "^2.48.0", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/warning": "^3.1.0", "browserslist": "^4.21.10", "core-js": "^3.31.0", - "react": "^18.2.0" + "react": "^18.3.0" } }, "@wordpress/base-styles": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.39.0.tgz", - "integrity": "sha512-Obc6fKAnqzuWQSLgoce2yxhwMLd0nu4j7k3pVkBSzuitPw1LokmzHcHWPpgpMGR1T8CzKuj0Wsybcr2n3Xtyug==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-5.1.0.tgz", + "integrity": "sha512-HVUuN+y9UwnIgLQj1lYC71jP+JPWuW9WWCVSLPVwKTJtwrxAVKxSf3PLUaXRhhhNt5NXSqev2wuR3qQbZJ/L+g==", "dev": true }, "@wordpress/browserslist-config": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.31.0.tgz", - "integrity": "sha512-fjglKNuqMKfGXrxuqea8ndTLkga9MfnyBBYuniGZ7cQo3iOhOn6ZqlfKygZdAuZ19FOwQWaQ+9W9MpOtU/4oCA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", "dev": true }, "@wordpress/dependency-extraction-webpack-plugin": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.31.0.tgz", - "integrity": "sha512-Xpm8EEhi6e8GL1juYh/70AFbcE/ZVXJ3p47KMkkEsn5t+hG9QHjKe2lTj98v2r3rB+ampoK+whdV1w6gItXYpw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.1.0.tgz", + "integrity": "sha512-Dodnc0yn6Q7jZW2S5hUFa/3Ls6/OVUp6mXsPr6HvaTZsy9IzrNJJdTiIbk5nNRXDFt7Yv+f8CB/QIdwV0tweag==", "dev": true, "requires": { - "json2php": "^0.0.7", - "webpack-sources": "^3.2.2" + "json2php": "^0.0.7" } }, "@wordpress/e2e-test-utils-playwright": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.16.0.tgz", - "integrity": "sha512-CktRj5/Cc/pAvTHXIAPIMrmmnb0VjtXbTGSjYG6pW/JI2YAmpwY2yBA+DlHJjqOIpcjDDj+sSsJomRSxT2chwQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.1.0.tgz", + "integrity": "sha512-lGA7/6S1Rsa9Zf7qnAs1nOWn8lPpg8vBOwUWHPBqV1a79r7nsD2KQqsrqsKy8wIJ763fIt5LljjD9VSca0UtIQ==", "dev": true, "requires": { - "@wordpress/api-fetch": "^6.45.0", - "@wordpress/keycodes": "^3.48.0", - "@wordpress/url": "^3.49.0", + "@wordpress/api-fetch": "^7.1.0", + "@wordpress/keycodes": "^4.1.0", + "@wordpress/url": "^4.1.0", "change-case": "^4.1.2", "form-data": "^4.0.0", "get-port": "^5.1.1", @@ -22478,16 +22282,16 @@ } }, "@wordpress/eslint-plugin": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.5.0.tgz", - "integrity": "sha512-wwg4NTMSdiDbkJCFNirn1Oq+Q6wKKWXXmuhsRvK4KsIkayqHavmebnE9bctAiz4ZXI5+URpj8w/IdxYev8acYw==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-19.1.0.tgz", + "integrity": "sha512-/qh8Q5VWg6xoVS6x5KnRmLQeKIquVs/kmHkgatljF9mqPV4QVL12LQoc4DO0QbQq5Jz2aqk/jod/UHYwEWrv+Q==", "dev": true, "requires": { "@babel/eslint-parser": "^7.16.0", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", - "@wordpress/babel-preset-default": "^7.32.0", - "@wordpress/prettier-config": "^3.5.0", + "@wordpress/babel-preset-default": "^8.1.0", + "@wordpress/prettier-config": "^4.1.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", @@ -22514,22 +22318,22 @@ } }, "@wordpress/hooks": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.48.0.tgz", - "integrity": "sha512-vFmjpq/XN2bYgz67BS2ZC0n4P1FZUi0UPv8PTMKK+dzCPhQRYrJb8DRhBafwu2mXRzw4rO7vmVTCNJQM6xVObQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.1.0.tgz", + "integrity": "sha512-uJ2zyLLs6AwWuEdLGv/P7oSXJuX27Ym6JglzWGBavxAKNXpTCCjiJwgxlZJbSjT3BzhRsRGl3bUMmzt3eh50Pg==", "dev": true, "requires": { "@babel/runtime": "^7.16.0" } }, "@wordpress/i18n": { - "version": "4.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.48.0.tgz", - "integrity": "sha512-CEaBkh1o1lArLqSv9misdmu4hNhs15Fc1tu9t/CzVWPhm7JkkZUi/+mfdAsQmMuON4lJLZKfOjjcRIfTq9YHhA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.1.0.tgz", + "integrity": "sha512-zNJiudByLnpIVhIS45hr92r53t+wRYp9a6XOJ585xNYeUmoUpymY5GTdLSrExmQaytMhV5cSXSn3qMMDBMjUsg==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^3.48.0", + "@wordpress/hooks": "^4.1.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", @@ -22537,9 +22341,9 @@ } }, "@wordpress/jest-console": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.19.0.tgz", - "integrity": "sha512-x35izGNCLo7xoK770I7O/+m6sE/a9lmo6QqyDoR1AZaUwk0PAY35EGrbbi3FfXeReTXBRNJ1MpnQyvskg8o/Gw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.1.0.tgz", + "integrity": "sha512-yTgZ+JdM3e2dhhfMtEJLDZwmUWAv2a4Asy+1uu/ZzY+ChsPPBNgHLxQtyTOknnyJtfwLm+gQfFxpiS/OwyzMVQ==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", @@ -22547,66 +22351,66 @@ } }, "@wordpress/jest-preset-default": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.19.0.tgz", - "integrity": "sha512-9BbUDZaa6Cg9dz+JyfOe30C8JJrhCkyaFqCqSNJEcyB4KK83qp2QRkblVXABmHarw4oPfg+OJLLALIAA045a0w==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-12.1.0.tgz", + "integrity": "sha512-Qp+2PFMkJw+dh+y/OlUkV7AoRwK6q3Cd0gXXotChO7wi6/xp7LeFmdjjRIC5IERQ0AeaWUS44MF5lb0GSSmCEQ==", "dev": true, "requires": { - "@wordpress/jest-console": "^7.19.0", + "@wordpress/jest-console": "^8.1.0", "babel-jest": "^29.6.2" } }, "@wordpress/keycodes": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.48.0.tgz", - "integrity": "sha512-VhNsfx5h1haKafyiXNW8o+goVLq2mLNhZUTwk3qc07dLfwW/kg6h2zrdWyYYJzRb2UhLd+DXbBcvukRnFUm3Aw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.1.0.tgz", + "integrity": "sha512-ibAR7qg4q7082s9kOPnZ0Hqb6KM/zjAZBjEH2Yrc2jwLJ83QDGKDWCSx6dNYkN7m9jGpH52w8j4nz1wcbFZSiw==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^4.48.0" + "@wordpress/i18n": "^5.1.0" } }, "@wordpress/npm-package-json-lint-config": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.33.0.tgz", - "integrity": "sha512-GBVGcn6xAqrWQueSlMVMHoebGsHvildWwcJ/lIpxh7i7V/VBoc9Z8rdUEKAip6lTjZx+mCmzXQH4hU3QdNA/RA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.1.0.tgz", + "integrity": "sha512-eYT737t5i051V2RG5+/dP/3uXvtoR2e+liewKbgkanvdKotRT2XbXdiDSodiSjF8N7f8YrthvMF4Y2Mw9AVtSQ==", "dev": true }, "@wordpress/postcss-plugins-preset": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.32.0.tgz", - "integrity": "sha512-+4+chYW8pRd7Irzm8lXom5Axs765q4me1mT+FBskfotUroAvoJtmfAybmyhIvTirTwLaN7ugOYiSBjAD6M7+rg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.1.0.tgz", + "integrity": "sha512-t6szmy/pmhx0vu8Spa1sBMN6XX94bMXVfKZ/Az1X1R+bzgya+PAGhJBYZL9szHGzavW9aaiA32xPRc8Rr0YfcA==", "dev": true, "requires": { - "@wordpress/base-styles": "^4.39.0", + "@wordpress/base-styles": "^5.1.0", "autoprefixer": "^10.2.5" } }, "@wordpress/prettier-config": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.5.0.tgz", - "integrity": "sha512-Nzp6TWu+nx1fzgqqa34/MdBiRDT/Yoqo8jFHBrYhx1kV3BPg8m5lvyGxNmzqoR3hZQatGkBJYdFlLs0WeAGGDQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.1.0.tgz", + "integrity": "sha512-sWqX/hKvXne6QhTGWW8LbYSiNc2xLfuVcInrBaam4uMvZeCqWQUS90VAhNvBF0e6wRnMFqxcUKDF1xDGmVheGA==", "dev": true }, "@wordpress/scripts": { - "version": "26.19.0", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.19.0.tgz", - "integrity": "sha512-m3QYlgpWRfIqCfU4jWKwGeA12Qkt6d9CMewEIxIBGVlEGd/sL5rU1fM7LKNBEbSPQpaOTWJApNGWPcW75Fwp+w==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.1.0.tgz", + "integrity": "sha512-BWmYA0fqOhfMcl20ppcJA/nw/zixt0FP6KPV+IiI560qpSHx6ZZieU354oX/5Vdaoe4O3ahPlGdUr9fWcprApQ==", "dev": true, "requires": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^7.32.0", - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/dependency-extraction-webpack-plugin": "^4.31.0", - "@wordpress/e2e-test-utils-playwright": "^0.16.0", - "@wordpress/eslint-plugin": "^17.5.0", - "@wordpress/jest-preset-default": "^11.19.0", - "@wordpress/npm-package-json-lint-config": "^4.33.0", - "@wordpress/postcss-plugins-preset": "^4.32.0", - "@wordpress/prettier-config": "^3.5.0", - "@wordpress/stylelint-config": "^21.31.0", + "@wordpress/babel-preset-default": "^8.1.0", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/dependency-extraction-webpack-plugin": "^6.1.0", + "@wordpress/e2e-test-utils-playwright": "^1.1.0", + "@wordpress/eslint-plugin": "^19.1.0", + "@wordpress/jest-preset-default": "^12.1.0", + "@wordpress/npm-package-json-lint-config": "^5.1.0", + "@wordpress/postcss-plugins-preset": "^5.1.0", + "@wordpress/prettier-config": "^4.1.0", + "@wordpress/stylelint-config": "^22.1.0", "adm-zip": "^0.5.9", "babel-jest": "^29.6.2", "babel-loader": "^8.2.3", @@ -22634,7 +22438,6 @@ "minimist": "^1.2.0", "npm-package-json-lint": "^6.4.0", "npm-packlist": "^3.0.0", - "playwright-core": "1.39.0", "postcss": "^8.4.5", "postcss-loader": "^6.2.1", "prettier": "npm:wp-prettier@3.0.3", @@ -22642,6 +22445,7 @@ "react-refresh": "^0.14.0", "read-pkg-up": "^7.0.1", "resolve-bin": "^0.4.0", + "rtlcss-webpack-plugin": "^4.0.7", "sass": "^1.35.2", "sass-loader": "^12.1.0", "source-map-loader": "^3.0.0", @@ -22655,9 +22459,9 @@ } }, "@wordpress/stylelint-config": { - "version": "21.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.31.0.tgz", - "integrity": "sha512-rorpVMYfFaNWYzg4psfUMpWLkxhD3uwWip6mf96mo/i8De4wxAz6DwKlCPIa4j74SLTiIMrdwXb2qJFNQcjQng==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-22.1.0.tgz", + "integrity": "sha512-5XgYdcReIBecKCem5i1kbf3YnqocWW2nW1mnm6oPJpkimih2f/CWJQUtgATtdsgMjsgDVoQcrfQ9OrJeokB3fA==", "dev": true, "requires": { "stylelint-config-recommended": "^6.0.0", @@ -22665,9 +22469,9 @@ } }, "@wordpress/url": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.49.0.tgz", - "integrity": "sha512-AARE9FMGEf3bf/EKb+OhFivgps38s5fRGFMqeHImP8JvKAt6xc7Q6IrpFOTXkI2BOWA4ERK//PAygR8PR5bgVA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.1.0.tgz", + "integrity": "sha512-6Yi9EbTgUGJgsm6XtfO4By8q2+9pTzWkxzx27ShKGF+PqIgIZjiDssf2NfD/oNUevIy48LbQMbyEyK+9r2Bw9A==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", @@ -22675,9 +22479,9 @@ } }, "@wordpress/warning": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.48.0.tgz", - "integrity": "sha512-M8KB8OdxHHxLDPy/1DuSi4SKYrR4/LL2jLWS9GkTa0eSe7PKxIscXH3Q0giFwcREkz80J0rFuADCInCuyIr5Kg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.1.0.tgz", + "integrity": "sha512-NKFqBXszT9YFpZJQQyEYqvTtkXse3XT3CDyV8gGWSeKhY4be1nDtFyGdZYYREGXccsGb8ftUmpilTDEVwNnsMA==", "dev": true }, "@xtuc/ieee754": { @@ -22885,12 +22689,12 @@ } }, "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "requires": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "arr-union": { @@ -22900,13 +22704,13 @@ "dev": true }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" } }, "array-flatten": { @@ -22916,15 +22720,16 @@ "dev": true }, "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, @@ -22940,17 +22745,32 @@ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, + "array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flat": { @@ -22977,31 +22797,44 @@ "es-shim-unscopables": "^1.0.0" } }, - "array.prototype.tosorted": { + "array.prototype.toreversed": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" } }, "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, @@ -23032,15 +22865,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -23048,29 +22872,32 @@ "dev": true }, "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" } }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true }, "axios": { @@ -23085,18 +22912,18 @@ } }, "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, "requires": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", "dev": true }, "babel-jest": { @@ -23165,14 +22992,29 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "requires": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + } } }, "babel-plugin-polyfill-corejs3": { @@ -23220,8 +23062,32 @@ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-runtime": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "integrity": "sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==", + "dev": true + } } }, "balanced-match": { @@ -23230,6 +23096,13 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "dev": true, + "optional": true + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -23237,9 +23110,9 @@ "dev": true }, "basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true }, "batch": { @@ -23248,12 +23121,6 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, - "big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -23278,13 +23145,13 @@ } }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -23292,7 +23159,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -23347,15 +23214,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "requires": { - "big-integer": "^1.6.44" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -23367,24 +23225,24 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" } }, "bser": { @@ -23459,15 +23317,6 @@ } } }, - "bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "requires": { - "run-applescript": "^5.0.0" - } - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -23475,14 +23324,16 @@ "dev": true }, "call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -23539,9 +23390,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true }, "capital-case": { @@ -24103,18 +23954,18 @@ } }, "core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", "dev": true }, "core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "requires": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" } }, "core-js-pure": { @@ -24416,9 +24267,9 @@ "dev": true }, "data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true }, "data-urls": { @@ -24432,6 +24283,39 @@ "whatwg-url": "^11.0.0" } }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -24492,6 +24376,32 @@ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true }, + "deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -24510,132 +24420,6 @@ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, - "default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "requires": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "requires": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - } - }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -24646,14 +24430,14 @@ } }, "define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, "define-lazy-prop": { @@ -24749,12 +24533,6 @@ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -24896,9 +24674,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "emittery": { @@ -24994,72 +24772,111 @@ } }, "es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" } }, - "es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "requires": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + } + }, + "es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" } }, "es-module-lexer": { @@ -25068,15 +24885,24 @@ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, "es-shim-unscopables": { @@ -25100,9 +24926,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-html": { @@ -25344,9 +25170,9 @@ } }, "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "requires": { "debug": "^3.2.7" @@ -25400,9 +25226,9 @@ } }, "eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.10.0" @@ -25471,36 +25297,18 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true } } }, "eslint-plugin-jsdoc": { - "version": "46.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.1.tgz", - "integrity": "sha512-11Ox5LCl2wY7gGkp9UOyew70o9qvii1daAH+h/MFobRVRNcy7sVlH+jm0HQdgcvcru6285GvpjpUyoa051j03Q==", + "version": "46.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", + "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", "dev": true, "requires": { "@es-joy/jsdoccomment": "~0.41.0", @@ -25520,23 +25328,11 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true }, "spdx-expression-parse": { "version": "4.0.0", @@ -25547,37 +25343,31 @@ "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, "eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "requires": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" } }, "eslint-plugin-playwright": { @@ -25587,37 +25377,39 @@ "dev": true }, "eslint-plugin-prettier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.0.tgz", - "integrity": "sha512-hQc+2zbnMeXcIkg+pKZtVa+3Yqx4WY7SMkn1PLZ4VbBEU7jJIpVn9347P8BBhTbz6ne85aXvQf30kvexcqBeWw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.8.6" } }, "eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11" }, "dependencies": { "estraverse": { @@ -25640,9 +25432,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true }, "eslint-scope": { @@ -25848,17 +25640,17 @@ "dev": true }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -25893,9 +25685,9 @@ "dev": true }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true }, "debug": { @@ -26050,9 +25842,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -26181,9 +25973,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true }, "for-each": { @@ -26252,9 +26044,9 @@ "dev": true }, "fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -26326,11 +26118,12 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", @@ -26362,53 +26155,26 @@ "dev": true }, "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, "get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, "requires": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } + "fs-extra": "^11.2.0" } }, "gettext-parser": { @@ -26479,12 +26245,13 @@ "dev": true }, "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, "globby": { @@ -26568,18 +26335,18 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true }, "has-symbols": { @@ -26589,18 +26356,18 @@ "dev": true }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "requires": { "function-bind": "^1.1.2" @@ -26728,9 +26495,9 @@ } }, "http-link-header": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz", - "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", "dev": true }, "http-parser-js": { @@ -26899,12 +26666,12 @@ "dev": true }, "internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" } @@ -26930,11 +26697,15 @@ "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", "dev": true }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + } }, "ipaddr.js": { "version": "2.1.0", @@ -26948,15 +26719,24 @@ "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", "dev": true }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" } }, "is-arrayish": { @@ -27032,6 +26812,15 @@ "hasown": "^2.0.0" } }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -27098,33 +26887,16 @@ "is-extglob": "^2.1.1" } }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "requires": { - "is-docker": "^3.0.0" - }, - "dependencies": { - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true - } - } - }, "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true }, "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, "is-number": { @@ -27201,18 +26973,18 @@ } }, "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true }, "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-stream": { @@ -27240,12 +27012,12 @@ } }, "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" } }, "is-typedarray": { @@ -27261,9 +27033,9 @@ "dev": true }, "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true }, "is-weakref": { @@ -27276,13 +27048,13 @@ } }, "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" } }, "is-windows": { @@ -28007,6 +27779,12 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -28147,9 +27925,9 @@ "dev": true }, "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "language-tags": { @@ -28315,9 +28093,9 @@ } }, "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true }, "yargs-parser": { @@ -29247,6 +29025,16 @@ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, + "object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -29266,58 +29054,59 @@ } }, "object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, "object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "requires": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "obuf": { @@ -29453,18 +29242,18 @@ }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "requires": { "debug": "^4.3.4" } }, "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "requires": { "agent-base": "^7.1.0", @@ -29472,9 +29261,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "requires": { "agent-base": "^7.0.2", @@ -29484,13 +29273,12 @@ } }, "pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "requires": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" } }, @@ -29621,9 +29409,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -29707,12 +29495,6 @@ } } }, - "playwright-core": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", - "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", - "dev": true - }, "plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", @@ -29722,15 +29504,21 @@ "irregular-plurals": "^3.2.0" } }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-calc": { @@ -30286,18 +30074,18 @@ }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "requires": { "debug": "^4.3.4" } }, "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "requires": { "agent-base": "^7.1.0", @@ -30305,9 +30093,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "requires": { "agent-base": "^7.0.2", @@ -30454,9 +30242,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", @@ -30483,9 +30271,9 @@ } }, "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "requires": { "loose-envify": "^1.1.0" @@ -30636,15 +30424,16 @@ } }, "reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" } @@ -30680,14 +30469,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, "regexpp": { @@ -30855,13 +30645,28 @@ "strip-json-comments": "^3.1.1" } }, - "run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "rtlcss-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/rtlcss-webpack-plugin/-/rtlcss-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-ouSbJtgcLBBQIsMgarxsDnfgRqm/AS4BKls/mz/Xb6HSl+PdEzefTR+Wz5uWQx4odoX0g261Z7yb3QBz0MTm0g==", "dev": true, "requires": { - "execa": "^5.0.0" + "babel-runtime": "~6.25.0", + "rtlcss": "^3.5.0" + }, + "dependencies": { + "rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + } + } } }, "run-con": { @@ -30903,13 +30708,13 @@ } }, "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } @@ -30921,13 +30726,13 @@ "dev": true }, "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, @@ -31153,26 +30958,29 @@ } }, "set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" } }, "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" } }, "setprototypeof": { @@ -31232,14 +31040,15 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -31336,38 +31145,30 @@ } }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "requires": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" - }, - "dependencies": { - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - } } }, "socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "requires": { "debug": "^4.3.4" @@ -31382,9 +31183,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "source-map-loader": { @@ -31545,14 +31346,25 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, "streamx": { - "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "requires": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" } }, "string_decoder": { @@ -31593,54 +31405,68 @@ } } }, + "string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" } }, "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "strip-ansi": { @@ -31898,12 +31724,12 @@ "dev": true }, "synckit": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", - "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, "requires": { - "@pkgr/utils": "^2.4.2", + "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" } }, @@ -32024,6 +31850,15 @@ "minimatch": "^3.0.4" } }, + "text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dev": true, + "requires": { + "b4a": "^1.6.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -32054,12 +31889,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -32136,9 +31965,9 @@ } }, "ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true }, "tsconfig-paths": { @@ -32225,50 +32054,55 @@ } }, "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" } }, "typedarray-to-buffer": { @@ -32363,20 +32197,14 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "upper-case": { @@ -32538,9 +32366,9 @@ } }, "web-vitals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.0.tgz", - "integrity": "sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", + "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==", "dev": true }, "webidl-conversions": { @@ -32615,9 +32443,9 @@ "dev": true }, "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true } } @@ -32687,9 +32515,9 @@ } }, "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -32967,28 +32795,28 @@ } }, "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, "which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" } }, "wildcard": { @@ -33057,9 +32885,9 @@ } }, "ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true }, "xdg-basedir": { diff --git a/src/wp-content/themes/twentytwenty/package.json b/src/wp-content/themes/twentytwenty/package.json index 767d34cbb18a3..c41051769b248 100644 --- a/src/wp-content/themes/twentytwenty/package.json +++ b/src/wp-content/themes/twentytwenty/package.json @@ -18,11 +18,11 @@ "npm": ">=9.8.1" }, "devDependencies": { - "@wordpress/browserslist-config": "^5.31.0", - "@wordpress/scripts": "^26.19.0", - "autoprefixer": "^10.4.16", + "@wordpress/browserslist-config": "^6.1.0", + "@wordpress/scripts": "^28.1.0", + "autoprefixer": "^10.4.19", "concurrently": "^8.2.2", - "postcss": "^8.4.32", + "postcss": "^8.4.38", "postcss-cli": "^11.0.0", "rtlcss": "^4.1.1", "stylelint-a11y": "^1.2.3" diff --git a/src/wp-content/themes/twentytwentyone/package-lock.json b/src/wp-content/themes/twentytwentyone/package-lock.json index 0641efa202bdd..d8cc25bf50faf 100644 --- a/src/wp-content/themes/twentytwentyone/package-lock.json +++ b/src/wp-content/themes/twentytwentyone/package-lock.json @@ -9,28 +9,28 @@ "version": "2.2.0", "license": "GPL-2.0-or-later", "devDependencies": { - "@wordpress/browserslist-config": "^5.30.0", + "@wordpress/browserslist-config": "^6.1.0", "@wordpress/eslint-plugin": "^17.4.0", "@wordpress/stylelint-config": "^21.30.0", - "autoprefixer": "^10.4.13", + "autoprefixer": "^10.4.19", "chokidar-cli": "^3.0.0", "eslint": "^8.55.0", "minimist": "^1.2.8", "npm-run-all": "^4.1.5", - "postcss": "^8.4.32", - "postcss-calc": "^9.0.1", - "postcss-cli": "^10.1.0", + "postcss": "^8.4.38", + "postcss-calc": "^10.0.0", + "postcss-cli": "^11.0.0", "postcss-css-variables": "^0.19.0", - "postcss-custom-media": "^10.0.2", - "postcss-discard-duplicates": "^6.0.0", - "postcss-discard-empty": "^6.0.0", - "postcss-focus-within": "^8.0.0", - "postcss-merge-rules": "^6.0.1", + "postcss-custom-media": "^10.0.6", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-focus-within": "^8.0.1", + "postcss-merge-rules": "^7.0.2", "postcss-nested": "^6.0.0", "rtlcss": "^4.0.0", - "sass": "^1.58.0", + "sass": "^1.77.6", "stylelint": "^14.16.1", - "stylelint-config-recommended-scss": "^13.1.0" + "stylelint-config-recommended-scss": "^14.0.0" }, "engines": { "node": ">=20.10.0", @@ -1959,9 +1959,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", - "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "funding": [ { @@ -1977,14 +1977,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "funding": [ { @@ -2000,13 +2000,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true, "funding": [ { @@ -2023,9 +2023,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "funding": [ { @@ -2041,8 +2041,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/selector-specificity": { @@ -2279,6 +2279,18 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2557,15 +2569,25 @@ "node": ">=14" } }, - "node_modules/@wordpress/browserslist-config": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.30.0.tgz", - "integrity": "sha512-HFgLCkvvxba+j7/qNjVn1od38tvMm1xVlIJBR+zukkTvvLu/AkdelWKAQpvAoFAXMaZJ7239VxDVBYbVolf6FQ==", + "node_modules/@wordpress/babel-preset-default/node_modules/@wordpress/browserslist-config": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.41.0.tgz", + "integrity": "sha512-J7ejzzDpPZddVIiq2YiK8J/pNTJDy3X1s+5ZtwkwklCxBMZJurxf9pEhtbaf7us0Q6c1j8Ubv7Fpx3lqk2ypxA==", "dev": true, "engines": { "node": ">=14" } }, + "node_modules/@wordpress/browserslist-config": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", + "dev": true, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, "node_modules/@wordpress/eslint-plugin": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.4.0.tgz", @@ -3307,9 +3329,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -3326,9 +3348,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -3453,21 +3475,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -3484,10 +3506,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -3584,9 +3606,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001562", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", - "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true, "funding": [ { @@ -3797,15 +3819,15 @@ } }, "node_modules/cssnano-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", - "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/damerau-levenshtein": { @@ -3963,9 +3985,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", - "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "node_modules/emoji-regex": { @@ -4036,9 +4058,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -5030,9 +5052,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -6159,12 +6181,15 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -6500,9 +6525,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-package-data": { @@ -7550,9 +7575,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -7589,9 +7614,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -7610,41 +7635,41 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" } }, "node_modules/postcss-cli": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", - "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", + "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", "dev": true, "dependencies": { "chokidar": "^3.3.0", "dependency-graph": "^0.11.0", "fs-extra": "^11.0.0", "get-stdin": "^9.0.0", - "globby": "^13.0.0", + "globby": "^14.0.0", "picocolors": "^1.0.0", - "postcss-load-config": "^4.0.0", + "postcss-load-config": "^5.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", @@ -7655,7 +7680,7 @@ "postcss": "index.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { "postcss": "^8.0.0" @@ -7736,31 +7761,20 @@ } }, "node_modules/postcss-cli/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss-cli/node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7775,10 +7789,22 @@ "node": ">=8" } }, - "node_modules/postcss-cli/node_modules/slash": { + "node_modules/postcss-cli/node_modules/path-type": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz", - "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "engines": { "node": ">=14.16" @@ -7881,9 +7907,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", - "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "funding": [ { @@ -7896,10 +7922,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.5", - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1", - "@csstools/media-query-list-parser": "^2.1.5" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -7909,33 +7935,33 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", - "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", - "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-focus-within": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz", - "integrity": "sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz", + "integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==", "dev": true, "funding": [ { @@ -7958,39 +7984,52 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" }, "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 18" }, "peerDependencies": { + "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" + "tsx": "^4.8.1" }, "peerDependenciesMeta": { + "jiti": { + "optional": true + }, "postcss": { "optional": true }, - "ts-node": { + "tsx": { "optional": true } } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -8002,21 +8041,21 @@ "dev": true }, "node_modules/postcss-merge-rules": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", - "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz", + "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.0", - "postcss-selector-parser": "^6.0.5" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-nested": { @@ -8107,9 +8146,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -8719,9 +8758,9 @@ } }, "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -8886,9 +8925,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9285,18 +9324,21 @@ } }, "node_modules/stylelint-config-recommended-scss": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz", + "integrity": "sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==", "dev": true, "dependencies": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" + "stylelint-config-recommended": "^14.0.0", + "stylelint-scss": "^6.0.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.0.2" }, "peerDependenciesMeta": { "postcss": { @@ -9305,37 +9347,50 @@ } }, "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-scss": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.1.tgz", - "integrity": "sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.3.2.tgz", + "integrity": "sha512-pNk9mXOVKkQtd+SROPC9io8ISSgX+tOVPhFdBE+LaKQnJMLdWPbGKAGYv4Wmf/RrnOjkutunNTN9kKMhkdE5qA==", "dev": true, "dependencies": { - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.31.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" + "stylelint": "^16.0.2" } }, "node_modules/stylelint-scss/node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", + "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", "dev": true }, "node_modules/stylelint/node_modules/ansi-regex": { @@ -9791,6 +9846,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -9810,9 +9877,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -9829,8 +9896,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -11378,27 +11445,27 @@ } }, "@csstools/cascade-layer-name-parser": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", - "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true }, "@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true }, "@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true }, "@csstools/selector-specificity": { @@ -11566,6 +11633,12 @@ "tslib": "^2.6.0" } }, + "@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true + }, "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -11740,12 +11813,20 @@ "browserslist": "^4.21.10", "core-js": "^3.31.0", "react": "^18.2.0" + }, + "dependencies": { + "@wordpress/browserslist-config": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.41.0.tgz", + "integrity": "sha512-J7ejzzDpPZddVIiq2YiK8J/pNTJDy3X1s+5ZtwkwklCxBMZJurxf9pEhtbaf7us0Q6c1j8Ubv7Fpx3lqk2ypxA==", + "dev": true + } } }, "@wordpress/browserslist-config": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.30.0.tgz", - "integrity": "sha512-HFgLCkvvxba+j7/qNjVn1od38tvMm1xVlIJBR+zukkTvvLu/AkdelWKAQpvAoFAXMaZJ7239VxDVBYbVolf6FQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.1.0.tgz", + "integrity": "sha512-cf5iwPq6JetQjiaRwlvzW5eX0S3OphVmy1YTxHQdrVqp79rOGvamVftxqvmf3C/GSRaNyI4eZV+nNwNRN0DkrQ==", "dev": true }, "@wordpress/eslint-plugin": { @@ -12274,14 +12355,14 @@ "dev": true }, "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -12375,24 +12456,24 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" } }, "builtin-modules": { @@ -12456,9 +12537,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001562", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", - "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true }, "chalk": { @@ -12608,9 +12689,9 @@ "dev": true }, "cssnano-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", - "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true }, "damerau-levenshtein": { @@ -12720,9 +12801,9 @@ } }, "electron-to-chromium": { - "version": "1.4.582", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", - "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==", + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", "dev": true }, "emoji-regex": { @@ -12781,9 +12862,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-string-regexp": { @@ -13480,9 +13561,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -14299,9 +14380,9 @@ } }, "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true }, "lines-and-columns": { @@ -14556,9 +14637,9 @@ "dev": true }, "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "normalize-package-data": { @@ -15314,9 +15395,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -15338,39 +15419,39 @@ "dev": true }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" } }, "postcss-cli": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", - "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", + "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", "dev": true, "requires": { "chokidar": "^3.3.0", "dependency-graph": "^0.11.0", "fs-extra": "^11.0.0", "get-stdin": "^9.0.0", - "globby": "^13.0.0", + "globby": "^14.0.0", "picocolors": "^1.0.0", - "postcss-load-config": "^4.0.0", + "postcss-load-config": "^5.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", @@ -15432,24 +15513,17 @@ "dev": true }, "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "dependencies": { - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" } }, "is-fullwidth-code-point": { @@ -15458,10 +15532,16 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "slash": { + "path-type": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz", - "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true }, "string-width": { @@ -15536,52 +15616,52 @@ } }, "postcss-custom-media": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", - "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.5", - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1", - "@csstools/media-query-list-parser": "^2.1.5" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "postcss-discard-duplicates": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", - "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true }, "postcss-discard-empty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", - "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true }, "postcss-focus-within": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz", - "integrity": "sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz", + "integrity": "sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.13" } }, "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", "dev": true, "requires": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" }, "dependencies": { "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true } } @@ -15593,15 +15673,15 @@ "dev": true }, "postcss-merge-rules": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", - "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz", + "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==", "dev": true, "requires": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.0", - "postcss-selector-parser": "^6.0.5" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.0" } }, "postcss-nested": { @@ -15642,9 +15722,9 @@ "dev": true }, "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -16089,9 +16169,9 @@ } }, "sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -16215,9 +16295,9 @@ } }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "spdx-correct": { @@ -16570,41 +16650,41 @@ "dev": true }, "stylelint-config-recommended-scss": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz", + "integrity": "sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==", "dev": true, "requires": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" + "stylelint-config-recommended": "^14.0.0", + "stylelint-scss": "^6.0.0" }, "dependencies": { "stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true } } }, "stylelint-scss": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.1.tgz", - "integrity": "sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.3.2.tgz", + "integrity": "sha512-pNk9mXOVKkQtd+SROPC9io8ISSgX+tOVPhFdBE+LaKQnJMLdWPbGKAGYv4Wmf/RrnOjkutunNTN9kKMhkdE5qA==", "dev": true, "requires": { - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.31.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0" }, "dependencies": { "known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", + "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", "dev": true } } @@ -16902,6 +16982,12 @@ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -16915,13 +17001,13 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { diff --git a/src/wp-content/themes/twentytwentyone/package.json b/src/wp-content/themes/twentytwentyone/package.json index c8b4ae6baf02b..e15d84ea7c038 100644 --- a/src/wp-content/themes/twentytwentyone/package.json +++ b/src/wp-content/themes/twentytwentyone/package.json @@ -17,28 +17,28 @@ "npm": ">=10.2.3" }, "devDependencies": { - "@wordpress/browserslist-config": "^5.30.0", + "@wordpress/browserslist-config": "^6.1.0", "@wordpress/eslint-plugin": "^17.4.0", "@wordpress/stylelint-config": "^21.30.0", - "autoprefixer": "^10.4.13", + "autoprefixer": "^10.4.19", "chokidar-cli": "^3.0.0", "eslint": "^8.55.0", "minimist": "^1.2.8", "npm-run-all": "^4.1.5", - "postcss": "^8.4.32", - "postcss-calc": "^9.0.1", - "postcss-cli": "^10.1.0", + "postcss": "^8.4.38", + "postcss-calc": "^10.0.0", + "postcss-cli": "^11.0.0", "postcss-css-variables": "^0.19.0", - "postcss-custom-media": "^10.0.2", - "postcss-discard-duplicates": "^6.0.0", - "postcss-discard-empty": "^6.0.0", - "postcss-focus-within": "^8.0.0", - "postcss-merge-rules": "^6.0.1", + "postcss-custom-media": "^10.0.6", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-focus-within": "^8.0.1", + "postcss-merge-rules": "^7.0.2", "postcss-nested": "^6.0.0", "rtlcss": "^4.0.0", - "sass": "^1.58.0", + "sass": "^1.77.6", "stylelint": "^14.16.1", - "stylelint-config-recommended-scss": "^13.1.0" + "stylelint-config-recommended-scss": "^14.0.0" }, "rtlcssConfig": { "options": { From 3f9e4506732b1baab5ca94eb8ccd94dd0a5570b8 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 25 Jun 2024 13:03:30 +0000 Subject: [PATCH 020/422] Build/Test Tools: Update npm `devDependencies` 6.6. This updates the npm `devDependencies` for Core to their latest versions, with one exception. The latest version of `sinon` causes some test failures and requires more investigation. Fixes #61498. git-svn-id: https://develop.svn.wordpress.org/trunk@58563 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 3118 +++++++++++++---- package.json | 26 +- .../assets/script-loader-packages.min.php | 2 +- 3 files changed, 2357 insertions(+), 789 deletions(-) diff --git a/package-lock.json b/package-lock.json index 064ede8cfde96..44d8280f88ae4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,21 +103,21 @@ }, "devDependencies": { "@lodder/grunt-postcss": "^3.1.1", - "@playwright/test": "1.32.0", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@playwright/test": "1.45.0", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "@wordpress/babel-preset-default": "8.0.1", "@wordpress/dependency-extraction-webpack-plugin": "6.0.1", "@wordpress/e2e-test-utils": "11.0.1", "@wordpress/e2e-test-utils-playwright": "1.0.1", "@wordpress/prettier-config": "4.0.1", "@wordpress/scripts": "28.0.1", - "autoprefixer": "10.4.17", + "autoprefixer": "10.4.19", "chalk": "5.3.0", "check-node-version": "4.2.1", "copy-webpack-plugin": "12.0.2", - "cssnano": "6.0.3", - "dotenv": "16.4.4", - "dotenv-expand": "11.0.3", + "cssnano": "7.0.3", + "dotenv": "16.4.5", + "dotenv-expand": "11.0.6", "grunt": "1.6.1", "grunt-banner": "^0.6.0", "grunt-contrib-clean": "~2.0.1", @@ -126,7 +126,7 @@ "grunt-contrib-cssmin": "~5.0.0", "grunt-contrib-imagemin": "~4.0.0", "grunt-contrib-jshint": "3.2.0", - "grunt-contrib-qunit": "~7.0.1", + "grunt-contrib-qunit": "~10.0.0", "grunt-contrib-uglify": "~5.2.2", "grunt-contrib-watch": "~1.1.0", "grunt-file-append": "0.0.7", @@ -140,17 +140,17 @@ "ink-docstrap": "1.3.2", "install-changed": "1.1.0", "matchdep": "~2.0.0", - "postcss": "8.4.35", + "postcss": "8.4.38", "prettier": "npm:wp-prettier@2.6.2", - "qunit": "~2.20.0", + "qunit": "~2.21.0", "react-refresh": "0.14.0", - "sass": "1.70.0", + "sass": "1.77.6", "sinon": "16.1.3", - "sinon-test": "~3.1.5", + "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.17.4", - "uuid": "9.0.1", + "uglify-js": "^3.18.0", + "uuid": "10.0.0", "wait-on": "7.2.0", "webpack": "5.90.2", "webpack-livereload-plugin": "3.0.2" @@ -3648,38 +3648,32 @@ } }, "node_modules/@playwright/test": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.32.0.tgz", - "integrity": "sha512-zOdGloaF0jeec7hqoLqM5S3L2rR4WxMJs6lgiAeR70JlH7Ml54ZPoIIf3X7cvnKde3Q9jJ/gaxkFh8fYI9s1rg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", + "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.32.0" + "playwright": "1.45.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=18" } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", "dev": true, "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", + "ansi-html": "^0.0.9", "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", "html-entities": "^2.1.0", "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", + "schema-utils": "^4.2.0", "source-map": "^0.7.3" }, "engines": { @@ -3691,7 +3685,7 @@ "sockjs-client": "^1.4.0", "type-fest": ">=0.17.0 <5.0.0", "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", + "webpack-dev-server": "3.x || 4.x || 5.x", "webpack-hot-middleware": "2.x", "webpack-plugin-serve": "0.x || 1.x" }, @@ -3716,74 +3710,57 @@ } } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { @@ -3826,33 +3803,25 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", + "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", "dev": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", + "proxy-agent": "6.4.0", + "semver": "7.6.0", + "tar-fs": "3.0.5", "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "yargs": "17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/@puppeteer/browsers/node_modules/ansi-regex": { @@ -3952,6 +3921,31 @@ "node": ">=8" } }, + "node_modules/@puppeteer/browsers/node_modules/tar-fs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "dev": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/@puppeteer/browsers/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/@puppeteer/browsers/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -3979,9 +3973,9 @@ } }, "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -6094,6 +6088,18 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/annotations/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/api-fetch": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.0.1.tgz", @@ -6320,6 +6326,18 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/block-library/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/block-serialization-default-parser": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.0.1.tgz", @@ -6372,6 +6390,18 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/blocks/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/browserslist-config": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.0.1.tgz", @@ -6469,6 +6499,18 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/components/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/compose": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.0.1.tgz", @@ -6559,6 +6601,18 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/core-data/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/customize-widgets": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.3.tgz", @@ -7852,6 +7906,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@wordpress/scripts/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@wordpress/scripts/node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -7876,6 +7939,208 @@ "webpack": "^5.1.0" } }, + "node_modules/@wordpress/scripts/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@wordpress/scripts/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/@wordpress/scripts/node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@wordpress/scripts/node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@wordpress/scripts/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@wordpress/scripts/node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/@wordpress/scripts/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@wordpress/scripts/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/@wordpress/scripts/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@wordpress/scripts/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/@wordpress/scripts/node_modules/filenamify": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", @@ -7965,6 +8230,24 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/@wordpress/scripts/node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/@wordpress/scripts/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -7986,6 +8269,413 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "dev": true, + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "dev": true, + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/@wordpress/scripts/node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, "node_modules/@wordpress/scripts/node_modules/prettier": { "name": "wp-prettier", "version": "3.0.3", @@ -8071,6 +8761,22 @@ "webpack": "^5.0.0" } }, + "node_modules/@wordpress/scripts/node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, "node_modules/@wordpress/scripts/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8083,6 +8789,31 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, "node_modules/@wordpress/scripts/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -8503,6 +9234,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -8979,9 +9722,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -8998,8 +9741,8 @@ } ], "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -9397,6 +10140,52 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "dev": true, + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "dev": true, + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "dev": true, + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "dev": true, + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.18.0" + } + }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", @@ -10054,9 +10843,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -10073,10 +10862,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -10384,9 +11173,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001587", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", - "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true, "funding": [ { @@ -10720,17 +11509,25 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", + "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", "dev": true, "dependencies": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" } }, + "node_modules/chromium-bidi/node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -11069,12 +11866,6 @@ "node": ">= 12.0.0" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -11633,9 +12424,9 @@ "dev": true }, "node_modules/css-declaration-sorter": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", - "integrity": "sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, "engines": { "node": "^14 || ^16 || >=18" @@ -11749,16 +12540,16 @@ } }, "node_modules/cssnano": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.3.tgz", - "integrity": "sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.3.tgz", + "integrity": "sha512-lsekJctOTqdCn4cNrtrSwsuMR/fHC+oiVMHkp/OugBWtwjH8XJag1/OtGaYJGtz0un1fQcRy4ryfYTQsfh+KSQ==", "dev": true, "dependencies": { - "cssnano-preset-default": "^6.0.3", - "lilconfig": "^3.0.0" + "cssnano-preset-default": "^7.0.3", + "lilconfig": "^3.1.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "funding": { "type": "opencollective", @@ -11769,55 +12560,56 @@ } }, "node_modules/cssnano-preset-default": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz", - "integrity": "sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^7.1.1", - "cssnano-utils": "^4.0.1", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.0.2", - "postcss-convert-values": "^6.0.2", - "postcss-discard-comments": "^6.0.1", - "postcss-discard-duplicates": "^6.0.1", - "postcss-discard-empty": "^6.0.1", - "postcss-discard-overridden": "^6.0.1", - "postcss-merge-longhand": "^6.0.2", - "postcss-merge-rules": "^6.0.3", - "postcss-minify-font-values": "^6.0.1", - "postcss-minify-gradients": "^6.0.1", - "postcss-minify-params": "^6.0.2", - "postcss-minify-selectors": "^6.0.2", - "postcss-normalize-charset": "^6.0.1", - "postcss-normalize-display-values": "^6.0.1", - "postcss-normalize-positions": "^6.0.1", - "postcss-normalize-repeat-style": "^6.0.1", - "postcss-normalize-string": "^6.0.1", - "postcss-normalize-timing-functions": "^6.0.1", - "postcss-normalize-unicode": "^6.0.2", - "postcss-normalize-url": "^6.0.1", - "postcss-normalize-whitespace": "^6.0.1", - "postcss-ordered-values": "^6.0.1", - "postcss-reduce-initial": "^6.0.2", - "postcss-reduce-transforms": "^6.0.1", - "postcss-svgo": "^6.0.2", - "postcss-unique-selectors": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.3.tgz", + "integrity": "sha512-dQ3Ba1p/oewICp/szF1XjFFgql8OlOBrI2YNBUUwhHQnJNoMOcQTa+Bi7jSJN8r/eM1egW0Ud1se/S7qlduWKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.1", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.0", + "postcss-colormin": "^7.0.1", + "postcss-convert-values": "^7.0.1", + "postcss-discard-comments": "^7.0.1", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.2", + "postcss-merge-rules": "^7.0.2", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.1", + "postcss-minify-selectors": "^7.0.2", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.1", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.1", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/cssnano-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.1.tgz", - "integrity": "sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -12951,9 +13743,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, "engines": { "node": ">=12" @@ -12963,12 +13755,12 @@ } }, "node_modules/dotenv-expand": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.3.tgz", - "integrity": "sha512-qkK+MLTvZ86oq4sjMqGpUN/38SQ/J37mny88CsEUFFjb2MBVz06a809ri0QeVDXpxkvZkXzqjGUb0M1R6n3OGw==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", "dev": true, "dependencies": { - "dotenv": "^16.4.1" + "dotenv": "^16.4.4" }, "engines": { "node": ">=12" @@ -13093,9 +13885,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", + "version": "1.4.811", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.811.tgz", + "integrity": "sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==", "dev": true }, "node_modules/element-closest": { @@ -13214,6 +14006,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", @@ -13432,9 +14233,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -17018,17 +17819,16 @@ } }, "node_modules/grunt-contrib-qunit": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-7.0.1.tgz", - "integrity": "sha512-+5eL4qv2H8q6he+2HGDkqbKwAulRUrtMaX5NoY2AwwvbA4d4OqsI1YGiUZ0L/O9oL7nUQ1cxGKeOp+TcE/AYUg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-10.0.0.tgz", + "integrity": "sha512-CUGMTiJVKR69jUoo6vETlZ0XXZXZPxxqtyD5e2kisE3WKX3RQn1axaof7DRZaZOiX+nl7yzyI1jiSGRJKsT40A==", "dev": true, "dependencies": { "eventemitter2": "^6.4.9", - "p-each-series": "^2.2.0", - "puppeteer": "^19.7.0" + "puppeteer": "^22.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/grunt-contrib-qunit/node_modules/eventemitter2": { @@ -23116,12 +23916,15 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/line-height": { @@ -25634,18 +26437,6 @@ "node": ">=4" } }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", @@ -26072,9 +26863,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -26185,16 +26976,34 @@ "node": ">=8" } }, - "node_modules/playwright-core": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.32.0.tgz", - "integrity": "sha512-Z9Ij17X5Z3bjpp6XKujGBp9Gv4eViESac9aDmwgQFUEJBW0K80T21m/Z+XJQlu4cNsvPygw33b6V1Va6Bda5zQ==", + "node_modules/playwright": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", + "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", "dev": true, + "dependencies": { + "playwright-core": "1.45.0" + }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", + "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" } }, "node_modules/plur": { @@ -26272,9 +27081,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -26292,105 +27101,108 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" } }, "node_modules/postcss-colormin": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.2.tgz", - "integrity": "sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.1.tgz", + "integrity": "sha512-uszdT0dULt3FQs47G5UHCduYK+FnkLYlpu1HpWu061eGsKZ7setoG7kA+WC9NQLsOJf69D5TxGHgnAdRgylnFQ==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "colord": "^2.9.1", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz", - "integrity": "sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.1.tgz", + "integrity": "sha512-9x2ofb+hYPwHWMlWAzyWys2yMDZYGfkX9LodbaVTmLdlupmtH2AGvj8Up95wzzNPRDEzPIxQIkUaPJew3bT6xA==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-comments": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.1.tgz", - "integrity": "sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.1.tgz", + "integrity": "sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==", "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.1.0" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz", - "integrity": "sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz", - "integrity": "sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.1.tgz", - "integrity": "sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -26425,98 +27237,99 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", - "integrity": "sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.2.tgz", + "integrity": "sha512-06vrW6ZWi9qeP7KMS9fsa9QW56+tIMW55KYqF7X3Ccn+NI2pIgPV6gFfvXTMQ05H90Y5DvnCDPZ2IuHa30PMUg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.0.2" + "stylehacks": "^7.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-merge-rules": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz", - "integrity": "sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz", + "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.1", - "postcss-selector-parser": "^6.0.15" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-font-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz", - "integrity": "sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-gradients": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz", - "integrity": "sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^4.0.1", + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-params": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz", - "integrity": "sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.1.tgz", + "integrity": "sha512-e+Xt8xErSRPgSRFxHeBCSxMiO8B8xng7lh8E0A5ep1VfwYhY8FXhu4Q3APMjgx9YDDbSp53IBGENrzygbUvgUQ==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", - "cssnano-utils": "^4.0.1", + "browserslist": "^4.23.1", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-selectors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.2.tgz", - "integrity": "sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.2.tgz", + "integrity": "sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.15" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -26582,149 +27395,149 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.1.tgz", - "integrity": "sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-display-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.1.tgz", - "integrity": "sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-positions": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.1.tgz", - "integrity": "sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.1.tgz", - "integrity": "sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-string": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.1.tgz", - "integrity": "sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.1.tgz", - "integrity": "sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-unicode": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz", - "integrity": "sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.1.tgz", + "integrity": "sha512-PTPGdY9xAkTw+8ZZ71DUePb7M/Vtgkbbq+EoI33EuyQEzbKemEQMhe5QSr0VP5UfZlreANDPxSfcdSprENcbsg==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.1.tgz", - "integrity": "sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.1.tgz", - "integrity": "sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-ordered-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.1.tgz", - "integrity": "sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dev": true, "dependencies": { - "cssnano-utils": "^4.0.1", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -26739,31 +27552,31 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz", - "integrity": "sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.1.tgz", + "integrity": "sha512-0JDUSV4bGB5FGM5g8MkS+rvqKukJZ7OTHw/lcKn7xPNqeaqJyQbUO8/dJpvyTpaVwPsd3Uc33+CfNzdVowp2WA==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.1.tgz", - "integrity": "sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -26818,9 +27631,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -26831,16 +27644,16 @@ } }, "node_modules/postcss-svgo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.2.tgz", - "integrity": "sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "svgo": "^3.3.2" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { "postcss": "^8.4.31" @@ -27000,9 +27813,9 @@ } }, "node_modules/postcss-svgo/node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", @@ -27025,15 +27838,15 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.2.tgz", - "integrity": "sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.1.tgz", + "integrity": "sha512-MH7QE/eKUftTB5ta40xcHLl7hkZjgDFydpfTK+QWXeHxghVt3VoPqYL5/G+zYZPPIs+8GuqFXSTgxBSoB1RZtQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.15" + "postcss-selector-parser": "^6.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -27216,6 +28029,72 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -27266,18 +28145,22 @@ } }, "node_modules/puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.0.tgz", + "integrity": "sha512-kyUYI12SyJIjf9UGTnHfhNMYv4oVK321Jb9QZDBiGVNx5453SplvbdKI7UrF+S//3RtCneuUFCyHxnvQXQjpxg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" + "@puppeteer/browsers": "2.2.3", + "cosmiconfig": "9.0.0", + "devtools-protocol": "0.0.1299070", + "puppeteer-core": "22.12.0" + }, + "bin": { + "puppeteer": "lib/esm/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" } }, "node_modules/puppeteer-core": { @@ -27346,27 +28229,52 @@ "dev": true }, "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/puppeteer/node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "version": "0.0.1299070", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", + "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==", "dev": true }, "node_modules/puppeteer/node_modules/js-yaml": { @@ -27381,40 +28289,32 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/puppeteer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/puppeteer/node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.0.tgz", + "integrity": "sha512-9gY+JwBW/Fp3/x9+cOGK7ZcwqjvtvY2xjqRqsAA0B3ZFMzBauVTSZ26iWTmvOQX2sk78TN/rd5rnetxVxmK5CQ==", "dev": true, "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" + "@puppeteer/browsers": "2.2.3", + "chromium-bidi": "0.5.24", + "debug": "4.3.5", + "devtools-protocol": "0.0.1299070", + "ws": "8.17.1" }, "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=18" } }, "node_modules/puppeteer/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -27515,9 +28415,9 @@ } }, "node_modules/qunit": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.20.0.tgz", - "integrity": "sha512-N8Fp1J55waE+QG1KwX2LOyqulZUToRrrPBqDOfYfuAMkEglFL15uwvmH1P4Tq/omQ/mGbBI8PEB3PhIfvUb+jg==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.21.0.tgz", + "integrity": "sha512-kJJ+uzx5xDWk0oRrbOZ3zsm+imPULE58ZMIrNl+3POZl4a1k6VXj2E4OiqTmZ9j6hh9egE3kNgnAti9Q+BG6Yw==", "dev": true, "dependencies": { "commander": "7.2.0", @@ -28809,9 +29709,9 @@ } }, "node_modules/sass": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", - "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -28946,9 +29846,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -29414,9 +30314,9 @@ } }, "node_modules/sinon-test": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.5.tgz", - "integrity": "sha512-uKwKebXEX1yMQ9vz25Q/uDAFwoTsO/AQc+2b+6ndOUoxj7MZWoptz38lFw9QEgfxDPkN6NN0m+Kbah60tn0ZZA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.6.tgz", + "integrity": "sha512-3jBJGf61sS2EN3M+YuIiIbeutKrubP6SFolceTcJrubG+4s+zq3rey/y0huSEwU2ECKOcyCs7EkzANnwqHWPjA==", "dev": true, "peerDependencies": { "sinon": ">= 2.x" @@ -29809,9 +30709,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -30203,13 +31103,17 @@ } }, "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/strict-uri-encode": { @@ -30476,16 +31380,16 @@ "dev": true }, "node_modules/stylehacks": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.2.tgz", - "integrity": "sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.2.tgz", + "integrity": "sha512-HdkWZS9b4gbgYTdMg4gJLmm7biAUug1qTqXjS+u8X+/pUd+9Px1E+520GnOW3rST9MNsVOVpsJG+mPHNosxjOQ==", "dev": true, "dependencies": { - "browserslist": "^4.22.2", - "postcss-selector-parser": "^6.0.15" + "browserslist": "^4.23.1", + "postcss-selector-parser": "^6.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -31385,6 +32289,15 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -31829,9 +32742,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -32045,9 +32958,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -32064,8 +32977,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -32091,9 +33004,9 @@ } }, "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" @@ -32175,6 +33088,12 @@ "node": ">= 4" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true + }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -32284,9 +33203,10 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -33444,6 +34364,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -36004,76 +36933,68 @@ "dev": true }, "@playwright/test": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.32.0.tgz", - "integrity": "sha512-zOdGloaF0jeec7hqoLqM5S3L2rR4WxMJs6lgiAeR70JlH7Ml54ZPoIIf3X7cvnKde3Q9jJ/gaxkFh8fYI9s1rg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", + "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", "dev": true, "requires": { - "@types/node": "*", - "fsevents": "2.3.2", - "playwright-core": "1.32.0" + "playwright": "1.45.0" } }, "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", "dev": true, "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", + "ansi-html": "^0.0.9", "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", "html-entities": "^2.1.0", "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", + "schema-utils": "^4.2.0", "source-map": "^0.7.3" }, "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "fast-deep-equal": "^3.1.3" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -36102,19 +37023,19 @@ "integrity": "sha512-O/XGxwP85h1F7+ouqTMOIZ3+V1whfaV9ToIVcuyGriD4JkSD00cQo54BKdqjvBJxbenvp7ynfqRHEwI6e+NIhw==" }, "@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", + "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", "dev": true, "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", + "proxy-agent": "6.4.0", + "semver": "7.6.0", + "tar-fs": "3.0.5", "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "yargs": "17.7.2" }, "dependencies": { "ansi-regex": { @@ -36190,6 +37111,29 @@ "ansi-regex": "^5.0.1" } }, + "tar-fs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "dev": true, + "requires": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -36208,9 +37152,9 @@ "dev": true }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -37852,6 +38796,13 @@ "@wordpress/i18n": "^5.0.1", "@wordpress/rich-text": "^7.0.2", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } } }, "@wordpress/api-fetch": { @@ -38034,6 +38985,13 @@ "memize": "^2.1.0", "remove-accents": "^0.5.0", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } } }, "@wordpress/block-serialization-default-parser": { @@ -38075,6 +39033,13 @@ "showdown": "^1.9.1", "simple-html-tokenizer": "^0.5.7", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } } }, "@wordpress/browserslist-config": { @@ -38152,6 +39117,13 @@ "remove-accents": "^0.5.0", "use-lilius": "^2.0.5", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } } }, "@wordpress/compose": { @@ -38219,6 +39191,13 @@ "fast-deep-equal": "^3.1.3", "memize": "^2.1.0", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } } }, "@wordpress/customize-widgets": { @@ -39147,6 +40126,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, "copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -39161,6 +40146,150 @@ "serialize-javascript": "^6.0.0" } }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "dev": true, + "requires": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + } + }, + "cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + } + }, + "cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "dev": true + }, + "csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "requires": { + "css-tree": "~2.2.0" + }, + "dependencies": { + "css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + } + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, "filenamify": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", @@ -39226,6 +40355,21 @@ "p-locate": "^4.1.0" } }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -39241,6 +40385,251 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "dev": true + }, + "postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "dev": true + }, + "postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + } + }, + "postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + } + }, + "postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "dev": true, + "requires": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.16" + } + }, + "postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "dev": true, + "requires": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + } + }, + "postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.16" + } + }, "prettier": { "version": "npm:wp-prettier@3.0.3", "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz", @@ -39287,6 +40676,16 @@ "source-map-js": "^1.0.1" } }, + "stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -39296,6 +40695,21 @@ "has-flag": "^4.0.0" } }, + "svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + } + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -39596,6 +41010,12 @@ } } }, + "ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "dev": true + }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -39942,13 +41362,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "requires": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -40258,6 +41678,52 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "dev": true, + "optional": true + }, + "bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "dev": true, + "optional": true, + "requires": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "dev": true, + "optional": true + }, + "bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "dev": true, + "optional": true, + "requires": { + "bare-os": "^2.1.0" + } + }, + "bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "dev": true, + "optional": true, + "requires": { + "streamx": "^2.18.0" + } + }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", @@ -40804,15 +42270,15 @@ } }, "browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" } }, "bser": { @@ -41053,9 +42519,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001587", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", - "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true }, "capital-case": { @@ -41298,12 +42764,22 @@ "dev": true }, "chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", + "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", "dev": true, "requires": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" + }, + "dependencies": { + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + } } }, "ci-info": { @@ -41576,12 +43052,6 @@ "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -42031,9 +43501,9 @@ "dev": true }, "css-declaration-sorter": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", - "integrity": "sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true }, "css-functions-list": { @@ -42112,56 +43582,57 @@ "dev": true }, "cssnano": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.3.tgz", - "integrity": "sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.3.tgz", + "integrity": "sha512-lsekJctOTqdCn4cNrtrSwsuMR/fHC+oiVMHkp/OugBWtwjH8XJag1/OtGaYJGtz0un1fQcRy4ryfYTQsfh+KSQ==", "dev": true, "requires": { - "cssnano-preset-default": "^6.0.3", - "lilconfig": "^3.0.0" + "cssnano-preset-default": "^7.0.3", + "lilconfig": "^3.1.2" } }, "cssnano-preset-default": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz", - "integrity": "sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^7.1.1", - "cssnano-utils": "^4.0.1", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.0.2", - "postcss-convert-values": "^6.0.2", - "postcss-discard-comments": "^6.0.1", - "postcss-discard-duplicates": "^6.0.1", - "postcss-discard-empty": "^6.0.1", - "postcss-discard-overridden": "^6.0.1", - "postcss-merge-longhand": "^6.0.2", - "postcss-merge-rules": "^6.0.3", - "postcss-minify-font-values": "^6.0.1", - "postcss-minify-gradients": "^6.0.1", - "postcss-minify-params": "^6.0.2", - "postcss-minify-selectors": "^6.0.2", - "postcss-normalize-charset": "^6.0.1", - "postcss-normalize-display-values": "^6.0.1", - "postcss-normalize-positions": "^6.0.1", - "postcss-normalize-repeat-style": "^6.0.1", - "postcss-normalize-string": "^6.0.1", - "postcss-normalize-timing-functions": "^6.0.1", - "postcss-normalize-unicode": "^6.0.2", - "postcss-normalize-url": "^6.0.1", - "postcss-normalize-whitespace": "^6.0.1", - "postcss-ordered-values": "^6.0.1", - "postcss-reduce-initial": "^6.0.2", - "postcss-reduce-transforms": "^6.0.1", - "postcss-svgo": "^6.0.2", - "postcss-unique-selectors": "^6.0.2" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.3.tgz", + "integrity": "sha512-dQ3Ba1p/oewICp/szF1XjFFgql8OlOBrI2YNBUUwhHQnJNoMOcQTa+Bi7jSJN8r/eM1egW0Ud1se/S7qlduWKA==", + "dev": true, + "requires": { + "browserslist": "^4.23.1", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.0", + "postcss-colormin": "^7.0.1", + "postcss-convert-values": "^7.0.1", + "postcss-discard-comments": "^7.0.1", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.2", + "postcss-merge-rules": "^7.0.2", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.1", + "postcss-minify-selectors": "^7.0.2", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.1", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.1", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.1" } }, "cssnano-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.1.tgz", - "integrity": "sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true }, "csso": { @@ -43024,18 +44495,18 @@ } }, "dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true }, "dotenv-expand": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.3.tgz", - "integrity": "sha512-qkK+MLTvZ86oq4sjMqGpUN/38SQ/J37mny88CsEUFFjb2MBVz06a809ri0QeVDXpxkvZkXzqjGUb0M1R6n3OGw==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", "dev": true, "requires": { - "dotenv": "^16.4.1" + "dotenv": "^16.4.4" } }, "download": { @@ -43140,9 +44611,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", + "version": "1.4.811", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.811.tgz", + "integrity": "sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==", "dev": true }, "element-closest": { @@ -43233,6 +44704,12 @@ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "envinfo": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", @@ -43418,9 +44895,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-html": { @@ -46140,14 +47617,13 @@ } }, "grunt-contrib-qunit": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-7.0.1.tgz", - "integrity": "sha512-+5eL4qv2H8q6he+2HGDkqbKwAulRUrtMaX5NoY2AwwvbA4d4OqsI1YGiUZ0L/O9oL7nUQ1cxGKeOp+TcE/AYUg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-10.0.0.tgz", + "integrity": "sha512-CUGMTiJVKR69jUoo6vETlZ0XXZXZPxxqtyD5e2kisE3WKX3RQn1axaof7DRZaZOiX+nl7yzyI1jiSGRJKsT40A==", "dev": true, "requires": { "eventemitter2": "^6.4.9", - "p-each-series": "^2.2.0", - "puppeteer": "^19.7.0" + "puppeteer": "^22.0.0" }, "dependencies": { "eventemitter2": { @@ -50659,9 +52135,9 @@ "dev": true }, "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true }, "line-height": { @@ -52589,12 +54065,6 @@ "dev": true, "optional": true }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, "p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", @@ -52923,9 +54393,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "picomatch": { "version": "2.3.1", @@ -53005,10 +54475,20 @@ } } }, + "playwright": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", + "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", + "dev": true, + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.45.0" + } + }, "playwright-core": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.32.0.tgz", - "integrity": "sha512-Z9Ij17X5Z3bjpp6XKujGBp9Gv4eViESac9aDmwgQFUEJBW0K80T21m/Z+XJQlu4cNsvPygw33b6V1Va6Bda5zQ==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", + "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", "dev": true }, "plur": { @@ -53070,69 +54550,72 @@ "dev": true }, "postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.2.tgz", - "integrity": "sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.1.tgz", + "integrity": "sha512-uszdT0dULt3FQs47G5UHCduYK+FnkLYlpu1HpWu061eGsKZ7setoG7kA+WC9NQLsOJf69D5TxGHgnAdRgylnFQ==", "dev": true, "requires": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "colord": "^2.9.1", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz", - "integrity": "sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.1.tgz", + "integrity": "sha512-9x2ofb+hYPwHWMlWAzyWys2yMDZYGfkX9LodbaVTmLdlupmtH2AGvj8Up95wzzNPRDEzPIxQIkUaPJew3bT6xA==", "dev": true, "requires": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.1.tgz", - "integrity": "sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg==", - "dev": true + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.1.tgz", + "integrity": "sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.1.0" + } }, "postcss-discard-duplicates": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz", - "integrity": "sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true }, "postcss-discard-empty": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz", - "integrity": "sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true }, "postcss-discard-overridden": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.1.tgz", - "integrity": "sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true }, "postcss-loader": { @@ -53153,65 +54636,66 @@ "dev": true }, "postcss-merge-longhand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", - "integrity": "sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.2.tgz", + "integrity": "sha512-06vrW6ZWi9qeP7KMS9fsa9QW56+tIMW55KYqF7X3Ccn+NI2pIgPV6gFfvXTMQ05H90Y5DvnCDPZ2IuHa30PMUg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.0.2" + "stylehacks": "^7.0.2" } }, "postcss-merge-rules": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz", - "integrity": "sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz", + "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==", "dev": true, "requires": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.1", - "postcss-selector-parser": "^6.0.15" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.0" } }, "postcss-minify-font-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz", - "integrity": "sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz", - "integrity": "sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^4.0.1", + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz", - "integrity": "sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.1.tgz", + "integrity": "sha512-e+Xt8xErSRPgSRFxHeBCSxMiO8B8xng7lh8E0A5ep1VfwYhY8FXhu4Q3APMjgx9YDDbSp53IBGENrzygbUvgUQ==", "dev": true, "requires": { - "browserslist": "^4.22.2", - "cssnano-utils": "^4.0.1", + "browserslist": "^4.23.1", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.2.tgz", - "integrity": "sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.2.tgz", + "integrity": "sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.15" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.0" } }, "postcss-modules-extract-imports": { @@ -53250,91 +54734,91 @@ } }, "postcss-normalize-charset": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.1.tgz", - "integrity": "sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true }, "postcss-normalize-display-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.1.tgz", - "integrity": "sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.1.tgz", - "integrity": "sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.1.tgz", - "integrity": "sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.1.tgz", - "integrity": "sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.1.tgz", - "integrity": "sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz", - "integrity": "sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.1.tgz", + "integrity": "sha512-PTPGdY9xAkTw+8ZZ71DUePb7M/Vtgkbbq+EoI33EuyQEzbKemEQMhe5QSr0VP5UfZlreANDPxSfcdSprENcbsg==", "dev": true, "requires": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.1.tgz", - "integrity": "sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.1.tgz", - "integrity": "sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.1.tgz", - "integrity": "sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dev": true, "requires": { - "cssnano-utils": "^4.0.1", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, @@ -53344,19 +54828,19 @@ "integrity": "sha512-h9MJGaIvT5hnzFc7Vuo+2ulBw6ecmmfcd8SKKH2TziUzcIA04gUoXIbptuM+tR+htmsQIKNEluiQlmCQ2p5a2g==" }, "postcss-reduce-initial": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz", - "integrity": "sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.1.tgz", + "integrity": "sha512-0JDUSV4bGB5FGM5g8MkS+rvqKukJZ7OTHw/lcKn7xPNqeaqJyQbUO8/dJpvyTpaVwPsd3Uc33+CfNzdVowp2WA==", "dev": true, "requires": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.1", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.1.tgz", - "integrity": "sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -53381,9 +54865,9 @@ "dev": true }, "postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -53391,13 +54875,13 @@ } }, "postcss-svgo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.2.tgz", - "integrity": "sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "svgo": "^3.3.2" }, "dependencies": { "commander": { @@ -53512,9 +54996,9 @@ } }, "svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, "requires": { "@trysound/sax": "0.2.0", @@ -53529,12 +55013,12 @@ } }, "postcss-unique-selectors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.2.tgz", - "integrity": "sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.1.tgz", + "integrity": "sha512-MH7QE/eKUftTB5ta40xcHLl7hkZjgDFydpfTK+QWXeHxghVt3VoPqYL5/G+zYZPPIs+8GuqFXSTgxBSoB1RZtQ==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.15" + "postcss-selector-parser": "^6.1.0" } }, "postcss-urlrebase": { @@ -53676,6 +55160,59 @@ } } }, + "proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -53717,17 +55254,15 @@ "dev": true }, "puppeteer": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", - "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.0.tgz", + "integrity": "sha512-kyUYI12SyJIjf9UGTnHfhNMYv4oVK321Jb9QZDBiGVNx5453SplvbdKI7UrF+S//3RtCneuUFCyHxnvQXQjpxg==", "dev": true, "requires": { - "@puppeteer/browsers": "0.5.0", - "cosmiconfig": "8.1.3", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "puppeteer-core": "19.11.1" + "@puppeteer/browsers": "2.2.3", + "cosmiconfig": "9.0.0", + "devtools-protocol": "0.0.1299070", + "puppeteer-core": "22.12.0" }, "dependencies": { "argparse": { @@ -53737,21 +55272,30 @@ "dev": true }, "cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "requires": { - "import-fresh": "^3.2.1", + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "requires": { + "ms": "2.1.2" } }, "devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "version": "0.0.1299070", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", + "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==", "dev": true }, "js-yaml": { @@ -53763,29 +55307,29 @@ "argparse": "^2.0.1" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.0.tgz", + "integrity": "sha512-9gY+JwBW/Fp3/x9+cOGK7ZcwqjvtvY2xjqRqsAA0B3ZFMzBauVTSZ26iWTmvOQX2sk78TN/rd5rnetxVxmK5CQ==", "dev": true, "requires": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" + "@puppeteer/browsers": "2.2.3", + "chromium-bidi": "0.5.24", + "debug": "4.3.5", + "devtools-protocol": "0.0.1299070", + "ws": "8.17.1" } }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true } } @@ -53873,9 +55417,9 @@ "dev": true }, "qunit": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.20.0.tgz", - "integrity": "sha512-N8Fp1J55waE+QG1KwX2LOyqulZUToRrrPBqDOfYfuAMkEglFL15uwvmH1P4Tq/omQ/mGbBI8PEB3PhIfvUb+jg==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.21.0.tgz", + "integrity": "sha512-kJJ+uzx5xDWk0oRrbOZ3zsm+imPULE58ZMIrNl+3POZl4a1k6VXj2E4OiqTmZ9j6hh9egE3kNgnAti9Q+BG6Yw==", "dev": true, "requires": { "commander": "7.2.0", @@ -54849,9 +56393,9 @@ } }, "sass": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", - "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -54935,9 +56479,9 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { "lru-cache": "^6.0.0" } @@ -55330,9 +56874,9 @@ } }, "sinon-test": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.5.tgz", - "integrity": "sha512-uKwKebXEX1yMQ9vz25Q/uDAFwoTsO/AQc+2b+6ndOUoxj7MZWoptz38lFw9QEgfxDPkN6NN0m+Kbah60tn0ZZA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.6.tgz", + "integrity": "sha512-3jBJGf61sS2EN3M+YuIiIbeutKrubP6SFolceTcJrubG+4s+zq3rey/y0huSEwU2ECKOcyCs7EkzANnwqHWPjA==", "dev": true }, "sirv": { @@ -55619,9 +57163,9 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "source-map-loader": { "version": "5.0.0", @@ -55938,13 +57482,15 @@ } }, "streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "requires": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" } }, "strict-uri-encode": { @@ -56151,13 +57697,13 @@ "dev": true }, "stylehacks": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.2.tgz", - "integrity": "sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.2.tgz", + "integrity": "sha512-HdkWZS9b4gbgYTdMg4gJLmm7biAUug1qTqXjS+u8X+/pUd+9Px1E+520GnOW3rST9MNsVOVpsJG+mPHNosxjOQ==", "dev": true, "requires": { - "browserslist": "^4.22.2", - "postcss-selector-parser": "^6.0.15" + "browserslist": "^4.23.1", + "postcss-selector-parser": "^6.1.0" } }, "stylelint": { @@ -56838,6 +58384,15 @@ "minimatch": "^3.0.4" } }, + "text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dev": true, + "requires": { + "b4a": "^1.6.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -57195,9 +58750,9 @@ "dev": true }, "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true }, "unbox-primitive": { @@ -57358,13 +58913,13 @@ } }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "upper-case": { @@ -57384,9 +58939,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -57442,6 +58997,12 @@ "dev": true, "optional": true }, + "urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -57508,9 +59069,10 @@ "dev": true }, "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true }, "v8-compile-cache": { "version": "2.3.0", @@ -58330,6 +59892,12 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true } } } diff --git a/package.json b/package.json index 802538953b095..d4a4ea89817bf 100644 --- a/package.json +++ b/package.json @@ -25,21 +25,21 @@ ], "devDependencies": { "@lodder/grunt-postcss": "^3.1.1", - "@playwright/test": "1.32.0", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@playwright/test": "1.45.0", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "@wordpress/babel-preset-default": "8.0.1", "@wordpress/dependency-extraction-webpack-plugin": "6.0.1", "@wordpress/e2e-test-utils": "11.0.1", "@wordpress/e2e-test-utils-playwright": "1.0.1", "@wordpress/prettier-config": "4.0.1", "@wordpress/scripts": "28.0.1", - "autoprefixer": "10.4.17", + "autoprefixer": "10.4.19", "chalk": "5.3.0", "check-node-version": "4.2.1", "copy-webpack-plugin": "12.0.2", - "cssnano": "6.0.3", - "dotenv": "16.4.4", - "dotenv-expand": "11.0.3", + "cssnano": "7.0.3", + "dotenv": "16.4.5", + "dotenv-expand": "11.0.6", "grunt": "1.6.1", "grunt-banner": "^0.6.0", "grunt-contrib-clean": "~2.0.1", @@ -48,7 +48,7 @@ "grunt-contrib-cssmin": "~5.0.0", "grunt-contrib-imagemin": "~4.0.0", "grunt-contrib-jshint": "3.2.0", - "grunt-contrib-qunit": "~7.0.1", + "grunt-contrib-qunit": "~10.0.0", "grunt-contrib-uglify": "~5.2.2", "grunt-contrib-watch": "~1.1.0", "grunt-file-append": "0.0.7", @@ -62,17 +62,17 @@ "ink-docstrap": "1.3.2", "install-changed": "1.1.0", "matchdep": "~2.0.0", - "postcss": "8.4.35", + "postcss": "8.4.38", "prettier": "npm:wp-prettier@2.6.2", - "qunit": "~2.20.0", + "qunit": "~2.21.0", "react-refresh": "0.14.0", - "sass": "1.70.0", + "sass": "1.77.6", "sinon": "16.1.3", - "sinon-test": "~3.1.5", + "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.17.4", - "uuid": "9.0.1", + "uglify-js": "^3.18.0", + "uuid": "10.0.0", "wait-on": "7.2.0", "webpack": "5.90.2", "webpack-livereload-plugin": "3.0.2" diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index de2faf3581e9a..fa9ff139e9aa7 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '03ff790b99e08a63bea0'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '01a8b962188c2febacaa'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '60cf6f43c439e8da53f1'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '674320bdfa3095943da9'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'b6137ac2bbbd7aefcd2f'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'c6f81078929d17e05951'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '0d9718d565440a67e9cd'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '1eff5014a9b99329222b'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'ff078755bdad2abc609e'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '01a8b962188c2febacaa'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '60cf6f43c439e8da53f1'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '674320bdfa3095943da9'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'b6137ac2bbbd7aefcd2f'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'c6f81078929d17e05951'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '0d9718d565440a67e9cd'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '1eff5014a9b99329222b'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); From 2658a2bf30a00da4dce0e54a9de5a7290092ce94 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 13:32:13 +0000 Subject: [PATCH 021/422] Help/About: Update some help text in the admin area. This takes into account the changes from #47125 and updates the related Help Tabs content accordingly. Follow-up to [56515]. Props johnbillion, renishsurani, faisal03, shailu25, sumitbagthariya16, Ankit-K-Gupta, oglekler, rajinsharwar, hmbashar, huzaifaalmesbah. Fixes #61153. git-svn-id: https://develop.svn.wordpress.org/trunk@58564 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/network/sites.php | 10 ++++------ src/wp-admin/users.php | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/wp-admin/network/sites.php b/src/wp-admin/network/sites.php index a0db8399c5808..b5835092ae608 100644 --- a/src/wp-admin/network/sites.php +++ b/src/wp-admin/network/sites.php @@ -28,16 +28,14 @@ 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => - '

' . __( 'Add New takes you to the Add New Site screen. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page.' ) . '

' . - '

' . __( 'This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.' ) . '

' . + '

' . __( 'Add New Site takes you to the screen for adding a new site to the network. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page.' ) . '

' . + '

' . __( 'This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.' ) . '

' . '

' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '

' . '
  • ' . __( 'An Edit link to a separate Edit Site screen.' ) . '
  • ' . '
  • ' . __( 'Dashboard leads to the Dashboard for that site.' ) . '
  • ' . '
  • ' . __( 'Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '
  • ' . - '
  • ' . __( 'Delete which is a permanent action after the confirmation screens.' ) . '
  • ' . - '
  • ' . __( 'Visit to go to the front-end site live.' ) . '
' . - '

' . __( 'The site ID is used internally, and is not shown on the front end of the site or to users/viewers.' ) . '

' . - '

' . __( 'Clicking on bold headings can re-sort this table.' ) . '

', + '
  • ' . __( 'Delete which is a permanent action after the confirmation screen.' ) . '
  • ' . + '
  • ' . __( 'Visit to go to the front-end of the live site.' ) . '
  • ', ) ); diff --git a/src/wp-admin/users.php b/src/wp-admin/users.php index 94d891ae0c963..4f15efbbc84fc 100644 --- a/src/wp-admin/users.php +++ b/src/wp-admin/users.php @@ -33,8 +33,8 @@ 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

    ' . __( 'This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.' ) . '

    ' . - '

    ' . __( 'To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.' ) . '

    ', - ) + '

    ' . __( 'To add a new user for your site, click the Add New User button at the top of the screen or Add New User in the Users menu section.' ) . '

    ', + ) ); get_current_screen()->add_help_tab( From 5637628cc46612e50ae62ccf99933934e74753d6 Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 25 Jun 2024 13:47:18 +0000 Subject: [PATCH 022/422] Editor: Update packages for 6.6 RC 1. See https://make.wordpress.org/core/handbook/about/release-cycle/block-editor-release-process-for-major-releases/#package-updates-and-core-patches. See https://github.com/WordPress/wordpress-develop/pull/6902. See https://github.com/WordPress/gutenberg/tree/wp/6.6. Fixes #61497. Props ellatrix, jorbin. git-svn-id: https://develop.svn.wordpress.org/trunk@58565 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 1005 ++++++++--------- package.json | 56 +- .../assets/script-loader-packages.min.php | 2 +- src/wp-includes/blocks/media-text.php | 86 +- src/wp-includes/blocks/navigation.php | 8 +- 5 files changed, 556 insertions(+), 601 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44d8280f88ae4..6b5f3bd433034 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,57 +14,57 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.3", - "@wordpress/block-editor": "13.0.2", - "@wordpress/block-library": "9.0.3", + "@wordpress/block-directory": "5.0.4", + "@wordpress/block-editor": "13.0.3", + "@wordpress/block-library": "9.0.4", "@wordpress/block-serialization-default-parser": "5.0.1", - "@wordpress/blocks": "13.0.2", - "@wordpress/commands": "1.0.2", - "@wordpress/components": "28.0.2", + "@wordpress/blocks": "13.0.3", + "@wordpress/commands": "1.0.3", + "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.2", - "@wordpress/core-data": "7.0.2", - "@wordpress/customize-widgets": "5.0.3", + "@wordpress/core-commands": "1.0.3", + "@wordpress/core-data": "7.0.3", + "@wordpress/customize-widgets": "5.0.4", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.2", + "@wordpress/dataviews": "2.0.3", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.3", - "@wordpress/edit-site": "6.0.3", - "@wordpress/edit-widgets": "6.0.3", - "@wordpress/editor": "14.0.2", + "@wordpress/edit-post": "8.0.4", + "@wordpress/edit-site": "6.0.4", + "@wordpress/edit-widgets": "6.0.4", + "@wordpress/editor": "14.0.3", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.2", + "@wordpress/format-library": "5.0.3", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", - "@wordpress/icons": "10.0.1", - "@wordpress/interactivity": "6.0.1", - "@wordpress/interactivity-router": "2.0.1", - "@wordpress/interface": "6.0.2", + "@wordpress/icons": "10.0.2", + "@wordpress/interactivity": "6.0.2", + "@wordpress/interactivity-router": "2.0.2", + "@wordpress/interface": "6.0.3", "@wordpress/is-shallow-equal": "5.0.1", "@wordpress/keyboard-shortcuts": "5.0.2", "@wordpress/keycodes": "4.0.1", - "@wordpress/list-reusable-blocks": "5.0.2", + "@wordpress/list-reusable-blocks": "5.0.3", "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", - "@wordpress/nux": "9.0.2", - "@wordpress/patterns": "2.0.2", - "@wordpress/plugins": "7.0.2", - "@wordpress/preferences": "4.0.2", + "@wordpress/nux": "9.0.3", + "@wordpress/patterns": "2.0.3", + "@wordpress/plugins": "7.0.3", + "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", "@wordpress/primitives": "4.0.1", "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.2", + "@wordpress/reusable-blocks": "5.0.3", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", - "@wordpress/server-side-render": "5.0.2", + "@wordpress/server-side-render": "5.0.3", "@wordpress/shortcode": "4.0.1", "@wordpress/style-engine": "2.0.2", "@wordpress/sync": "1.0.1", @@ -73,7 +73,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.2", + "@wordpress/widgets": "4.0.3", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", @@ -150,7 +150,7 @@ "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", "uglify-js": "^3.18.0", - "uuid": "10.0.0", + "uuid": "9.0.1", "wait-on": "7.2.0", "webpack": "5.90.2", "webpack-livereload-plugin": "3.0.2" @@ -3794,9 +3794,9 @@ } }, "node_modules/@preact/signals-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.6.0.tgz", - "integrity": "sha512-O/XGxwP85h1F7+ouqTMOIZ3+V1whfaV9ToIVcuyGriD4JkSD00cQo54BKdqjvBJxbenvp7ynfqRHEwI6e+NIhw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.6.1.tgz", + "integrity": "sha512-KXEEmJoKDlo0Igju/cj9YvKIgyaWFDgnprShQjzimUd5VynAAdTWMshawEOjUVeKbsI0aR58V6WOQp+DNcKApw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6088,18 +6088,6 @@ "react": "^18.0.0" } }, - "node_modules/@wordpress/annotations/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@wordpress/api-fetch": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.0.1.tgz", @@ -6172,28 +6160,28 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.3.tgz", - "integrity": "sha512-0HQPBrrV1ns5+7iPluoGiK8lKZjefPffIr8W/KbkJCIkweQWQ0J1CYEpG7f7EGwnZ2PuEIyyChsy3Y/WH6FTOg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.4.tgz", + "integrity": "sha512-jatDnMr3tDNAG/TyCaw5EmOAuZkyByNBRLVp1V+0vm7h6KRmsmfKKd2x6Plk9suwqzpmXgz0o2MXCvLjt+FE/A==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.3", - "@wordpress/editor": "^14.0.2", + "@wordpress/edit-post": "^8.0.4", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", - "@wordpress/plugins": "^7.0.2", + "@wordpress/plugins": "^7.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1", "change-case": "^4.1.2" @@ -6208,9 +6196,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.2.tgz", - "integrity": "sha512-J0gGpVr03CJy9ZiyxOzz9j01bTbdORCDy2Wj9b9I9HZaIYhmr6GW3Cg+QGG799fQ1hOr/6Ps6Y7Iy2zxo9+s8A==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.3.tgz", + "integrity": "sha512-vV4utZkfoTfw5BKatIuax91fs/NF5TRZBp2ayZp39kWwTR8P3sKoR+Ter8aEwGx58lqO+E7mAQzWI9L5K7PelQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6219,9 +6207,9 @@ "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", @@ -6232,12 +6220,12 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/rich-text": "^7.0.2", "@wordpress/style-engine": "^2.0.2", @@ -6269,20 +6257,20 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.3.tgz", - "integrity": "sha512-SUn0RRUnZUaGnPyz3SzFTj5CsCDN2iJikHX46LB1AU78vw0ZBI8BplgZV/l7sAPJlx+hfSmWry97iDqo6bl1lw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.4.tgz", + "integrity": "sha512-bqrSIAXcGPxVlNKvrewnlgWeJg+VnPEFPHSqYCIkt0kGfkOtWm6COupq4sHjQ6ou5ElEW/3P6KSYamB5h2wTEQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6292,18 +6280,18 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interactivity": "^6.0.1", - "@wordpress/interactivity-router": "^2.0.1", + "@wordpress/icons": "^10.0.2", + "@wordpress/interactivity": "^6.0.2", + "@wordpress/interactivity-router": "^2.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", + "@wordpress/patterns": "^2.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/rich-text": "^7.0.2", - "@wordpress/server-side-render": "^5.0.2", + "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/wordcount": "^4.0.1", @@ -6326,18 +6314,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@wordpress/block-library/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@wordpress/block-serialization-default-parser": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.0.1.tgz", @@ -6351,9 +6327,9 @@ } }, "node_modules/@wordpress/blocks": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-13.0.2.tgz", - "integrity": "sha512-e/W2gD+5SV1xCPuKFej+fYevi/wLLskf3uJe/fGzSdEf/kE52u3nWjXE5jeKvTWM8mUd2Y5/o2lttG5/ga8ygw==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-13.0.3.tgz", + "integrity": "sha512-HukM204sR8KpaQB/Mt6m8GdcYFBzdbss8SxKRgIDQOp9wttqKEMe4s9RmDqclIeQOFmHsFpHFvPEANjzsUwbSg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/autop": "^4.0.1", @@ -6390,18 +6366,6 @@ "react": "^18.0.0" } }, - "node_modules/@wordpress/blocks/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@wordpress/browserslist-config": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.0.1.tgz", @@ -6413,16 +6377,16 @@ } }, "node_modules/@wordpress/commands": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.0.2.tgz", - "integrity": "sha512-1fF8RMw22oznfKBsTp1ntj5YJY1gyEJHOiJZcv14+S+i4RyK91TWLGUp4EziU0lneXACeLLjrF14yeOJ3RuxHw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.0.3.tgz", + "integrity": "sha512-GwWu3hDoIzWatsMTeyzP+9rzSYUBcjbnKV6Q91SvMW9WnURznmwiHB2/mA80z1Glg+FJ7q+1ybuJLZ8IxxtCkw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1", @@ -6438,9 +6402,9 @@ } }, "node_modules/@wordpress/components": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.0.2.tgz", - "integrity": "sha512-mdeUY88c/1buX+TgiPAFv+St6m8CxBsWAbWBvfmdWIuCLf8gEQOWlO7SErZsipBOJqwUufuLP35Ns2skckht4g==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.0.3.tgz", + "integrity": "sha512-94OCwm21IlsZ94UCNrm9VSNVAbauddWmc+8/ytffd2Kgrjw0nNfIF+SgB1fUj3XVwKcqJ/CyEHZ8sEPDL31wEw==", "dependencies": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -6464,7 +6428,7 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keycodes": "^4.0.1", "@wordpress/primitives": "^4.0.1", @@ -6499,18 +6463,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@wordpress/components/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@wordpress/compose": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.0.1.tgz", @@ -6539,19 +6491,19 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.2.tgz", - "integrity": "sha512-SXeo2KCTQgGncCPLvjrJ+vSvalD/2vI83ee2veFFTFC1QS3fcVTPdISzHVS1tuDG3TANQJFVEyP6jgTFZnYFjQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.3.tgz", + "integrity": "sha512-MxbCbJLjW4ysE44VDv3bD0eykxiZnoCM6NLTaywcv27VNALhqqJxxyglgjdwbIV5d6lC0dQPSAOLgenkzKPOoQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/commands": "^1.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/router": "^1.0.2", "@wordpress/url": "^4.0.1" @@ -6566,14 +6518,14 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.2.tgz", - "integrity": "sha512-/5Ti5xd0tX00DFN3DVFwWtmzq5hZ1t7Hg+bqAGpevuFxFh5TOg6Hs2+/Zu7ctx1qINopkKqATMbvFvKVkCksYQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.3.tgz", + "integrity": "sha512-2c8xloBhPC5QXzmz17gu3sMgBHjeaJ6CRR/pxt9Z4yzD6KA0xBJUmodnywvZmGHrIJMc21FPjSKSS8KD7xotzg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", @@ -6601,44 +6553,32 @@ "react-dom": "^18.0.0" } }, - "node_modules/@wordpress/core-data/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.3.tgz", - "integrity": "sha512-TUhuluS/h2uZuaxkG2DobQC4sbBPteqVrL5tkid2CuYQygna0VnsSlE0N5W2/UVDLcmCovNrtBqp6j9Ru/eGaQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.4.tgz", + "integrity": "sha512-Jrle8vrpyDoFbAQYYokJdMnYMzRRTW10ZC/GZlyAeUuezMqIC+oODBI2XS6vv4+uStw8G+3oeT+9Q0XVuO75uw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", - "@wordpress/preferences": "^4.0.2", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6699,17 +6639,17 @@ } }, "node_modules/@wordpress/dataviews": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.2.tgz", - "integrity": "sha512-8Ed0rTnj4r03xadsF/MxTKIM3QtztB/THp7tWRLTQTUdenAPwL5mi1BcA9Wti9C/lEdbjE+QJNCPWZa6qiYuEg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.3.tgz", + "integrity": "sha512-+TDQsssoBBUMtb8y/wR9ZQvCOt7CENVxltTU0aI4bjBapjOtnpGIzr+ZoIbgC9q/WndepuxKNrUGiYpZplOefA==", "dependencies": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1", @@ -6880,40 +6820,40 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.3.tgz", - "integrity": "sha512-lHAB8Vf3MWOHZRvcrTacS5aGl0Bwy7oWRd0FoUjvp5hiRdFhhnCA6w957odzmUvKrNXzN4+9Z2y969qAexaVBw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.4.tgz", + "integrity": "sha512-gI3fauE2UjuNjon3eu+yHcVZ3DdtBVzy0a1x5OVexCs4kNqvXWVeeeqzjqG88g4UAgysNlF2HRECKMi+feTVxg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-commands": "^1.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.2", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -6927,50 +6867,50 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.3.tgz", - "integrity": "sha512-O9cjfWdJ6a2vfi+LBnXTcoIlOz+OcHrEQT5ghz/AOD6pXMS74IsWbgvNnHFOGFs/QTvsH3tE5UHnPEpn08zpSQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.4.tgz", + "integrity": "sha512-Qcfj/VzAG/ZQf1+v4gEXn/7pA1TgG+f4dsuL0v6/Q/Au/alyT2OI7NgGOXC6faVAtp9WCmPf3YcDgk5ej5bm1Q==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-commands": "^1.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.2", + "@wordpress/dataviews": "^2.0.3", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.2", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -6989,37 +6929,37 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.3.tgz", - "integrity": "sha512-bYpg2Uq7QRuEUhfaczdTxPZnEhhJ921Ln+nW7GGCb5o6Eq8tNpyk4888HN6qfo+h1LUZNhW9RZOz8z1gq6AXPA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.4.tgz", + "integrity": "sha512-rMSmq5UZwljOv7i/2EdJhTWV9JCm8oTpwPvr/tAJgQ3OUiuNFpy0gA+SM8F7DtylUtl+9xV4F5GmhWNIGx4scg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1" }, "engines": { @@ -7032,20 +6972,20 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.2.tgz", - "integrity": "sha512-IX7VokQ4LS4aV/HPiBkFAemmobi07saxW2ZtP0t7raG3FwIfJf2/iHECNK+W3bXC1SlfYHTFtzM+Y0Zgt8SJ+w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.3.tgz", + "integrity": "sha512-Rwv2xSTN+pqUVTMItpbMaulkIBGw1Linl5ODUx4mHeZBTYrjQD4qP4JH1nBYSHdmHr3HZAp+vgihHTHTgXkGCA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -7054,19 +6994,19 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/rich-text": "^7.0.2", - "@wordpress/server-side-render": "^5.0.2", + "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", "@wordpress/warning": "^3.0.1", "@wordpress/wordcount": "^4.0.1", @@ -7180,20 +7120,20 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.2.tgz", - "integrity": "sha512-LhHQK5zFhUGYI/NJpNWaG00o8VwlUdqRbq+QtYbhgp2Dabi0+jXeVlBtEZ2imC90WPcJQETOjHQxIXYFtjpk8A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.3.tgz", + "integrity": "sha512-mD3738vO6pxKOiEBp4kaUrq03hsaVg8nBtFpBxWYozM1/CkSm9aKm3u73pixX4EdCL9VXo546WYNm4wCBeDiMg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/rich-text": "^7.0.2", "@wordpress/url": "^4.0.1" @@ -7252,9 +7192,9 @@ } }, "node_modules/@wordpress/icons": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.0.1.tgz", - "integrity": "sha512-CyemntOjhTzYXismZFDcX5ZETxBd8ltokF0Bdo7d2wExxIYiPlSfKcjTxTIOuwKJUZ+3owWhhFu0wxpiOQs9BA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.0.2.tgz", + "integrity": "sha512-YocOYpnB/zRW28ApIBIICnV28HaaCX1ayjm/tRUp76q1J/c2pK4meCU4keR6IDpuEg5dtkzGLWxR/fK+KtAt6w==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/element": "^6.0.1", @@ -7266,9 +7206,9 @@ } }, "node_modules/@wordpress/interactivity": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.0.1.tgz", - "integrity": "sha512-bqWFgqNIA2QMSQRh/yGP6xWEvDBjLZeOi97KLqcResUYrx6GL0Y6bD5RdsoGiDXDdH9bsHkuOepEaBHHVFFu8w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.0.2.tgz", + "integrity": "sha512-QsY29re3NP+21tSQ5TaJHmgZlzKHSTWdVukAk1lgzkzTBrE4URIZoCjk4KzCWKd5X7FPqEEz8vKoWM1E3ZbKFw==", "dependencies": { "@preact/signals": "^1.2.2", "deepsignal": "^1.4.0", @@ -7280,11 +7220,11 @@ } }, "node_modules/@wordpress/interactivity-router": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.0.1.tgz", - "integrity": "sha512-n7qP78FwLJ/zE3m3JfE0LSMZbZF83jwM9ifh73NLLf3fv3hwlIEwjp+OPuS0hfTDYBYhAx8BqAOLGMTTW1ibCQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.0.2.tgz", + "integrity": "sha512-igySPnGkQxiRVIPkE/mwR/N4ThFeewUdtpiMSpWstUGEDnOwIks6+vh1f6qpZKwZW1qMyZMheyuXz+H4ABZwYQ==", "dependencies": { - "@wordpress/interactivity": "^6.0.1" + "@wordpress/interactivity": "^6.0.2" }, "engines": { "node": ">=18.12.0", @@ -7292,21 +7232,21 @@ } }, "node_modules/@wordpress/interface": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.0.2.tgz", - "integrity": "sha512-/gfj94b928dmoHSGggyuvNBlfYnyAzLJZPQXMXENln1bdqa+yYguLSoiBoCM/gIvAyPak4D9ZIfYn3002IMEkA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.0.3.tgz", + "integrity": "sha512-jtgXweeWIzhMt6v2wTXRFAmFYttpE1N6eWmruObvXMZlJAMhMf/nwAHVDZr65O/03shdG+1E+4fyVRgOgUz+Ww==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/viewport": "^6.0.2", "clsx": "^2.1.1" @@ -7399,14 +7339,14 @@ } }, "node_modules/@wordpress/list-reusable-blocks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.0.2.tgz", - "integrity": "sha512-vc+Gy2FbatX9z66RnQP4796E6o6jH3HrDFEbAMDACK4q95SkFijQyY9DMLqNDPhPvlUH4yecL8VJry6JG1623A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.0.3.tgz", + "integrity": "sha512-m1+SvihoFIxv8D6PoukFeFkHX89l+S0xb3G3qWod3t2cDvfrqLmDPua97Pi3EiOX6tSPA7M+4DvysYdBkjikCw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -7468,18 +7408,18 @@ } }, "node_modules/@wordpress/nux": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.0.2.tgz", - "integrity": "sha512-8LxXRWrIuF1UR3KR3JW4OmhTtXAUVG3cmn+DdYxhEkP3HE+sVY9vwWwd+iSkeuvZzJIswjyvxmrzTfvcIZbQTw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.0.3.tgz", + "integrity": "sha512-3W5sQivCFmu8f7qgieHvtVog6orYCQFTt53/4uYp/spZohxZG+4EUTziSItR9yZpjVQL9cX6oFk7aTsxwFh+Hg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1" + "@wordpress/icons": "^10.0.2" }, "engines": { "node": ">=18.12.0", @@ -7491,22 +7431,22 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.2.tgz", - "integrity": "sha512-oELe0Q6FDWkIWcxec0WpiR5d/M58mUjcJTWujnjXLxjeqcR8LafxcaHyHU9jgDCORgEndrZyGMxhJ6w9evhGJw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.3.tgz", + "integrity": "sha512-bAiaMAw/wGjYcrsBEEI4ZJv+y334VaTYYzw2JrGpAOpzNbw0UQmdNBz+aws8hRshnj0EZEyY3CY8k9sy47AR9g==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1" @@ -7521,16 +7461,16 @@ } }, "node_modules/@wordpress/plugins": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.0.2.tgz", - "integrity": "sha512-6A1EpgEJtS5Ud+dUTOQvfAfY0qzcla57FiscfvhZF/yf/+PNRTl8/Z6dfkF8gju01DP46oj7kKpZ1W707nzxjg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.0.3.tgz", + "integrity": "sha512-snU0QE1jyonhu7fM/3uH812nIIfwPF5UwRBFZzaUWc2dwyRHmYcvuwxrlQXUCrEU+cj9BXkmuJHTE6KWvveehQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "memize": "^2.0.1" }, @@ -7561,19 +7501,19 @@ } }, "node_modules/@wordpress/preferences": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.0.2.tgz", - "integrity": "sha512-RyYokixkEe0QKbZcSCvzhxvJUXrYFcNHbol1s0wQnt8yseVKqrp75lYOaXcllrwv6iFyiZAwSZBmmO7MMwNjXQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.0.3.tgz", + "integrity": "sha512-H255doYLwI5/03LiUhRcQyKHD7ZjF4S7pfYTicuM0GH/vYWHPtwsnWUEu2MXxIraoEuAnescMyczjHJ7bZRXug==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1" }, @@ -7670,19 +7610,19 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.2.tgz", - "integrity": "sha512-o7yYuPR2JYQePzPB+Th7/ozWrVqL+DGQfW6mkPEK4Inpiq8+OYOGqzfJ0ndPl1wYkyVFDR/g1fW/E1lQPPFkiw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.3.tgz", + "integrity": "sha512-nqr+/VDO42hB4d9fz07Eoen+SWi/H/9eeda76AdpgDzJq4oLmxxLgo/ze4lbnrYgdeeB3vSsKkJPi5ENPc9+jQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1" @@ -8824,14 +8764,14 @@ } }, "node_modules/@wordpress/server-side-render": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.0.2.tgz", - "integrity": "sha512-sV7cKLLc/bjCQqqfspRdcnZVFdF12s4H2z/3cRwrry+cTDQo5ig4IBvUVq2DMMqEV3sEM1RwEcVnBYEvSbMJ8w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.0.3.tgz", + "integrity": "sha512-/8bP+uTqX/9lU7fvRuq5D0RmYPu48mN4vdEdA7HNifrm+2v7lLHA66aq+1gCfwhxxOowuvaw+ZGnpGXB0wRx1g==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", @@ -8979,21 +8919,21 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.2.tgz", - "integrity": "sha512-+fuXHQIqEm6IaE1GCyt5IIjMBEdnvgPmVYH8r9u0+nMu5RDiKnvhffcl/SEcNiiz1gTQCXcc67BCW6Z7T2i2Qg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.3.tgz", + "integrity": "sha512-/yY7ZWq80phLgrlL6kd4EJcrrG5nhWM7vGrHK8Hg0RBJ0zcQXMcfHG3a12Fxw5mbiKDLB3hKpNUJYxk+GpHcuQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "clsx": "^2.1.1" }, @@ -33203,10 +33143,9 @@ } }, "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -37018,9 +36957,9 @@ } }, "@preact/signals-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.6.0.tgz", - "integrity": "sha512-O/XGxwP85h1F7+ouqTMOIZ3+V1whfaV9ToIVcuyGriD4JkSD00cQo54BKdqjvBJxbenvp7ynfqRHEwI6e+NIhw==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.6.1.tgz", + "integrity": "sha512-KXEEmJoKDlo0Igju/cj9YvKIgyaWFDgnprShQjzimUd5VynAAdTWMshawEOjUVeKbsI0aR58V6WOQp+DNcKApw==" }, "@puppeteer/browsers": { "version": "2.2.3", @@ -38796,13 +38735,6 @@ "@wordpress/i18n": "^5.0.1", "@wordpress/rich-text": "^7.0.2", "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } } }, "@wordpress/api-fetch": { @@ -38857,37 +38789,37 @@ } }, "@wordpress/block-directory": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.3.tgz", - "integrity": "sha512-0HQPBrrV1ns5+7iPluoGiK8lKZjefPffIr8W/KbkJCIkweQWQ0J1CYEpG7f7EGwnZ2PuEIyyChsy3Y/WH6FTOg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.4.tgz", + "integrity": "sha512-jatDnMr3tDNAG/TyCaw5EmOAuZkyByNBRLVp1V+0vm7h6KRmsmfKKd2x6Plk9suwqzpmXgz0o2MXCvLjt+FE/A==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.3", - "@wordpress/editor": "^14.0.2", + "@wordpress/edit-post": "^8.0.4", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", - "@wordpress/plugins": "^7.0.2", + "@wordpress/plugins": "^7.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1", "change-case": "^4.1.2" } }, "@wordpress/block-editor": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.2.tgz", - "integrity": "sha512-J0gGpVr03CJy9ZiyxOzz9j01bTbdORCDy2Wj9b9I9HZaIYhmr6GW3Cg+QGG799fQ1hOr/6Ps6Y7Iy2zxo9+s8A==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.3.tgz", + "integrity": "sha512-vV4utZkfoTfw5BKatIuax91fs/NF5TRZBp2ayZp39kWwTR8P3sKoR+Ter8aEwGx58lqO+E7mAQzWI9L5K7PelQ==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -38896,9 +38828,9 @@ "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", @@ -38909,12 +38841,12 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/rich-text": "^7.0.2", "@wordpress/style-engine": "^2.0.2", @@ -38938,20 +38870,20 @@ } }, "@wordpress/block-library": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.3.tgz", - "integrity": "sha512-SUn0RRUnZUaGnPyz3SzFTj5CsCDN2iJikHX46LB1AU78vw0ZBI8BplgZV/l7sAPJlx+hfSmWry97iDqo6bl1lw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.4.tgz", + "integrity": "sha512-bqrSIAXcGPxVlNKvrewnlgWeJg+VnPEFPHSqYCIkt0kGfkOtWm6COupq4sHjQ6ou5ElEW/3P6KSYamB5h2wTEQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -38961,18 +38893,18 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interactivity": "^6.0.1", - "@wordpress/interactivity-router": "^2.0.1", + "@wordpress/icons": "^10.0.2", + "@wordpress/interactivity": "^6.0.2", + "@wordpress/interactivity-router": "^2.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", + "@wordpress/patterns": "^2.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/rich-text": "^7.0.2", - "@wordpress/server-side-render": "^5.0.2", + "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/wordcount": "^4.0.1", @@ -38985,13 +38917,6 @@ "memize": "^2.1.0", "remove-accents": "^0.5.0", "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } } }, "@wordpress/block-serialization-default-parser": { @@ -39003,9 +38928,9 @@ } }, "@wordpress/blocks": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-13.0.2.tgz", - "integrity": "sha512-e/W2gD+5SV1xCPuKFej+fYevi/wLLskf3uJe/fGzSdEf/kE52u3nWjXE5jeKvTWM8mUd2Y5/o2lttG5/ga8ygw==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-13.0.3.tgz", + "integrity": "sha512-HukM204sR8KpaQB/Mt6m8GdcYFBzdbss8SxKRgIDQOp9wttqKEMe4s9RmDqclIeQOFmHsFpHFvPEANjzsUwbSg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/autop": "^4.0.1", @@ -39033,13 +38958,6 @@ "showdown": "^1.9.1", "simple-html-tokenizer": "^0.5.7", "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } } }, "@wordpress/browserslist-config": { @@ -39049,16 +38967,16 @@ "dev": true }, "@wordpress/commands": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.0.2.tgz", - "integrity": "sha512-1fF8RMw22oznfKBsTp1ntj5YJY1gyEJHOiJZcv14+S+i4RyK91TWLGUp4EziU0lneXACeLLjrF14yeOJ3RuxHw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.0.3.tgz", + "integrity": "sha512-GwWu3hDoIzWatsMTeyzP+9rzSYUBcjbnKV6Q91SvMW9WnURznmwiHB2/mA80z1Glg+FJ7q+1ybuJLZ8IxxtCkw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1", @@ -39066,9 +38984,9 @@ } }, "@wordpress/components": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.0.2.tgz", - "integrity": "sha512-mdeUY88c/1buX+TgiPAFv+St6m8CxBsWAbWBvfmdWIuCLf8gEQOWlO7SErZsipBOJqwUufuLP35Ns2skckht4g==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.0.3.tgz", + "integrity": "sha512-94OCwm21IlsZ94UCNrm9VSNVAbauddWmc+8/ytffd2Kgrjw0nNfIF+SgB1fUj3XVwKcqJ/CyEHZ8sEPDL31wEw==", "requires": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -39092,7 +39010,7 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keycodes": "^4.0.1", "@wordpress/primitives": "^4.0.1", @@ -39117,13 +39035,6 @@ "remove-accents": "^0.5.0", "use-lilius": "^2.0.5", "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } } }, "@wordpress/compose": { @@ -39147,33 +39058,33 @@ } }, "@wordpress/core-commands": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.2.tgz", - "integrity": "sha512-SXeo2KCTQgGncCPLvjrJ+vSvalD/2vI83ee2veFFTFC1QS3fcVTPdISzHVS1tuDG3TANQJFVEyP6jgTFZnYFjQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.3.tgz", + "integrity": "sha512-MxbCbJLjW4ysE44VDv3bD0eykxiZnoCM6NLTaywcv27VNALhqqJxxyglgjdwbIV5d6lC0dQPSAOLgenkzKPOoQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/commands": "^1.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/router": "^1.0.2", "@wordpress/url": "^4.0.1" } }, "@wordpress/core-data": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.2.tgz", - "integrity": "sha512-/5Ti5xd0tX00DFN3DVFwWtmzq5hZ1t7Hg+bqAGpevuFxFh5TOg6Hs2+/Zu7ctx1qINopkKqATMbvFvKVkCksYQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.3.tgz", + "integrity": "sha512-2c8xloBhPC5QXzmz17gu3sMgBHjeaJ6CRR/pxt9Z4yzD6KA0xBJUmodnywvZmGHrIJMc21FPjSKSS8KD7xotzg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", @@ -39191,41 +39102,34 @@ "fast-deep-equal": "^3.1.3", "memize": "^2.1.0", "uuid": "^9.0.1" - }, - "dependencies": { - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - } } }, "@wordpress/customize-widgets": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.3.tgz", - "integrity": "sha512-TUhuluS/h2uZuaxkG2DobQC4sbBPteqVrL5tkid2CuYQygna0VnsSlE0N5W2/UVDLcmCovNrtBqp6j9Ru/eGaQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.4.tgz", + "integrity": "sha512-Jrle8vrpyDoFbAQYYokJdMnYMzRRTW10ZC/GZlyAeUuezMqIC+oODBI2XS6vv4+uStw8G+3oeT+9Q0XVuO75uw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/is-shallow-equal": "^5.0.1", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", - "@wordpress/preferences": "^4.0.2", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" } @@ -39264,17 +39168,17 @@ } }, "@wordpress/dataviews": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.2.tgz", - "integrity": "sha512-8Ed0rTnj4r03xadsF/MxTKIM3QtztB/THp7tWRLTQTUdenAPwL5mi1BcA9Wti9C/lEdbjE+QJNCPWZa6qiYuEg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.3.tgz", + "integrity": "sha512-+TDQsssoBBUMtb8y/wR9ZQvCOt7CENVxltTU0aI4bjBapjOtnpGIzr+ZoIbgC9q/WndepuxKNrUGiYpZplOefA==", "requires": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1", @@ -39392,89 +39296,89 @@ } }, "@wordpress/edit-post": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.3.tgz", - "integrity": "sha512-lHAB8Vf3MWOHZRvcrTacS5aGl0Bwy7oWRd0FoUjvp5hiRdFhhnCA6w957odzmUvKrNXzN4+9Z2y969qAexaVBw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.4.tgz", + "integrity": "sha512-gI3fauE2UjuNjon3eu+yHcVZ3DdtBVzy0a1x5OVexCs4kNqvXWVeeeqzjqG88g4UAgysNlF2HRECKMi+feTVxg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-commands": "^1.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.2", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1", "memize": "^2.1.0" } }, "@wordpress/edit-site": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.3.tgz", - "integrity": "sha512-O9cjfWdJ6a2vfi+LBnXTcoIlOz+OcHrEQT5ghz/AOD6pXMS74IsWbgvNnHFOGFs/QTvsH3tE5UHnPEpn08zpSQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.4.tgz", + "integrity": "sha512-Qcfj/VzAG/ZQf1+v4gEXn/7pA1TgG+f4dsuL0v6/Q/Au/alyT2OI7NgGOXC6faVAtp9WCmPf3YcDgk5ej5bm1Q==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-commands": "^1.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.2", + "@wordpress/dataviews": "^2.0.3", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.2", + "@wordpress/editor": "^14.0.3", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -39485,55 +39389,55 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.3.tgz", - "integrity": "sha512-bYpg2Uq7QRuEUhfaczdTxPZnEhhJ921Ln+nW7GGCb5o6Eq8tNpyk4888HN6qfo+h1LUZNhW9RZOz8z1gq6AXPA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.4.tgz", + "integrity": "sha512-rMSmq5UZwljOv7i/2EdJhTWV9JCm8oTpwPvr/tAJgQ3OUiuNFpy0gA+SM8F7DtylUtl+9xV4F5GmhWNIGx4scg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/block-library": "^9.0.3", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-library": "^9.0.4", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.2", + "@wordpress/widgets": "^4.0.3", "clsx": "^2.1.1" } }, "@wordpress/editor": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.2.tgz", - "integrity": "sha512-IX7VokQ4LS4aV/HPiBkFAemmobi07saxW2ZtP0t7raG3FwIfJf2/iHECNK+W3bXC1SlfYHTFtzM+Y0Zgt8SJ+w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.3.tgz", + "integrity": "sha512-Rwv2xSTN+pqUVTMItpbMaulkIBGw1Linl5ODUx4mHeZBTYrjQD4qP4JH1nBYSHdmHr3HZAp+vgihHTHTgXkGCA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/commands": "^1.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/commands": "^1.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -39542,19 +39446,19 @@ "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/interface": "^6.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/interface": "^6.0.3", "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.2", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/patterns": "^2.0.3", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.2", + "@wordpress/reusable-blocks": "^5.0.3", "@wordpress/rich-text": "^7.0.2", - "@wordpress/server-side-render": "^5.0.2", + "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", "@wordpress/warning": "^3.0.1", "@wordpress/wordcount": "^4.0.1", @@ -39630,20 +39534,20 @@ } }, "@wordpress/format-library": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.2.tgz", - "integrity": "sha512-LhHQK5zFhUGYI/NJpNWaG00o8VwlUdqRbq+QtYbhgp2Dabi0+jXeVlBtEZ2imC90WPcJQETOjHQxIXYFtjpk8A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.3.tgz", + "integrity": "sha512-mD3738vO6pxKOiEBp4kaUrq03hsaVg8nBtFpBxWYozM1/CkSm9aKm3u73pixX4EdCL9VXo546WYNm4wCBeDiMg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/rich-text": "^7.0.2", "@wordpress/url": "^4.0.1" @@ -39679,9 +39583,9 @@ } }, "@wordpress/icons": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.0.1.tgz", - "integrity": "sha512-CyemntOjhTzYXismZFDcX5ZETxBd8ltokF0Bdo7d2wExxIYiPlSfKcjTxTIOuwKJUZ+3owWhhFu0wxpiOQs9BA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.0.2.tgz", + "integrity": "sha512-YocOYpnB/zRW28ApIBIICnV28HaaCX1ayjm/tRUp76q1J/c2pK4meCU4keR6IDpuEg5dtkzGLWxR/fK+KtAt6w==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/element": "^6.0.1", @@ -39689,9 +39593,9 @@ } }, "@wordpress/interactivity": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.0.1.tgz", - "integrity": "sha512-bqWFgqNIA2QMSQRh/yGP6xWEvDBjLZeOi97KLqcResUYrx6GL0Y6bD5RdsoGiDXDdH9bsHkuOepEaBHHVFFu8w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.0.2.tgz", + "integrity": "sha512-QsY29re3NP+21tSQ5TaJHmgZlzKHSTWdVukAk1lgzkzTBrE4URIZoCjk4KzCWKd5X7FPqEEz8vKoWM1E3ZbKFw==", "requires": { "@preact/signals": "^1.2.2", "deepsignal": "^1.4.0", @@ -39699,29 +39603,29 @@ } }, "@wordpress/interactivity-router": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.0.1.tgz", - "integrity": "sha512-n7qP78FwLJ/zE3m3JfE0LSMZbZF83jwM9ifh73NLLf3fv3hwlIEwjp+OPuS0hfTDYBYhAx8BqAOLGMTTW1ibCQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.0.2.tgz", + "integrity": "sha512-igySPnGkQxiRVIPkE/mwR/N4ThFeewUdtpiMSpWstUGEDnOwIks6+vh1f6qpZKwZW1qMyZMheyuXz+H4ABZwYQ==", "requires": { - "@wordpress/interactivity": "^6.0.1" + "@wordpress/interactivity": "^6.0.2" } }, "@wordpress/interface": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.0.2.tgz", - "integrity": "sha512-/gfj94b928dmoHSGggyuvNBlfYnyAzLJZPQXMXENln1bdqa+yYguLSoiBoCM/gIvAyPak4D9ZIfYn3002IMEkA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.0.3.tgz", + "integrity": "sha512-jtgXweeWIzhMt6v2wTXRFAmFYttpE1N6eWmruObvXMZlJAMhMf/nwAHVDZr65O/03shdG+1E+4fyVRgOgUz+Ww==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", - "@wordpress/plugins": "^7.0.2", - "@wordpress/preferences": "^4.0.2", + "@wordpress/icons": "^10.0.2", + "@wordpress/plugins": "^7.0.3", + "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", "@wordpress/viewport": "^6.0.2", "clsx": "^2.1.1" @@ -39776,14 +39680,14 @@ } }, "@wordpress/list-reusable-blocks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.0.2.tgz", - "integrity": "sha512-vc+Gy2FbatX9z66RnQP4796E6o6jH3HrDFEbAMDACK4q95SkFijQyY9DMLqNDPhPvlUH4yecL8VJry6JG1623A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.0.3.tgz", + "integrity": "sha512-m1+SvihoFIxv8D6PoukFeFkHX89l+S0xb3G3qWod3t2cDvfrqLmDPua97Pi3EiOX6tSPA7M+4DvysYdBkjikCw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39819,53 +39723,53 @@ "dev": true }, "@wordpress/nux": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.0.2.tgz", - "integrity": "sha512-8LxXRWrIuF1UR3KR3JW4OmhTtXAUVG3cmn+DdYxhEkP3HE+sVY9vwWwd+iSkeuvZzJIswjyvxmrzTfvcIZbQTw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.0.3.tgz", + "integrity": "sha512-3W5sQivCFmu8f7qgieHvtVog6orYCQFTt53/4uYp/spZohxZG+4EUTziSItR9yZpjVQL9cX6oFk7aTsxwFh+Hg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1" + "@wordpress/icons": "^10.0.2" } }, "@wordpress/patterns": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.2.tgz", - "integrity": "sha512-oELe0Q6FDWkIWcxec0WpiR5d/M58mUjcJTWujnjXLxjeqcR8LafxcaHyHU9jgDCORgEndrZyGMxhJ6w9evhGJw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.3.tgz", + "integrity": "sha512-bAiaMAw/wGjYcrsBEEI4ZJv+y334VaTYYzw2JrGpAOpzNbw0UQmdNBz+aws8hRshnj0EZEyY3CY8k9sy47AR9g==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1" } }, "@wordpress/plugins": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.0.2.tgz", - "integrity": "sha512-6A1EpgEJtS5Ud+dUTOQvfAfY0qzcla57FiscfvhZF/yf/+PNRTl8/Z6dfkF8gju01DP46oj7kKpZ1W707nzxjg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.0.3.tgz", + "integrity": "sha512-snU0QE1jyonhu7fM/3uH812nIIfwPF5UwRBFZzaUWc2dwyRHmYcvuwxrlQXUCrEU+cj9BXkmuJHTE6KWvveehQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/is-shallow-equal": "^5.0.1", "memize": "^2.0.1" } @@ -39881,19 +39785,19 @@ } }, "@wordpress/preferences": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.0.2.tgz", - "integrity": "sha512-RyYokixkEe0QKbZcSCvzhxvJUXrYFcNHbol1s0wQnt8yseVKqrp75lYOaXcllrwv6iFyiZAwSZBmmO7MMwNjXQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.0.3.tgz", + "integrity": "sha512-H255doYLwI5/03LiUhRcQyKHD7ZjF4S7pfYTicuM0GH/vYWHPtwsnWUEu2MXxIraoEuAnescMyczjHJ7bZRXug==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/components": "^28.0.2", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/private-apis": "^1.0.2", "clsx": "^2.1.1" } @@ -39952,19 +39856,19 @@ } }, "@wordpress/reusable-blocks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.2.tgz", - "integrity": "sha512-o7yYuPR2JYQePzPB+Th7/ozWrVqL+DGQfW6mkPEK4Inpiq8+OYOGqzfJ0ndPl1wYkyVFDR/g1fW/E1lQPPFkiw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.3.tgz", + "integrity": "sha512-nqr+/VDO42hB4d9fz07Eoen+SWi/H/9eeda76AdpgDzJq4oLmxxLgo/ze4lbnrYgdeeB3vSsKkJPi5ENPc9+jQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", - "@wordpress/core-data": "^7.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "@wordpress/private-apis": "^1.0.2", "@wordpress/url": "^4.0.1" @@ -40719,14 +40623,14 @@ } }, "@wordpress/server-side-render": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.0.2.tgz", - "integrity": "sha512-sV7cKLLc/bjCQqqfspRdcnZVFdF12s4H2z/3cRwrry+cTDQo5ig4IBvUVq2DMMqEV3sEM1RwEcVnBYEvSbMJ8w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.0.3.tgz", + "integrity": "sha512-/8bP+uTqX/9lU7fvRuq5D0RmYPu48mN4vdEdA7HNifrm+2v7lLHA66aq+1gCfwhxxOowuvaw+ZGnpGXB0wRx1g==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", @@ -40824,21 +40728,21 @@ "integrity": "sha512-xSVH/zMAg4ABeNOWo6mlkF+TDBDQNaWVdMNzi+yvGoSDImhaM6Bqrhr1e/65AS29iajnqQt6dlu7E56o5FZlcg==" }, "@wordpress/widgets": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.2.tgz", - "integrity": "sha512-+fuXHQIqEm6IaE1GCyt5IIjMBEdnvgPmVYH8r9u0+nMu5RDiKnvhffcl/SEcNiiz1gTQCXcc67BCW6Z7T2i2Qg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.3.tgz", + "integrity": "sha512-/yY7ZWq80phLgrlL6kd4EJcrrG5nhWM7vGrHK8Hg0RBJ0zcQXMcfHG3a12Fxw5mbiKDLB3hKpNUJYxk+GpHcuQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.2", - "@wordpress/blocks": "^13.0.2", - "@wordpress/components": "^28.0.2", + "@wordpress/block-editor": "^13.0.3", + "@wordpress/blocks": "^13.0.3", + "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.2", + "@wordpress/core-data": "^7.0.3", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", - "@wordpress/icons": "^10.0.1", + "@wordpress/icons": "^10.0.2", "@wordpress/notices": "^5.0.2", "clsx": "^2.1.1" } @@ -59069,10 +58973,9 @@ "dev": true }, "uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "v8-compile-cache": { "version": "2.3.0", diff --git a/package.json b/package.json index d4a4ea89817bf..ef79dfb544258 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", "uglify-js": "^3.18.0", - "uuid": "10.0.0", + "uuid": "9.0.1", "wait-on": "7.2.0", "webpack": "5.90.2", "webpack-livereload-plugin": "3.0.2" @@ -83,57 +83,57 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.3", - "@wordpress/block-editor": "13.0.2", - "@wordpress/block-library": "9.0.3", + "@wordpress/block-directory": "5.0.4", + "@wordpress/block-editor": "13.0.3", + "@wordpress/block-library": "9.0.4", "@wordpress/block-serialization-default-parser": "5.0.1", - "@wordpress/blocks": "13.0.2", - "@wordpress/commands": "1.0.2", - "@wordpress/components": "28.0.2", + "@wordpress/blocks": "13.0.3", + "@wordpress/commands": "1.0.3", + "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.2", - "@wordpress/core-data": "7.0.2", - "@wordpress/customize-widgets": "5.0.3", + "@wordpress/core-commands": "1.0.3", + "@wordpress/core-data": "7.0.3", + "@wordpress/customize-widgets": "5.0.4", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.2", + "@wordpress/dataviews": "2.0.3", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.3", - "@wordpress/edit-site": "6.0.3", - "@wordpress/edit-widgets": "6.0.3", - "@wordpress/editor": "14.0.2", + "@wordpress/edit-post": "8.0.4", + "@wordpress/edit-site": "6.0.4", + "@wordpress/edit-widgets": "6.0.4", + "@wordpress/editor": "14.0.3", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.2", + "@wordpress/format-library": "5.0.3", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", - "@wordpress/icons": "10.0.1", - "@wordpress/interactivity": "6.0.1", - "@wordpress/interactivity-router": "2.0.1", - "@wordpress/interface": "6.0.2", + "@wordpress/icons": "10.0.2", + "@wordpress/interactivity": "6.0.2", + "@wordpress/interactivity-router": "2.0.2", + "@wordpress/interface": "6.0.3", "@wordpress/is-shallow-equal": "5.0.1", "@wordpress/keyboard-shortcuts": "5.0.2", "@wordpress/keycodes": "4.0.1", - "@wordpress/list-reusable-blocks": "5.0.2", + "@wordpress/list-reusable-blocks": "5.0.3", "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", - "@wordpress/nux": "9.0.2", - "@wordpress/patterns": "2.0.2", - "@wordpress/plugins": "7.0.2", - "@wordpress/preferences": "4.0.2", + "@wordpress/nux": "9.0.3", + "@wordpress/patterns": "2.0.3", + "@wordpress/plugins": "7.0.3", + "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", "@wordpress/primitives": "4.0.1", "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.2", + "@wordpress/reusable-blocks": "5.0.3", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", - "@wordpress/server-side-render": "5.0.2", + "@wordpress/server-side-render": "5.0.3", "@wordpress/shortcode": "4.0.1", "@wordpress/style-engine": "2.0.2", "@wordpress/sync": "1.0.1", @@ -142,7 +142,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.2", + "@wordpress/widgets": "4.0.3", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index fa9ff139e9aa7..2be33f4016df3 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'ff078755bdad2abc609e'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '01a8b962188c2febacaa'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '60cf6f43c439e8da53f1'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '674320bdfa3095943da9'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'b6137ac2bbbd7aefcd2f'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'c6f81078929d17e05951'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '0d9718d565440a67e9cd'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '1eff5014a9b99329222b'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '923f5626c77e376cefe7'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '789183efb6ee10a7eda3'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'f55d87aa6a5f158f1aec'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'ac2999b763a1862f7a8b'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => 'e6cb9c8ac7fcce3b5e32'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '52e6ada8ff0a9f3a138e'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); diff --git a/src/wp-includes/blocks/media-text.php b/src/wp-includes/blocks/media-text.php index f828aed645fb1..87be164a04bb9 100644 --- a/src/wp-includes/blocks/media-text.php +++ b/src/wp-includes/blocks/media-text.php @@ -29,28 +29,78 @@ function render_block_core_media_text( $attributes, $content ) { return $content; } - $image_tag = '
    '; - $content = preg_replace( '//', $image_tag, $content ); + $media_tag_processor = new WP_HTML_Tag_Processor( $content ); + $wrapping_figure_query = array( + 'tag_name' => 'figure', + 'class_name' => 'wp-block-media-text__media', + ); + $has_media_on_right = isset( $attributes['mediaPosition'] ) && 'right' === $attributes['mediaPosition']; + $image_fill = isset( $attributes['imageFill'] ) && $attributes['imageFill']; + $focal_point = isset( $attributes['focalPoint'] ) ? round( $attributes['focalPoint']['x'] * 100 ) . '% ' . round( $attributes['focalPoint']['y'] * 100 ) . '%' : '50% 50%'; + $unique_id = 'wp-block-media-text__media-' . wp_unique_id(); - $processor = new WP_HTML_Tag_Processor( $content ); - if ( isset( $attributes['imageFill'] ) && $attributes['imageFill'] ) { - $position = '50% 50%'; - if ( isset( $attributes['focalPoint'] ) ) { - $position = round( $attributes['focalPoint']['x'] * 100 ) . '% ' . round( $attributes['focalPoint']['y'] * 100 ) . '%'; + if ( $has_media_on_right ) { + // Loop through all the figure tags and set a bookmark on the last figure tag. + while ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { + $media_tag_processor->set_bookmark( 'last_figure' ); + } + if ( $media_tag_processor->has_bookmark( 'last_figure' ) ) { + $media_tag_processor->seek( 'last_figure' ); + if ( $image_fill ) { + $media_tag_processor->set_attribute( 'style', 'background-image:url(' . esc_url( $current_featured_image ) . ');background-position:' . $focal_point . ';' ); + } else { + // Insert a unique ID to identify the figure tag. + $media_tag_processor->set_attribute( 'id', $unique_id ); + } + } + } else { + if ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { + if ( $image_fill ) { + $media_tag_processor->set_attribute( 'style', 'background-image:url(' . esc_url( $current_featured_image ) . ');background-position:' . $focal_point . ';' ); + } else { + // Insert a unique ID to identify the figure tag. + $media_tag_processor->set_attribute( 'id', $unique_id ); + } } - $processor->next_tag( 'figure' ); - $processor->set_attribute( 'style', 'background-image:url(' . esc_url( $current_featured_image ) . ');background-position:' . $position . ';' ); - } - $processor->next_tag( 'img' ); - $media_size_slug = 'full'; - if ( isset( $attributes['mediaSizeSlug'] ) ) { - $media_size_slug = $attributes['mediaSizeSlug']; } - $processor->set_attribute( 'src', esc_url( $current_featured_image ) ); - $processor->set_attribute( 'class', 'wp-image-' . get_post_thumbnail_id() . ' size-' . $media_size_slug ); - $processor->set_attribute( 'alt', trim( strip_tags( get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true ) ) ) ); - $content = $processor->get_updated_html(); + $content = $media_tag_processor->get_updated_html(); + + // If the image is not set to fill, add the image tag inside the figure tag, + // and update the image attributes in order to display the featured image. + if ( ! $image_fill ) { + $media_size_slug = isset( $attributes['mediaSizeSlug'] ) ? $attributes['mediaSizeSlug'] : 'full'; + $image_tag = ''; + $content = preg_replace( + '/()/', + '$1' . $image_tag, + $content + ); + + $image_tag_processor = new WP_HTML_Tag_Processor( $content ); + if ( $image_tag_processor->next_tag( + array( + 'tag_name' => 'figure', + 'id' => $unique_id, + ) + ) ) { + // The ID is only used to ensure that the correct figure tag is selected, + // and can now be removed. + $image_tag_processor->remove_attribute( 'id' ); + if ( $image_tag_processor->next_tag( + array( + 'tag_name' => 'img', + 'class_name' => 'wp-block-media-text__featured_image', + ) + ) ) { + $image_tag_processor->set_attribute( 'src', esc_url( $current_featured_image ) ); + $image_tag_processor->set_attribute( 'class', 'wp-image-' . get_post_thumbnail_id() . ' size-' . $media_size_slug ); + $image_tag_processor->set_attribute( 'alt', trim( strip_tags( get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true ) ) ) ); + + $content = $image_tag_processor->get_updated_html(); + } + } + } return $content; } diff --git a/src/wp-includes/blocks/navigation.php b/src/wp-includes/blocks/navigation.php index f814e19a13cd3..99feef98542ed 100644 --- a/src/wp-includes/blocks/navigation.php +++ b/src/wp-includes/blocks/navigation.php @@ -519,9 +519,11 @@ private static function get_responsive_container_markup( $attributes, $inner_blo '; } + $overlay_inline_styles = esc_attr( safecss_filter_attr( $colors['overlay_inline_styles'] ) ); + return sprintf( ' -
    +
    @@ -537,7 +539,7 @@ private static function get_responsive_container_markup( $attributes, $inner_blo $toggle_aria_label_close, esc_attr( implode( ' ', $responsive_container_classes ) ), esc_attr( implode( ' ', $open_button_classes ) ), - esc_attr( safecss_filter_attr( $colors['overlay_inline_styles'] ) ), + ( ! empty( $overlay_inline_styles ) ) ? "style=\"$overlay_inline_styles\"" : '', $toggle_button_content, $toggle_close_button_content, $open_button_directives, @@ -826,7 +828,7 @@ function block_core_navigation_add_directives_to_submenu( $tags, $block_attribut $tags->set_attribute( 'data-wp-interactive', 'core/navigation' ); $tags->set_attribute( 'data-wp-context', '{ "submenuOpenedBy": { "click": false, "hover": false, "focus": false }, "type": "submenu" }' ); $tags->set_attribute( 'data-wp-watch', 'callbacks.initMenu' ); - $tags->set_attribute( 'data-wp-on-async--focusout', 'actions.handleMenuFocusout' ); + $tags->set_attribute( 'data-wp-on--focusout', 'actions.handleMenuFocusout' ); $tags->set_attribute( 'data-wp-on--keydown', 'actions.handleMenuKeydown' ); // This is a fix for Safari. Without it, Safari doesn't change the active From 1a5f20eda7fff11adffe843839677b73e4c66b38 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 13:52:21 +0000 Subject: [PATCH 023/422] Coding Standards: Fix WPCS issue found after [58564]. Unprops audrasjb. See #61153. git-svn-id: https://develop.svn.wordpress.org/trunk@58566 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/users.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/users.php b/src/wp-admin/users.php index 4f15efbbc84fc..4951a7e9bfb0b 100644 --- a/src/wp-admin/users.php +++ b/src/wp-admin/users.php @@ -34,7 +34,7 @@ 'title' => __( 'Overview' ), 'content' => '

    ' . __( 'This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.' ) . '

    ' . '

    ' . __( 'To add a new user for your site, click the Add New User button at the top of the screen or Add New User in the Users menu section.' ) . '

    ', - ) + ) ); get_current_screen()->add_help_tab( From 8ca65b73781a0ed21b01cb634e1be779d6ce95fd Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 25 Jun 2024 13:55:00 +0000 Subject: [PATCH 024/422] Build/Test Tools: Run `grunt precommit:css`. This rebuilds compiled CSS files after updating the `caniuse` database in [58563]. All `-webkit-clip-path` properties have been removed as the corresponding browsers dipped below 1% usage and have fallen out of the browser support policy. Fixes #61499. git-svn-id: https://develop.svn.wordpress.org/trunk@58567 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/common.css | 1 - src/wp-admin/css/install.css | 1 - src/wp-admin/css/list-tables.css | 1 - src/wp-admin/css/login.css | 1 - src/wp-admin/css/nav-menus.css | 2 -- src/wp-includes/css/admin-bar.css | 2 -- src/wp-includes/css/media-views.css | 1 - src/wp-includes/css/wp-embed-template.css | 1 - 8 files changed, 10 deletions(-) diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index 2504fd78bddde..b8a1e8b0f79e3 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -123,7 +123,6 @@ .ui-helper-hidden-accessible { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; diff --git a/src/wp-admin/css/install.css b/src/wp-admin/css/install.css index 29e85715f68a0..af77cdc2805f7 100644 --- a/src/wp-admin/css/install.css +++ b/src/wp-admin/css/install.css @@ -350,7 +350,6 @@ body.language-chooser { .screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css index a0f49140827fd..de36190b51e4c 100644 --- a/src/wp-admin/css/list-tables.css +++ b/src/wp-admin/css/list-tables.css @@ -2003,7 +2003,6 @@ div.action-links, /* Show comment bubble as text instead */ .post-com-count .screen-reader-text { position: static; - -webkit-clip-path: none; clip-path: none; width: auto; height: auto; diff --git a/src/wp-admin/css/login.css b/src/wp-admin/css/login.css index 7433e9585453e..22f71984b06b3 100644 --- a/src/wp-admin/css/login.css +++ b/src/wp-admin/css/login.css @@ -408,7 +408,6 @@ body.interim-login { .screen-reader-text span { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; diff --git a/src/wp-admin/css/nav-menus.css b/src/wp-admin/css/nav-menus.css index d9a18c5359066..4bb2a539b23f4 100644 --- a/src/wp-admin/css/nav-menus.css +++ b/src/wp-admin/css/nav-menus.css @@ -177,7 +177,6 @@ input.bulk-select-switcher:focus + .bulk-select-button-label { } .bulk-actions input.menu-items-delete { - -webkit-appearance: none; appearance: none; font-size: inherit; border: 0; @@ -707,7 +706,6 @@ body.menu-max-depth-11 { min-width: 1280px !important; } .no-js.nav-menus-php .item-edit .screen-reader-text { position: static; - -webkit-clip-path: none; clip-path: none; width: auto; height: auto; diff --git a/src/wp-includes/css/admin-bar.css b/src/wp-includes/css/admin-bar.css index 07699977f9bd3..c4e8ba3afaa6e 100644 --- a/src/wp-includes/css/admin-bar.css +++ b/src/wp-includes/css/admin-bar.css @@ -701,7 +701,6 @@ html:lang(he-il) .rtl #wpadminbar * { #wpadminbar .screen-reader-text span { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; @@ -795,7 +794,6 @@ html:lang(he-il) .rtl #wpadminbar * { #wpadminbar .ab-label { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; diff --git a/src/wp-includes/css/media-views.css b/src/wp-includes/css/media-views.css index de700d61e4079..44bda26f1f162 100644 --- a/src/wp-includes/css/media-views.css +++ b/src/wp-includes/css/media-views.css @@ -2488,7 +2488,6 @@ /* Visually hide the menu heading keeping it available to assistive technologies. */ .media-frame-menu-heading { clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; overflow: hidden; diff --git a/src/wp-includes/css/wp-embed-template.css b/src/wp-includes/css/wp-embed-template.css index 63a00632165ea..d6e4a7cf51118 100644 --- a/src/wp-includes/css/wp-embed-template.css +++ b/src/wp-includes/css/wp-embed-template.css @@ -11,7 +11,6 @@ body { .screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; From 2a78bb5c5d5f15ca8d246d20c2613f1da4626401 Mon Sep 17 00:00:00 2001 From: Kelly Choyce-Dwan Date: Tue, 25 Jun 2024 13:57:28 +0000 Subject: [PATCH 025/422] Help/About: Update the About page for 6.6. Introducing the new content for the 6.6 About page. This release, the About page will have just the highlights for 6.6, and link off to the release page on WordPress.org for the full overview. See #61320, https://github.com/WordPress/gutenberg/issues/62631. Props ryelle, andrewserong, annezazu, joen, beafialho, richtabor, kristastevens, marybaum, cbringmann, DanSoschin, youknowriad. git-svn-id: https://develop.svn.wordpress.org/trunk@58568 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 167 +++++++------------- src/wp-admin/css/about.css | 16 +- src/wp-admin/images/about-release-badge.svg | 4 +- 3 files changed, 70 insertions(+), 117 deletions(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index 169f0b6cda252..c64df64f7cc5b 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -53,172 +53,115 @@ ?>

    - +

    -
    - -
    -
    -
    -

    -

    -
    -
    - -
    -
    -

    -

    +

    +

    - +
    -
    -
    -
    - -
    -

    -

    -
    -
    +
    +
    - +
    -

    -

    -
    -
    - -
    -

    -

    +
    +

    +

    -
    -
    -
    - -
    -

    -

    -
    -
    -
    - -
    -

    -

    +
    +
    +

    +

    -
    +
    - +
    -

    -

    -
    -
    -
    +
    - +
    -

    -

    -
    -
    - -
    -

    -

    +
    +

    +

    + +
    -
    -

    -

    -
    -
    -
    -
    -

    +

    Requires Plugins' + /* translators: %s: code-formatted "data-wp-on-async". */ + __( '6.6 includes important updates like removing redundant WP_Theme_JSON calls, disabling autoload for large options, eliminating unnecessary polyfill dependencies, lazy loading post embeds, introducing the %s directive, and a 40%% reduction in template loading time in the editor.' ), + 'data-wp-on-async' ); ?>

    -
    - -
    -

    -

    +

    +

    +
    + + + +
    +

    +

    +
    +
    - +
    -

    -

    -
    +
    - +

    @@ -247,7 +190,7 @@
    @@ -256,8 +199,8 @@ printf( /* translators: 1: WordPress Field Guide link, 2: WordPress version number. */ __( 'Explore the WordPress %2$s Field Guide. Learn about the changes in this release with detailed developer notes to help you build with WordPress.' ), - esc_url( __( 'https://make.wordpress.org/core/wordpress-6-5-field-guide/' ) ), - '6.5' + esc_url( __( 'https://make.wordpress.org/core/wordpress-6-6-field-guide/' ) ), + '6.6' ); ?>

    @@ -265,7 +208,7 @@
    @@ -278,9 +221,9 @@ sprintf( /* translators: %s: WordPress version number. */ esc_url( __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ) ), - '6-5' + '6-6' ), - '6.5' + '6.6' ); ?>

    diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index 4b7c0185de6d3..1db712dc0cfc1 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -340,7 +340,8 @@ } @media screen and (max-width: 480px) { - .about__section.is-feature .column { + .about__section.is-feature .column, + .about__section .is-section-header { padding: 0; } @@ -378,7 +379,7 @@ .about__container h2, .about__container h3.is-larger-heading { margin-top: 0; - margin-bottom: 0.5em; + margin-bottom: calc(0.5 * var(--gap)); font-size: 2rem; font-weight: 700; line-height: 1.16; @@ -388,6 +389,7 @@ .about__container h1.is-smaller-heading, .about__container h2.is-smaller-heading { margin-top: 0; + margin-bottom: calc(0.5 * var(--gap)); font-size: 1.625rem; font-weight: 700; line-height: 1.4; @@ -447,6 +449,10 @@ text-decoration: underline; } +.about__section a.button.button-hero { + font-size: 1.5rem; +} + .about__container ul { list-style: disc; margin-left: calc(var(--gap) / 2); @@ -488,7 +494,7 @@ } .about__container .about__image + h3 { - margin-top: 1.5em; + margin-top: calc(0.75 * var(--gap)); } .about__container hr { @@ -507,6 +513,10 @@ margin: var(--gap) auto; } +.about__container hr.is-invisible { + border: none; +} + .about__container div.updated, .about__container div.error, .about__container .notice { diff --git a/src/wp-admin/images/about-release-badge.svg b/src/wp-admin/images/about-release-badge.svg index 8ca71d6bce748..3afbbb61aa84c 100644 --- a/src/wp-admin/images/about-release-badge.svg +++ b/src/wp-admin/images/about-release-badge.svg @@ -1,4 +1,4 @@ - - + + From bac6a859326056dbdb9dd4df8232c973148b1259 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 25 Jun 2024 14:13:11 +0000 Subject: [PATCH 026/422] Build/Test Tools: Run `npm audit fix`. This runs `npm audit fix` to address upstream issues with dependencies. See #61498. git-svn-id: https://develop.svn.wordpress.org/trunk@58569 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 452 +++++++++++++++++++++++----------------------- 1 file changed, 226 insertions(+), 226 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b5f3bd433034..a2a0da0d6838e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2795,12 +2795,12 @@ } }, "node_modules/@jest/core/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2841,9 +2841,9 @@ "dev": true }, "node_modules/@jest/core/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -3269,12 +3269,12 @@ } }, "node_modules/@jest/transform/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -3321,9 +3321,9 @@ "dev": true }, "node_modules/@jest/transform/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -10639,13 +10639,13 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -10653,7 +10653,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -11359,21 +11359,21 @@ } }, "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -11984,9 +11984,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -15484,17 +15484,17 @@ "dev": true }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -15818,21 +15818,21 @@ } }, "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -16291,12 +16291,12 @@ } }, "node_modules/findup-sync/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -16315,9 +16315,9 @@ } }, "node_modules/findup-sync/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -16516,9 +16516,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -18748,21 +18748,21 @@ } }, "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -20921,12 +20921,12 @@ } }, "node_modules/jest-config/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -20967,9 +20967,9 @@ "dev": true }, "node_modules/jest-config/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -21383,21 +21383,21 @@ } }, "node_modules/jest-haste-map/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/jest-haste-map/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -21613,12 +21613,12 @@ } }, "node_modules/jest-message-util/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -21659,9 +21659,9 @@ "dev": true }, "node_modules/jest-message-util/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -22825,9 +22825,9 @@ } }, "node_modules/jsdom/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -23228,12 +23228,12 @@ } }, "node_modules/liftup/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -23252,9 +23252,9 @@ } }, "node_modules/liftup/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -24493,7 +24493,7 @@ "node_modules/matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", "dev": true, "dependencies": { "findup-sync": "^2.0.0", @@ -24520,7 +24520,7 @@ "node_modules/matchdep/node_modules/findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", "dev": true, "dependencies": { "detect-file": "^1.0.0", @@ -28398,9 +28398,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -31445,12 +31445,12 @@ "dev": true }, "node_modules/stylelint/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -31480,9 +31480,9 @@ "dev": true }, "node_modules/stylelint/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -33534,9 +33534,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -33737,9 +33737,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -34059,9 +34059,9 @@ } }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" @@ -34201,9 +34201,9 @@ } }, "node_modules/y-webrtc/node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "optional": true, "engines": { "node": ">=10.0.0" @@ -36218,12 +36218,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "chalk": { @@ -36252,9 +36252,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -36579,12 +36579,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "chalk": { @@ -36619,9 +36619,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -42067,13 +42067,13 @@ } }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -42081,7 +42081,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -42601,18 +42601,18 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -43120,9 +43120,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true }, "cookie-signature": { @@ -45742,17 +45742,17 @@ "dev": true }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -46018,18 +46018,18 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -46380,12 +46380,12 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "expand-tilde": { @@ -46398,9 +46398,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -46557,9 +46557,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true }, "for-each": { @@ -48232,18 +48232,18 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -49807,12 +49807,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "chalk": { @@ -49841,9 +49841,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -50150,18 +50150,18 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -50321,12 +50321,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "chalk": { @@ -50355,9 +50355,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -51234,9 +51234,9 @@ } }, "ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true } } @@ -51562,12 +51562,12 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "expand-tilde": { @@ -51580,9 +51580,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -52548,7 +52548,7 @@ "matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", "dev": true, "requires": { "findup-sync": "^2.0.0", @@ -52569,7 +52569,7 @@ "findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", "dev": true, "requires": { "detect-file": "^1.0.0", @@ -55354,9 +55354,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", @@ -57669,12 +57669,12 @@ "dev": true }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "camelcase-keys": { @@ -57695,9 +57695,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -59271,9 +59271,9 @@ } }, "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -59411,9 +59411,9 @@ } }, "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true } } @@ -59649,9 +59649,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true }, "xdg-basedir": { @@ -59723,9 +59723,9 @@ }, "dependencies": { "ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "optional": true } } From 353618209527b1872cc6789ef98c949898446fd0 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 25 Jun 2024 14:17:48 +0000 Subject: [PATCH 027/422] Filesystem: Normalize allowed_files so comparison is apples to apples. In [58470] a change was made to normalize the filename in validate_file, however this leads to instances where the list of files that are allowed aren't normalized such as in the theme editor. By normalizing the array, the comparison is apples to apples. Fixes #61488. Props jorbin, hellofromtonya, swissspidy, misulicus, script2see, Presskopp, audrasjb, peterwilsoncc, siliconforks, littler.chicken, paulkevan, git-svn-id: https://develop.svn.wordpress.org/trunk@58570 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 4 +++- tests/phpunit/tests/functions.php | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 90e605f5e99be..ed41eed8c791d 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -6199,8 +6199,10 @@ function validate_file( $file, $allowed_files = array() ) { return 0; } - // Normalize path for Windows servers + // Normalize path for Windows servers. $file = wp_normalize_path( $file ); + // Normalize path for $allowed_files as well so it's an apples to apples comparison. + $allowed_files = array_map( 'wp_normalize_path', $allowed_files ); // `../` on its own is not allowed: if ( '../' === $file ) { diff --git a/tests/phpunit/tests/functions.php b/tests/phpunit/tests/functions.php index df1055c677b18..5572c215a34bb 100644 --- a/tests/phpunit/tests/functions.php +++ b/tests/phpunit/tests/functions.php @@ -1793,6 +1793,7 @@ static function ( $mimes ) use ( $woff_mime_type ) { * Test file path validation * * @ticket 42016 + * @ticket 61488 * @dataProvider data_validate_file * * @param string $file File path. @@ -1913,6 +1914,13 @@ public function data_validate_file() { 2, ), + // Windows Path with allowed file + array( + 'Apache24\htdocs\wordpress/wp-content/themes/twentyten/style.css', + array( 'Apache24\htdocs\wordpress/wp-content/themes/twentyten/style.css' ), + 0, + ), + // Disallowed files: array( 'foo.ext', From b340c16ab116330414d2fbcb2e736398af8b565c Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 25 Jun 2024 15:30:57 +0000 Subject: [PATCH 028/422] Media: unfix admin image cropping calculations. [58456] introduced some failures to the automated test system that indicate this fix is incomplete. See #32282. Props hellofromtonya, audrasjb, andrewserong, kevin940726, oglekler. git-svn-id: https://develop.svn.wordpress.org/trunk@58571 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/lib/image-edit.js | 110 +++++++-------------------- src/wp-admin/includes/image-edit.php | 4 +- 2 files changed, 31 insertions(+), 83 deletions(-) diff --git a/src/js/_enqueues/lib/image-edit.js b/src/js/_enqueues/lib/image-edit.js index 4e17e5626a897..b41e93f55dc7d 100644 --- a/src/js/_enqueues/lib/image-edit.js +++ b/src/js/_enqueues/lib/image-edit.js @@ -143,12 +143,17 @@ * @return {void} */ init : function(postid) { - var t = this, old = $('#image-editor-' + t.postid); + var t = this, old = $('#image-editor-' + t.postid), + x = t.intval( $('#imgedit-x-' + postid).val() ), + y = t.intval( $('#imgedit-y-' + postid).val() ); if ( t.postid !== postid && old.length ) { t.close(t.postid); } + t.hold.w = t.hold.ow = x; + t.hold.h = t.hold.oh = y; + t.hold.xy_ratio = x / y; t.hold.sizer = parseFloat( $('#imgedit-sizer-' + postid).val() ); t.postid = postid; $('#imgedit-response-' + postid).empty(); @@ -183,29 +188,6 @@ $( document ).on( 'image-editor-ui-ready', this.focusManager ); }, - /** - * Calculate the image size and save it to memory. - * - * @since 6.6.0 - * - * @memberof imageEdit - * - * @param {number} postid The post ID. - * - * @return {void} - */ - calculateImgSize: function( postid ) { - var t = this, - x = t.intval( $( '#imgedit-x-' + postid ).val() ), - y = t.intval( $( '#imgedit-y-' + postid ).val() ); - - t.hold.w = t.hold.ow = x; - t.hold.h = t.hold.oh = y; - t.hold.xy_ratio = x / y; - t.hold.sizer = parseFloat( $( '#imgedit-sizer-' + postid ).val() ); - t.currentCropSelection = null; - }, - /** * Toggles the wait/load icon in the editor. * @@ -543,7 +525,7 @@ for ( n in history ) { i = history[n]; if ( i.hasOwnProperty('c') ) { - op[n] = { 'c': { 'x': i.c.x, 'y': i.c.y, 'w': i.c.w, 'h': i.c.h, 'r': i.c.r } }; + op[n] = { 'c': { 'x': i.c.x, 'y': i.c.y, 'w': i.c.w, 'h': i.c.h } }; } else if ( i.hasOwnProperty('r') ) { op[n] = { 'r': i.r.r }; } else if ( i.hasOwnProperty('f') ) { @@ -878,7 +860,6 @@ if ( 'undefined' === typeof this.hold.sizer ) { this.init( postid ); } - this.calculateImgSize( postid ); this.initCrop(postid, img, parent); this.setCropSelection( postid, { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0, 'width': img.innerWidth(), 'height': img.innerHeight() } ); @@ -928,6 +909,8 @@ var t = this, selW = $('#imgedit-sel-width-' + postid), selH = $('#imgedit-sel-height-' + postid), + selX = $('#imgedit-start-x-' + postid), + selY = $('#imgedit-start-y-' + postid), $image = $( image ), $img; @@ -962,16 +945,13 @@ * * @return {void} */ - parent.children().on( 'mousedown touchstart', function(e) { - var ratio = false, - sel = t.iasapi.getSelection(), - cx = t.intval( $( '#imgedit-crop-width-' + postid ).val() ), - cy = t.intval( $( '#imgedit-crop-height-' + postid ).val() ); - - if ( cx && cy ) { - ratio = t.getSelRatio( postid ); - } else if ( e.shiftKey && sel && sel.width && sel.height ) { - ratio = sel.width + ':' + sel.height; + parent.children().on( 'mousedown, touchstart', function(e){ + var ratio = false, sel, defRatio; + + if ( e.shiftKey ) { + sel = t.iasapi.getSelection(); + defRatio = t.getSelRatio(postid); + ratio = ( sel && sel.width && sel.height ) ? sel.width + ':' + sel.height : defRatio; } t.iasapi.setOptions({ @@ -1020,17 +1000,11 @@ * @return {void} */ onSelectChange: function(img, c) { - var sizer = imageEdit.hold.sizer, - oldSel = imageEdit.currentCropSelection; - - if ( oldSel != null && oldSel.width == c.width && oldSel.height == c.height ) { - return; - } - - selW.val( Math.min( imageEdit.hold.w, imageEdit.round( c.width / sizer ) ) ); - selH.val( Math.min( imageEdit.hold.h, imageEdit.round( c.height / sizer ) ) ); - - t.currentCropSelection = c; + var sizer = imageEdit.hold.sizer; + selW.val( imageEdit.round(c.width / sizer) ); + selH.val( imageEdit.round(c.height / sizer) ); + selX.val( imageEdit.round(c.x1 / sizer) ); + selY.val( imageEdit.round(c.y1 / sizer) ); } }); }, @@ -1048,11 +1022,7 @@ * @return {boolean} */ setCropSelection : function(postid, c) { - var sel, - selW = $( '#imgedit-sel-width-' + postid ), - selH = $( '#imgedit-sel-height-' + postid ), - sizer = this.hold.sizer, - hold = this.hold; + var sel; c = c || 0; @@ -1067,15 +1037,7 @@ return false; } - // adjust the selection within the bounds of the image on 100% scale - var excessW = hold.w - ( Math.round( c.x1 / sizer ) + parseInt( selW.val() ) ); - var excessH = hold.h - ( Math.round( c.y1 / sizer ) + parseInt( selH.val() ) ); - var x = Math.round( c.x1 / sizer ) + Math.min( 0, excessW ); - var y = Math.round( c.y1 / sizer ) + Math.min( 0, excessH ); - - // use 100% scaling to prevent rounding errors - sel = { 'r': 1, 'x': x, 'y': y, 'w': selW.val(), 'h': selH.val() }; - + sel = { 'x': c.x1, 'y': c.y1, 'w': c.width, 'h': c.height }; this.setDisabled($('.imgedit-crop', '#imgedit-panel-' + postid), 1); $('#imgedit-selection-' + postid).val( JSON.stringify(sel) ); }, @@ -1203,11 +1165,6 @@ } this.closePopup(t); this.addStep({ 'r': { 'r': angle, 'fw': this.hold.h, 'fh': this.hold.w }}, postid, nonce); - - // Clear the selection fields after rotating. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - this.currentCropSelection = null; }, /** @@ -1230,11 +1187,6 @@ } this.closePopup(t); this.addStep({ 'f': { 'f': axis, 'fw': this.hold.w, 'fh': this.hold.h }}, postid, nonce); - - // Clear the selection fields after flipping. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - this.currentCropSelection = null; }, /** @@ -1267,11 +1219,10 @@ } // Clear the selection fields after cropping. - $( '#imgedit-sel-width-' + postid ).val( '' ); - $( '#imgedit-sel-height-' + postid ).val( '' ); - $( '#imgedit-start-x-' + postid ).val( '0' ); - $( '#imgedit-start-y-' + postid ).val( '0' ); - this.currentCropSelection = null; + $('#imgedit-sel-width-' + postid).val(''); + $('#imgedit-sel-height-' + postid).val(''); + $('#imgedit-start-x-' + postid).val('0'); + $('#imgedit-start-y-' + postid).val('0'); }, /** @@ -1361,8 +1312,6 @@ img = $('#image-preview-' + postid), imgh = img.height(), imgw = img.width(), sizer = this.hold.sizer, x1, y1, x2, y2, ias = this.iasapi; - this.currentCropSelection = null; - if ( false === this.validateNumeric( el ) ) { return; } @@ -1386,19 +1335,18 @@ if ( x2 > imgw ) { x1 = 0; x2 = imgw; - elX.val( Math.min( this.hold.w, Math.round( x2 / sizer ) ) ); + elX.val( Math.round( x2 / sizer ) ); } if ( y2 > imgh ) { y1 = 0; y2 = imgh; - elY.val( Math.min( this.hold.h, Math.round( y2 / sizer ) ) ); + elY.val( Math.round( y2 / sizer ) ); } ias.setSelection( x1, y1, x2, y2 ); ias.update(); this.setCropSelection(postid, ias.getSelection()); - this.currentCropSelection = ias.getSelection(); } }, diff --git a/src/wp-admin/includes/image-edit.php b/src/wp-admin/includes/image-edit.php index eea6099c9bd96..d3a414740f2b2 100644 --- a/src/wp-admin/includes/image-edit.php +++ b/src/wp-admin/includes/image-edit.php @@ -735,10 +735,10 @@ function image_edit_apply_changes( $image, $changes ) { $w = $size['width']; $h = $size['height']; - $scale = isset( $sel->r ) ? $sel->r : 1 / _image_get_preview_ratio( $w, $h ); // Discard preview scaling. + $scale = 1 / _image_get_preview_ratio( $w, $h ); // Discard preview scaling. $image->crop( (int) ( $sel->x * $scale ), (int) ( $sel->y * $scale ), (int) ( $sel->w * $scale ), (int) ( $sel->h * $scale ) ); } else { - $scale = isset( $sel->r ) ? $sel->r : 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // Discard preview scaling. + $scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // Discard preview scaling. $image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); } break; From 6b07cf52bcf8e54e51cde75d5afcbc0106b4bd6e Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 16:08:36 +0000 Subject: [PATCH 029/422] WordPress 6.6 RC1. git-svn-id: https://develop.svn.wordpress.org/trunk@58572 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index ceb43392eabe4..680b02633d5aa 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.6-beta4-58555-src'; +$wp_version = '6.6-RC1-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 03fc69da637ee1fe264aea0a69979a298e118759 Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Tue, 25 Jun 2024 16:19:35 +0000 Subject: [PATCH 030/422] Post WordPress 6.6 RC1 version bump. git-svn-id: https://develop.svn.wordpress.org/trunk@58573 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 680b02633d5aa..cb1c184757192 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.6-RC1-src'; +$wp_version = '6.6-RC1-58573-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 3a1e1f6a3caec2df40bcf0a4b727b532199d4efd Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 25 Jun 2024 17:04:59 +0000 Subject: [PATCH 031/422] Post WordPress 6.6 branching version bump. `trunk` is now `6.7-alpha`. git-svn-id: https://develop.svn.wordpress.org/trunk@58575 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/test-old-branches.yml | 10 ++++++++-- .github/workflows/upgrade-testing.yml | 2 +- .version-support-mysql.json | 9 +++++++++ .version-support-php.json | 9 +++++++++ SECURITY.md | 1 + package-lock.json | 4 ++-- package.json | 2 +- src/wp-includes/version.php | 2 +- 8 files changed, 32 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-old-branches.yml b/.github/workflows/test-old-branches.yml index 777ed9e2c01a9..bf749673563bb 100644 --- a/.github/workflows/test-old-branches.yml +++ b/.github/workflows/test-old-branches.yml @@ -17,7 +17,7 @@ on: permissions: {} env: - CURRENTLY_SUPPORTED_BRANCH: '6.5' + CURRENTLY_SUPPORTED_BRANCH: '6.6' jobs: dispatch-workflows-for-old-branches: @@ -37,12 +37,14 @@ jobs: 'test-npm.yml' ] branch: [ - '6.5', '6.4', '6.3', '6.2', '6.1','6.0', + '6.6', '6.5', '6.4', '6.3', '6.2', '6.1','6.0', '5.9', '5.8', '5.7', '5.6', '5.5', '5.4', '5.3', '5.2', '5.1', '5.0', '4.9', '4.8', '4.7', '4.6', '4.5', '4.4', '4.3', '4.2', '4.1' ] include: # PHP Compatibility testing was introduced in 5.5. + - branch: '6.6' + workflow: 'php-compatibility.yml' - branch: '6.5' workflow: 'php-compatibility.yml' - branch: '6.4' @@ -69,6 +71,8 @@ jobs: # End-to-end testing was introduced in 5.3 but was later removed as there were no meaningful assertions. # Starting in 5.8 with #52905, some additional tests with real assertions were introduced. # Branches 5.8 and newer should be tested to confirm no regressions are introduced. + - branch: '6.6' + workflow: 'end-to-end-tests.yml' - branch: '6.5' workflow: 'end-to-end-tests.yml' - branch: '6.4' @@ -87,6 +91,8 @@ jobs: workflow: 'end-to-end-tests.yml' # Performance testing was introduced in 6.2. + - branch: '6.6' + workflow: 'performance.yml' - branch: '6.5' workflow: 'performance.yml' - branch: '6.4' diff --git a/.github/workflows/upgrade-testing.yml b/.github/workflows/upgrade-testing.yml index 1ffe4bfc585ac..25ba7e97080ba 100644 --- a/.github/workflows/upgrade-testing.yml +++ b/.github/workflows/upgrade-testing.yml @@ -46,7 +46,7 @@ jobs: php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.0' ] - wp: [ '6.0', '6.1', '6.2', '6.3', '6.4', '6.5' ] + wp: [ '6.0', '6.1', '6.2', '6.3', '6.4', '6.5', '6.6' ] multisite: [ false, true ] with: os: ${{ matrix.os }} diff --git a/.version-support-mysql.json b/.version-support-mysql.json index 9bbe6bbd08788..bd2bfac03233e 100644 --- a/.version-support-mysql.json +++ b/.version-support-mysql.json @@ -1,4 +1,13 @@ { + "6-7": [ + "8.3", + "8.2", + "8.1", + "8.0", + "5.7", + "5.6", + "5.5" + ], "6-6": [ "8.3", "8.2", diff --git a/.version-support-php.json b/.version-support-php.json index 789d52636e96f..6d9f3708a5a46 100644 --- a/.version-support-php.json +++ b/.version-support-php.json @@ -1,4 +1,13 @@ { + "6-7": [ + "7.2", + "7.3", + "7.4", + "8.0", + "8.1", + "8.2", + "8.3" + ], "6-6": [ "7.2", "7.3", diff --git a/SECURITY.md b/SECURITY.md index 40fd5039e5ba2..32e8273dcbb4c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -10,6 +10,7 @@ Full details of the WordPress Security Policy and the list of covered projects a | Version | Supported | |---------| --------- | +| 6.6.x | Yes | | 6.5.x | Yes | | 6.4.x | Yes | | 6.3.x | Yes | diff --git a/package-lock.json b/package-lock.json index a2a0da0d6838e..9e3e3af6cd09a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "WordPress", - "version": "6.6.0", + "version": "6.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "WordPress", - "version": "6.6.0", + "version": "6.7.0", "license": "GPL-2.0-or-later", "dependencies": { "@wordpress/a11y": "4.0.1", diff --git a/package.json b/package.json index ef79dfb544258..1be9e1c274728 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "WordPress", - "version": "6.6.0", + "version": "6.7.0", "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", "repository": { "type": "svn", diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index cb1c184757192..339053f5296e9 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.6-RC1-58573-src'; +$wp_version = '6.7-RC1-58575-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 3f2b3ad0de469e2d0579e2bf03162ade865f42e3 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Tue, 25 Jun 2024 23:08:46 +0000 Subject: [PATCH 032/422] Set trunk version global to 6.7-alpha rather than RC1. Follow up to [58575]. git-svn-id: https://develop.svn.wordpress.org/trunk@58576 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 339053f5296e9..5b77c623a5618 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.7-RC1-58575-src'; +$wp_version = '6.7-alpha-58576-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 6027cea244bc7e6e9c1dd97a10fc6e4c986708fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Wed, 26 Jun 2024 08:25:13 +0000 Subject: [PATCH 033/422] Build: Remove legacy webpack DefinePlugin configuration Follow-up [58193]. Fixes #61262. Props jonsurrell. git-svn-id: https://develop.svn.wordpress.org/trunk@58577 602fd350-edb4-49c9-b593-d223f7449a82 --- tools/webpack/shared.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/tools/webpack/shared.js b/tools/webpack/shared.js index ec12959351151..9cfd335176492 100644 --- a/tools/webpack/shared.js +++ b/tools/webpack/shared.js @@ -41,15 +41,6 @@ const getBaseConfig = ( env ) => { watch: env.watch, plugins: [ new DefinePlugin( { - /* - * These variables are part of https://github.com/WordPress/gutenberg/pull/61486 - * They're expected to be released in an upcoming version of Gutenberg. - * - * Defining this before the packages are released is harmless. - * - * @todo Remove the non-globalThis defines here when packages have been upgraded to the globalThis versions. - */ - // Inject the `IS_GUTENBERG_PLUGIN` global, used for feature flagging. 'globalThis.IS_GUTENBERG_PLUGIN': JSON.stringify( false ), // Inject the `IS_WORDPRESS_CORE` global, used for feature flagging. @@ -58,13 +49,6 @@ const getBaseConfig = ( env ) => { 'globalThis.SCRIPT_DEBUG': JSON.stringify( mode === 'development' ), - - // Inject the `IS_GUTENBERG_PLUGIN` global, used for feature flagging. - 'process.env.IS_GUTENBERG_PLUGIN': JSON.stringify( false ), - // Inject the `IS_WORDPRESS_CORE` global, used for feature flagging. - 'process.env.IS_WORDPRESS_CORE': JSON.stringify( true ), - // Inject the `SCRIPT_DEBUG` global, used for dev versions of JavaScript. - SCRIPT_DEBUG: JSON.stringify( mode === 'development' ), } ), ], }; From df256e414c183ff001cdf26ebf37b19b960180de Mon Sep 17 00:00:00 2001 From: bernhard-reiter Date: Wed, 26 Jun 2024 08:52:12 +0000 Subject: [PATCH 034/422] Block Hooks: Refactor controller filter to use meta_input. Prior to this changeset, the function `update_ignored_hooked_blocks_postmeta()` used the core function `update_post_meta()` to write `_wp_ignored_hooked_blocks` data to the database during an operation that is preparing a post to be inserted. Since we have access to the incoming changes that are being prepared we can remove this database operation in favour of writing the data to the post object provided under `meta_input`. Doing this means two things: 1. It allows us to store postmeta for new posts that are about to be created since they don't have an `ID` yet (which is information `update_post_meta()` needs). 2. The core controller will take care of updating postmeta in a more predictable pattern. Props tomjcafferkey, bernhard-reiter. Fixes #61495. git-svn-id: https://develop.svn.wordpress.org/trunk@58578 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 11 +++++++++-- .../blocks/updateIgnoredHookedBlocksPostMeta.php | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 26e5e0c96b409..2edcaa8c1ba04 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -1095,7 +1095,10 @@ function update_ignored_hooked_blocks_postmeta( $post ) { $post->post_content ); - $serialized_block = apply_block_hooks_to_content( $markup, get_post( $post->ID ), 'set_ignored_hooked_blocks_metadata' ); + $existing_post = get_post( $post->ID ); + // Merge the existing post object with the updated post object to pass to the block hooks algorithm for context. + $context = (object) array_merge( (array) $existing_post, (array) $post ); + $serialized_block = apply_block_hooks_to_content( $markup, $context, 'set_ignored_hooked_blocks_metadata' ); $root_block = parse_blocks( $serialized_block )[0]; $ignored_hooked_blocks = isset( $root_block['attrs']['metadata']['ignoredHookedBlocks'] ) @@ -1108,7 +1111,11 @@ function update_ignored_hooked_blocks_postmeta( $post ) { $existing_ignored_hooked_blocks = json_decode( $existing_ignored_hooked_blocks, true ); $ignored_hooked_blocks = array_unique( array_merge( $ignored_hooked_blocks, $existing_ignored_hooked_blocks ) ); } - update_post_meta( $post->ID, '_wp_ignored_hooked_blocks', json_encode( $ignored_hooked_blocks ) ); + + if ( ! isset( $post->meta_input ) ) { + $post->meta_input = array(); + } + $post->meta_input['_wp_ignored_hooked_blocks'] = json_encode( $ignored_hooked_blocks ); } $post->post_content = remove_serialized_parent_block( $serialized_block ); diff --git a/tests/phpunit/tests/blocks/updateIgnoredHookedBlocksPostMeta.php b/tests/phpunit/tests/blocks/updateIgnoredHookedBlocksPostMeta.php index 6f60243630002..7b0a830dd52dd 100644 --- a/tests/phpunit/tests/blocks/updateIgnoredHookedBlocksPostMeta.php +++ b/tests/phpunit/tests/blocks/updateIgnoredHookedBlocksPostMeta.php @@ -75,7 +75,7 @@ public function test_update_ignored_hooked_blocks_postmeta_preserves_entities() ); $this->assertSame( array( 'tests/my-block' ), - json_decode( get_post_meta( self::$navigation_post->ID, '_wp_ignored_hooked_blocks', true ), true ), + json_decode( $post->meta_input['_wp_ignored_hooked_blocks'], true ), 'Block was not added to ignored hooked blocks metadata.' ); } From 2516e98974452133b1363f93fc32aeb8904b4a88 Mon Sep 17 00:00:00 2001 From: bernhard-reiter Date: Wed, 26 Jun 2024 13:19:47 +0000 Subject: [PATCH 035/422] Script Modules: Add new API to embed server data in HTML. Add a new filter `script_module_data_{$module_id}` to associate data with a Script Module. For example: {{{#!php add_filter( 'script_module_data_MyScriptModuleID', function ( array $data ): array { $data['script-needs-this-data'] = 'ok'; return $data; } ); }}} If the Script Module is included in the page, enqueued or as a dependency, the associated data will be JSON-encoded and embedded in the HTML in a ` + * + * A script tag must be closed by a sequence beginning with `` will be printed as `\u003C/script\u00E3`. + * + * - JSON_HEX_TAG: All < and > are converted to \u003C and \u003E. + * - JSON_UNESCAPED_SLASHES: Don't escape /. + * + * If the page will use UTF-8 encoding, it's safe to print unescaped unicode: + * + * - JSON_UNESCAPED_UNICODE: Encode multibyte Unicode characters literally (instead of as `\uXXXX`). + * - JSON_UNESCAPED_LINE_TERMINATORS: The line terminators are kept unescaped when + * JSON_UNESCAPED_UNICODE is supplied. It uses the same behaviour as it was + * before PHP 7.1 without this constant. Available as of PHP 7.1.0. + * + * The JSON specification requires encoding in UTF-8, so if the generated HTML page + * is not encoded in UTF-8 then it's not safe to include those literals. They must + * be escaped to avoid encoding issues. + * + * @see https://www.rfc-editor.org/rfc/rfc8259.html for details on encoding requirements. + * @see https://www.php.net/manual/en/json.constants.php for details on these constants. + * @see https://html.spec.whatwg.org/#script-data-state for details on script tag parsing. + */ + $json_encode_flags = JSON_HEX_TAG | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS; + if ( ! is_utf8_charset() ) { + $json_encode_flags = JSON_HEX_TAG | JSON_UNESCAPED_SLASHES; + } + + wp_print_inline_script_tag( + wp_json_encode( + $data, + $json_encode_flags + ), + array( + 'type' => 'application/json', + 'id' => "wp-script-module-data-{$module_id}", + ) + ); + } + } + } } diff --git a/tests/phpunit/tests/script-modules/wpScriptModules.php b/tests/phpunit/tests/script-modules/wpScriptModules.php index 0d4f2f61f4eb3..9bf18a2a13a22 100644 --- a/tests/phpunit/tests/script-modules/wpScriptModules.php +++ b/tests/phpunit/tests/script-modules/wpScriptModules.php @@ -732,4 +732,211 @@ public function test_wp_print_import_map_has_polyfill_when_modules_registered() $this->assertSame( 'wp-load-polyfill-importmap', $id ); } + + /** + * @ticket 61510 + */ + public function test_print_script_module_data_prints_enqueued_module_data() { + $this->script_modules->enqueue( '@test/module', '/example.js' ); + add_action( + 'script_module_data_@test/module', + function ( $data ) { + $data['foo'] = 'bar'; + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $expected = << +{"foo":"bar"} + + +HTML; + $this->assertSame( $expected, $actual ); + } + + /** + * @ticket 61510 + */ + public function test_print_script_module_data_prints_dependency_module_data() { + $this->script_modules->register( '@test/dependency', '/dependency.js' ); + $this->script_modules->enqueue( '@test/module', '/example.js', array( '@test/dependency' ) ); + add_action( + 'script_module_data_@test/dependency', + function ( $data ) { + $data['foo'] = 'bar'; + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $expected = << +{"foo":"bar"} + + +HTML; + $this->assertSame( $expected, $actual ); + } + + /** + * @ticket 61510 + */ + public function test_print_script_module_data_does_not_print_nondependency_module_data() { + $this->script_modules->register( '@test/other', '/dependency.js' ); + $this->script_modules->enqueue( '@test/module', '/example.js' ); + add_action( + 'script_module_data_@test/other', + function ( $data ) { + $data['foo'] = 'bar'; + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $this->assertSame( '', $actual ); + } + + /** + * @ticket 61510 + */ + public function test_print_script_module_data_does_not_print_empty_data() { + $this->script_modules->enqueue( '@test/module', '/example.js' ); + add_action( + 'script_module_data_@test/module', + function ( $data ) { + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $this->assertSame( '', $actual ); + } + + /** + * @ticket 61510 + * + * @dataProvider data_special_chars_script_encoding + * @param string $input Raw input string. + * @param string $expected Expected output string. + * @param string $charset Blog charset option. + */ + public function test_print_script_module_data_encoding( $input, $expected, $charset ) { + add_filter( + 'pre_option_blog_charset', + function () use ( $charset ) { + return $charset; + } + ); + + $this->script_modules->enqueue( '@test/module', '/example.js' ); + add_action( + 'script_module_data_@test/module', + function ( $data ) use ( $input ) { + $data[''] = $input; + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $expected = << +{"":"{$expected}"} + + +HTML; + + $this->assertSame( $expected, $actual ); + } + + /** + * Data provider. + * + * @return array + */ + public static function data_special_chars_script_encoding(): array { + return array( + // UTF-8 + 'Solidus' => array( '/', '/', 'UTF-8' ), + 'Double quote' => array( '"', '\\"', 'UTF-8' ), + 'Single quote' => array( '\'', '\'', 'UTF-8' ), + 'Less than' => array( '<', '\u003C', 'UTF-8' ), + 'Greater than' => array( '>', '\u003E', 'UTF-8' ), + 'Ampersand' => array( '&', '&', 'UTF-8' ), + 'Newline' => array( "\n", "\\n", 'UTF-8' ), + 'Tab' => array( "\t", "\\t", 'UTF-8' ), + 'Form feed' => array( "\f", "\\f", 'UTF-8' ), + 'Carriage return' => array( "\r", "\\r", 'UTF-8' ), + 'Line separator' => array( "\u{2028}", "\u{2028}", 'UTF-8' ), + 'Paragraph separator' => array( "\u{2029}", "\u{2029}", 'UTF-8' ), + + /* + * The following is the Flag of England emoji + * PHP: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}" + */ + 'Flag of england' => array( '🏴󠁧󠁢󠁥󠁮󠁧󠁿', '🏴󠁧󠁢󠁥󠁮󠁧󠁿', 'UTF-8' ), + 'Malicious script closer' => array( '', '\u003C/script\u003E', 'UTF-8' ), + 'Entity-encoded malicious script closer' => array( '</script>', '</script>', 'UTF-8' ), + + // Non UTF-8 + 'Solidus' => array( '/', '/', 'iso-8859-1' ), + 'Less than' => array( '<', '\u003C', 'iso-8859-1' ), + 'Greater than' => array( '>', '\u003E', 'iso-8859-1' ), + 'Ampersand' => array( '&', '&', 'iso-8859-1' ), + 'Newline' => array( "\n", "\\n", 'iso-8859-1' ), + 'Tab' => array( "\t", "\\t", 'iso-8859-1' ), + 'Form feed' => array( "\f", "\\f", 'iso-8859-1' ), + 'Carriage return' => array( "\r", "\\r", 'iso-8859-1' ), + 'Line separator' => array( "\u{2028}", "\u2028", 'iso-8859-1' ), + 'Paragraph separator' => array( "\u{2029}", "\u2029", 'iso-8859-1' ), + /* + * The following is the Flag of England emoji + * PHP: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}" + */ + 'Flag of england' => array( '🏴󠁧󠁢󠁥󠁮󠁧󠁿', "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f", 'iso-8859-1' ), + 'Malicious script closer' => array( '', '\u003C/script\u003E', 'iso-8859-1' ), + 'Entity-encoded malicious script closer' => array( '</script>', '</script>', 'iso-8859-1' ), + + ); + } + + /** + * @ticket 61510 + * + * @dataProvider data_invalid_script_module_data + * @param mixed $data Data to return in filter. + */ + public function test_print_script_module_data_does_not_print_invalid_data( $data ) { + $this->script_modules->enqueue( '@test/module', '/example.js' ); + add_action( + 'script_module_data_@test/module', + function ( $_ ) use ( $data ) { + return $data; + } + ); + + $actual = get_echo( array( $this->script_modules, 'print_script_module_data' ) ); + + $this->assertSame( '', $actual ); + } + + /** + * Data provider. + * + * @return array + */ + public static function data_invalid_script_module_data(): array { + return array( + 'null' => array( null ), + 'stdClass' => array( new stdClass() ), + 'number 1' => array( 1 ), + 'string' => array( 'string' ), + ); + } } From c235b8de205049ee381f4a16723578a674cc63e9 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 26 Jun 2024 13:46:27 +0000 Subject: [PATCH 036/422] Twenty Nineteen: Fixes avatar block size inconsistency. The avatar block size was different between front and editor. This was because the width and height were added to the avatar class. Props poena, naeemhaque, sabernhardt, sakibmd. Fixes #60664. git-svn-id: https://develop.svn.wordpress.org/trunk@58580 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/sass/media/_media.scss | 4 ++-- src/wp-content/themes/twentynineteen/style-rtl.css | 4 ++-- src/wp-content/themes/twentynineteen/style.css | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wp-content/themes/twentynineteen/sass/media/_media.scss b/src/wp-content/themes/twentynineteen/sass/media/_media.scss index 3fba8c6472176..64e652716d6a1 100644 --- a/src/wp-content/themes/twentynineteen/sass/media/_media.scss +++ b/src/wp-content/themes/twentynineteen/sass/media/_media.scss @@ -20,9 +20,9 @@ object { .avatar { border-radius: 100%; display: block; - height: calc(2.25 * #{$size__spacing-unit}); + height: auto; min-height: inherit; - width: calc(2.25 * #{$size__spacing-unit}); + width: auto; } svg { diff --git a/src/wp-content/themes/twentynineteen/style-rtl.css b/src/wp-content/themes/twentynineteen/style-rtl.css index 45464ae0a66e5..22d480acdff70 100644 --- a/src/wp-content/themes/twentynineteen/style-rtl.css +++ b/src/wp-content/themes/twentynineteen/style-rtl.css @@ -6466,9 +6466,9 @@ object { .avatar { border-radius: 100%; display: block; - height: calc(2.25 * 1rem); + height: auto; min-height: inherit; - width: calc(2.25 * 1rem); + width: auto; } svg { diff --git a/src/wp-content/themes/twentynineteen/style.css b/src/wp-content/themes/twentynineteen/style.css index 907ad811d10bf..a13ca5f5ce075 100644 --- a/src/wp-content/themes/twentynineteen/style.css +++ b/src/wp-content/themes/twentynineteen/style.css @@ -6478,9 +6478,9 @@ object { .avatar { border-radius: 100%; display: block; - height: calc(2.25 * 1rem); + height: auto; min-height: inherit; - width: calc(2.25 * 1rem); + width: auto; } svg { From 36e6d98a228729c2993b3c7921d9a31efca55d0a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 26 Jun 2024 15:21:26 +0000 Subject: [PATCH 037/422] Users: Restore spacing between the messages on Edit User screen. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Includes restoring paragraph tags for “User updated” and “← Go to Users” messages, so that the arrow is not on the same line as the previous message. Follow-up to [56570]. Props Presskopp, narenin, swissspidy, SergeyBiryukov. Fixes #61506. git-svn-id: https://develop.svn.wordpress.org/trunk@58581 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit-tag-form.php | 6 +++++- src/wp-admin/user-edit.php | 11 ++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/wp-admin/edit-tag-form.php b/src/wp-admin/edit-tag-form.php index ba2e187de43a7..0b59e36c84ccc 100644 --- a/src/wp-admin/edit-tag-form.php +++ b/src/wp-admin/edit-tag-form.php @@ -77,7 +77,11 @@ if ( $message ) { $message = '

    ' . $message . '

    '; if ( $wp_http_referer ) { - $message .= '

    ' . esc_html( $tax->labels->back_to_items ) . '

    '; + $message .= sprintf( + '

    %2$s

    ', + esc_url( wp_validate_redirect( sanitize_url( $wp_http_referer ), admin_url( 'term.php?taxonomy=' . $taxonomy ) ) ), + esc_html( $tax->labels->back_to_items ) + ); } wp_admin_notice( $message, diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php index 0ab9aec48f067..f66a54d85fbb6 100644 --- a/src/wp-admin/user-edit.php +++ b/src/wp-admin/user-edit.php @@ -214,12 +214,16 @@ if ( isset( $_GET['updated'] ) ) : if ( IS_PROFILE_PAGE ) : - $message = '' . __( 'Profile updated.' ) . ''; + $message = '

    ' . __( 'Profile updated.' ) . '

    '; else : - $message = '' . __( 'User updated.' ) . ''; + $message = '

    ' . __( 'User updated.' ) . '

    '; endif; if ( $wp_http_referer && ! str_contains( $wp_http_referer, 'user-new.php' ) && ! IS_PROFILE_PAGE ) : - $message .= '' . __( '← Go to Users' ) . ''; + $message .= sprintf( + '

    %2$s

    ', + esc_url( wp_validate_redirect( sanitize_url( $wp_http_referer ), self_admin_url( 'users.php' ) ) ), + __( '← Go to Users' ) + ); endif; wp_admin_notice( $message, @@ -227,6 +231,7 @@ 'id' => 'message', 'dismissible' => true, 'additional_classes' => array( 'updated' ), + 'paragraph_wrap' => false, ) ); endif; From 0361f9ae83ce58bba3caf3006ae0790e461d55cd Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 26 Jun 2024 19:11:39 +0000 Subject: [PATCH 038/422] Twenty Nineteen: Fixes messy navigation with RTL language. The first tag wasn't switching correctly. This resolves it for an adjacent RTL language link setting list items to inline-block. Props manooweb, audrasjb, SergeyBiryukov, davidbaumwald, marybaum, sabernhardt. Fixes #46658. git-svn-id: https://develop.svn.wordpress.org/trunk@58582 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentynineteen/sass/navigation/_menu-main-navigation.scss | 2 +- src/wp-content/themes/twentynineteen/style-rtl.css | 2 +- src/wp-content/themes/twentynineteen/style.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss index 502fdf627ec2a..d1e30256f3d00 100644 --- a/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss +++ b/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss @@ -56,7 +56,7 @@ > li { color: $color__link; - display: inline; + display: inline-block; position: relative; > a { diff --git a/src/wp-content/themes/twentynineteen/style-rtl.css b/src/wp-content/themes/twentynineteen/style-rtl.css index 22d480acdff70..6f298863cc2aa 100644 --- a/src/wp-content/themes/twentynineteen/style-rtl.css +++ b/src/wp-content/themes/twentynineteen/style-rtl.css @@ -2830,7 +2830,7 @@ body.page .main-navigation { .main-navigation .main-menu > li { color: #0073aa; - display: inline; + display: inline-block; position: relative; } diff --git a/src/wp-content/themes/twentynineteen/style.css b/src/wp-content/themes/twentynineteen/style.css index a13ca5f5ce075..d388a2254aa73 100644 --- a/src/wp-content/themes/twentynineteen/style.css +++ b/src/wp-content/themes/twentynineteen/style.css @@ -2830,7 +2830,7 @@ body.page .main-navigation { .main-navigation .main-menu > li { color: #0073aa; - display: inline; + display: inline-block; position: relative; } From b64610b3c82ae545f64db8bd182a0b860fc90c21 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 26 Jun 2024 19:57:00 +0000 Subject: [PATCH 039/422] Twenty Twenty-One: Resolves wrong drop cap alignment in RTL. Drop cap was not aligning correct for RTL. This removes the float property. Props rafaelgalani, peterwilsoncc, ryancurban, sabernhardt. Fixes #52885. git-svn-id: https://develop.svn.wordpress.org/trunk@58583 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css | 1 - .../themes/twentytwentyone/assets/css/ie-editor.css.map | 2 +- .../themes/twentytwentyone/assets/css/style-editor.css | 1 - .../themes/twentytwentyone/assets/css/style-editor.css.map | 2 +- .../assets/sass/05-blocks/utilities/_editor.scss | 1 - 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css b/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css index 2598c2831e109..802ad8cde96f9 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css +++ b/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css @@ -2407,7 +2407,6 @@ pre.wp-block-verse { line-height: 0.66; text-transform: uppercase; font-style: normal; - float: left; margin: 0.1em 0.1em 0 0; font-size: 5rem; } diff --git a/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css.map b/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css.map index 04de36a581cba..d286d16104a1b 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css.map +++ b/src/wp-content/themes/twentytwentyone/assets/css/ie-editor.css.map @@ -1 +1 @@ -{"version":3,"sources":["style-editor.css","../sass/style-editor.scss","../sass/01-settings/global.scss","../sass/03-generic/breakpoints.scss","../sass/04-elements/blockquote.scss","../sass/04-elements/media.scss","../sass/04-elements/forms-editor.scss","../sass/04-elements/links.scss","../sass/05-blocks/button/_editor.scss","../sass/02-tools/mixins.scss","../sass/05-blocks/code/_editor.scss","../sass/05-blocks/cover/_editor.scss","../sass/05-blocks/columns/_editor.scss","../sass/05-blocks/file/_editor.scss","../sass/05-blocks/gallery/_editor.scss","../sass/05-blocks/group/_editor.scss","../sass/05-blocks/heading/_editor.scss","../sass/05-blocks/html/_editor.scss","../sass/05-blocks/image/_editor.scss","../sass/05-blocks/latest-comments/_editor.scss","../sass/05-blocks/latest-posts/_editor.scss","../sass/05-blocks/legacy/_editor.scss","../sass/05-blocks/list/_editor.scss","../sass/05-blocks/media-text/_editor.scss","../sass/05-blocks/navigation/_editor.scss","../sass/05-blocks/paragraph/_editor.scss","../sass/05-blocks/preformatted/_editor.scss","../sass/05-blocks/pullquote/_editor.scss","../sass/05-blocks/query-loop/_editor.scss","../sass/05-blocks/quote/_editor.scss","../sass/05-blocks/rss/_editor.scss","../sass/05-blocks/search/_editor.scss","../sass/05-blocks/separator/_editor.scss","../sass/05-blocks/social-icons/_editor.scss","../sass/05-blocks/table/_editor.scss","../sass/05-blocks/tag-clould/_editor.scss","../sass/05-blocks/verse/_editor.scss","../sass/05-blocks/utilities/_font-sizes.scss","../sass/05-blocks/utilities/_editor.scss","../sass/06-components/editor.scss","../sass/07-utilities/color-palette.scss"],"names":[],"mappings":"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cAAA;AxCg9DF;AwCz8DC;EAEC,WAAA;AxC+8DF;;AwCv8DC;;;;;;;;EAQC,mBAAA;AxC08DF;AwCp8DC;EAEC,sBAAA;AxC08DF;AwCn8DC;EAEC,yBAAA;AxCy8DF;AwCl8DC;EAEC,yBAAA;AxCw8DF;AwCj8DC;EAEC,yBAAA;AxCu8DF;AwCh8DC;EAEC,yBAAA;AxCs8DF;AwC/7DC;EAEC,yBAAA;AxCq8DF;AwC97DC;EAEC,yBAAA;AxCo8DF;AwC77DC;EAEC,yBAAA;AxCm8DF;AwC57DC;EAEC,yBAAA;AxCk8DF;AwC37DC;EAEC,yBAAA;AxCi8DF;AwC17DC;EAEC,sBAAA;AxCg8DF;;AwCz7DC;EAGG,WAAA;AxC07DJ;AwCn6DE;EAMC;AxC26DH;;AwCr6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD;;AwCx6DA;EACC,qDAAA;AxC26DD","file":"ie-editor.css"} \ No newline at end of file +{"version":3,"sources":["style-editor.css","../sass/style-editor.scss","../sass/01-settings/global.scss","../sass/03-generic/breakpoints.scss","../sass/04-elements/blockquote.scss","../sass/04-elements/media.scss","../sass/04-elements/forms-editor.scss","../sass/04-elements/links.scss","../sass/05-blocks/button/_editor.scss","../sass/02-tools/mixins.scss","../sass/05-blocks/code/_editor.scss","../sass/05-blocks/cover/_editor.scss","../sass/05-blocks/columns/_editor.scss","../sass/05-blocks/file/_editor.scss","../sass/05-blocks/gallery/_editor.scss","../sass/05-blocks/group/_editor.scss","../sass/05-blocks/heading/_editor.scss","../sass/05-blocks/html/_editor.scss","../sass/05-blocks/image/_editor.scss","../sass/05-blocks/latest-comments/_editor.scss","../sass/05-blocks/latest-posts/_editor.scss","../sass/05-blocks/legacy/_editor.scss","../sass/05-blocks/list/_editor.scss","../sass/05-blocks/media-text/_editor.scss","../sass/05-blocks/navigation/_editor.scss","../sass/05-blocks/paragraph/_editor.scss","../sass/05-blocks/preformatted/_editor.scss","../sass/05-blocks/pullquote/_editor.scss","../sass/05-blocks/query-loop/_editor.scss","../sass/05-blocks/quote/_editor.scss","../sass/05-blocks/rss/_editor.scss","../sass/05-blocks/search/_editor.scss","../sass/05-blocks/separator/_editor.scss","../sass/05-blocks/social-icons/_editor.scss","../sass/05-blocks/table/_editor.scss","../sass/05-blocks/tag-clould/_editor.scss","../sass/05-blocks/verse/_editor.scss","../sass/05-blocks/utilities/_font-sizes.scss","../sass/05-blocks/utilities/_editor.scss","../sass/06-components/editor.scss","../sass/07-utilities/color-palette.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;;EAAA;ACAA,cAAA;AAKA;EAEC,gBAAA;EAIA,cAAA;EAYA,gBAAA;EAKA,aAAA;EA4BA,wBAAA;EASA,WAAA,EAeA,oDAAA,EACA,aAAA,EAEA,kCAAA,EACA,kCAAA;EAEA,YAAA;EAMA,cAAA;EAGA,UAAA;EAYA,gBAAA;EAKA,YAAA;EAmBA,UAAA;EAUA,WAAA;EAiBA,oBAAA;EAkBA,eAAA;EAQA,WAAA;EAOA,sBAAA;EAyBA,iBAAA;EAKA,YAAA;EAMA,qBAAA;AF/BD;AGpMA;;EAAA;AAIA;;EAAA;AA4EA;;EAAA;AA8BA;;EAAA;AAGA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AH2ID;AGrOE;EAuFF;EACC;EH6ID;AAdA;AGnLE;EAmDF;EACC;EH6ID;AARA;;AGhIA;EACC,6BAAA;EACA,iBAAA;EACA,kBAAA;AH2ID;;AG3OE;EA6FF;EACC;EH6ID;AApBA;;AGnLE;EAyDF;EACC;EH6ID;AAdA;;AG7NE;EA2GD;IACC,eAAA;IACA,WAAA;IACA,iBAAA;IACA,kBAAA;EHoIA;AACF;AClQA;;EAEI,gBAAA;ADoQJ;;AIlRA;EACC,UAAA;EACA,kBAAA;EACA,wBAAA;AJqRD;AInRC;EACC,gBAAA;EACA,mBAAA;AJqRF;AInRE;EACC,aAAA;AJqRH;AIlRE;EACC,gBAAA;AJoRH;AIhRC;EACC,sBAAA;EACA,gIAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;AJkRF;AI/QC;EAEC,mBAAA;EAEA,sBAAA;AJiRF;AI9QC;EAGC,qBAAA;AJ8QF;AI5QE;EACC,mBAAA;EACA,kBAAA;EACA,cAAA;AJ8QH;AI3QE;EAEC,eAAA;EACA,sBAAA;AJ8QH;AI1QC;EACC,mBAAA;AJ4QF;AIzQC;EACC,YAAA;EACA,kBAAA;EACA,WAAA;AJ2QF;AIxQC;EAGC,cAAA;EACA,kBAAA;AJ0QF;AGxTE;ECpBF;IAsEE,kBAAA;EJ0QA;EIxQA;IACC,OAAA;EJ0QD;AACF;;AKpVA;EACC,YAAA;EAEA,sBAAA;ALuVD;;AKpVA,0BAAA;;AAKA,uDAAA;AACA;;;;EAIC,eAAA;ALuVD;;AKpVA,mBAAA;AACA;EAIC,mBAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ALuVD;AKrVC;;;;;;;EAEC,gBAAA;AL4VF;;AKxVA,cAAA;AACA;;;EAGC,YAAA;EACA,gBAAA;EACA,aAAA;EACA,UAAA;AL2VD;;AMvYA;EAEC,yBAAA;EACA,gBAAA;EACA,cAAA;EACA,mBAAA;EACA,qBAAA;EACA,wBAAA;EACA,gBAAA;EACA,4BAAA;EACA,gLAAA;EACA,uCAAA;AN0YD;;AOrZA;;;;EAAA;AAKA;EACC,eAAA;EACA,cAAA;EACA,0BAAA;EACA,6BAAA;APwZD;;AOrZA;EACC,6BAAA;EACA,8BAAA;APwZD;;AOrZA;EAEC,+CAAA;EACA,8BAAA;EAEA,kDAAA;EACA,8BAAA;EACA,oCAAA;APsZD;AOnZC;EACC,gBAAA;EACA,WAAA;EACA,qBAAA;APqZF;AOnZE;EACC,WAAA;APqZH;AOhZC;EACC,8BAAA;EACA,WAAA;APkZF;AOhZE;EACC,WAAA;APkZH;AO9YC;EAEC,+CAAA;EACA,8BAAA;EACA,oBAAA;AP+YF;AO7YE;EACC,cAAA;EACA,yBAAA;AP+YH;AO3YC;EACC,gBAAA;AP6YF;AO1YC;EACC,2BAAA;AP4YF;;AQ5cA;ECsBC,6BAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,gIAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;AT8bD;ASxbE;EACC,cAAA;AT0bH;ASpbI;EACC,cAAA;ATybL;AS/aG;EACC,yBAAA;ATobJ;AS9aC;EAEC,6BAAA;EACA,0BAAA;EACA,cAAA;AT+aF;AS3aC;EACC,oBAAA;EACA,gCAAA;AT6aF;ASzaC;EACC,0CAAA;EACA,sCAAA;EACA,cAAA;AT2aF;;AQpfA;;EAAA;AAgBI;EACC,cAAA;AR6eL;AQ3eK;EACC,cAAA;AR6eN;AQneI;EACC,yBAAA;ARweL;AQleE;;EAEC,qCAAA;EACA,wCAAA;EACA,yBAAA;ARoeH;AQheE;EACC,uBAAA;EACA,gBAAA;ARkeH;AQxdG;EAGC,0BAAA;ARwdJ;AQhdI;EACC,cAAA;ARqdL;AQ/cI;EACC,cAAA;ARidL;AQ5cG;EACC,6BAAA;AR8cJ;AQzcE;EAGC,oCAAA;EACA,oCAAA;EACA,yBAAA;AR0cH;AQxcG;EACC,oCAAA;EACA,yBAAA;AR2cJ;AQxcG;EACC,yBAAA;AR2cJ;AQtcE;EACC,uBAAA;EACA,gBAAA;ARwcH;AQncC;EACC,gBAAA;ARqcF;;AQjcA;;EAEC,mBAAA;ARocD;;AUhkBA;EACC,2BAAA;EACA,gBAAA;AVmkBD;;AUhkBA;EACC,qBAAA;EACA,gBAAA;EACA,mBAAA;EACA,oBAAA;EACA,aAAA;EACA,mBAAA;AVmkBD;;AW9kBA;EAOC,sBAAA;EACA,iBAAA;EACA,mBAAA;EACA,sBAAA;AX4kBD;AWnlBC;;EACC,WAAA;AXslBF;AW9kBC;;EACC,aAAA;EACA,gBAAA;AXilBF;AS1gBC;;EACC,aAAA;AT6gBF;ASpgBC;;;;EAEC,gBAAA;AT2gBF;AWnlBE;;;;;;;;;;;;;;;EACC,mBAAA;AXsmBH;AWnmBE;EACC,cAAA;AX4mBH;AWrmBE;EAIC,WAAA;AX2mBH;AWtmBC;EACC,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,UAAA;EACA,mBAAA;AXymBF;AE7aA;ESjMC;EACC;EX6mBF;AArcA;AWzKC;EACC,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,UAAA;EACA,mBAAA;AXymBF;AE7aA;ESjMC;EACC;EX6mBF;AArcA;AWlKE;;EACC,gBAAA;AX0mBH;AWvmBE;;EACC,kBAAA;AX0mBH;AWvmBE;;EACC,iBAAA;AX0mBH;AWrmBC;EACC,yBAAA;AXwmBF;AWpmBC;;EACC,uBAAA;AXumBF;;AY9qBC;EACC,WAAA;AZirBF;AY9qBC;;EAGC,kBAAA;AZ+qBF;ASnmBC;EACC,aAAA;ATqmBF;AS5lBC;EAEC,gBAAA;ATgmBF;AG/oBE;EShCC;IACC,kBAAA;IACA,gBAAA;IACA,UAAA;EZkrBF;EYpqBG;IACC,yBAAA;IACA,aAAA;EZ+qBJ;EY1qBE;IAEC,kBAAA;EZ4qBH;EYzqBE;IACC,aAAA;EZ2qBH;AACF;AYpqBE;EAOC,kBAAA;EACA,mBAAA;AZsqBH;;AapuBC;EACC,0BAAA;EACA,4BAAA;EACA,8BAAA;AbuuBF;AaruBE;EACC,0BAAA;EACA,6BAAA;AbuuBH;AanuBC;EJSA,6BAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,gIAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;EIdC,qBAAA;Ab4uBF;ASxtBE;EACC,cAAA;AT0tBH;ASptBI;EACC,cAAA;ATytBL;AS/sBG;EACC,yBAAA;ATotBJ;AS9sBC;EAEC,6BAAA;EACA,0BAAA;EACA,cAAA;AT+sBF;AS3sBC;EACC,oBAAA;EACA,gCAAA;AT6sBF;ASzsBC;EACC,0CAAA;EACA,sCAAA;EACA,cAAA;AT2sBF;AatwBE;EACC,uBAAA;EACA,gBAAA;AbwwBH;;Ac3xBC;EACC,gBAAA;Ad8xBF;Ac5xBE;EACC,WAAA;Ad8xBH;;AelyBC;EACC,aAAA;AfqyBF;AenyBE;EACC,aAAA;EACA,gBAAA;AfqyBH;AehyBC;EACC,yBAAA;EACA,aAAA;AfkyBF;AehyBE;EACC,4BAAA;EACA,wBAAA;EACA,kBAAA;AfkyBH;AShuBC;EACC,aAAA;ATkuBF;ASztBC;EAEC,gBAAA;AT6tBF;;AepyBA;EACC,SAAA;EACA,WAAA;AfuyBD;;AgBn0BA;EAkBC,WAAA;EACA,gIAAA;EACA,mBAAA;AhBs0BD;AgBp0BC;EACC,gBAAA;AhBu1BF;AgBp1BC;EACC,gBAAA;AhBu2BF;;AgBn2BA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3pBA;EchNA;EAGC;EhBw2BD;AAnrBA;;AgBxLA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3pBA;EchNA;EAGC;EhBw2BD;AAnrBA;;AgBxLA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3pBA;EchNA;EAGC;EhBw2BD;AAnrBA;;AgBhLA;EAGC,kBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AEnqBA;EcxMA;EAGC;EhBw2BD;AA3rBA;;AgBhLA;EAGC,kBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AEnqBA;EcxMA;EAGC;EhBw2BD;AA3rBA;;AgBhLA;EAGC,kBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AEnqBA;EcxMA;EAGC;EhBw2BD;AA3rBA;;AgBxKA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3qBA;EchMA;EAGC;EhBw2BD;AAnsBA;;AgBxKA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3qBA;EchMA;EAGC;EhBw2BD;AAnsBA;;AgBxKA;EAGC,eAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AE3qBA;EchMA;EAGC;EhBw2BD;AAnsBA;;AgBhKA;EAGC,iBAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AgBn2BA;EAGC,mBAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AgBn2BA;EAGC,eAAA;EACA,gBAAA;EACA,sBAAA;EACA,gBAAA;AhBs2BD;;AiBr7BA;EAEC,cAAA;EACA,gBAAA;EACA,aAAA;AjBu7BD;;AkB37BA,gDAAA;AAEA;;EAEC,kBAAA;AlB67BD;;AkB17BA;EACC,cAAA;AlB67BD;;AkB17BA,iBAAA;AAEA;EAEC,yBAAA;AlB47BD;;AkBz7BA;EACC,aAAA;AlB47BD;;AmB/8BA;EACC,eAAA;AnBk9BD;AmBh9BC;EACC,mBAAA;AnBk9BF;AmB/8BC;EACC,gBAAA;EAEA,2BAAA;EACA,gBAAA;EACA,mBAAA;AnBg9BF;AmB98BE;EACC,aAAA;AnBg9BH;AmB78BE;EACC,gBAAA;AnB+8BH;AmB38BC;EACC,gIAAA;AnB68BF;AmB18BC;EACC,cAAA;EACA,kBAAA;AnB48BF;AmBz8BC;EACC,kBAAA;EACA,gBAAA;EACA,SAAA;AnB28BF;;AoB9+BA;EACC,eAAA;ApBi/BD;AoB9+BC;EACC,gBAAA;EACA,mBAAA;ApBg/BF;AoB9+BE;EACC,aAAA;ApBg/BH;AoB7+BE;EACC,gBAAA;ApB++BH;AoB3+BC;EACC,qBAAA;EACA,sBAAA;ApB6+BF;AoB3+BE;EACC,mBAAA;ApB6+BH;AoB3+BG;EACC,gBAAA;ApB6+BJ;AoBx+BC;EACC,gBAAA;EACA,mBAAA;ApB0+BF;AoBx+BE;EACC,aAAA;ApB0+BH;AoBv+BE;EACC,gBAAA;ApBy+BH;AoBp+BC;EACC,qBAAA;EACA,gIAAA;EACA,eAAA;EACA,mBAAA;EACA,gBAAA;EACA,mBAAA;ApBs+BF;AEzyBA;EkBnMC;EAGC;EpBy+BF;AAj0BA;AoBjKC;EACC,cAAA;EACA,kBAAA;EACA,gBAAA;ApBo+BF;AoBh+BC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;ApBk+BF;AoBh+BE;EAEC,mBAAA;ApBi+BH;AoB59BC;EAEC,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;ApB89BF;AoB19BC;EACC,6BAAA;EACA,gCAAA;ApB49BF;AoB19BE;EAEC,oBAAA;EACA,gCAAA;EACA,gBAAA;EACA,mBAAA;ApB49BH;AoB19BG;;EACC,iBAAA;EACA,mBAAA;ApB69BJ;AoBz9BE;EAEC,oCAAA;EACA,gCAAA;ApB09BH;AoBx9BG;EACC,SAAA;EACA,iBAAA;EACA,mBAAA;ApB09BJ;AoBx9BI;EACC,oBAAA;ApB09BL;AoBp9BG;EAEE;IACC,UAAA;EpBq9BJ;EoBt9BG;IACC,UAAA;EpBw9BJ;EoBz9BG;IACC,UAAA;EpB29BJ;EoB59BG;IACC,UAAA;EpB89BJ;EoB/9BG;IACC,UAAA;EpBi+BJ;AACF;AoBz9BE;EACC,yBAAA;EACA,kBAAA;ApB29BH;AoBz9BG;EACC,oBAAA;EACA,mBAAA;ApB29BJ;AoBv9BE;EACC,gBAAA;EACA,mBAAA;ApBy9BH;;AqBrmCA;EACC,qBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;ArBwmCD;AqBtmCC;EACC,cAAA;ArBwmCF;AqBrmCC;EACC,iBAAA;ArBumCF;AqBpmCC;EACC,cAAA;ArBsmCF;AqBnmCC;EACC,cAAA;ArBqmCF;AqBlmCC;EACC,iBAAA;ArBomCF;AqBjmCC;EACC,iBAAA;ArBmmCF;AqBhmCC;EACC,gBAAA;ArBkmCF;AqB/lCC;EACC,iBAAA;ArBimCF;;AqB7lCA;EACC,cAAA;ArBgmCD;;AsBxoCA;EAEC,gIAAA;EACA,cAAA;EACA,kBAAA;AtB2oCD;AsBxoCC;;EACC,2BAAA;EACA,UAAA;EACA,kBAAA;AtB2oCF;AsBxoCC;;EACC,2BAAA;EACA,UAAA;EACA,iBAAA;AtB2oCF;;AsBroCC;;EAEC,SAAA;AtBwoCF;;AsBpoCA;EACC,gIAAA;EACA,iBAAA;AtBuoCD;;AuBnqCC;EACC,aAAA;EACA,gBAAA;AvBsqCF;ASrlCC;EACC,aAAA;ATulCF;AS9kCC;EAEC,gBAAA;ATklCF;AuB1qCC;EACC,aAAA;AvB4qCF;AuBxqCC;EACC,yBAAA;AvB0qCF;;AwBvrCC;EACC,kBAAA;EACA,qBAAA;AxB0rCF;AwBvrCC;EACC,mBAAA;AxByrCF;AwBprCE;EACC,gIAAA;EACA,kBAAA;EACA,mBAAA;AxBsrCH;AwBhrCE;EACC,4CAAA;AxBkrCH;AwBxqCI;EAEC,cAAA;AxByqCL;AwBpqCE;EACC,mBAAA;AxBsqCH;;AyB/sCA;EACC,gBAAA;AzBktCD;AyBhtCC;EACC,aAAA;AzBktCF;;A0BttCA;EACC,gBAAA;EACA,2BAAA;EACA,eAAA;A1BytCD;;A2B5tCA;EACC,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;EACA,0BAAA;EACA,kBAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;A3B+tCD;;AE5/BA;EyB/OA;EASC;E3BkuCD;AAphCA;A2BzMC;EACC,mBAAA;EACA,YAAA;EACA,cAAA;EACA,kBAAA;EACA,OAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;A3B+tCF;A2B5tCC;EACC,gIAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,SAAA;A3B8tCF;A2B3tCC;EACC,gBAAA;A3B6tCF;A2B1tCC;EACC,mBAAA;A3B4tCF;A2BztCC;EAGC,eAAA;EACA,kBAAA;EACA,oBAAA;A3B2tCF;A2BvtCC;EACC,gBAAA;A3BytCF;A2BttCC;EACC,iBAAA;EACA,kBAAA;EACA,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,qBAAA;A3BwtCF;A2BttCE;EARD;IASE,cAAA;E3BytCD;AACF;A2BvtCE;EACC,gBAAA;A3BytCH;A2BttCE;EAEC,kBAAA;EACA,mBAAA;EACA,kBAAA;A3ButCH;A2BptCE;EACC,SAAA;EACA,eAAA;A3BstCH;A2BptCG;EACC,eAAA;A3BstCJ;AE3jCA;EyB5JG;EACC;E3BstCJ;AAnlCA;A2B/HE;;;EAGC,mBAAA;A3BotCH;;A2B1sCE;EACC,eAAA;A3B6sCH;;A4BjzCC;EACC,aAAA;A5ByzCF;AGlyCE;EyBxBD;IAIE,aAAA;E5B0zCD;AACF;;A6Bj0CA;EACC,kBAAA;EACA,iBAAA;EACA,2BAAA;EACA,iBAAA;EACA,gIAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;A7Bo0CD;A6Bl0CC;EACC,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;EACA,oBAAA;EACA,uBAAA;A7Bo0CF;A6Bj0CC;EACC,mBAAA;A7Bm0CF;A6Bh0CC;EACC,YAAA;EACA,SAAA;A7Bk0CF;A6B/zCC;EACC,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,oBAAA;EACA,uBAAA;A7Bi0CF;A6B/zCE;EAIC,mBAAA;A7B8zCH;A6B1zCC;EACC,kBAAA;A7B4zCF;A6BxzCC;EACC,mBAAA;A7B0zCF;A6BvzCC;EACC,2BAAA;EACA,gBAAA;EACA,kBAAA;A7ByzCF;A6BtzCE;EACC,aAAA;A7BwzCH;A6BpzCE;EACC,YAAA;EACA,iBAAA;A7BszCH;A6BlzCC;EACC,iBAAA;A7BozCF;A6BlzCE;EACC,aAAA;A7BozCH;A6B/yCC;EAEC,eAAA;EAEA,qDAAA;EACA,gBAAA;EACA,mBAAA;A7B+yCF;A6B7yCE;EACC,kBAAA;EACA,kBAAA;EACA,iBAAA;A7B+yCH;AE3pCA;E2BvJE;EACC;E7BizCH;AAnrCA;A6B/HE;EACC,kBAAA;EACA,kBAAA;EACA,iBAAA;A7B+yCH;AE3pCA;E2BvJE;EACC;E7BizCH;AAnrCA;A6BzHE;EACC,kBAAA;EACA,iBAAA;EACA,WAAA;A7B8yCH;AEhqCA;E2BjJE;EACC;E7BgzCH;AAxrCA;A6BzHE;EACC,kBAAA;EACA,iBAAA;EACA,WAAA;A7B8yCH;AEhqCA;E2BjJE;EACC;E7BgzCH;AAxrCA;A6BhHG;EACC,aAAA;A7B0yCJ;A6BtyCG;EACC,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;A7BwyCJ;AE1qCA;E2BnIG;EAEC;E7B2yCJ;AAlsCA;A6B3GG;EACC,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;A7BwyCJ;AE1qCA;E2BnIG;EAEC;E7B2yCJ;AAlsCA;AGnME;E0B4DD;IAsCE,kBAAA;E7BuyCD;E6BryCC;IACC,OAAA;E7BuyCF;E6BpyCC;IACC,eAAA;IACA,mBAAA;E7BsyCF;E6BpyCE;IACC,QAAA;E7BsyCH;E6Bv6CF;IAwIE,kBAAA;E7BoyCA;E6BlyCA;IACC,OAAA;E7BoyCD;E6BjyCA;IACC,eAAA;IACA,mBAAA;E7BmyCD;E6BjyCC;IACC,QAAA;E7BmyCF;E6B/xCA;IACC,eAAA;IACA,gBAAA;E7BiyCD;AAlBF;AG94CE;E0B1BF;IA8JE,iBAAA;E7BiyCA;E6B/xCA;IACC,kBAAA;E7BiyCD;AACF;;A8Bn8CA;EACC,eAAA;A9Bs8CD;A8Bp8CC;EACC,gBAAA;A9Bs8CF;A8Bl8CC;EACC,gBAAA;EACA,mBAAA;A9Bo8CF;A8Bl8CE;EACC,aAAA;A9Bo8CH;A8Bj8CE;EACC,gBAAA;A9Bm8CH;A8B77CE;EACC,mBAAA;A9B+7CH;A8Bv7CE;EAUC,gBAAA;A9Bm7CH;A8B/6CC;EACC,gBAAA;EACA,mBAAA;A9Bi7CF;A8B/6CE;EACC,aAAA;A9Bi7CH;A8B96CE;EACC,gBAAA;A9Bg7CH;A8B36CC;EACC,qBAAA;EACA,gIAAA;EACA,eAAA;EACA,mBAAA;EACA,gBAAA;EACA,mBAAA;A9B66CF;AEhwCA;E4BnLC;EAGC;E9Bg7CF;AAxxCA;A8BjJC;EACC,cAAA;EACA,kBAAA;EACA,gBAAA;A9B26CF;A8Bv6CC;EACC,cAAA;EACA,eAAA;EACA,gBAAA;A9By6CF;A8Bv6CE;EAEC,mBAAA;A9Bw6CH;A8Bn6CC;EAEC,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;A9Bq6CF;A8Bj6CC;EACC,kBAAA;EACA,mBAAA;A9Bm6CF;A8Bj6CE;EAEC,eAAA;EACA,gBAAA;A9Bk6CH;;A+B3gDA;EACC,6BAAA;A/B8gDD;;AGr/CE;E4B1BF;EACC;E/B8gDD;AA9xCA;;AGnLE;E4B9DF;EACC;E/B8gDD;AAxxCA;A+BpPC;EACC,mBAAA;EACA,gBAAA;EACA,mBAAA;A/B8gDF;A+B3gDC;EAEC,yBAAA;EACA,gBAAA;EACA,gIAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,aAAA;A/B6gDF;A+B3gDE;EACC,oCAAA;A/B8gDH;A+B3gDE;EACC,gCAAA;A/B8gDH;A+B1gDC;EtBPA,6BAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,gIAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;EsBCC,gBAAA;EACA,cAAA;A/BohDF;AShhDE;EACC,cAAA;ATkhDH;AS5gDI;EACC,cAAA;ATihDL;ASvgDG;EACC,yBAAA;AT4gDJ;AStgDC;EAEC,6BAAA;EACA,0BAAA;EACA,cAAA;ATugDF;ASngDC;EACC,oBAAA;EACA,gCAAA;ATqgDF;ASjgDC;EACC,0CAAA;EACA,sCAAA;EACA,cAAA;ATmgDF;A+B/iDE;EACC,iBAAA;EACA,gBAAA;A/BijDH;A+B/iDG;EACC,WAAA;EACA,YAAA;A/BijDJ;A+B1iDG;EACC,oCAAA;EACA,yBAAA;A/B4iDJ;A+BziDG;EACC,yBAAA;A/B2iDJ;A+BtiDE;EACC,uBAAA;EACA,gBAAA;A/BwiDH;A+BliDE;EACC,YAAA;A/BoiDH;A+BjiDE;EACC,YAAA;A/BmiDH;A+BvhDI;EACC,cAAA;A/B4hDL;A+B1hDK;EACC,yBAAA;EACA,WAAA;A/B4hDN;A+BthDE;EAEC,kBAAA;A/BuhDH;;A+BlhDA;EACC,kBAAA;A/BqhDD;;A+B9gDE;EACC,uBAAA;A/BihDH;;AgC/nDA;EAEC,gCAAA;EACA,WAAA;EACA,UAAA;AhCkoDD;AgChoDC;EAEC,2BAAA;AhCmoDF;AgChoDC;EACC,6BAAA;AhCmoDF;AGrnDE;E6BfD;EACC;EhCmoDF;AA95CA;AGnLE;E6BnDD;EACC;EhCmoDF;AAx5CA;AgC5OC;EACC,6BAAA;AhCmoDF;AGrnDE;E6BfD;EACC;EhCmoDF;AA95CA;AGnLE;E6BnDD;EACC;EhCmoDF;AAx5CA;AgCxOC;;;EAEC,kBAAA;AhCmoDF;AgChoDC;EACC,wBAAA;AhCmoDF;AgChoDC;;EACC,mBAAA;AhCmoDF;AgCjoDE;;;EAEC,wCAAA;AhCooDH;AgCloDG;;;EACC,8BAAA;AhCsoDJ;AgCloDE;EACC,cAAA;AhCqoDH;AgCjoDC;;;;;EAIC,0BAAA;AhCooDF;;AiC9qDC;EACC,aAAA;EACA,gBAAA;AjCirDF;AiC5qDE;EACC,cAAA;AjC8qDH;AiC3qDE;EACC,gBAAA;AjC6qDH;;AkCzrDC;;;;EAEC,kBAAA;AlC8rDF;AkC3rDC;EACC,gIAAA;AlC8rDF;AkC3rDC;EAEC,aAAA;AlC+rDF;AkC5rDC;EAKC,cAAA;AlC+rDF;AkC5rDC;EACC,qBAAA;AlC+rDF;AkC7rDE;;;;EAEC,eAAA;AlCisDH;AkC9rDE;EACC,yBAAA;AlCisDH;AkC9rDE;EACC,0CAAA;AlCisDH;;AkC1rDC;;EAEC,uBAAA;EACA,SAAA;EACA,kBAAA;EACA,cAAA;EACA,sBAAA;AlC6rDF;AkC1rDC;EACC,iBAAA;AlC4rDF;AkCzrDC;;EAEC,mBAAA;EACA,iBAAA;AlC2rDF;AkCxrDC;EACC,iBAAA;EACA,gBAAA;EACA,mBAAA;EACA,mBAAA;AlC0rDF;;AkCtrDA;EACC,gBAAA;EACA,gBAAA;AlCyrDD;AkCvrDC;EACC,WAAA;EACA,sBAAA;AlCyrDF;AkCvrDE;EACC,kBAAA;AlCyrDH;AkCrrDC;EACC,YAAA;AlCurDF;;AmC3wDC;EACC,kBAAA;AnC8wDF;;AoCjxDA;EACC,UAAA;EACA,mBAAA;ApCoxDD;;AqCnxDC;EAEC,eAAA;ArCsxDF;AqCnxDC;EAEC,mBAAA;ArCqxDF;AqClxDC;EAKC,kBAAA;ArCoxDF;AqCjxDC;EAEC,iBAAA;EACA,gBAAA;ArCmxDF;AqChxDC;EAIC,iBAAA;EACA,gBAAA;ArCkxDF;AEnkDA;EmCpNC;EAIC;ErCmxDF;AA3lDA;AqC5LC;EAIC,iBAAA;EACA,gBAAA;ArCkxDF;AEnkDA;EmCpNC;EAIC;ErCmxDF;AA3lDA;AqC5LC;EAIC,iBAAA;EACA,gBAAA;ArCkxDF;AEnkDA;EmCpNC;EAIC;ErCmxDF;AA3lDA;AqC5LC;EAIC,iBAAA;EACA,gBAAA;ArCkxDF;AEnkDA;EmCpNC;EAIC;ErCmxDF;AA3lDA;AqCpLC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;ArC+wDF;AEzkDA;EmC5MC;EAEC;ErCmxDF;AAjmDA;AqCpLC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;ArC+wDF;AEzkDA;EmC5MC;EAEC;ErCmxDF;AAjmDA;AqC3KC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;ArC4wDF;AE/kDA;EmCnMC;EAEC;ErCgxDF;AAvmDA;AqC3KC;EAEC,eAAA;EACA,gBAAA;EAGA,gBAAA;ArC4wDF;AE/kDA;EmCnMC;EAEC;ErCgxDF;AAvmDA;;AsCvNA;;;CAAA;AAMA;EACC,gCAAA;EACA,oBAAA;EACA,mBAAA;EACA,6BAAA;AtC+zDD;AG/yDE;EmCpBF;EAIC;EtC+zDD;AAxlDA;AGnLE;EmCxDF;EAIC;EtC+zDD;AAllDA;AsC3OC;EACC,cAAA;EACA,gIAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;AtC+zDF;AEjmDA;EoCnOC;EAGC;EtCi0DF;AAznDA;;AsCjMA;EACC,gIAAA;EACA,kBAAA;AtC6zDD;;AsCzzDA;EACC,cAAA;AtC4zDD;;AsCzzDA;EACC,cAAA;AtC4zDD;;AsC1yDA;EACC,yBAAA;EACA,cAAA;AtCwzDD;;AsCrzDA;EACC,yBAAA;EACA,cAAA;AtCwzDD;;AsCrzDA;EAEC,cAAA;AtCwzDD;;AsCrzDA;EAEC,cAAA;AtCwzDD;;AsCpzDA;EACC,gBAAA;EACA,mBAAA;AtCuzDD;;AsCnzDA;EAIC,6BAAA;AtCmzDD;;AG32DE;EmCoDF;EAIC;EtCmzDD;AAppDA;;AGnLE;EmCgBF;EAIC;EtCmzDD;AA9oDA;AsClKC;EAEC,6BAAA;AtCizDF;AG92DE;EmC2DD;EAEC;EtCizDF;AAvpDA;AGnLE;EmCuBD;EAEC;EtCizDF;AAjpDA;AsClKC;EAEC,6BAAA;AtCizDF;AG92DE;EmC2DD;EAEC;EtCizDF;AAvpDA;AGnLE;EmCuBD;EAEC;EtCizDF;AAjpDA;AsC7JC;EAEC,eAAA;AtC+yDF;;AsC3yDA;EACC,SAAA;EACA,kBAAA;AtC8yDD;;AsC3yDA;EACC,SAAA;EACA,iBAAA;AtC8yDD;;AsC1yDA;EACC,gIAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,kBAAA;EACA,uBAAA;EACA,eAAA;AtC6yDD;;AEhrDA;EoCpIA;EAOC;EtC6yDD;AAxsDA;;AsClGA;EAEC;IACC,gBAAA;IACA,kBAAA;EtC4yDA;EsCzyDD;IACC,gBAAA;IACA,iBAAA;EtC2yDA;AACF;AsCvyDA;EACC,YAAA;AtCyyDD;;AsCryDA;EACC,SAAA;AtCwyDD;;AuCj7DA;EAEC,gBAAA;AvCo7DD;;AuCj7DA;EAJC,gIAAA;AvCg8DD;;AuC57DA;EAGC,yBAAA;EAEA,kBAAA;EACA,mBAAA;EACA,kCAAA;EACA,mCAAA;AvCo7DD;;AuCh7DA;EAVC,cAAA;AvC87DD;AuCj7DC;EACC,6BAAA;AvCm7DF;AuCh7DC;EACC,0BAAA;EACA,qBAAA;AvCk7DF;;AuC16DC;EAEC,cAAA;AvC46DF;;AuCx6DA;;EAEC,eAAA;AvC26DD;AwCj9DC;EAEC,WAAA;AxCu9DF;AwCh9DC;EAEC,cAAA;AxCs9DF;AwC/8DC;EAEC,cAAA;AxCq9DF;AwC98DC;EAEC,cAAA;AxCo9DF;AwC78DC;EAEC,cAAA;AxCm9DF;AwC58DC;EAEC,cAAA;AxCk9DF;AwC38DC;EAEC,cAAA;AxCi9DF;AwC18DC;EAEC,cAAA;AxCg9DF;AwCz8DC;EAEC,cAAA;AxC+8DF;AwCx8DC;EAEC,WAAA;AxC88DF;;AwCt8DC;;;;;;;;EAQC,mBAAA;AxCy8DF;AwCn8DC;EAEC,sBAAA;AxCy8DF;AwCl8DC;EAEC,yBAAA;AxCw8DF;AwCj8DC;EAEC,yBAAA;AxCu8DF;AwCh8DC;EAEC,yBAAA;AxCs8DF;AwC/7DC;EAEC,yBAAA;AxCq8DF;AwC97DC;EAEC,yBAAA;AxCo8DF;AwC77DC;EAEC,yBAAA;AxCm8DF;AwC57DC;EAEC,yBAAA;AxCk8DF;AwC37DC;EAEC,yBAAA;AxCi8DF;AwC17DC;EAEC,yBAAA;AxCg8DF;AwCz7DC;EAEC,sBAAA;AxC+7DF;;AwCx7DC;EAGG,WAAA;AxCy7DJ;AwCl6DE;EAMC;AxC06DH;;AwCp6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD;;AwCv6DA;EACC,qDAAA;AxC06DD","file":"ie-editor.css"} \ No newline at end of file diff --git a/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css b/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css index 341e9c761571a..41b5c6cb85de0 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css +++ b/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css @@ -2303,7 +2303,6 @@ pre.wp-block-verse { line-height: 0.66; text-transform: uppercase; font-style: normal; - float: left; margin: 0.1em 0.1em 0 0; font-size: calc(1.2 * var(--heading--font-size-h1)); } diff --git a/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css.map b/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css.map index 12a7874b7f8b1..e84bf8093f2cc 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css.map +++ b/src/wp-content/themes/twentytwentyone/assets/css/style-editor.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../sass/style-editor.scss","../sass/01-settings/global.scss","../sass/03-generic/breakpoints.scss","../sass/04-elements/blockquote.scss","../sass/04-elements/media.scss","../sass/04-elements/forms-editor.scss","../sass/04-elements/links.scss","../sass/05-blocks/button/_editor.scss","../sass/02-tools/mixins.scss","../sass/05-blocks/code/_editor.scss","../sass/05-blocks/cover/_editor.scss","../sass/05-blocks/columns/_editor.scss","../sass/05-blocks/file/_editor.scss","../sass/05-blocks/gallery/_editor.scss","../sass/05-blocks/group/_editor.scss","../sass/05-blocks/heading/_editor.scss","../sass/05-blocks/html/_editor.scss","../sass/05-blocks/image/_editor.scss","../sass/05-blocks/latest-comments/_editor.scss","../sass/05-blocks/latest-posts/_editor.scss","../sass/05-blocks/legacy/_editor.scss","../sass/05-blocks/list/_editor.scss","../sass/05-blocks/media-text/_editor.scss","../sass/05-blocks/navigation/_editor.scss","../sass/05-blocks/paragraph/_editor.scss","../sass/05-blocks/preformatted/_editor.scss","../sass/05-blocks/pullquote/_editor.scss","../sass/05-blocks/query-loop/_editor.scss","../sass/05-blocks/quote/_editor.scss","../sass/05-blocks/rss/_editor.scss","../sass/05-blocks/search/_editor.scss","../sass/05-blocks/separator/_editor.scss","../sass/05-blocks/social-icons/_editor.scss","../sass/05-blocks/table/_editor.scss","../sass/05-blocks/tag-clould/_editor.scss","../sass/05-blocks/verse/_editor.scss","../sass/05-blocks/utilities/_font-sizes.scss","../sass/05-blocks/utilities/_editor.scss","../sass/06-components/editor.scss","../sass/07-utilities/color-palette.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;ACAA;AAKA;AAEC;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;;;AAGD;EACC;;AAEA;EAHD;IAIE;;;;AAIF;EACC;IACC;IACA;IACA;IACA;IACA;;;ACrPF;AAAA;AAAA;AAIA;AAAA;AAAA;AA4EA;AAAA;AAAA;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;;;AA/DC;EAoED;IACC;IACA;IACA;IACA;;;AApCA;EA0CD;IACC;IACA;;;AAIF;AAAA;AAAA;AAGA;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAhGC;EA2GD;IACC;IACA;IACA;IACA;;;AF7HF;AAAA;EAEI;;;AGdJ;EACC;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAGD;EAGC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAEC;EACA;;AAIF;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AD9CA;ECpBF;IAsEE;;EAEA;IACC;;;;ACzEH;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;;;AC5CD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACXD;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;AAEC;EACA;EAEA;EACA;EACA;;AAGA;EACC;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAEA;EACC;;AAIF;AAEC;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;;AAQD;EAEC;;;AC1EF;ECsBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMC;EACC;;AAGA;EACC;;AAEA;EACC;;AAMH;EACC;;AAGA;EACC;;AAMH;EAEC;EACA;EACA;;AAID;EACC;EACA;;AAID;EACC;EACA;EACA;;;ADzEF;AAAA;AAAA;AAYG;EACC;;AAGA;EACC;;AAEA;EACC;;AAMH;EACC;;AAGA;EACC;;AAMH;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;;AAUA;EAGC;;AAID;EACC;;AAGA;EACC;;AAMD;EACC;;AAKF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ACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;ACxCD;AAAA;EAEC;EACA;EACA;;AAGA;AAAA;EACC;EACA;EACA;;AAGD;AAAA;EACC;EACA;EACA;;;AAMD;AAAA;EAEC;;;AAIF;EACC;EACA;;;AC5BA;EACC;EACA;;AdiFD;EACC;;AAID;EACC;;AAID;EAEC;;AcxFD;EACC;;AAID;EACC;;;ACbD;EACC;EACA;;AAGD;EACC;;AAKA;EACC;EACA;EACA;;AAMD;EACC;;AAUC;EAEC;;AAKH;EACC;;;ACzCH;EACC;;AAEA;EACC;;;ACJF;EACC;EACA;EACA;;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAID;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EARD;IASE;;;AAGD;EACC;;AAGD;EAEC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;;;AAUD;EACC;;;AAQF;AAAA;EACC;;;AC7GD;EACC;;AzBuBA;EyBxBD;IAIE;;;;ACNH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EAIC;;AAIF;EACC;;AAID;EACC;;AAGD;EACC;EACA;EACA;;AAGA;EACC;;AAID;EACC;EACA;;AAIF;EACC;;AAEA;EACC;;AAKF;EAEC;AAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;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","file":"style-editor.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../sass/style-editor.scss","../sass/01-settings/global.scss","../sass/03-generic/breakpoints.scss","../sass/04-elements/blockquote.scss","../sass/04-elements/media.scss","../sass/04-elements/forms-editor.scss","../sass/04-elements/links.scss","../sass/05-blocks/button/_editor.scss","../sass/02-tools/mixins.scss","../sass/05-blocks/code/_editor.scss","../sass/05-blocks/cover/_editor.scss","../sass/05-blocks/columns/_editor.scss","../sass/05-blocks/file/_editor.scss","../sass/05-blocks/gallery/_editor.scss","../sass/05-blocks/group/_editor.scss","../sass/05-blocks/heading/_editor.scss","../sass/05-blocks/html/_editor.scss","../sass/05-blocks/image/_editor.scss","../sass/05-blocks/latest-comments/_editor.scss","../sass/05-blocks/latest-posts/_editor.scss","../sass/05-blocks/legacy/_editor.scss","../sass/05-blocks/list/_editor.scss","../sass/05-blocks/media-text/_editor.scss","../sass/05-blocks/navigation/_editor.scss","../sass/05-blocks/paragraph/_editor.scss","../sass/05-blocks/preformatted/_editor.scss","../sass/05-blocks/pullquote/_editor.scss","../sass/05-blocks/query-loop/_editor.scss","../sass/05-blocks/quote/_editor.scss","../sass/05-blocks/rss/_editor.scss","../sass/05-blocks/search/_editor.scss","../sass/05-blocks/separator/_editor.scss","../sass/05-blocks/social-icons/_editor.scss","../sass/05-blocks/table/_editor.scss","../sass/05-blocks/tag-clould/_editor.scss","../sass/05-blocks/verse/_editor.scss","../sass/05-blocks/utilities/_font-sizes.scss","../sass/05-blocks/utilities/_editor.scss","../sass/06-components/editor.scss","../sass/07-utilities/color-palette.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;ACAA;AAKA;AAEC;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;;;AAGD;EACC;;AAEA;EAHD;IAIE;;;;AAIF;EACC;IACC;IACA;IACA;IACA;IACA;;;ACrPF;AAAA;AAAA;AAIA;AAAA;AAAA;AA4EA;AAAA;AAAA;AAGA;EACC;EACA;EACA;EACA;EACA;EACA;;;AA/DC;EAoED;IACC;IACA;IACA;IACA;;;AApCA;EA0CD;IACC;IACA;;;AAIF;AAAA;AAAA;AAGA;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAhGC;EA2GD;IACC;IACA;IACA;IACA;;;AF7HF;AAAA;EAEI;;;AGdJ;EACC;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAGD;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAGD;EAGC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAEC;EACA;;AAIF;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AD9CA;ECpBF;IAsEE;;EAEA;IACC;;;;ACzEH;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;AAAA;AAAA;AAAA;EAIC;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEC;;;AAIF;AACA;AAAA;AAAA;EAGC;EACA;EACA;EACA;;;AC5CD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACXD;AAAA;AAAA;AAAA;AAAA;AAKA;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;AAEC;EACA;EAEA;EACA;EACA;;AAGA;EACC;EACA;EACA;;AAEA;EACC;;AAKF;EACC;EACA;;AAEA;EACC;;AAIF;AAEC;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;;AAQD;EAEC;;;AC1EF;ECsBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMC;EACC;;AAGA;EACC;;AAEA;EACC;;AAMH;EACC;;AAGA;EACC;;AAMH;EAEC;EACA;EACA;;AAID;EACC;EACA;;AAID;EACC;EACA;EACA;;;ADzEF;AAAA;AAAA;AAYG;EACC;;AAGA;EACC;;AAEA;EACC;;AAMH;EACC;;AAGA;EACC;;AAMH;AAAA;EAEC;EACA;EACA;;AAID;EACC;EACA;;AAUA;EAGC;;AAID;EACC;;AAGA;EACC;;AAMD;EACC;;AAKF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ACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;ACxCD;AAAA;EAEC;EACA;EACA;;AAGA;AAAA;EACC;EACA;EACA;;AAGD;AAAA;EACC;EACA;EACA;;;AAMD;AAAA;EAEC;;;AAIF;EACC;EACA;;;AC5BA;EACC;EACA;;AdiFD;EACC;;AAID;EACC;;AAID;EAEC;;AcxFD;EACC;;AAID;EACC;;;ACbD;EACC;EACA;;AAGD;EACC;;AAKA;EACC;EACA;EACA;;AAMD;EACC;;AAUC;EAEC;;AAKH;EACC;;;ACzCH;EACC;;AAEA;EACC;;;ACJF;EACC;EACA;EACA;;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;AAID;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EARD;IASE;;;AAGD;EACC;;AAGD;EAEC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;;;AAUD;EACC;;;AAQF;AAAA;EACC;;;AC7GD;EACC;;AzBuBA;EyBxBD;IAIE;;;;ACNH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EAIC;;AAIF;EACC;;AAID;EACC;;AAGD;EACC;EACA;EACA;;AAGA;EACC;;AAID;EACC;EACA;;AAIF;EACC;;AAEA;EACC;;AAKF;EAEC;AAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAMA;EACC;;AAID;EACC;EACA;EACA;EACA;EACA;;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","file":"style-editor.css"} \ No newline at end of file diff --git a/src/wp-content/themes/twentytwentyone/assets/sass/05-blocks/utilities/_editor.scss b/src/wp-content/themes/twentytwentyone/assets/sass/05-blocks/utilities/_editor.scss index ca1b43080dd2c..afb9e20414909 100644 --- a/src/wp-content/themes/twentytwentyone/assets/sass/05-blocks/utilities/_editor.scss +++ b/src/wp-content/themes/twentytwentyone/assets/sass/05-blocks/utilities/_editor.scss @@ -111,7 +111,6 @@ line-height: 0.66; text-transform: uppercase; font-style: normal; - float: left; margin: 0.1em 0.1em 0 0; font-size: calc(1.2 * var(--heading--font-size-h1)); } From dc788c6fbc0a46cbe4bf78b8f781d565716669c3 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 26 Jun 2024 21:05:58 +0000 Subject: [PATCH 040/422] Twenty Seventeen: Fixes button block font weight not changing. The button block appearance was not changing when using settings. This resolves that using inherit. Props pranitdugad, sabernhardt, shailu25, hmbashar. Fixes #60937. git-svn-id: https://develop.svn.wordpress.org/trunk@58584 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyseventeen/assets/css/blocks.css | 5 +++++ .../themes/twentyseventeen/assets/css/editor-blocks.css | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css index 4ba4e6c5321e2..b3b077f587641 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css @@ -202,6 +202,11 @@ p.has-drop-cap:not(:focus)::first-letter { text-align: center; } +.wp-block-buttons[style*="font-weight"] .wp-block-button__link, +.wp-block-button[style*="font-weight"] .wp-block-button__link { + font-weight: inherit; +} + /*-------------------------------------------------------------- 4.0 Blocks - Layout Elements --------------------------------------------------------------*/ diff --git a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css index 8bb2ae62a4270..6c17ad296022b 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css @@ -715,6 +715,11 @@ table.wp-block-table td:last-child { text-align: center; } +.wp-block-buttons[style*="font-weight"] .wp-block-button__link, +.wp-block-button[style*="font-weight"] .wp-block-button__link { + font-weight: inherit; +} + /* Verse */ .editor-styles-wrapper .wp-block-verse { From d6bbd8ddf4e99cf2bb5eb73f3a70d7bc8658fabd Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 27 Jun 2024 12:53:33 +0000 Subject: [PATCH 041/422] Build/Test Tools: Revert `uglify-js` update. This partially reverts [58563], which applied an update of the `uglify-js` `devDependency` from `3.17.4` to `3.18.0`. The `3.18.0` update is causing some JavaScript errors in the `media-views.min.js` file, so needs to be investigated further. Props david.binda, mukesh27, alshakero. Fies #61519. git-svn-id: https://develop.svn.wordpress.org/trunk@58585 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e3e3af6cd09a..8023b662055f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,7 +149,7 @@ "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.18.0", + "uglify-js": "^3.17.4", "uuid": "9.0.1", "wait-on": "7.2.0", "webpack": "5.90.2", @@ -32682,9 +32682,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -58654,9 +58654,9 @@ "dev": true }, "uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index 1be9e1c274728..4041a61d25006 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.18.0", + "uglify-js": "^3.17.4", "uuid": "9.0.1", "wait-on": "7.2.0", "webpack": "5.90.2", From 9cbaee349c69baf48e303dfb4a8ad0b0f71ead53 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 27 Jun 2024 20:47:38 +0000 Subject: [PATCH 042/422] HTML API: Report breadcrumbs properly when visiting virtual nodes. When [58304] introduced the abililty to visit virtual nodes in the HTML document, those being the nodes which are implied by the HTML but no explicitly present in the raw text, a bug was introduced in the `get_breadcrumbs()` method because it wasn't updated to be aware of the virtual nodes. Therefore it would report the wrong breadcrumbs for virtual nodes. Since the new `get_depth()` method is based on the same logic it was also broken for virtual nodes. In this patch, the breadcrumbs have been updated to account for the virtual nodes and the depth method has been updated to rely on the fixed breadcrumb logic. Developed in https://github.com/WordPress/wordpress-develop/pull/6914 Discussed in https://core.trac.wordpress.org/ticket/61348 Follow-up to [58304]. Props dmsnell, jonsurrell, zieladam. See #61348. git-svn-id: https://develop.svn.wordpress.org/trunk@58588 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 14 ++++- .../html-api/class-wp-html-processor.php | 52 ++++++++++++++++--- 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index 7f148a7af7068..15479801dda10 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -308,11 +308,15 @@ public function has_p_in_button_scope() { */ public function pop() { $item = array_pop( $this->stack ); - if ( null === $item ) { return false; } + if ( 'context-node' === $item->bookmark_name ) { + $this->stack[] = $item; + return false; + } + $this->after_element_pop( $item ); return true; } @@ -329,6 +333,10 @@ public function pop() { */ public function pop_until( $tag_name ) { foreach ( $this->walk_up() as $item ) { + if ( 'context-node' === $item->bookmark_name ) { + return true; + } + $this->pop(); if ( @@ -369,6 +377,10 @@ public function push( $stack_item ) { * @return bool Whether the node was found and removed from the stack of open elements. */ public function remove_node( $token ) { + if ( 'context-node' === $token->bookmark_name ) { + return false; + } + foreach ( $this->walk_up() as $position_from_end => $item ) { if ( $token->bookmark_name !== $item->bookmark_name ) { continue; diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 0eb597edcd803..29f1c7ac6d4cc 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -519,10 +519,12 @@ public function next_token() { return false; } - if ( 0 === count( $this->element_queue ) && ! $this->step() ) { - while ( $this->state->stack_of_open_elements->pop() ) { + if ( 'done' !== $this->has_seen_context_node && 0 === count( $this->element_queue ) && ! $this->step() ) { + while ( 'context-node' !== $this->state->stack_of_open_elements->current_node()->bookmark_name && $this->state->stack_of_open_elements->pop() ) { continue; } + $this->has_seen_context_node = 'done'; + return $this->next_token(); } $this->current_element = array_shift( $this->element_queue ); @@ -537,7 +539,11 @@ public function next_token() { } if ( ! isset( $this->current_element ) ) { - return $this->next_token(); + if ( 'done' === $this->has_seen_context_node ) { + return false; + } else { + return $this->next_token(); + } } if ( isset( $this->context_node ) && WP_HTML_Stack_Event::POP === $this->current_element->operation && $this->context_node === $this->current_element->token ) { @@ -782,16 +788,48 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { * * @since 6.4.0 * - * @todo make aware of queue of elements, because stack operations have already been done by now. - * * @return string[]|null Array of tag names representing path to matched node, if matched, otherwise NULL. */ public function get_breadcrumbs() { $breadcrumbs = array(); + foreach ( $this->state->stack_of_open_elements->walk_down() as $stack_item ) { $breadcrumbs[] = $stack_item->node_name; } + if ( ! $this->is_virtual() ) { + return $breadcrumbs; + } + + foreach ( $this->element_queue as $queue_item ) { + if ( $this->current_element->token->bookmark_name === $queue_item->token->bookmark_name ) { + break; + } + + if ( 'context-node' === $queue_item->token->bookmark_name ) { + break; + } + + if ( 'real' === $queue_item->provenance ) { + break; + } + + if ( WP_HTML_Stack_Event::PUSH === $queue_item->operation ) { + $breadcrumbs[] = $queue_item->token->node_name; + } else { + array_pop( $breadcrumbs ); + } + } + + if ( null !== parent::get_token_name() && ! parent::is_tag_closer() ) { + array_pop( $breadcrumbs ); + } + + // Add the virtual node we're at. + if ( WP_HTML_Stack_Event::PUSH === $this->current_element->operation ) { + $breadcrumbs[] = $this->current_element->token->node_name; + } + return $breadcrumbs; } @@ -821,7 +859,9 @@ public function get_breadcrumbs() { * @return int Nesting-depth of current location in the document. */ public function get_current_depth() { - return $this->state->stack_of_open_elements->count(); + return $this->is_virtual() + ? count( $this->get_breadcrumbs() ) + : $this->state->stack_of_open_elements->count(); } /** From 0819c3c465158bd2b4a48ad2f129e09cceb4d628 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 27 Jun 2024 23:15:53 +0000 Subject: [PATCH 043/422] Docs: Add missing full stop in some DocBlocks in `wp-includes/user.php`. Follow-up to [40980], [43211], [43373], [47279], [51129]. Props praful2111, nareshbheda. Fixes #61491. git-svn-id: https://develop.svn.wordpress.org/trunk@58589 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/user.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index a2949e96bec2d..38ff198286b3e 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -2386,7 +2386,7 @@ function wp_insert_user( $userdata ) { * @type string $user_pass The user's password. * @type string $user_email The user's email. * @type string $user_url The user's url. - * @type string $user_nicename The user's nice name. Defaults to a URL-safe version of user's login + * @type string $user_nicename The user's nice name. Defaults to a URL-safe version of user's login. * @type string $display_name The user's display name. * @type string $user_registered MySQL timestamp describing the moment when the user registered. Defaults to * the current UTC timestamp. @@ -4148,7 +4148,7 @@ function _wp_privacy_send_request_confirmation_notification( $request_id ) { * Data relating to the account action email. * * @type WP_User_Request $request User request object. - * @type string $user_email The email address confirming a request + * @type string $user_email The email address confirming a request. * @type string $description Description of the action being performed so the user knows what the email is for. * @type string $manage_url The link to click manage privacy requests of this type. * @type string $sitename The site name sending the mail. @@ -4199,7 +4199,7 @@ function _wp_privacy_send_request_confirmation_notification( $request_id ) { * Data relating to the account action email. * * @type WP_User_Request $request User request object. - * @type string $user_email The email address confirming a request + * @type string $user_email The email address confirming a request. * @type string $description Description of the action being performed * so the user knows what the email is for. * @type string $manage_url The link to click manage privacy requests of this type. @@ -4239,7 +4239,7 @@ function _wp_privacy_send_request_confirmation_notification( $request_id ) { * Data relating to the account action email. * * @type WP_User_Request $request User request object. - * @type string $user_email The email address confirming a request + * @type string $user_email The email address confirming a request. * @type string $description Description of the action being performed so the user knows what the email is for. * @type string $manage_url The link to click manage privacy requests of this type. * @type string $sitename The site name sending the mail. @@ -4270,7 +4270,7 @@ function _wp_privacy_send_request_confirmation_notification( $request_id ) { * Data relating to the account action email. * * @type WP_User_Request $request User request object. - * @type string $user_email The email address confirming a request + * @type string $user_email The email address confirming a request. * @type string $description Description of the action being performed so the user knows what the email is for. * @type string $manage_url The link to click manage privacy requests of this type. * @type string $sitename The site name sending the mail. From 44e23253f83c6661579137764cb7de5e3e54f711 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Fri, 28 Jun 2024 08:49:36 +0000 Subject: [PATCH 044/422] Docs: Fix docblock alignment for `pre_get_language_files_from_path` filter. Props khokansardar. Fixes #61416. git-svn-id: https://develop.svn.wordpress.org/trunk@58591 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-textdomain-registry.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-textdomain-registry.php b/src/wp-includes/class-wp-textdomain-registry.php index 7037b2bc076fa..e5aeb82e5cda5 100644 --- a/src/wp-includes/class-wp-textdomain-registry.php +++ b/src/wp-includes/class-wp-textdomain-registry.php @@ -182,8 +182,8 @@ public function get_language_files_from_path( $path ) { * @since 6.5.0 * * @param null|array $files List of translation files. Default null. - * @param string $path The path from which translation files are being fetched. - **/ + * @param string $path The path from which translation files are being fetched. + */ $files = apply_filters( 'pre_get_language_files_from_path', null, $path ); if ( null !== $files ) { From 5effffccd005ca3dae6631ee73b1096b8f54a861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Fri, 28 Jun 2024 09:20:10 +0000 Subject: [PATCH 045/422] HTML API: Add tests for virtual node breadcrumbs and depth Follow-up [58590]. See #61348. Props jonsurrell, gziolo. git-svn-id: https://develop.svn.wordpress.org/trunk@58592 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/wpHtmlProcessorBreadcrumbs.php | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 8694a17e01afb..01dcd9c32d7fb 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -573,4 +573,68 @@ public function test_retains_proper_bookmarks_after_seeking_back_to_closed_eleme 'Should have retained breadcrumbs from bookmarked location after seeking backwards to it.' ); } + + /** + * Ensures that breadcrumbs are properly reported on virtual nodes. + * + * @ticket 61348 + * + * @dataProvider data_virtual_nodes_breadcrumbs + * + * @covers WP_HTML_Processor::get_breadcrumbs + */ + public function test_breadcrumbs_on_virtual_nodes( string $html, int $token_position, string $expected_tag_name, string $expect_open_close, array $expected_breadcrumbs ) { + $processor = WP_HTML_Processor::create_fragment( $html ); + + for ( $i = 0; $i < $token_position; $i++ ) { + $processor->next_token(); + } + + $this->assertSame( $expected_tag_name, $processor->get_tag(), "Found incorrect tag name {$processor->get_tag()}." ); + if ( 'open' === $expect_open_close ) { + $this->assertFalse( $processor->is_tag_closer(), "Found closer when opener expected at {$processor->get_tag()}." ); + } else { + $this->assertTrue( $processor->is_tag_closer(), "Found opener when closer expected at {$processor->get_tag()}." ); + } + + $this->assertEquals( $expected_breadcrumbs, $processor->get_breadcrumbs(), "Found incorrect breadcrumbs in {$html}." ); + } + + /** + * Ensures that get_current_depth reports the correct depth on virtual nodes. + * + * @ticket 61348 + * + * @dataProvider data_virtual_nodes_breadcrumbs + * + * @covers WP_HTML_Processor::get_current_depth + */ + public function test_depth_on_virtual_nodes( string $html, int $token_position, string $expected_tag_name, string $expect_open_close, array $expected_breadcrumbs ) { + $processor = WP_HTML_Processor::create_fragment( $html ); + + for ( $i = 0; $i < $token_position; $i++ ) { + $processor->next_token(); + } + + $this->assertSame( count( $expected_breadcrumbs ), $processor->get_current_depth(), "Found incorrect depth in {$html}." ); + } + + /** + * Data provider for virtual nodes breadcrumbs with the following shape of arrays: + * 0: string Input html. + * 1: int Token index to seek. + * 2: string Expected tag name. + * 3: string 'open' or 'close' indicating an opener or closer is expected. + * 4: array Expected breadcrumbs. + * + * @return array[] + */ + public static function data_virtual_nodes_breadcrumbs() { + return array( + 'Implied P tag opener on unmatched closer' => array( '

    ', 1, 'P', 'open', array( 'HTML', 'BODY', 'P' ) ), + 'Implied heading tag closer on heading child' => array( '

    ', 2, 'H1', 'close', array( 'HTML', 'BODY' ) ), + 'Implied A tag closer on A tag child' => array( '', 2, 'A', 'close', array( 'HTML', 'BODY' ) ), + 'Implied A tag closer on A tag descendent' => array( '', 4, 'A', 'close', array( 'HTML', 'BODY' ) ), + ); + } } From 80bd30e4c1be58e5b606f917f637a962cdf9e9da Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 28 Jun 2024 15:45:08 +0000 Subject: [PATCH 046/422] Tests: Use `assertSame()` in `WP_Interactivity_API` tests. This ensures that not only the return values match the expected results, but also that their type is the same. Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable. Follow-up to [57563], [57649], [57822], [57826], [57835], [58159], [58327]. See #61530. git-svn-id: https://develop.svn.wordpress.org/trunk@58594 602fd350-edb4-49c9-b593-d223f7449a82 --- .../wpInteractivityAPI-wp-class.php | 32 ++-- .../wpInteractivityAPI-wp-context.php | 56 +++---- .../wpInteractivityAPI-wp-each.php | 58 +++---- .../wpInteractivityAPI-wp-interactive.php | 36 ++-- .../wpInteractivityAPI-wp-router-region.php | 10 +- .../wpInteractivityAPI-wp-style.php | 66 ++++---- .../wpInteractivityAPI-wp-text.php | 22 +-- .../interactivity-api/wpInteractivityAPI.php | 156 +++++++++--------- .../wpInteractivityAPIDirectivesProcessor.php | 46 +++--- .../wpInteractivityAPIFunctions.php | 68 ++++---- 10 files changed, 275 insertions(+), 275 deletions(-) diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-class.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-class.php index b9cf16952be91..d7bf77bb66470 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-class.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-class.php @@ -58,7 +58,7 @@ private function process_directives( $html ) { public function test_wp_class_sets_class_name() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); } /** @@ -76,7 +76,7 @@ public function test_wp_class_sets_multiple_class_names() { data-wp-class--other-class="myPlugin::state.true" >Text

    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class other-class', $p->get_attribute( 'class' ) ); } /** @@ -94,7 +94,7 @@ public function test_wp_class_handles_multiple_class_names_with_different_values data-wp-class--other-class="myPlugin::state.false" >Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); } /** @@ -116,7 +116,7 @@ class="other-class" public function test_wp_class_sets_class_name_when_class_attribute_exists() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class some-class', $p->get_attribute( 'class' ) ); } /** @@ -143,7 +143,7 @@ public function test_wp_class_doesnt_add_class_attribute_on_false() { public function test_wp_class_doesnt_add_class_name_on_false() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class', $p->get_attribute( 'class' ) ); } /** @@ -157,7 +157,7 @@ public function test_wp_class_doesnt_add_class_name_on_false() { public function test_wp_class_keeps_class_name_when_class_name_exists() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); } /** @@ -171,7 +171,7 @@ public function test_wp_class_keeps_class_name_when_class_name_exists() { public function test_wp_class_keeps_class_name_when_class_name_exists_and_is_not_the_only_one() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class some-class', $p->get_attribute( 'class' ) ); } /** @@ -199,7 +199,7 @@ public function test_wp_class_removes_class_attribute_when_class_name_exists_and public function test_wp_class_removes_class_name_when_class_name_exists_and_is_not_the_only_one() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class', $p->get_attribute( 'class' ) ); } /** @@ -227,7 +227,7 @@ public function test_wp_class_doesnt_remove_empty_class_attribute() { public function test_wp_class_doesnt_change_class_attribute_with_empty_directive_suffix() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class', $p->get_attribute( 'class' ) ); } /** @@ -242,7 +242,7 @@ public function test_wp_class_doesnt_change_class_attribute_with_empty_directive public function test_wp_class_doesnt_change_class_attribute_with_empty_value() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class', $p->get_attribute( 'class' ) ); } /** @@ -257,7 +257,7 @@ public function test_wp_class_doesnt_change_class_attribute_with_empty_value() { public function test_wp_class_doesnt_change_class_attribute_without_value() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'other-class', $p->get_attribute( 'class' ) ); } /** @@ -271,7 +271,7 @@ public function test_wp_class_doesnt_change_class_attribute_without_value() { public function test_wp_class_works_with_multiple_directives() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); } /** @@ -286,17 +286,17 @@ public function test_wp_class_sets_class_name_on_truthy_values() { $this->interactivity->state( 'myPlugin', array( 'text' => 'some text' ) ); $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); $this->interactivity->state( 'myPlugin', array( 'array' => array( 1, 2 ) ) ); $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); $this->interactivity->state( 'myPlugin', array( 'number' => 1 ) ); $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); } /** diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-context.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-context.php index 93e2528126215..442c62c84e52f 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-context.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-context.php @@ -56,7 +56,7 @@ public function test_wp_context_directive_sets_a_context_in_a_custom_namespace()
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -78,7 +78,7 @@ class="test"

    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -99,9 +99,9 @@ public function test_wp_context_directive_merges_context_in_the_same_custom_name
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); } /** @@ -121,7 +121,7 @@ public function test_wp_context_directive_overwrites_context_in_the_same_custom_
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); } /** @@ -142,9 +142,9 @@ public function test_wp_context_directive_replaces_old_context_after_closing_tag
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); } /** @@ -165,9 +165,9 @@ public function test_wp_context_directive_merges_context_in_different_custom_nam
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); } /** @@ -206,9 +206,9 @@ public function test_wp_context_directive_doesnt_overwrite_context_on_malformed_
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); } /** @@ -247,9 +247,9 @@ public function test_wp_context_directive_doesnt_overwrite_context_on_empty_cont
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); } /** @@ -288,9 +288,9 @@ public function test_wp_context_directive_doesnt_overwrite_context_on_context_wi
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); } /** @@ -307,7 +307,7 @@ public function test_wp_context_works_with_multiple_directives() {
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -346,7 +346,7 @@ public function test_wp_context_directive_works_with_default_namespace() {
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -368,7 +368,7 @@ public function test_wp_context_directive_overrides_default_namespace() {
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -389,7 +389,7 @@ public function test_wp_context_directive_overrides_default_namespace_with_same_
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -416,11 +416,11 @@ public function test_wp_context_directive_works_with_nested_default_namespaces()
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'other-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); $this->assertNull( $p->get_attribute( 'id' ) ); } @@ -445,7 +445,7 @@ class="test" '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -469,9 +469,9 @@ public function test_wp_context_directive_merges_context_in_the_same_default_nam '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); } /** @@ -494,7 +494,7 @@ public function test_wp_context_directive_overwrites_context_in_the_same_default '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); } /** @@ -518,8 +518,8 @@ public function test_wp_context_directive_replaces_old_context_after_closing_tag '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id-2', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-2', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id-1', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id-1', $p->get_attribute( 'id' ) ); } } diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-each.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-each.php index 4628ec702a67b..0446fa461df14 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-each.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-each.php @@ -42,7 +42,7 @@ public function test_wp_each_doesnt_do_anything_on_non_template_tags() { '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); } /** @@ -68,7 +68,7 @@ public function test_wp_each_doesnt_do_anything_on_associative_arrays() { '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); } /** @@ -92,7 +92,7 @@ public function test_wp_each_simple_tags() { '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -116,7 +116,7 @@ public function test_wp_each_empty_array() { '' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -145,7 +145,7 @@ public function test_wp_each_merges_context_correctly() { '
    New text
    ' . ''; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -173,7 +173,7 @@ public function test_wp_each_gets_arrays_from_context() { '
    Text
    ' . ''; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -201,7 +201,7 @@ public function test_wp_each_default_namespace() { '
    Text
    ' . ''; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -229,7 +229,7 @@ public function test_wp_each_multiple_tags_per_item() { '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -257,7 +257,7 @@ public function test_wp_each_void_tags() { '' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -286,7 +286,7 @@ public function test_wp_each_void_and_non_void_tags() { '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -318,7 +318,7 @@ public function test_wp_each_nested_tags() { '' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -361,7 +361,7 @@ public function test_wp_each_nested_item_properties() { 'two' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -385,7 +385,7 @@ public function test_wp_each_different_item_names() { '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -410,7 +410,7 @@ public function test_wp_each_different_item_names_transforms_camelcase() { '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -426,14 +426,14 @@ public function test_wp_each_doesnt_work_with_top_level_text() { 'id: ' . ''; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); $original = '' . ''; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); // But it should work fine with spaces and linebreaks. $original = ' @@ -444,9 +444,9 @@ public function test_wp_each_doesnt_work_with_top_level_text() { $p = new WP_HTML_Tag_Processor( $new ); $p->next_tag( array( 'class_name' => 'test' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( '1', $p->get_attribute( 'id' ) ); + $this->assertSame( '1', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( '2', $p->get_attribute( 'id' ) ); + $this->assertSame( '2', $p->get_attribute( 'id' ) ); } /** @@ -487,7 +487,7 @@ public function test_wp_each_nested_template_tags() { '4' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -533,7 +533,7 @@ public function test_wp_each_directly_nested_template_tags() { '4' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -571,7 +571,7 @@ public function test_wp_each_nested_template_tags_using_previous_item_as_list() '4' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -590,7 +590,7 @@ public function test_wp_each_unbalanced_tags() { '' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); } /** @@ -614,7 +614,7 @@ public function test_wp_each_unbalanced_tags_in_nested_template_tags() { '' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $original, $new ); + $this->assertSame( $original, $new ); } /** @@ -639,23 +639,23 @@ public function test_wp_each_doesnt_process_if_not_array() { $this->interactivity->state( 'myPlugin', array( 'list' => null ) ); $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); $this->interactivity->state( 'myPlugin', array( 'list' => 'Text' ) ); $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); $this->interactivity->state( 'myPlugin', array( 'list' => 100 ) ); $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); $this->interactivity->state( 'myPlugin', array( 'list' => false ) ); $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); $this->interactivity->state( 'myPlugin', array( 'list' => true ) ); $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } /** @@ -682,6 +682,6 @@ public function test_wp_each_doesnt_process_with_manual_server_directive_process '2' . '
    Text
    '; $new = $this->interactivity->process_directives( $original ); - $this->assertEquals( $expected, $new ); + $this->assertSame( $expected, $new ); } } diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-interactive.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-interactive.php index 65f4e4258b4e3..c1f3b9c8d2ae2 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-interactive.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-interactive.php @@ -58,7 +58,7 @@ public function test_wp_interactive_sets_a_default_namespace_with_object() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -76,7 +76,7 @@ public function test_wp_interactive_sets_a_default_namespace_with_string() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -97,9 +97,9 @@ public function test_wp_interactive_replaces_the_previous_default_namespace() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'other-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'other-id', $p->get_attribute( 'id' ) ); } /** @@ -121,9 +121,9 @@ public function test_wp_interactive_json_without_namespace_doesnt_replace_the_pr '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -144,9 +144,9 @@ public function test_wp_interactive_with_empty_value_doesnt_replace_the_previous '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -167,9 +167,9 @@ public function test_wp_interactive_with_invalid_value_doesnt_replace_the_previo '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -190,9 +190,9 @@ public function test_wp_interactive_without_value_doesnt_replace_the_previous_de '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -209,7 +209,7 @@ public function test_wp_interactive_works_with_multiple_directives() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -227,7 +227,7 @@ public function test_wp_interactive_namespace_can_be_override_by_custom_one() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'other-id', $p->get_attribute( 'id' ) ); } /** @@ -248,9 +248,9 @@ public function test_wp_interactive_set_is_unset_on_closing_tag() { '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'other-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'other-id', $p->get_attribute( 'id' ) ); $html = '
    @@ -261,8 +261,8 @@ public function test_wp_interactive_set_is_unset_on_closing_tag() {
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'other-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'other-id', $p->get_attribute( 'id' ) ); $p->next_tag( array( 'class_name' => 'test' ) ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } } diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-router-region.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-router-region.php index 88a03e483db59..8d8cdb6228d2e 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-router-region.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-router-region.php @@ -88,9 +88,9 @@ public function test_wp_router_region_missing() { $html = '
    Nothing here
    '; $new_html = $this->interactivity->process_directives( $html ); $footer = $this->render_wp_footer(); - $this->assertEquals( $html, $new_html ); - $this->assertEquals( '', $footer ); - $this->assertEquals( '', get_echo( 'wp_print_styles' ) ); + $this->assertSame( $html, $new_html ); + $this->assertSame( '', $footer ); + $this->assertSame( '', get_echo( 'wp_print_styles' ) ); } /** @@ -108,14 +108,14 @@ public function test_wp_router_region_adds_loading_bar_aria_live_region_only_onc
    Another interactive region
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( $html, $new_html ); + $this->assertSame( $html, $new_html ); // Check that the style is loaded, but only once. $styles = get_echo( 'wp_print_styles' ); $query = array( 'tag_name' => 'style' ); $p = new WP_HTML_Tag_Processor( $styles ); $this->assertTrue( $p->next_tag( $query ) ); - $this->assertEquals( 'wp-interactivity-router-animations-inline-css', $p->get_attribute( 'id' ) ); + $this->assertSame( 'wp-interactivity-router-animations-inline-css', $p->get_attribute( 'id' ) ); $this->assertStringContainsString( '.wp-interactivity-router-loading-bar', $styles ); $this->assertFalse( $p->next_tag( $query ) ); diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-style.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-style.php index 3b645b0dd4df3..b69f0c79c392f 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-style.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-style.php @@ -61,47 +61,47 @@ private function merge_style_property( $style_attribute_value, $style_property_n public function test_merge_style_property_sets_properties() { // Adds property on empty style attribute. $result = $this->merge_style_property( '', 'color', 'green' ); - $this->assertEquals( 'color:green;', $result ); + $this->assertSame( 'color:green;', $result ); // Changes style property when there is an existing property. $result = $this->merge_style_property( 'color:red;', 'color', 'green' ); - $this->assertEquals( 'color:green;', $result ); + $this->assertSame( 'color:green;', $result ); // Adds a new property when the existing one does not match. $result = $this->merge_style_property( 'color:red;', 'background', 'blue' ); - $this->assertEquals( 'color:red;background:blue;', $result ); + $this->assertSame( 'color:red;background:blue;', $result ); // Handles multiple existing properties. $result = $this->merge_style_property( 'color:red;margin:5px;', 'color', 'green' ); - $this->assertEquals( 'margin:5px;color:green;', $result ); + $this->assertSame( 'margin:5px;color:green;', $result ); // Adds a new property when multiple existing properties do not match. $result = $this->merge_style_property( 'color:red;margin:5px;', 'padding', '10px' ); - $this->assertEquals( 'color:red;margin:5px;padding:10px;', $result ); + $this->assertSame( 'color:red;margin:5px;padding:10px;', $result ); // Removes whitespaces in all properties. $result = $this->merge_style_property( ' color : red; margin : 5px; ', 'padding', ' 10px ' ); - $this->assertEquals( 'color:red;margin:5px;padding:10px;', $result ); + $this->assertSame( 'color:red;margin:5px;padding:10px;', $result ); // Updates a property when it's not the first one in the value. $result = $this->merge_style_property( 'color:red;margin:5px;', 'margin', '15px' ); - $this->assertEquals( 'color:red;margin:15px;', $result ); + $this->assertSame( 'color:red;margin:15px;', $result ); // Adds missing trailing semicolon. $result = $this->merge_style_property( 'color:red;margin:5px', 'padding', '10px' ); - $this->assertEquals( 'color:red;margin:5px;padding:10px;', $result ); + $this->assertSame( 'color:red;margin:5px;padding:10px;', $result ); // Doesn't add double semicolons. $result = $this->merge_style_property( 'color:red;margin:5px;', 'padding', '10px;' ); - $this->assertEquals( 'color:red;margin:5px;padding:10px;', $result ); + $this->assertSame( 'color:red;margin:5px;padding:10px;', $result ); // Handles empty properties in the input. $result = $this->merge_style_property( 'color:red;;margin:5px;;', 'padding', '10px' ); - $this->assertEquals( 'color:red;margin:5px;padding:10px;', $result ); + $this->assertSame( 'color:red;margin:5px;padding:10px;', $result ); // Moves the modified property to the end. $result = $this->merge_style_property( 'border-style: dashed; border: 3px solid red;', 'border-style', 'inset' ); - $this->assertEquals( 'border:3px solid red;border-style:inset;', $result ); + $this->assertSame( 'border:3px solid red;border-style:inset;', $result ); } /** @@ -115,35 +115,35 @@ public function test_merge_style_property_sets_properties() { public function test_merge_style_property_with_falsy_values() { // Removes a property with an empty string. $result = $this->merge_style_property( 'color:red;margin:5px;', 'color', '' ); - $this->assertEquals( 'margin:5px;', $result ); + $this->assertSame( 'margin:5px;', $result ); // Removes a property with null. $result = $this->merge_style_property( 'color:red;margin:5px;', 'color', null ); - $this->assertEquals( 'margin:5px;', $result ); + $this->assertSame( 'margin:5px;', $result ); // Removes a property with false. $result = $this->merge_style_property( 'color:red;margin:5px;', 'color', false ); - $this->assertEquals( 'margin:5px;', $result ); + $this->assertSame( 'margin:5px;', $result ); // Removes a property with 0. $result = $this->merge_style_property( 'color:red;margin:5px;', 'color', 0 ); - $this->assertEquals( 'margin:5px;', $result ); + $this->assertSame( 'margin:5px;', $result ); // It doesn't add a new property with an empty string. $result = $this->merge_style_property( 'color:red;', 'padding', '' ); - $this->assertEquals( 'color:red;', $result ); + $this->assertSame( 'color:red;', $result ); // It doesn't add a new property with null. $result = $this->merge_style_property( 'color:red;', 'padding', null ); - $this->assertEquals( 'color:red;', $result ); + $this->assertSame( 'color:red;', $result ); // It doesn't add a new property with false. $result = $this->merge_style_property( 'color:red;', 'padding', false ); - $this->assertEquals( 'color:red;', $result ); + $this->assertSame( 'color:red;', $result ); // It doesn't add a new property with 0. $result = $this->merge_style_property( 'color:red;', 'padding', 0 ); - $this->assertEquals( 'color:red;', $result ); + $this->assertSame( 'color:red;', $result ); } /** @@ -170,7 +170,7 @@ private function process_directives( $html ) { public function test_wp_style_sets_style_attribute() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); } /** @@ -188,7 +188,7 @@ public function test_wp_style_sets_multiple_style_properties() { data-wp-style--background="myPlugin::state.green" >Text'; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;background:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;background:green;', $p->get_attribute( 'style' ) ); } /** @@ -206,7 +206,7 @@ public function test_wp_style_sets_multiple_style_properties_with_different_valu data-wp-style--background="myPlugin::state.false" >Text'; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); } /** @@ -229,7 +229,7 @@ public function test_wp_style_sets_multiple_style_properties_with_different_valu public function test_wp_style_sets_style_property_when_style_attribute_exists() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;color:green;', $p->get_attribute( 'style' ) ); } /** @@ -243,7 +243,7 @@ public function test_wp_style_sets_style_property_when_style_attribute_exists() public function test_wp_style_overwrites_style_property_when_style_property_exists() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); } /** @@ -271,7 +271,7 @@ public function test_wp_style_doesnt_add_style_attribute_on_false() { public function test_wp_style_doesnt_add_style_property_on_false() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;', $p->get_attribute( 'style' ) ); } /** @@ -285,7 +285,7 @@ public function test_wp_style_doesnt_add_style_property_on_false() { public function test_wp_style_keeps_style_property_when_style_property_exists() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); } /** @@ -299,7 +299,7 @@ public function test_wp_style_keeps_style_property_when_style_property_exists() public function test_wp_style_keeps_style_property_when_style_property_exists_and_is_not_the_only_one() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;color:green;', $p->get_attribute( 'style' ) ); } /** @@ -327,7 +327,7 @@ public function test_wp_style_removes_style_attribute_when_style_property_exists public function test_wp_style_removes_style_property_when_style_property_exists_and_is_not_the_only_one() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;', $p->get_attribute( 'style' ) ); } /** @@ -355,7 +355,7 @@ public function test_wp_style_doesnt_remove_empty_style_attribute() { public function test_wp_style_doesnt_change_style_attribute_with_empty_directive_suffix() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;', $p->get_attribute( 'style' ) ); } /** @@ -370,7 +370,7 @@ public function test_wp_style_doesnt_change_style_attribute_with_empty_directive public function test_wp_style_doesnt_change_style_attribute_with_empty_value() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;', $p->get_attribute( 'style' ) ); } /** @@ -385,7 +385,7 @@ public function test_wp_style_doesnt_change_style_attribute_with_empty_value() { public function test_wp_style_doesnt_change_style_attribute_without_value() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'padding:10px;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'padding:10px;', $p->get_attribute( 'style' ) ); } /** @@ -399,7 +399,7 @@ public function test_wp_style_doesnt_change_style_attribute_without_value() { public function test_wp_style_works_with_multiple_directives() { $html = '
    Text
    '; list($p) = $this->process_directives( $html ); - $this->assertEquals( 'color:green;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'color:green;', $p->get_attribute( 'style' ) ); } /** diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-text.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-text.php index d031698707960..dc19b1117de39 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-text.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-text.php @@ -39,7 +39,7 @@ public function set_up() { public function test_wp_text_sets_inner_content() { $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    Updated
    ', $new_html ); + $this->assertSame( '
    Updated
    ', $new_html ); } /** @@ -53,7 +53,7 @@ public function test_wp_text_sets_inner_content_numbers() { $this->interactivity->state( 'myPlugin', array( 'number' => 100 ) ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    100
    ', $new_html ); + $this->assertSame( '
    100
    ', $new_html ); } /** @@ -77,23 +77,23 @@ public function test_wp_text_removes_inner_content_on_types_that_are_not_strings ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    ', $new_html ); + $this->assertSame( '
    ', $new_html ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    ', $new_html ); + $this->assertSame( '
    ', $new_html ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    ', $new_html ); + $this->assertSame( '
    ', $new_html ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    ', $new_html ); + $this->assertSame( '
    ', $new_html ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    ', $new_html ); + $this->assertSame( '
    ', $new_html ); } /** @@ -107,7 +107,7 @@ public function test_wp_text_removes_inner_content_on_types_that_are_not_strings public function test_wp_text_sets_inner_content_with_nested_tags() { $html = '
    Text
    Another text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    Updated
    ', $new_html ); + $this->assertSame( '
    Updated
    ', $new_html ); } /** @@ -121,7 +121,7 @@ public function test_wp_text_sets_inner_content_with_nested_tags() { public function test_wp_text_sets_inner_content_even_with_unbalanced_but_different_tags_inside_content() { $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    Updated
    ', $new_html ); + $this->assertSame( '
    Updated
    ', $new_html ); } /** @@ -137,7 +137,7 @@ public function test_wp_text_sets_inner_content_even_with_unbalanced_but_differe public function test_wp_text_fails_with_unbalanced_and_same_tags_inside_content() { $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    Text
    ', $new_html ); + $this->assertSame( '
    Text
    ', $new_html ); } /** @@ -152,6 +152,6 @@ public function test_wp_text_cant_set_inner_html_in_the_content() { $this->interactivity->state( 'myPlugin', array( 'text' => 'Updated' ) ); $html = '
    Text
    '; $new_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( '
    <span>Updated</span>
    ', $new_html ); + $this->assertSame( '
    <span>Updated</span>
    ', $new_html ); } } diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php index 25c8c2dc3abce..9832b65bf4874 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php @@ -69,8 +69,8 @@ private function set_internal_context_stack( ...$stack ) { * @covers ::config */ public function test_state_and_config_should_be_empty() { - $this->assertEquals( array(), $this->interactivity->state( 'myPlugin' ) ); - $this->assertEquals( array(), $this->interactivity->config( 'myPlugin' ) ); + $this->assertSame( array(), $this->interactivity->state( 'myPlugin' ) ); + $this->assertSame( array(), $this->interactivity->config( 'myPlugin' ) ); } /** @@ -89,9 +89,9 @@ public function test_state_and_config_can_be_changed() { 'nested' => array( 'c' => 3 ), ); $result = $this->interactivity->state( 'myPlugin', $state ); - $this->assertEquals( $state, $result ); + $this->assertSame( $state, $result ); $result = $this->interactivity->config( 'myPlugin', $state ); - $this->assertEquals( $state, $result ); + $this->assertSame( $state, $result ); } /** @@ -106,14 +106,14 @@ public function test_state_and_config_can_be_merged() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->state( 'myPlugin', array( 'b' => 2 ) ); $this->interactivity->state( 'otherPlugin', array( 'c' => 3 ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 1, 'b' => 2, ), $this->interactivity->state( 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( array( 'c' => 3 ), $this->interactivity->state( 'otherPlugin' ) ); @@ -121,14 +121,14 @@ public function test_state_and_config_can_be_merged() { $this->interactivity->config( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->config( 'myPlugin', array( 'b' => 2 ) ); $this->interactivity->config( 'otherPlugin', array( 'c' => 3 ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 1, 'b' => 2, ), $this->interactivity->config( 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( array( 'c' => 3 ), $this->interactivity->config( 'otherPlugin' ) ); } @@ -145,14 +145,14 @@ public function test_state_and_config_can_be_merged() { public function test_state_and_config_existing_props_can_be_overwritten() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->state( 'myPlugin', array( 'a' => 2 ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 2 ), $this->interactivity->state( 'myPlugin' ) ); $this->interactivity->config( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->config( 'myPlugin', array( 'a' => 2 ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 2 ), $this->interactivity->config( 'myPlugin' ) ); @@ -170,14 +170,14 @@ public function test_state_and_config_existing_props_can_be_overwritten() { public function test_state_and_config_existing_indexed_arrays_are_replaced() { $this->interactivity->state( 'myPlugin', array( 'a' => array( 1, 2 ) ) ); $this->interactivity->state( 'myPlugin', array( 'a' => array( 3, 4 ) ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => array( 3, 4 ) ), $this->interactivity->state( 'myPlugin' ) ); $this->interactivity->config( 'myPlugin', array( 'a' => array( 1, 2 ) ) ); $this->interactivity->config( 'myPlugin', array( 'a' => array( 3, 4 ) ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => array( 3, 4 ) ), $this->interactivity->config( 'myPlugin' ) ); @@ -218,10 +218,10 @@ public function test_state_and_config_is_correctly_printed() { 'otherPlugin' => array( 'b' => 2 ), ); - $this->assertEquals( + $this->assertSame( array( - 'state' => $data, 'config' => $data, + 'state' => $data, ), $result ); @@ -251,7 +251,7 @@ public function test_state_and_config_dont_print_when_empty() { public function test_config_not_printed_when_empty() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $result = $this->print_client_interactivity_data(); - $this->assertEquals( array( 'state' => array( 'myPlugin' => array( 'a' => 1 ) ) ), $result ); + $this->assertSame( array( 'state' => array( 'myPlugin' => array( 'a' => 1 ) ) ), $result ); } /** @@ -265,7 +265,7 @@ public function test_config_not_printed_when_empty() { public function test_state_not_printed_when_empty() { $this->interactivity->config( 'myPlugin', array( 'a' => 1 ) ); $result = $this->print_client_interactivity_data(); - $this->assertEquals( array( 'config' => array( 'myPlugin' => array( 'a' => 1 ) ) ), $result ); + $this->assertSame( array( 'config' => array( 'myPlugin' => array( 'a' => 1 ) ) ), $result ); } /** @@ -286,7 +286,7 @@ public function test_state_not_printed_when_empty_array() { SCRIPT_TAG; - $this->assertSame( $expected, $printed_script ); + $this->assertSameIgnoreEOL( $expected, $printed_script ); } /** @@ -319,7 +319,7 @@ public function test_state_printed_correctly_with_nested_empty_array() { SCRIPT_TAG; - $this->assertSame( $expected, $printed_script ); + $this->assertSameIgnoreEOL( $expected, $printed_script ); } /** @@ -340,7 +340,7 @@ public function test_config_not_printed_when_empty_array() { SCRIPT_TAG; - $this->assertSame( $expected, $printed_script ); + $this->assertSameIgnoreEOL( $expected, $printed_script ); } /** @@ -373,7 +373,7 @@ public function test_config_printed_correctly_with_nested_empty_array() { SCRIPT_TAG; - $this->assertSame( $expected, $printed_script ); + $this->assertSameIgnoreEOL( $expected, $printed_script ); } /** @@ -410,7 +410,7 @@ public function test_state_and_config_escape_special_characters() { $expected = <<<"JSON" {"config":{"myPlugin":{"chars":"&\\u003C\\u003E/"}},"state":{"myPlugin":{"ampersand":"&","less-than sign":"\\u003C","greater-than sign":"\\u003E","solidus":"/","line separator":"\u{2028}","paragraph separator":"\u{2029}","flag of england":"\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}","malicious script closer":"\\u003C/script\\u003E","entity-encoded malicious script closer":"</script>"}}} JSON; - $this->assertEquals( $expected, $interactivity_data_string[1] ); + $this->assertSame( $expected, $interactivity_data_string[1] ); } /** @@ -450,7 +450,7 @@ public function test_state_and_config_escape_special_characters_non_utf8() { $expected = <<<"JSON" {"config":{"myPlugin":{"chars":"&\\u003C\\u003E/"}},"state":{"myPlugin":{"ampersand":"&","less-than sign":"\\u003C","greater-than sign":"\\u003E","solidus":"/","line separator":"\\u2028","paragraph separator":"\\u2029","flag of england":"\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f","malicious script closer":"\\u003C/script\\u003E","entity-encoded malicious script closer":"</script>"}}} JSON; - $this->assertEquals( $expected, $interactivity_data_string[1] ); + $this->assertSame( $expected, $interactivity_data_string[1] ); } /** @@ -467,7 +467,7 @@ public function test_state_without_namespace() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->state( 'otherPlugin', array( 'b' => 2 ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 1 ), $this->interactivity->state() ); @@ -488,7 +488,7 @@ public function test_state_with_data_and_invalid_namespace() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->state( 'otherPlugin', array( 'b' => 2 ) ); - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->state( null, array( 'newProp' => 'value' ) ) ); @@ -508,7 +508,7 @@ public function test_state_with_empty_string_as_namespace() { $this->interactivity->state( 'myPlugin', array( 'a' => 1 ) ); $this->interactivity->state( 'otherPlugin', array( 'b' => 2 ) ); - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->state( '' ) ); @@ -524,7 +524,7 @@ public function test_state_with_empty_string_as_namespace() { * @expectedIncorrectUsage WP_Interactivity_API::state */ public function test_state_without_namespace_outside_directive_processing() { - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->state() ); @@ -550,11 +550,11 @@ public function test_get_context_with_namespace() { ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 1 ), $this->interactivity->get_context( 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( array( 'b' => 2 ), $this->interactivity->get_context( 'otherPlugin' ) ); @@ -580,7 +580,7 @@ public function test_get_context_without_namespace() { ) ); - $this->assertEquals( + $this->assertSame( array( 'a' => 1 ), $this->interactivity->get_context() ); @@ -598,7 +598,7 @@ public function test_get_context_with_empty_context_stack() { $this->set_internal_namespace_stack( 'myPlugin' ); $this->set_internal_context_stack(); - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->get_context( 'myPlugin' ) ); @@ -623,7 +623,7 @@ public function test_get_context_with_undefined_namespace() { ) ); - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->get_context( 'otherPlugin' ) ); @@ -648,7 +648,7 @@ public function test_get_context_with_empty_namespace() { ) ); - $this->assertEquals( + $this->assertSame( array(), $this->interactivity->get_context( '' ) ); @@ -666,7 +666,7 @@ public function test_get_context_with_empty_namespace() { */ public function test_get_context_outside_of_directive_processing() { $context = $this->interactivity->get_context(); - $this->assertEquals( array(), $context ); + $this->assertSame( array(), $context ); } /** @@ -681,55 +681,55 @@ public function test_extract_directive_value() { $extract_directive_value->setAccessible( true ); $result = $extract_directive_value->invoke( $this->interactivity, 'state.foo', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', 'state.foo' ), $result ); + $this->assertSame( array( 'myPlugin', 'state.foo' ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::state.foo', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', 'state.foo' ), $result ); + $this->assertSame( array( 'otherPlugin', 'state.foo' ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, '{ "isOpen": false }', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', array( 'isOpen' => false ) ), $result ); + $this->assertSame( array( 'myPlugin', array( 'isOpen' => false ) ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::{ "isOpen": false }', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', array( 'isOpen' => false ) ), $result ); + $this->assertSame( array( 'otherPlugin', array( 'isOpen' => false ) ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'true', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', true ), $result ); + $this->assertSame( array( 'myPlugin', true ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'false', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', false ), $result ); + $this->assertSame( array( 'myPlugin', false ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'null', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, '100', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', 100 ), $result ); + $this->assertSame( array( 'myPlugin', 100 ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, '1.2', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', 1.2 ), $result ); + $this->assertSame( array( 'myPlugin', 1.2 ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, '1.2.3', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', '1.2.3' ), $result ); + $this->assertSame( array( 'myPlugin', '1.2.3' ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::true', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', true ), $result ); + $this->assertSame( array( 'otherPlugin', true ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::false', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', false ), $result ); + $this->assertSame( array( 'otherPlugin', false ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::null', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', null ), $result ); + $this->assertSame( array( 'otherPlugin', null ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::100', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', 100 ), $result ); + $this->assertSame( array( 'otherPlugin', 100 ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::1.2', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', 1.2 ), $result ); + $this->assertSame( array( 'otherPlugin', 1.2 ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::1.2.3', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', '1.2.3' ), $result ); + $this->assertSame( array( 'otherPlugin', '1.2.3' ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, 'otherPlugin::[{"o":4}, null, 3e6]', 'myPlugin' ); - $this->assertEquals( array( 'otherPlugin', array( array( 'o' => 4 ), null, 3000000.0 ) ), $result ); + $this->assertSame( array( 'otherPlugin', array( array( 'o' => 4 ), null, 3000000.0 ) ), $result ); } /** @@ -744,26 +744,26 @@ public function test_extract_directive_value_empty_values() { $extract_directive_value->setAccessible( true ); $result = $extract_directive_value->invoke( $this->interactivity, '', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); // This is a boolean attribute. $result = $extract_directive_value->invoke( $this->interactivity, true, 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, false, 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); $result = $extract_directive_value->invoke( $this->interactivity, null, 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); // A string ending in `::` without any extra characters is not considered a // namespace. $result = $extract_directive_value->invoke( $this->interactivity, 'myPlugin::', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', 'myPlugin::' ), $result ); + $this->assertSame( array( 'myPlugin', 'myPlugin::' ), $result ); // A namespace with invalid characters is not considered a valid namespace. $result = $extract_directive_value->invoke( $this->interactivity, '$myPlugin::state.foo', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', '$myPlugin::state.foo' ), $result ); + $this->assertSame( array( 'myPlugin', '$myPlugin::state.foo' ), $result ); } /** @@ -779,11 +779,11 @@ public function test_extract_directive_value_invalid_json() { // Invalid JSON due to missing quotes. Returns the original value. $result = $extract_directive_value->invoke( $this->interactivity, '{ isOpen: false }', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', '{ isOpen: false }' ), $result ); + $this->assertSame( array( 'myPlugin', '{ isOpen: false }' ), $result ); // Null string. Returns null. $result = $extract_directive_value->invoke( $this->interactivity, 'null', 'myPlugin' ); - $this->assertEquals( array( 'myPlugin', null ), $result ); + $this->assertSame( array( 'myPlugin', null ), $result ); } /** @@ -799,13 +799,13 @@ public function test_extract_prefix_and_suffix() { $extract_prefix_and_suffix->setAccessible( true ); $result = $extract_prefix_and_suffix->invoke( $this->interactivity, 'data-wp-interactive' ); - $this->assertEquals( array( 'data-wp-interactive' ), $result ); + $this->assertSame( array( 'data-wp-interactive' ), $result ); $result = $extract_prefix_and_suffix->invoke( $this->interactivity, 'data-wp-bind--src' ); - $this->assertEquals( array( 'data-wp-bind', 'src' ), $result ); + $this->assertSame( array( 'data-wp-bind', 'src' ), $result ); $result = $extract_prefix_and_suffix->invoke( $this->interactivity, 'data-wp-foo--and--bar' ); - $this->assertEquals( array( 'data-wp-foo', 'and--bar' ), $result ); + $this->assertSame( array( 'data-wp-foo', 'and--bar' ), $result ); } /** @@ -819,11 +819,11 @@ public function test_extract_prefix_and_suffix() { public function test_process_directives_do_nothing_without_directives() { $html = '
    Inner content here
    '; $processed_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( $html, $processed_html ); + $this->assertSame( $html, $processed_html ); $html = '
    ContentMore Content
    '; $processed_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( $html, $processed_html ); + $this->assertSame( $html, $processed_html ); } /** @@ -840,7 +840,7 @@ public function test_process_directives_changes_html_with_balanced_tags() { $processed_html = $this->interactivity->process_directives( $html ); $p = new WP_HTML_Tag_Processor( $processed_html ); $p->next_tag(); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -853,7 +853,7 @@ public function test_process_directives_changes_html_with_balanced_tags() { public function test_process_directives_doesnt_fail_with_unknown_directives() { $html = '
    Text
    '; $processed_html = $this->interactivity->process_directives( $html ); - $this->assertEquals( $html, $processed_html ); + $this->assertSame( $html, $processed_html ); } /** @@ -876,9 +876,9 @@ public function test_process_directives_process_the_directives_in_the_correct_or $processed_html = $this->interactivity->process_directives( $html ); $p = new WP_HTML_Tag_Processor( $processed_html ); $p->next_tag(); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); - $this->assertEquals( 'some-class', $p->get_attribute( 'class' ) ); - $this->assertEquals( 'display:none;', $p->get_attribute( 'style' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-class', $p->get_attribute( 'class' ) ); + $this->assertSame( 'display:none;', $p->get_attribute( 'style' ) ); $this->assertStringContainsString( 'Updated', $p->get_updated_html() ); $this->assertStringNotContainsString( 'Text', $p->get_updated_html() ); } @@ -952,7 +952,7 @@ public function test_process_directives_changes_html_if_contains_svgs() { $processed_html = $this->interactivity->process_directives( $html ); $p = new WP_HTML_Tag_Processor( $processed_html ); $p->next_tag( 'div' ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -1017,7 +1017,7 @@ public function test_process_directives_change_html_if_contains_math() { $p->next_tag( 'math' ); $this->assertNull( $p->get_attribute( 'id' ) ); $p->next_tag( 'div' ); - $this->assertEquals( 'some-id', $p->get_attribute( 'id' ) ); + $this->assertSame( 'some-id', $p->get_attribute( 'id' ) ); } /** @@ -1121,16 +1121,16 @@ public function offsetUnset( $offset ): void {} $this->set_internal_namespace_stack( 'myPlugin' ); $result = $this->evaluate( 'state.key' ); - $this->assertEquals( 'myPlugin-state', $result ); + $this->assertSame( 'myPlugin-state', $result ); $result = $this->evaluate( 'context.key' ); - $this->assertEquals( 'myPlugin-context', $result ); + $this->assertSame( 'myPlugin-context', $result ); $result = $this->evaluate( 'otherPlugin::state.key' ); - $this->assertEquals( 'otherPlugin-state', $result ); + $this->assertSame( 'otherPlugin-state', $result ); $result = $this->evaluate( 'otherPlugin::context.key' ); - $this->assertEquals( 'otherPlugin-context', $result ); + $this->assertSame( 'otherPlugin-context', $result ); $result = $this->evaluate( 'state.obj.prop' ); $this->assertSame( 'object property', $result ); @@ -1241,16 +1241,16 @@ public function test_evaluate_nested_value() { $this->set_internal_namespace_stack( 'myPlugin' ); $result = $this->evaluate( 'state.nested.key' ); - $this->assertEquals( 'myPlugin-state-nested', $result ); + $this->assertSame( 'myPlugin-state-nested', $result ); $result = $this->evaluate( 'context.nested.key' ); - $this->assertEquals( 'myPlugin-context-nested', $result ); + $this->assertSame( 'myPlugin-context-nested', $result ); $result = $this->evaluate( 'otherPlugin::state.nested.key' ); - $this->assertEquals( 'otherPlugin-state-nested', $result ); + $this->assertSame( 'otherPlugin-state-nested', $result ); $result = $this->evaluate( 'otherPlugin::context.nested.key' ); - $this->assertEquals( 'otherPlugin-context-nested', $result ); + $this->assertSame( 'otherPlugin-context-nested', $result ); } /** diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIDirectivesProcessor.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIDirectivesProcessor.php index 5812c061666c8..d674f5e54ce06 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIDirectivesProcessor.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIDirectivesProcessor.php @@ -24,14 +24,14 @@ public function test_get_content_between_balanced_template_tags_standard_tags() $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( 'Text', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( 'Text', $p->get_content_between_balanced_template_tags() ); $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( 'Text', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( 'Text', $p->get_content_between_balanced_template_tags() ); $p->next_tag(); - $this->assertEquals( 'More text', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( 'More text', $p->get_content_between_balanced_template_tags() ); } /** @@ -46,7 +46,7 @@ public function test_get_content_between_balanced_template_tags_empty_tag() { $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( '', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( '', $p->get_content_between_balanced_template_tags() ); } /** @@ -81,12 +81,12 @@ public function test_get_content_between_balanced_template_tags_nested_tags() { $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( 'ContentMore Content', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( 'ContentMore Content', $p->get_content_between_balanced_template_tags() ); $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( '', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( '', $p->get_content_between_balanced_template_tags() ); } /** @@ -131,7 +131,7 @@ public function test_get_content_between_balanced_template_tags_with_unbalanced_ $content = ''; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); - $this->assertEquals( 'Missing opening span', $p->get_content_between_balanced_template_tags() ); + $this->assertSame( 'Missing opening span', $p->get_content_between_balanced_template_tags() ); } /** @@ -163,10 +163,10 @@ public function test_get_content_between_balanced_template_tags_positions_cursor $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); $p->get_content_between_balanced_template_tags(); - $this->assertEquals( 'TEMPLATE', $p->get_tag() ); + $this->assertSame( 'TEMPLATE', $p->get_tag() ); $this->assertTrue( $p->is_tag_closer() ); $p->next_tag(); - $this->assertEquals( 'DIV', $p->get_tag() ); + $this->assertSame( 'DIV', $p->get_tag() ); } /** @@ -479,13 +479,13 @@ public function test_append_content_after_template_tag_closer_simple_tags() { $this->assertTrue( $result ); $this->assertEquals( $content_1 . $content_2, $p ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); - $this->assertEquals( 'content-2', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-2', $p->get_attribute( 'class' ) ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); $result = $p->append_content_after_template_tag_closer( $content_3 ); $this->assertTrue( $result ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); $this->assertEquals( $content_1 . $content_2 . $content_3, $p ); - $this->assertEquals( 'content-3', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-3', $p->get_attribute( 'class' ) ); } /** @@ -509,7 +509,7 @@ public function test_append_content_after_template_tag_closer_in_the_middle_of_t $this->assertTrue( $result ); $this->assertEquals( $content_1 . $content_2 . $content_3, $p ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); - $this->assertEquals( 'content-3', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-3', $p->get_attribute( 'class' ) ); $p = new WP_Interactivity_API_Directives_Processor( $content_1 . $content_3 ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); @@ -518,7 +518,7 @@ public function test_append_content_after_template_tag_closer_in_the_middle_of_t $this->assertTrue( $result ); $this->assertEquals( $content_1 . $content_4 . $content_3, $p ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); - $this->assertEquals( 'content-4', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-4', $p->get_attribute( 'class' ) ); } /** @@ -558,16 +558,16 @@ public function test_append_content_after_template_tag_closer_multiple_calls_in_ $this->assertTrue( $result ); $this->assertEquals( $content_1 . $content_2, $p ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); - $this->assertEquals( 'content-2', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-2', $p->get_attribute( 'class' ) ); // Rewinds to the first template. $p->seek( 'first template' ); $p->release_bookmark( 'first template' ); - $this->assertEquals( 'content-1', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-1', $p->get_attribute( 'class' ) ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); $result = $p->append_content_after_template_tag_closer( $content_3 ); $this->assertEquals( $content_1 . $content_3 . $content_2, $p ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); - $this->assertEquals( 'content-3', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-3', $p->get_attribute( 'class' ) ); } /** @@ -615,9 +615,9 @@ public function test_append_content_after_template_tag_closer_with_existing_tags $this->assertTrue( $result ); $this->assertEquals( $content_1 . $content_2, $p ); $p->next_tag(); - $this->assertEquals( 'content-2-template-1', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-2-template-1', $p->get_attribute( 'class' ) ); $p->next_tag(); - $this->assertEquals( 'content-2-template-2', $p->get_attribute( 'class' ) ); + $this->assertSame( 'content-2-template-2', $p->get_attribute( 'class' ) ); $p->next_tag( array( 'tag_closers' => 'visit' ) ); $result = $p->append_content_after_template_tag_closer( $content_3 ); $this->assertTrue( $result ); @@ -640,7 +640,7 @@ public function test_append_content_after_template_tag_closer_empty() { $result = $p->append_content_after_template_tag_closer( '' ); $this->assertFalse( $result ); $this->assertEquals( $content, $p ); - $this->assertEquals( 'TEMPLATE', $p->get_tag() ); // It didn't move. + $this->assertSame( 'TEMPLATE', $p->get_tag() ); // It didn't move. $this->assertTrue( $p->is_tag_closer() ); // It didn't move. } @@ -694,7 +694,7 @@ public function test_next_balanced_tag_closer_tag_standard_tags() { $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); $this->assertTrue( $p->next_balanced_tag_closer_tag() ); - $this->assertEquals( 'DIV', $p->get_tag() ); + $this->assertSame( 'DIV', $p->get_tag() ); $this->assertTrue( $p->is_tag_closer() ); } @@ -731,14 +731,14 @@ public function test_next_balanced_tag_closer_tag_nested_tags() { $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); $this->assertTrue( $p->next_balanced_tag_closer_tag() ); - $this->assertEquals( 'DIV', $p->get_tag() ); + $this->assertSame( 'DIV', $p->get_tag() ); $this->assertTrue( $p->is_tag_closer() ); $content = '
    Nested content
    '; $p = new WP_Interactivity_API_Directives_Processor( $content ); $p->next_tag(); $this->assertTrue( $p->next_balanced_tag_closer_tag() ); - $this->assertEquals( 'DIV', $p->get_tag() ); + $this->assertSame( 'DIV', $p->get_tag() ); $this->assertTrue( $p->is_tag_closer() ); $this->assertFalse( $p->next_tag() ); // No more content. } @@ -793,7 +793,7 @@ public function test_skip_to_tag_closer() { $p->next_tag(); $this->assertTrue( $p->skip_to_tag_closer() ); $this->assertTrue( $p->is_tag_closer() ); - $this->assertEquals( 'DIV', $p->get_tag() ); + $this->assertSame( 'DIV', $p->get_tag() ); } /** diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php index 259b8a32b744b..8a59f181a3b99 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php @@ -76,7 +76,7 @@ public function test_process_directives_of_single_interactive_block() { $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-1' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); } /** @@ -97,13 +97,13 @@ public function test_process_directives_of_multiple_interactive_blocks_in_parall $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-1' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'interactive/block-2' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'non-interactive/block-3' ) ); $this->assertNull( $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'interactive/block-4' ) ); - $this->assertEquals( '4', $p->get_attribute( 'value' ) ); + $this->assertSame( '4', $p->get_attribute( 'value' ) ); } /** @@ -122,7 +122,7 @@ public function test_process_directives_of_interactive_block_inside_non_interact $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-2' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); } /** @@ -143,9 +143,9 @@ public function test_process_directives_of_multiple_interactive_blocks_inside_no $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-2' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'interactive/block-3' ) ); - $this->assertEquals( '3', $p->get_attribute( 'value' ) ); + $this->assertSame( '3', $p->get_attribute( 'value' ) ); } /** @@ -168,9 +168,9 @@ public function test_process_directives_of_interactive_block_inside_multiple_non $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-2' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'interactive/block-4' ) ); - $this->assertEquals( '4', $p->get_attribute( 'value' ) ); + $this->assertSame( '4', $p->get_attribute( 'value' ) ); } /** @@ -190,7 +190,7 @@ public function test_process_directives_of_interactive_block_containing_non_inte $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-1' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'non-interactive/block-2' ) ); $this->assertNull( $p->get_attribute( 'value' ) ); } @@ -212,9 +212,9 @@ public function test_process_directives_of_interactive_block_containing_non_inte $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-1' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'non-interactive/block-2' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); } /** @@ -238,13 +238,13 @@ public function test_process_directives_of_interactive_block_containing_nested_i $rendered_blocks = do_blocks( $post_content ); $p = new WP_HTML_Tag_Processor( $rendered_blocks ); $p->next_tag( array( 'class_name' => 'interactive/block-1' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'interactive/block-2' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'non-interactive/block-3' ) ); - $this->assertEquals( '2', $p->get_attribute( 'value' ) ); + $this->assertSame( '2', $p->get_attribute( 'value' ) ); $p->next_tag( array( 'class_name' => 'non-interactive/block-4' ) ); - $this->assertEquals( '1', $p->get_attribute( 'value' ) ); + $this->assertSame( '1', $p->get_attribute( 'value' ) ); } /** @@ -288,7 +288,7 @@ public function test_process_directives_only_process_the_root_interactive_blocks $html = '
    '; $this->data_wp_test_processor_count = 0; wp_interactivity_process_directives( $html ); - $this->assertEquals( 1, $this->data_wp_test_processor_count ); + $this->assertSame( 1, $this->data_wp_test_processor_count ); register_block_type( 'test/custom-directive-block', @@ -309,7 +309,7 @@ public function test_process_directives_only_process_the_root_interactive_blocks $this->data_wp_test_processor_count = 0; do_blocks( $post_content ); unregister_block_type( 'test/custom-directive-block' ); - $this->assertEquals( 2, $this->data_wp_test_processor_count ); + $this->assertSame( 2, $this->data_wp_test_processor_count ); $directive_processors->setValue( null, $old_directive_processors ); } @@ -343,7 +343,7 @@ function test_render_block_data( $parsed_block ) { $processor->next_tag( array( 'data-wp-interactive' => 'nameSpace' ) ); remove_filter( 'render_block_data', 'test_render_block_data' ); unregister_block_type( 'test/custom-directive-block' ); - $this->assertEquals( 'test', $processor->get_attribute( 'value' ) ); + $this->assertSame( 'test', $processor->get_attribute( 'value' ) ); } /** @@ -355,8 +355,8 @@ function test_render_block_data( $parsed_block ) { * @covers wp_interactivity_data_wp_context */ public function test_wp_interactivity_data_wp_context_with_different_arrays() { - $this->assertEquals( 'data-wp-context=\'{}\'', wp_interactivity_data_wp_context( array() ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'{}\'', wp_interactivity_data_wp_context( array() ) ); + $this->assertSame( 'data-wp-context=\'{"a":1,"b":"2","c":true}\'', wp_interactivity_data_wp_context( array( @@ -366,11 +366,11 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays() { ) ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'{"a":[1,2]}\'', wp_interactivity_data_wp_context( array( 'a' => array( 1, 2 ) ) ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'[1,2]\'', wp_interactivity_data_wp_context( array( 1, 2 ) ) ); @@ -385,8 +385,8 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays() { * @covers wp_interactivity_data_wp_context */ public function test_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace() { - $this->assertEquals( 'data-wp-context=\'myPlugin::{}\'', wp_interactivity_data_wp_context( array(), 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'myPlugin::{}\'', wp_interactivity_data_wp_context( array(), 'myPlugin' ) ); + $this->assertSame( 'data-wp-context=\'myPlugin::{"a":1,"b":"2","c":true}\'', wp_interactivity_data_wp_context( array( @@ -397,11 +397,11 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays_and_ 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'myPlugin::{"a":[1,2]}\'', wp_interactivity_data_wp_context( array( 'a' => array( 1, 2 ) ), 'myPlugin' ) ); - $this->assertEquals( + $this->assertSame( 'data-wp-context=\'myPlugin::[1,2]\'', wp_interactivity_data_wp_context( array( 1, 2 ), 'myPlugin' ) ); @@ -418,10 +418,10 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays_and_ * @covers wp_interactivity_data_wp_context */ public function test_wp_interactivity_data_wp_context_with_json_flags() { - $this->assertEquals( 'data-wp-context=\'{"tag":"\u003Cfoo\u003E"}\'', wp_interactivity_data_wp_context( array( 'tag' => '' ) ) ); - $this->assertEquals( 'data-wp-context=\'{"apos":"\u0027bar\u0027"}\'', wp_interactivity_data_wp_context( array( 'apos' => "'bar'" ) ) ); - $this->assertEquals( 'data-wp-context=\'{"quot":"\u0022baz\u0022"}\'', wp_interactivity_data_wp_context( array( 'quot' => '"baz"' ) ) ); - $this->assertEquals( 'data-wp-context=\'{"amp":"T\u0026T"}\'', wp_interactivity_data_wp_context( array( 'amp' => 'T&T' ) ) ); + $this->assertSame( 'data-wp-context=\'{"tag":"\u003Cfoo\u003E"}\'', wp_interactivity_data_wp_context( array( 'tag' => '' ) ) ); + $this->assertSame( 'data-wp-context=\'{"apos":"\u0027bar\u0027"}\'', wp_interactivity_data_wp_context( array( 'apos' => "'bar'" ) ) ); + $this->assertSame( 'data-wp-context=\'{"quot":"\u0022baz\u0022"}\'', wp_interactivity_data_wp_context( array( 'quot' => '"baz"' ) ) ); + $this->assertSame( 'data-wp-context=\'{"amp":"T\u0026T"}\'', wp_interactivity_data_wp_context( array( 'amp' => 'T&T' ) ) ); } /** @@ -448,7 +448,7 @@ public function test_process_directives_in_tags_that_dont_visit_closer_tag() { $processor = new WP_HTML_Tag_Processor( $processed_content ); $processor->next_tag( array( 'class_name' => 'test' ) ); unregister_block_type( 'test/custom-directive-block' ); - $this->assertEquals( '1', $processor->get_attribute( 'src' ) ); + $this->assertSame( '1', $processor->get_attribute( 'src' ) ); } /** @@ -488,8 +488,8 @@ public function test_process_context_directive_in_void_tags() { ); $second_input_value = $processor->get_attribute( 'value' ); unregister_block_type( 'test/custom-directive-block' ); - $this->assertEquals( 'inner', $first_input_value ); - $this->assertEquals( 'outer', $second_input_value ); + $this->assertSame( 'inner', $first_input_value ); + $this->assertSame( 'outer', $second_input_value ); } /** From b9ecee377a35ba042d7b30e9480f66e543f7196a Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Fri, 28 Jun 2024 18:16:56 +0000 Subject: [PATCH 047/422] Build/Test Tools: Introduce two additional reusable PHPUnit workflows. The changes associated with #61213 aim to update all branches potentially receiving security updates to use the same workflow files for easier maintenance as much as possible. However, there are times when the logic found in GitHub Action workflow files changes pretty drastically. For PHPUnit testing, there are 2 instances where this occurred: the 5.2 and 5.9 branches. This changeset introduces 2 new reusable PHPUnit workflow files for use the 4.1-5.1 and 5.2-5.9 branches. Including these workflows in `trunk` makes it more clear which version of the workflow file is used by these old branches, and allows Dependabot to open PRs for updating 3rd-party actions within these workflows. Props jorbin. See #61213. git-svn-id: https://develop.svn.wordpress.org/trunk@58595 602fd350-edb4-49c9-b593-d223f7449a82 --- .../workflows/reusable-phpunit-tests-v1.yml | 184 ++++++++++++++++ .../workflows/reusable-phpunit-tests-v2.yml | 205 ++++++++++++++++++ .github/workflows/reusable-phpunit-tests.yml | 2 + 3 files changed, 391 insertions(+) create mode 100644 .github/workflows/reusable-phpunit-tests-v1.yml create mode 100644 .github/workflows/reusable-phpunit-tests-v2.yml diff --git a/.github/workflows/reusable-phpunit-tests-v1.yml b/.github/workflows/reusable-phpunit-tests-v1.yml new file mode 100644 index 0000000000000..8331d863f8258 --- /dev/null +++ b/.github/workflows/reusable-phpunit-tests-v1.yml @@ -0,0 +1,184 @@ +## +# DEPRECATED +# +# A reusable workflow that runs the PHPUnit test suite with the specified configuration. +# +# This workflow is used by branches 4.1 through 5.1. +## +name: Run PHPUnit tests + +on: + workflow_call: + inputs: + os: + description: 'Operating system to run tests on' + required: false + type: 'string' + default: 'ubuntu-latest' + php: + description: 'The version of PHP to use, in the format of X.Y' + required: true + type: 'string' + phpunit: + description: 'The PHPUnit version to use when running tests. See .env for details about valid values.' + required: false + type: 'string' + default: ${{ inputs.php }}-fpm + multisite: + description: 'Whether to run tests as multisite' + required: false + type: 'boolean' + default: false + split_slow: + description: 'Whether to run slow tests group.' + required: false + type: 'boolean' + default: false + memcached: + description: 'Whether to test with memcached enabled' + required: false + type: 'boolean' + default: false + phpunit-config: + description: 'The PHPUnit configuration file to use' + required: false + type: 'string' + default: 'phpunit.xml.dist' + allow-errors: + description: 'Whether to continue when test errors occur.' + required: false + type: boolean + default: false +env: + LOCAL_PHP: ${{ inputs.php }}-fpm + LOCAL_PHPUNIT: ${{ inputs.phpunit && inputs.phpunit || inputs.php }}-fpm + LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} + PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} + PHPUNIT_SCRIPT: php + PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + SLOW_TESTS: 'external-http,media' + +jobs: + # Runs the PHPUnit tests for WordPress. + # + # Performs the following steps: + # - Sets environment variables. + # - Sets up the environment variables needed for testing with memcached (if desired). + # - Installs NodeJS. + # - Build WordPress + # _ Installs npm dependencies. + # - Configures caching for Composer. + # _ Installs Composer dependencies (if desired). + # - Logs Docker debug information (about the Docker installation within the runner). + # - Starts the WordPress Docker container. + # - Starts the Memcached server after the Docker network has been created (if desired). + # - Logs general debug information about the runner. + # - Logs the running Docker containers. + # - Logs debug information from inside the WordPress Docker container. + # - Logs debug information about what's installed within the WordPress Docker containers. + # - Install WordPress within the Docker container. + # - Run the PHPUnit tests. + test-php: + name: PHP ${{ inputs.php }} / ${{ inputs.multisite && ' Multisite' || 'Single site' }}${{ inputs.split_slow && ' slow tests' || '' }}${{ inputs.memcached && ' with memcached' || '' }} + runs-on: ${{ inputs.os }} + timeout-minutes: 20 + + steps: + - name: Configure environment variables + run: | + echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV + echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + - name: Set up Node.js + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version-file: '.nvmrc' + cache: npm + + - name: Install Dependencies + run: npm ci + + - name: Build WordPress + run: npm run build + + - name: Cache Composer dependencies + if: ${{ env.COMPOSER_INSTALL == true }} + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + env: + cache-name: cache-composer-dependencies + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-php-${{ inputs.php }}-composer-${{ hashFiles('**/composer.lock') }} + + - name: Install Composer dependencies + if: ${{ env.COMPOSER_INSTALL == true }} + run: | + docker compose run --rm php composer --version + docker compose run --rm php composer install + + - name: Docker debug information + run: | + docker -v + docker compose -v + + - name: Start Docker environment + run: | + npm run env:start + + # The memcached server needs to start after the Docker network has been set up with `npm run env:start`. + - name: Start the Memcached server. + if: ${{ inputs.memcached }} + run: | + cp tests/phpunit/includes/object-cache.php build/wp-content/object-cache.php + docker run --name memcached --net $(basename "$PWD")_wpdevnet -d memcached + + - name: General debug information + run: | + npm --version + node --version + curl --version + git --version + svn --version + + - name: Log running Docker containers + run: docker ps -a + + - name: WordPress Docker container debug information + run: | + docker compose run --rm mysql mysql --version + docker compose run --rm php php --version + docker compose run --rm php php -m + docker compose run --rm php php -i + docker compose run --rm php locale -a + + - name: Install WordPress + run: npm run env:install + + - name: Run slow PHPUnit tests + if: ${{ inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }} + + - name: Run PHPUnit tests for single site excluding slow tests + if: ${{ inputs.php < '7.0' && ! inputs.split_slow && ! inputs.multisite }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required + + - name: Run PHPUnit tests for Multisite excluding slow tests + if: ${{ inputs.php < '7.0' && ! inputs.split_slow && inputs.multisite }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers + + - name: Run PHPUnit tests + if: ${{ inputs.php >= '7.0' }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} + + - name: Run AJAX tests + if: ${{ ! inputs.multisite && ! inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax + + - name: Run external HTTP tests + if: ${{ ! inputs.multisite && ! inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http diff --git a/.github/workflows/reusable-phpunit-tests-v2.yml b/.github/workflows/reusable-phpunit-tests-v2.yml new file mode 100644 index 0000000000000..e9539d377ea03 --- /dev/null +++ b/.github/workflows/reusable-phpunit-tests-v2.yml @@ -0,0 +1,205 @@ +## +# DEPRECATED +# +# A reusable workflow that runs the PHPUnit test suite with the specified configuration. +# +# This workflow is used by branches 5.2 through 5.8. +## +name: Run PHPUnit tests + +on: + workflow_call: + inputs: + os: + description: 'Operating system to run tests on' + required: false + type: 'string' + default: 'ubuntu-latest' + php: + description: 'The version of PHP to use, in the format of X.Y' + required: true + type: 'string' + multisite: + description: 'Whether to run tests as multisite' + required: false + type: 'boolean' + default: false + split_slow: + description: 'Whether to run slow tests group.' + required: false + type: 'boolean' + default: false + test_ajax: + description: 'Whether to run AJAX tests.' + required: false + type: 'boolean' + default: true + memcached: + description: 'Whether to test with memcached enabled' + required: false + type: 'boolean' + default: false + phpunit-config: + description: 'The PHPUnit configuration file to use' + required: false + type: 'string' + default: 'phpunit.xml.dist' + report: + description: 'Whether to report results to WordPress.org Hosting Tests' + required: false + type: 'boolean' + default: false + allow-errors: + description: 'Whether to continue when test errors occur.' + required: false + type: boolean + default: false +env: + LOCAL_PHP: ${{ inputs.php }}-fpm + LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} + PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} + PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + # Controls which npm script to use for running PHPUnit tests. Options ar `php` and `php-composer`. + PHPUNIT_SCRIPT: php + SLOW_TESTS: 'external-http,media' + +jobs: + # Runs the PHPUnit tests for WordPress. + # + # Performs the following steps: + # - Sets environment variables. + # - Checks out the repository. + # - Installs Node.js. + # - Installs npm dependencies + # - Configures caching for Composer. + # - Installs Composer dependencies. + # - Logs Docker debug information (about the Docker installation within the runner). + # - Starts the WordPress Docker container. + # - Logs general debug information about the runner. + # - Logs the running Docker containers. + # - Logs debug information from inside the WordPress Docker container. + # - Install WordPress within the Docker container. + # - Run the PHPUnit tests. + # - Ensures version-controlled files are not modified or deleted. + test-php: + name: PHP ${{ inputs.php }} / ${{ inputs.multisite && ' Multisite' || 'Single Site' }}${{ inputs.split_slow && ' slow tests' || '' }}${{ inputs.memcached && ' with memcached' || '' }} + runs-on: ${{ inputs.os }} + timeout-minutes: 20 + + steps: + - name: Configure environment variables + run: | + echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV + echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + - name: Install Node.js + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version-file: '.nvmrc' + cache: npm + + - name: Install npm dependencies + run: npm ci + + - name: Get composer cache directory + id: composer-cache + run: echo "composer_dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: Cache Composer dependencies + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + env: + cache-name: cache-composer-dependencies + with: + path: ${{ steps.composer-cache.outputs.composer_dir }} + key: ${{ runner.os }}-php-${{ inputs.php }}-composer-${{ hashFiles('**/composer.lock') }} + + - name: Install Composer dependencies + run: | + docker compose run --rm php composer --version + + # The PHPUnit 7.x phar is not compatible with PHP 8 and won't be updated, + # as PHPUnit 7 is no longer supported. The Composer-installed PHPUnit should be + # used for PHP 8 testing instead. + if [ ${{ env.LOCAL_PHP }} == '8.0-fpm' ]; then + docker compose run --rm php composer install --ignore-platform-reqs + echo "PHPUNIT_SCRIPT=php-composer" >> $GITHUB_ENV + elif [ ${{ env.LOCAL_PHP }} == '7.1-fpm' ]; then + docker compose run --rm php composer update + git checkout -- composer.lock + elif [[ ${{ env.LOCAL_PHP }} == '5.6-fpm' || ${{ env.LOCAL_PHP }} == '7.0-fpm' ]]; then + docker compose run --rm php composer require --dev phpunit/phpunit:"^5.7" --update-with-dependencies + git checkout -- composer.lock composer.json + else + docker compose run --rm php composer install + fi + + - name: Docker debug information + run: | + docker -v + docker compose -v + + - name: Start Docker environment + run: | + npm run env:start + + - name: General debug information + run: | + npm --version + node --version + curl --version + git --version + + - name: Log running Docker containers + run: docker ps -a + + - name: WordPress Docker container debug information + run: | + docker compose run --rm mysql mysql --version + docker compose run --rm php php --version + docker compose run --rm php php -m + docker compose run --rm php php -i + docker compose run --rm php locale -a + + - name: Install WordPress + run: npm run env:install + + - name: Run slow PHPUnit tests + if: ${{ inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }} + + - name: Run PHPUnit tests for single site excluding slow tests + if: ${{ inputs.php < '7.0' && ! inputs.split_slow && ! inputs.multisite }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required + + - name: Run PHPUnit tests for Multisite excluding slow tests + if: ${{ inputs.php < '7.0' && ! inputs.split_slow && inputs.multisite }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers + + - name: Run PHPUnit tests + if: ${{ inputs.php >= '7.0' }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} + + - name: Run AJAX tests + if: ${{ ! inputs.split_slow&& inputs.test_ajax }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax + + - name: Run ms-files tests as a multisite install + if: ${{ inputs.multisite && ! inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ms-files + + - name: Run external HTTP tests + if: ${{ ! inputs.multisite && ! inputs.split_slow }} + run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http + + # __fakegroup__ is excluded to force PHPUnit to ignore the settings in phpunit.xml.dist. + - name: Run (xDebug) tests + if: ${{ ! inputs.split_slow }} + run: LOCAL_PHP_XDEBUG=true npm run test:${{ env.PHPUNIT_SCRIPT }} -- -v --group xdebug --exclude-group __fakegroup__ + + - name: Ensure version-controlled files are not modified or deleted + run: git diff --exit-code diff --git a/.github/workflows/reusable-phpunit-tests.yml b/.github/workflows/reusable-phpunit-tests.yml index d5302b83b2a07..ed0e8f7b13cba 100644 --- a/.github/workflows/reusable-phpunit-tests.yml +++ b/.github/workflows/reusable-phpunit-tests.yml @@ -1,5 +1,7 @@ ## # A reusable workflow that runs the PHPUnit test suite with the specified configuration. +# +# This workflow is used by `trunk` and branches >= 5.9. ## name: Run PHPUnit tests From d3ac93a93839fbe5e441309607786bacdad755cd Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Fri, 28 Jun 2024 18:19:51 +0000 Subject: [PATCH 048/422] Build/Test Tools: Allow older branches to use Coding Standards workflow. This updates the reusable coding standards GitHub Actions workflow to support the old way of running PHPCS commands when the `old-branches` input flag is set to `true`. This allows the 5.1-5.4 branches to use the same workflow as all other 5.5+ branches. See #61213. git-svn-id: https://develop.svn.wordpress.org/trunk@58596 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/reusable-coding-standards-php.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/reusable-coding-standards-php.yml b/.github/workflows/reusable-coding-standards-php.yml index 3f8520c2f74d7..296b61bcbd499 100644 --- a/.github/workflows/reusable-coding-standards-php.yml +++ b/.github/workflows/reusable-coding-standards-php.yml @@ -11,6 +11,11 @@ on: required: false type: 'string' default: 'latest' + old-branch: + description: 'Whether this is an old branch that runs phpcbf instead of phpcs' + required: false + type: 'boolean' + default: false jobs: # Runs the PHP coding standards checks. @@ -74,6 +79,7 @@ jobs: - name: Run PHPCS on all Core files id: phpcs-core + if: ${{ ! inputs.old-branch }} run: phpcs -n --report-full --cache=./.cache/phpcs-src.json --report-checkstyle=./.cache/phpcs-report.xml - name: Show PHPCS results in PR @@ -82,11 +88,16 @@ jobs: - name: Check test suite files for warnings id: phpcs-tests + if: ${{ ! inputs.old-branch }} run: phpcs tests --report-full --cache=./.cache/phpcs-tests.json --report-checkstyle=./.cache/phpcs-tests-report.xml - name: Show test suite scan results in PR if: ${{ always() && steps.phpcs-tests.outcome == 'failure' }} run: cs2pr ./.cache/phpcs-tests-report.xml + - name: Run PHPCBF on all Core files (old branches) + if: ${{ inputs.old-branch }} + run: phpcbf + - name: Ensure version-controlled files are not modified during the tests run: git diff --exit-code From 57910f67dd4ba8b1db1a5699be916ce0c805a69b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 29 Jun 2024 09:29:08 +0000 Subject: [PATCH 049/422] Date/Time: Replace abbreviations for minutes in `human_time_diff()`. This ensures that relative times are formatted the same way in both JS and PHP. Follow-up to [1976], [2124], [4658], [41018], [56496]. Props wildworks. Fixes #61535. git-svn-id: https://develop.svn.wordpress.org/trunk@58600 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/formatting.php | 4 ++-- tests/phpunit/tests/formatting/humanTimeDiff.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index 85ca2452123d4..8e2aa3cfa9ad0 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -3856,7 +3856,7 @@ function sanitize_email( $email ) { * Determines the difference between two timestamps. * * The difference is returned in a human-readable format such as "1 hour", - * "5 mins", "2 days". + * "5 minutes", "2 days". * * @since 1.5.0 * @since 5.3.0 Added support for showing a difference in seconds. @@ -3885,7 +3885,7 @@ function human_time_diff( $from, $to = 0 ) { $mins = 1; } /* translators: Time difference between two dates, in minutes (min=minute). %s: Number of minutes. */ - $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins ); + $since = sprintf( _n( '%s minutes', '%s minutes', $mins ), $mins ); } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) { $hours = round( $diff / HOUR_IN_SECONDS ); if ( $hours <= 1 ) { diff --git a/tests/phpunit/tests/formatting/humanTimeDiff.php b/tests/phpunit/tests/formatting/humanTimeDiff.php index 0a2bffb367b5a..fcf4ff43d46c9 100644 --- a/tests/phpunit/tests/formatting/humanTimeDiff.php +++ b/tests/phpunit/tests/formatting/humanTimeDiff.php @@ -27,7 +27,7 @@ public function data_human_time_diff() { 'Test a difference of 37 seconds.', ), array( - '5 mins', + '5 minutes', new DateTime( '2016-01-01 12:05:00' ), 'Test a difference of 5 minutes.', ), From 6645c75e54c377d5adccc8e065562514f89a5427 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 30 Jun 2024 14:56:23 +0000 Subject: [PATCH 050/422] Date/Time: Correct singular form for minutes in `human_time_diff()`. Follow-up to [58600]. Props wildworks. See #61535. git-svn-id: https://develop.svn.wordpress.org/trunk@58601 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/formatting.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index 8e2aa3cfa9ad0..cd1ee2689489e 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -3884,8 +3884,8 @@ function human_time_diff( $from, $to = 0 ) { if ( $mins <= 1 ) { $mins = 1; } - /* translators: Time difference between two dates, in minutes (min=minute). %s: Number of minutes. */ - $since = sprintf( _n( '%s minutes', '%s minutes', $mins ), $mins ); + /* translators: Time difference between two dates, in minutes. %s: Number of minutes. */ + $since = sprintf( _n( '%s minute', '%s minutes', $mins ), $mins ); } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) { $hours = round( $diff / HOUR_IN_SECONDS ); if ( $hours <= 1 ) { From 80409a2420c3766e54ef120cf9043e041c3372dd Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 1 Jul 2024 20:43:55 +0000 Subject: [PATCH 051/422] REST API: Correct image cropping tools in the block editor. As of [58457], the width and height cropping values are cast to an integer before the comparison to see if the target width and height differ from the original width and height. Since they are now integers, it exposes a bug where the `&&` of the `if` conditional meant that if you were only cropping in one dimension, the check wouldn't pass, and cropping would not occur. In the block editor, the cropping tools are aspect ratio based, so one of the dimensions will always match that of the source image. Therefore, now that the values are cast as integers, the condition that allows a cropping to occur needs to be updated. If either width or height is different from the source image, then a crop should be allowed. Follow-up to [50124], [58457]. Props andrewserong, jrf, kevin940726. Fixes #61514. See #59782. git-svn-id: https://develop.svn.wordpress.org/trunk@58612 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-attachments-controller.php | 2 +- .../rest-api/rest-attachments-controller.php | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index 370025d927d2f..cbc62b49ea17b 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -626,7 +626,7 @@ public function edit_media_item( $request ) { $width = (int) round( ( $size['width'] * $args['width'] ) / 100.0 ); $height = (int) round( ( $size['height'] * $args['height'] ) / 100.0 ); - if ( $size['width'] !== $width && $size['height'] !== $height ) { + if ( $size['width'] !== $width || $size['height'] !== $height ) { $result = $image_editor->crop( $crop_x, $crop_y, $width, $height ); if ( is_wp_error( $result ) ) { diff --git a/tests/phpunit/tests/rest-api/rest-attachments-controller.php b/tests/phpunit/tests/rest-api/rest-attachments-controller.php index 074c710c740f5..737c32b8e1ab1 100644 --- a/tests/phpunit/tests/rest-api/rest-attachments-controller.php +++ b/tests/phpunit/tests/rest-api/rest-attachments-controller.php @@ -2381,6 +2381,43 @@ public function test_edit_image_crop() { ); } + /** + * @ticket 61514 + * @requires function imagejpeg + */ + public function test_edit_image_crop_one_axis() { + wp_set_current_user( self::$superadmin_id ); + $attachment = self::factory()->attachment->create_upload_object( self::$test_file ); + + $this->setup_mock_editor(); + WP_Image_Editor_Mock::$size_return = array( + 'width' => 640, + 'height' => 480, + ); + + WP_Image_Editor_Mock::$edit_return['crop'] = new WP_Error(); + + $request = new WP_REST_Request( 'POST', "/wp/v2/media/{$attachment}/edit" ); + $request->set_body_params( + array( + 'x' => 50, + 'y' => 0, + 'width' => 10, + 'height' => 100, + 'src' => wp_get_attachment_image_url( $attachment, 'full' ), + + ) + ); + $response = rest_do_request( $request ); + $this->assertErrorResponse( 'rest_image_crop_failed', $response, 500 ); + + $this->assertCount( 1, WP_Image_Editor_Mock::$spy['crop'] ); + $this->assertSame( + array( 320, 0, 64, 480 ), + WP_Image_Editor_Mock::$spy['crop'][0] + ); + } + /** * @ticket 44405 * @requires function imagejpeg From cf064ef249931cfce2af007ec3a95b22b088c191 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 1 Jul 2024 23:34:19 +0000 Subject: [PATCH 052/422] HTML API: Optimize low-level parsing details in Tag Processor. Introduces a number of micro-level optimizations in the Tag Processor to improve token-scanning performance. Should contain no functional changes. Based on benchmarking against a list of the 100 most-visited websites, these changes result in an average improvement in performance of the Tag Processor for scanning tags from between 3.5% and 7.5%. Developed in https://github.com/WordPress/wordpress-develop/pull/6890 Discussed in https://core.trac.wordpress.org/ticket/61545 Follow-up to [55203]. See #61545. git-svn-id: https://develop.svn.wordpress.org/trunk@58613 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-decoder.php | 26 ++-- .../html-api/class-wp-html-tag-processor.php | 118 ++++++------------ 2 files changed, 52 insertions(+), 92 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-decoder.php b/src/wp-includes/html-api/class-wp-html-decoder.php index 78976002b4a93..42c6424423711 100644 --- a/src/wp-includes/html-api/class-wp-html-decoder.php +++ b/src/wp-includes/html-api/class-wp-html-decoder.php @@ -141,7 +141,7 @@ public static function decode( $context, $text ) { while ( $at < $end ) { $next_character_reference_at = strpos( $text, '&', $at ); - if ( false === $next_character_reference_at || $next_character_reference_at >= $end ) { + if ( false === $next_character_reference_at ) { break; } @@ -436,26 +436,26 @@ public static function code_point_to_utf8_bytes( $code_point ) { } if ( $code_point <= 0x7FF ) { - $byte1 = ( $code_point >> 6 ) | 0xC0; - $byte2 = $code_point & 0x3F | 0x80; + $byte1 = chr( ( $code_point >> 6 ) | 0xC0 ); + $byte2 = chr( $code_point & 0x3F | 0x80 ); - return pack( 'CC', $byte1, $byte2 ); + return "{$byte1}{$byte2}"; } if ( $code_point <= 0xFFFF ) { - $byte1 = ( $code_point >> 12 ) | 0xE0; - $byte2 = ( $code_point >> 6 ) & 0x3F | 0x80; - $byte3 = $code_point & 0x3F | 0x80; + $byte1 = chr( ( $code_point >> 12 ) | 0xE0 ); + $byte2 = chr( ( $code_point >> 6 ) & 0x3F | 0x80 ); + $byte3 = chr( $code_point & 0x3F | 0x80 ); - return pack( 'CCC', $byte1, $byte2, $byte3 ); + return "{$byte1}{$byte2}{$byte3}"; } // Any values above U+10FFFF are eliminated above in the pre-check. - $byte1 = ( $code_point >> 18 ) | 0xF0; - $byte2 = ( $code_point >> 12 ) & 0x3F | 0x80; - $byte3 = ( $code_point >> 6 ) & 0x3F | 0x80; - $byte4 = $code_point & 0x3F | 0x80; + $byte1 = chr( ( $code_point >> 18 ) | 0xF0 ); + $byte2 = chr( ( $code_point >> 12 ) & 0x3F | 0x80 ); + $byte3 = chr( ( $code_point >> 6 ) & 0x3F | 0x80 ); + $byte4 = chr( $code_point & 0x3F | 0x80 ); - return pack( 'CCCC', $byte1, $byte2, $byte3, $byte4 ); + return "{$byte1}{$byte2}{$byte3}{$byte4}"; } } diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 8fc75938c9384..a388af1ef79c3 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -1524,21 +1524,10 @@ private function parse_next_tag() { $was_at = $this->bytes_already_parsed; $at = $was_at; - while ( false !== $at && $at < $doc_length ) { + while ( $at < $doc_length ) { $at = strpos( $html, '<', $at ); - - /* - * This does not imply an incomplete parse; it indicates that there - * can be nothing left in the document other than a #text node. - */ if ( false === $at ) { - $this->parser_state = self::STATE_TEXT_NODE; - $this->token_starts_at = $was_at; - $this->token_length = strlen( $html ) - $was_at; - $this->text_starts_at = $was_at; - $this->text_length = $this->token_length; - $this->bytes_already_parsed = strlen( $html ); - return true; + break; } if ( $at > $was_at ) { @@ -1554,19 +1543,9 @@ private function parse_next_tag() { * * @see https://html.spec.whatwg.org/#tag-open-state */ - if ( strlen( $html ) > $at + 1 ) { - $next_character = $html[ $at + 1 ]; - $at_another_node = ( - '!' === $next_character || - '/' === $next_character || - '?' === $next_character || - ( 'A' <= $next_character && $next_character <= 'Z' ) || - ( 'a' <= $next_character && $next_character <= 'z' ) - ); - if ( ! $at_another_node ) { - ++$at; - continue; - } + if ( 1 !== strspn( $html, '!/?abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ', $at + 1, 1 ) ) { + ++$at; + continue; } $this->parser_state = self::STATE_TEXT_NODE; @@ -1630,11 +1609,7 @@ private function parse_next_tag() { * `' ) + strlen( '-->' ); + $end = strrpos( $serialized_block, '', $template_part->content ); + } + + /* + * @ticket 60506 + * @ticket 60854 + */ + public function test_should_injected_hooked_block_into_template_part_first_child() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/template-part' => 'first_child', + ), + ) + ); + + $template_part = _build_block_template_result_from_file( + array( + 'slug' => 'header', + 'postTypes' => array( 'post' ), + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template_part' + ); + $this->assertStringStartsWith( '', $template_part->content ); + } + + /* + * @ticket 60506 + * @ticket 60854 + */ + public function test_should_injected_hooked_block_into_template_part_last_child() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/template-part' => 'last_child', + ), + ) + ); + + $template_part = _build_block_template_result_from_file( + array( + 'slug' => 'header', + 'postTypes' => array( 'post' ), + 'path' => DIR_TESTDATA . '/templates/template.html', + ), + 'wp_template_part' + ); + $this->assertStringEndsWith( '', $template_part->content ); + } } diff --git a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php index 586e9beded17b..839e5788bc6c3 100644 --- a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php +++ b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php @@ -111,6 +111,50 @@ public function test_should_inject_hooked_block_into_template_part() { $this->assertStringEndsWith( '', $template_part->content ); } + /* + * @ticket 59646 + * @ticket 60506 + * @ticket 60854 + */ + public function test_should_injected_hooked_block_into_template_part_first_child() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/template-part' => 'first_child', + ), + ) + ); + + $template_part = _build_block_template_result_from_post( + self::$template_part_post, + 'wp_template_part' + ); + $this->assertStringStartsWith( '', $template_part->content ); + } + + /* + * @ticket 59646 + * @ticket 60506 + * @ticket 60854 + */ + public function test_should_injected_hooked_block_into_template_part_last_child() { + register_block_type( + 'tests/my-block', + array( + 'block_hooks' => array( + 'core/template-part' => 'last_child', + ), + ) + ); + + $template_part = _build_block_template_result_from_post( + self::$template_part_post, + 'wp_template_part' + ); + $this->assertStringEndsWith( '', $template_part->content ); + } + /** * @ticket 59646 * @ticket 60506 diff --git a/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php b/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php index bc753504bbce0..1f8a66ee8546f 100644 --- a/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php +++ b/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php @@ -17,6 +17,7 @@ public function tear_down() { if ( WP_Block_Type_Registry::get_instance()->is_registered( 'tests/hooked-block' ) ) { unregister_block_type( 'tests/hooked-block' ); } + delete_post_meta( self::$template_part_post->ID, '_wp_ignored_hooked_blocks' ); parent::tear_down(); } @@ -38,14 +39,35 @@ public function test_hooked_block_types_filter_with_newly_created_template() { inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'tests/anchor-block', + 'tests/anchor-block', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); $this->assertSame( $changes->post_type, $context->type, @@ -69,6 +91,7 @@ public function test_hooked_block_types_filter_with_newly_created_template() { /** * @ticket 60754 + * @ticket 60854 */ public function test_hooked_block_types_filter_with_newly_created_template_part() { $action = new MockAction(); @@ -85,14 +108,48 @@ public function test_hooked_block_types_filter_with_newly_created_template_part( inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + 'first_child', + 'before', + 'after', + 'last_child', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'core/template-part', + 'core/template-part', + 'core/template-part', + 'tests/anchor-block', + 'tests/anchor-block', + 'core/template-part', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); + $this->assertInstanceOf( + 'WP_Block_Template', + $context, + 'The context passed to the hooked_block_types filter is not an instance of WP_Block_Template.' + ); $this->assertSame( $changes->post_type, $context->type, @@ -140,14 +197,35 @@ public function test_hooked_block_types_filter_with_existing_template_file() { inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'tests/anchor-block', + 'tests/anchor-block', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); $this->assertSame( $changes->post_name, $context->slug, @@ -181,6 +259,7 @@ public function test_hooked_block_types_filter_with_existing_template_file() { /** * @ticket 60754 + * @ticket 60854 */ public function test_hooked_block_types_filter_with_existing_template_part_file() { $action = new MockAction(); @@ -201,14 +280,48 @@ public function test_hooked_block_types_filter_with_existing_template_part_file( inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + 'first_child', + 'before', + 'after', + 'last_child', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'core/template-part', + 'core/template-part', + 'core/template-part', + 'tests/anchor-block', + 'tests/anchor-block', + 'core/template-part', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); + $this->assertInstanceOf( + 'WP_Block_Template', + $context, + 'The context passed to the hooked_block_types filter is not an instance of WP_Block_Template.' + ); $this->assertSame( $changes->post_name, $context->slug, @@ -259,14 +372,35 @@ public function test_hooked_block_types_filter_with_existing_template_post() { inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'tests/anchor-block', + 'tests/anchor-block', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); $this->assertSame( $changes->post_name, $context->slug, @@ -302,6 +436,7 @@ public function test_hooked_block_types_filter_with_existing_template_post() { /** * @ticket 60754 + * @ticket 60854 */ public function test_hooked_block_types_filter_with_existing_template_part_post() { $action = new MockAction(); @@ -318,14 +453,48 @@ public function test_hooked_block_types_filter_with_existing_template_part_post( inject_ignored_hooked_blocks_metadata_attributes( $changes ); - $args = $action->get_args(); - $anchor_block_type = end( $args )[2]; - $context = end( $args )[3]; + $args = $action->get_args(); + $relative_positions = array_column( $args, 1 ); + $anchor_block_types = array_column( $args, 2 ); + $contexts = array_column( $args, 3 ); - $this->assertSame( 'tests/anchor-block', $anchor_block_type ); + $this->assertSame( + array( + 'before', + 'after', + 'first_child', + 'before', + 'after', + 'last_child', + ), + $relative_positions, + 'The relative positions passed to the hooked_block_types filter are incorrect.' + ); - $this->assertInstanceOf( 'WP_Block_Template', $context ); + $this->assertSame( + array( + 'core/template-part', + 'core/template-part', + 'core/template-part', + 'tests/anchor-block', + 'tests/anchor-block', + 'core/template-part', + ), + $anchor_block_types, + 'The anchor block types passed to the hooked_block_types filter are incorrect.' + ); + $context = $contexts[0]; + $this->assertSame( + array_fill( 0, count( $contexts ), $context ), + $contexts, + 'The context passed to the hooked_block_types filter should be the same for all calls.' + ); + $this->assertInstanceOf( + 'WP_Block_Template', + $context, + 'The context passed to the hooked_block_types filter is not an instance of WP_Block_Template.' + ); $this->assertSame( $changes->post_name, $context->slug, @@ -419,4 +588,37 @@ public function test_inject_ignored_hooked_blocks_metadata_attributes_into_templ 'The hooked block was not injected into the anchor block\'s ignoredHookedBlocks metadata.' ); } + + /** + * @ticket 60854 + */ + public function test_inject_ignored_hooked_blocks_metadata_attributes_into_template_part_postmeta() { + register_block_type( + 'tests/hooked-block', + array( + 'block_hooks' => array( + 'core/template-part' => 'last_child', + ), + ) + ); + + $id = self::TEST_THEME . '//' . 'my_template_part'; + $template = get_block_template( $id, 'wp_template_part' ); + + $changes = new stdClass(); + $changes->ID = $template->wp_id; + $changes->post_content = 'Hello'; + + $post = inject_ignored_hooked_blocks_metadata_attributes( $changes ); + $this->assertSame( + array( 'tests/hooked-block' ), + json_decode( $post->meta_input['_wp_ignored_hooked_blocks'], true ), + 'The hooked block was not injected into the wp_template_part\'s _wp_ignored_hooked_blocks postmeta.' + ); + $this->assertSame( + $changes->post_content, + $post->post_content, + 'The template part\'s post content was modified.' + ); + } } From a2bb45dfad75fe48943632d57788a97333a4ebd9 Mon Sep 17 00:00:00 2001 From: bernhard-reiter Date: Tue, 2 Jul 2024 10:41:33 +0000 Subject: [PATCH 054/422] Block Hooks: Fix a number of multi-line comment openers. Add the missing second asterisk to a number of multi-line comment openers, and remove a superfluous second asterisk from two others. Follow-up to [58614]. Props mukesh27. See #60854. git-svn-id: https://develop.svn.wordpress.org/trunk@58615 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-template-utils.php | 4 ++-- .../block-templates/buildBlockTemplateResultFromFile.php | 4 ++-- .../block-templates/buildBlockTemplateResultFromPost.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/block-template-utils.php b/src/wp-includes/block-template-utils.php index 6a4df84a11f7c..f7a10ab672904 100644 --- a/src/wp-includes/block-template-utils.php +++ b/src/wp-includes/block-template-utils.php @@ -617,7 +617,7 @@ function _build_block_template_result_from_file( $template_file, $template_type } if ( 'wp_template_part' === $template->type && $has_hooked_blocks ) { - /** + /* * In order for hooked blocks to be inserted at positions first_child and last_child in a template part, * we need to wrap its content a mock template part block and traverse it. */ @@ -1022,7 +1022,7 @@ function _build_block_template_result_from_post( $post ) { $existing_ignored_hooked_blocks = get_post_meta( $post->ID, '_wp_ignored_hooked_blocks', true ); $attributes = ! empty( $existing_ignored_hooked_blocks ) ? array( 'metadata' => array( 'ignoredHookedBlocks' => json_decode( $existing_ignored_hooked_blocks, true ) ) ) : array(); - /** + /* * In order for hooked blocks to be inserted at positions first_child and last_child in a template part, * we need to wrap its content a mock template part block and traverse it. */ diff --git a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php index b2c2f0af75be7..673e35af5b097 100644 --- a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php +++ b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromFile.php @@ -217,7 +217,7 @@ public function test_should_inject_hooked_block_into_template_part() { $this->assertStringEndsWith( '', $template_part->content ); } - /* + /** * @ticket 60506 * @ticket 60854 */ @@ -242,7 +242,7 @@ public function test_should_injected_hooked_block_into_template_part_first_child $this->assertStringStartsWith( '', $template_part->content ); } - /* + /** * @ticket 60506 * @ticket 60854 */ diff --git a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php index 839e5788bc6c3..5dbf91d911f07 100644 --- a/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php +++ b/tests/phpunit/tests/block-templates/buildBlockTemplateResultFromPost.php @@ -111,7 +111,7 @@ public function test_should_inject_hooked_block_into_template_part() { $this->assertStringEndsWith( '', $template_part->content ); } - /* + /** * @ticket 59646 * @ticket 60506 * @ticket 60854 @@ -133,7 +133,7 @@ public function test_should_injected_hooked_block_into_template_part_first_child $this->assertStringStartsWith( '', $template_part->content ); } - /* + /** * @ticket 59646 * @ticket 60506 * @ticket 60854 From d77bb088452293775e2f16225141ceff9994b171 Mon Sep 17 00:00:00 2001 From: Colin Stewart Date: Tue, 2 Jul 2024 11:50:53 +0000 Subject: [PATCH 055/422] Plugins: Remove extra paragraph from plugin row dependency notice. In `WP_Plugins_List_Table::add_dependencies_to_dependent_plugin_row()`, a `sprintf()` call previously wrapped the `%2$s` placeholder in paragraph tags. [57769] changed the placeholder's value to use `wp_get_admin_notice()`, which returns a paragraph-wrapped notice by default. As a result, the previous paragraph tags produced an extra, empty paragraph. This removes the paragraph tags around the `%2$s` placeholder. Follow-up to [57545], [57714], [57769]. Props mukesh27. Fixes #61546. git-svn-id: https://develop.svn.wordpress.org/trunk@58616 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-plugins-list-table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/includes/class-wp-plugins-list-table.php b/src/wp-admin/includes/class-wp-plugins-list-table.php index 379cf56be9a70..b9cc969f1c599 100644 --- a/src/wp-admin/includes/class-wp-plugins-list-table.php +++ b/src/wp-admin/includes/class-wp-plugins-list-table.php @@ -1594,7 +1594,7 @@ protected function add_dependencies_to_dependent_plugin_row( $dependent ) { } printf( - '

    %1$s

    %2$s

    ', + '

    %1$s

    %2$s
    ', $requires, $notice ); From 486c9a2d80405d165ae8dbce963d03301bf6ecf3 Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 2 Jul 2024 14:51:16 +0000 Subject: [PATCH 056/422] Editor: Update packages for 6.6 RC 2. Fixes #61548. Fixes https://github.com/WordPress/wordpress-develop/pull/6953. See https://make.wordpress.org/core/handbook/about/release-cycle/block-editor-release-process-for-major-releases/#package-updates-and-core-patches. Props ellatrix, youknowriad. git-svn-id: https://develop.svn.wordpress.org/trunk@58617 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 398 +++++++++--------- package.json | 30 +- .../assets/script-loader-packages.min.php | 2 +- src/wp-includes/blocks/block/block.json | 6 +- src/wp-includes/blocks/blocks-json.php | 8 +- 5 files changed, 227 insertions(+), 217 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8023b662055f9..498313d908822 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,31 +14,31 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.4", - "@wordpress/block-editor": "13.0.3", - "@wordpress/block-library": "9.0.4", + "@wordpress/block-directory": "5.0.5", + "@wordpress/block-editor": "13.0.4", + "@wordpress/block-library": "9.0.5", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.3", - "@wordpress/core-data": "7.0.3", - "@wordpress/customize-widgets": "5.0.4", + "@wordpress/core-commands": "1.0.4", + "@wordpress/core-data": "7.0.4", + "@wordpress/customize-widgets": "5.0.5", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.3", + "@wordpress/dataviews": "2.0.4", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.4", - "@wordpress/edit-site": "6.0.4", - "@wordpress/edit-widgets": "6.0.4", - "@wordpress/editor": "14.0.3", + "@wordpress/edit-post": "8.0.5", + "@wordpress/edit-site": "6.0.5", + "@wordpress/edit-widgets": "6.0.5", + "@wordpress/editor": "14.0.4", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.3", + "@wordpress/format-library": "5.0.4", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -53,7 +53,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.3", + "@wordpress/patterns": "2.0.4", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -61,7 +61,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.3", + "@wordpress/reusable-blocks": "5.0.4", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -73,7 +73,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.3", + "@wordpress/widgets": "4.0.4", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", @@ -6160,21 +6160,21 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.4.tgz", - "integrity": "sha512-jatDnMr3tDNAG/TyCaw5EmOAuZkyByNBRLVp1V+0vm7h6KRmsmfKKd2x6Plk9suwqzpmXgz0o2MXCvLjt+FE/A==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.5.tgz", + "integrity": "sha512-5JAfWA13wiLud+V2yS8uR4syInmqo9fcad391oetCfYxrYf5S3pH4WEdHamkNJsQ2a7pxkz7vaJsGa5VmkJYKA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.4", - "@wordpress/editor": "^14.0.3", + "@wordpress/edit-post": "^8.0.5", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6196,9 +6196,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.3.tgz", - "integrity": "sha512-vV4utZkfoTfw5BKatIuax91fs/NF5TRZBp2ayZp39kWwTR8P3sKoR+Ter8aEwGx58lqO+E7mAQzWI9L5K7PelQ==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.4.tgz", + "integrity": "sha512-Vtimmmc7JHHNgNBoCr6Ud7/vGPHyfQDck/g9+sTkedCXbqL/dapA9PZsT1UvHNF6xEvEWOrd+kRxOKbn0PcpSg==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6257,20 +6257,20 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.4.tgz", - "integrity": "sha512-bqrSIAXcGPxVlNKvrewnlgWeJg+VnPEFPHSqYCIkt0kGfkOtWm6COupq4sHjQ6ou5ElEW/3P6KSYamB5h2wTEQ==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.5.tgz", + "integrity": "sha512-0A1ZKV/6xtzQtjlvdCxoBqNb0gyr/8UeLsf1NtAi4gBT8GWBsXYKBfFSJ9Q1K9ATYszN6e1XiZqtyCBBiUDjFA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6286,10 +6286,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -6491,15 +6491,15 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.3.tgz", - "integrity": "sha512-MxbCbJLjW4ysE44VDv3bD0eykxiZnoCM6NLTaywcv27VNALhqqJxxyglgjdwbIV5d6lC0dQPSAOLgenkzKPOoQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.4.tgz", + "integrity": "sha512-VModTm9itHB/p1yEgs8JtJ3iiRcLIh0a5prR21Mhhp2eWPk1Ydzbg5eTlOMVM/F/zaSFcNA4yLnQ0SiUc4p3Ow==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -6518,13 +6518,13 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.3.tgz", - "integrity": "sha512-2c8xloBhPC5QXzmz17gu3sMgBHjeaJ6CRR/pxt9Z4yzD6KA0xBJUmodnywvZmGHrIJMc21FPjSKSS8KD7xotzg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.4.tgz", + "integrity": "sha512-qLGb31e9kS5tGGwvwGIr+MkfmmyzKktx7i53jk/w/zY559FvLOniQEJFEOyjC57WhT2alNvZtS5K+RGKD0tVlg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -6554,17 +6554,17 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.4.tgz", - "integrity": "sha512-Jrle8vrpyDoFbAQYYokJdMnYMzRRTW10ZC/GZlyAeUuezMqIC+oODBI2XS6vv4+uStw8G+3oeT+9Q0XVuO75uw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.5.tgz", + "integrity": "sha512-hE4e4MPWRYkxSxuYlzBLnmZWG5XpVE1TTy/7xJzpkFKfSaIY7ysiBTtSe3tYkL2ZwCAyA60IqbGqgAQUe2336w==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -6578,7 +6578,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6639,9 +6639,9 @@ } }, "node_modules/@wordpress/dataviews": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.3.tgz", - "integrity": "sha512-+TDQsssoBBUMtb8y/wR9ZQvCOt7CENVxltTU0aI4bjBapjOtnpGIzr+ZoIbgC9q/WndepuxKNrUGiYpZplOefA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.4.tgz", + "integrity": "sha512-4FpLyvmiO0su4Fx3cLctqTIE+Bp1HCC1fHRFZw5JJgvkNXuAKHJRdpFCo1O11ZMH3ibxpWVshXZcfu7Z7HBWlw==", "dependencies": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -6820,25 +6820,25 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.4.tgz", - "integrity": "sha512-gI3fauE2UjuNjon3eu+yHcVZ3DdtBVzy0a1x5OVexCs4kNqvXWVeeeqzjqG88g4UAgysNlF2HRECKMi+feTVxg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.5.tgz", + "integrity": "sha512-NxEtAP7Ccz84COnuQKZji1UFi/CSeCD/8tr4yjvet4/4vvdlmTAR0GSIAeDl93ZmpNGCHF+d7mug2wDf9uLFtg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-commands": "^1.0.4", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.3", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6853,7 +6853,7 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -6867,29 +6867,29 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.4.tgz", - "integrity": "sha512-Qcfj/VzAG/ZQf1+v4gEXn/7pA1TgG+f4dsuL0v6/Q/Au/alyT2OI7NgGOXC6faVAtp9WCmPf3YcDgk5ej5bm1Q==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.5.tgz", + "integrity": "sha512-MGTs34PLC/NWGb07zQl/CFSPZXLE9IAsbY6IJy6mMUWB7BxNXdsVwm5OK91zubZV+54vzL5eo5YTGCgVd+8zFA==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-commands": "^1.0.4", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.3", + "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.3", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -6899,18 +6899,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -6929,18 +6929,18 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.4.tgz", - "integrity": "sha512-rMSmq5UZwljOv7i/2EdJhTWV9JCm8oTpwPvr/tAJgQ3OUiuNFpy0gA+SM8F7DtylUtl+9xV4F5GmhWNIGx4scg==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.5.tgz", + "integrity": "sha512-+kAQyGDHN0raEbZ5piaACO2AZ62JAWoG5zDG8VN63vp9UiFvOodNwrljJ0afLcLIz6Kcb3BN8cjs65LBsjVvKQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -6953,13 +6953,13 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1" }, "engines": { @@ -6972,20 +6972,20 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.3.tgz", - "integrity": "sha512-Rwv2xSTN+pqUVTMItpbMaulkIBGw1Linl5ODUx4mHeZBTYrjQD4qP4JH1nBYSHdmHr3HZAp+vgihHTHTgXkGCA==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.4.tgz", + "integrity": "sha512-Sy9dNAHJMFcHJzXlk8Y136+Ol0RmJ15CjhfnKZx4dxavRHrix5c+69MeQKavkmffrEN2XW9662C9cDlXAoczKg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -7000,11 +7000,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -7120,13 +7120,13 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.3.tgz", - "integrity": "sha512-mD3738vO6pxKOiEBp4kaUrq03hsaVg8nBtFpBxWYozM1/CkSm9aKm3u73pixX4EdCL9VXo546WYNm4wCBeDiMg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.4.tgz", + "integrity": "sha512-rdyibYZ2FnozrPRY7U1/8YRjoHHqjDDxmywLPtSqvJ95QhhBGMzCp+DJCWEpi/FANj8j4n5FLVala0W8xdStZA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -7431,17 +7431,17 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.3.tgz", - "integrity": "sha512-bAiaMAw/wGjYcrsBEEI4ZJv+y334VaTYYzw2JrGpAOpzNbw0UQmdNBz+aws8hRshnj0EZEyY3CY8k9sy47AR9g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.4.tgz", + "integrity": "sha512-A5o490U8rAvZ9nJNz+ZWkP300hshfON0HE/FLmkxvwNCRxbnWAmdq1F5PQqmPthDC7NygFz90ZeEXg+iDJU49Q==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -7610,15 +7610,15 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.3.tgz", - "integrity": "sha512-nqr+/VDO42hB4d9fz07Eoen+SWi/H/9eeda76AdpgDzJq4oLmxxLgo/ze4lbnrYgdeeB3vSsKkJPi5ENPc9+jQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.4.tgz", + "integrity": "sha512-ie0ewJW/xIkvq8uupP20d7FDll58uuiqky+BV9f+GByWHbR8z01PQcErrlR4eId/epR5Cay+rHHLLwc0EV8A/A==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -8919,17 +8919,17 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.3.tgz", - "integrity": "sha512-/yY7ZWq80phLgrlL6kd4EJcrrG5nhWM7vGrHK8Hg0RBJ0zcQXMcfHG3a12Fxw5mbiKDLB3hKpNUJYxk+GpHcuQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.4.tgz", + "integrity": "sha512-n9VyatU28mFTQzn/O4NNPK9JQ0KeVYu4VhmVo4sxUeOxRJbdqGVW1L6MotnFn0uL/fbZOD5E07aiU22EJwJmlw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -38789,21 +38789,21 @@ } }, "@wordpress/block-directory": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.4.tgz", - "integrity": "sha512-jatDnMr3tDNAG/TyCaw5EmOAuZkyByNBRLVp1V+0vm7h6KRmsmfKKd2x6Plk9suwqzpmXgz0o2MXCvLjt+FE/A==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.5.tgz", + "integrity": "sha512-5JAfWA13wiLud+V2yS8uR4syInmqo9fcad391oetCfYxrYf5S3pH4WEdHamkNJsQ2a7pxkz7vaJsGa5VmkJYKA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.4", - "@wordpress/editor": "^14.0.3", + "@wordpress/edit-post": "^8.0.5", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -38817,9 +38817,9 @@ } }, "@wordpress/block-editor": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.3.tgz", - "integrity": "sha512-vV4utZkfoTfw5BKatIuax91fs/NF5TRZBp2ayZp39kWwTR8P3sKoR+Ter8aEwGx58lqO+E7mAQzWI9L5K7PelQ==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.4.tgz", + "integrity": "sha512-Vtimmmc7JHHNgNBoCr6Ud7/vGPHyfQDck/g9+sTkedCXbqL/dapA9PZsT1UvHNF6xEvEWOrd+kRxOKbn0PcpSg==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -38870,20 +38870,20 @@ } }, "@wordpress/block-library": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.4.tgz", - "integrity": "sha512-bqrSIAXcGPxVlNKvrewnlgWeJg+VnPEFPHSqYCIkt0kGfkOtWm6COupq4sHjQ6ou5ElEW/3P6KSYamB5h2wTEQ==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.5.tgz", + "integrity": "sha512-0A1ZKV/6xtzQtjlvdCxoBqNb0gyr/8UeLsf1NtAi4gBT8GWBsXYKBfFSJ9Q1K9ATYszN6e1XiZqtyCBBiUDjFA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -38899,10 +38899,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39058,15 +39058,15 @@ } }, "@wordpress/core-commands": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.3.tgz", - "integrity": "sha512-MxbCbJLjW4ysE44VDv3bD0eykxiZnoCM6NLTaywcv27VNALhqqJxxyglgjdwbIV5d6lC0dQPSAOLgenkzKPOoQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.4.tgz", + "integrity": "sha512-VModTm9itHB/p1yEgs8JtJ3iiRcLIh0a5prR21Mhhp2eWPk1Ydzbg5eTlOMVM/F/zaSFcNA4yLnQ0SiUc4p3Ow==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39077,13 +39077,13 @@ } }, "@wordpress/core-data": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.3.tgz", - "integrity": "sha512-2c8xloBhPC5QXzmz17gu3sMgBHjeaJ6CRR/pxt9Z4yzD6KA0xBJUmodnywvZmGHrIJMc21FPjSKSS8KD7xotzg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.4.tgz", + "integrity": "sha512-qLGb31e9kS5tGGwvwGIr+MkfmmyzKktx7i53jk/w/zY559FvLOniQEJFEOyjC57WhT2alNvZtS5K+RGKD0tVlg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39105,17 +39105,17 @@ } }, "@wordpress/customize-widgets": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.4.tgz", - "integrity": "sha512-Jrle8vrpyDoFbAQYYokJdMnYMzRRTW10ZC/GZlyAeUuezMqIC+oODBI2XS6vv4+uStw8G+3oeT+9Q0XVuO75uw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.5.tgz", + "integrity": "sha512-hE4e4MPWRYkxSxuYlzBLnmZWG5XpVE1TTy/7xJzpkFKfSaIY7ysiBTtSe3tYkL2ZwCAyA60IqbGqgAQUe2336w==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -39129,7 +39129,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" } @@ -39168,9 +39168,9 @@ } }, "@wordpress/dataviews": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.3.tgz", - "integrity": "sha512-+TDQsssoBBUMtb8y/wR9ZQvCOt7CENVxltTU0aI4bjBapjOtnpGIzr+ZoIbgC9q/WndepuxKNrUGiYpZplOefA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.4.tgz", + "integrity": "sha512-4FpLyvmiO0su4Fx3cLctqTIE+Bp1HCC1fHRFZw5JJgvkNXuAKHJRdpFCo1O11ZMH3ibxpWVshXZcfu7Z7HBWlw==", "requires": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -39296,25 +39296,25 @@ } }, "@wordpress/edit-post": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.4.tgz", - "integrity": "sha512-gI3fauE2UjuNjon3eu+yHcVZ3DdtBVzy0a1x5OVexCs4kNqvXWVeeeqzjqG88g4UAgysNlF2HRECKMi+feTVxg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.5.tgz", + "integrity": "sha512-NxEtAP7Ccz84COnuQKZji1UFi/CSeCD/8tr4yjvet4/4vvdlmTAR0GSIAeDl93ZmpNGCHF+d7mug2wDf9uLFtg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-commands": "^1.0.4", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.3", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39329,35 +39329,35 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1", "memize": "^2.1.0" } }, "@wordpress/edit-site": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.4.tgz", - "integrity": "sha512-Qcfj/VzAG/ZQf1+v4gEXn/7pA1TgG+f4dsuL0v6/Q/Au/alyT2OI7NgGOXC6faVAtp9WCmPf3YcDgk5ej5bm1Q==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.5.tgz", + "integrity": "sha512-MGTs34PLC/NWGb07zQl/CFSPZXLE9IAsbY6IJy6mMUWB7BxNXdsVwm5OK91zubZV+54vzL5eo5YTGCgVd+8zFA==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-commands": "^1.0.4", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.3", + "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.3", + "@wordpress/editor": "^14.0.4", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -39367,18 +39367,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -39389,18 +39389,18 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.4.tgz", - "integrity": "sha512-rMSmq5UZwljOv7i/2EdJhTWV9JCm8oTpwPvr/tAJgQ3OUiuNFpy0gA+SM8F7DtylUtl+9xV4F5GmhWNIGx4scg==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.5.tgz", + "integrity": "sha512-+kAQyGDHN0raEbZ5piaACO2AZ62JAWoG5zDG8VN63vp9UiFvOodNwrljJ0afLcLIz6Kcb3BN8cjs65LBsjVvKQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", - "@wordpress/block-library": "^9.0.4", + "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-library": "^9.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -39413,31 +39413,31 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.3", + "@wordpress/widgets": "^4.0.4", "clsx": "^2.1.1" } }, "@wordpress/editor": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.3.tgz", - "integrity": "sha512-Rwv2xSTN+pqUVTMItpbMaulkIBGw1Linl5ODUx4mHeZBTYrjQD4qP4JH1nBYSHdmHr3HZAp+vgihHTHTgXkGCA==", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.4.tgz", + "integrity": "sha512-Sy9dNAHJMFcHJzXlk8Y136+Ol0RmJ15CjhfnKZx4dxavRHrix5c+69MeQKavkmffrEN2XW9662C9cDlXAoczKg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -39452,11 +39452,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.3", + "@wordpress/patterns": "^2.0.4", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.3", + "@wordpress/reusable-blocks": "^5.0.4", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39534,13 +39534,13 @@ } }, "@wordpress/format-library": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.3.tgz", - "integrity": "sha512-mD3738vO6pxKOiEBp4kaUrq03hsaVg8nBtFpBxWYozM1/CkSm9aKm3u73pixX4EdCL9VXo546WYNm4wCBeDiMg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.4.tgz", + "integrity": "sha512-rdyibYZ2FnozrPRY7U1/8YRjoHHqjDDxmywLPtSqvJ95QhhBGMzCp+DJCWEpi/FANj8j4n5FLVala0W8xdStZA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39738,17 +39738,17 @@ } }, "@wordpress/patterns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.3.tgz", - "integrity": "sha512-bAiaMAw/wGjYcrsBEEI4ZJv+y334VaTYYzw2JrGpAOpzNbw0UQmdNBz+aws8hRshnj0EZEyY3CY8k9sy47AR9g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.4.tgz", + "integrity": "sha512-A5o490U8rAvZ9nJNz+ZWkP300hshfON0HE/FLmkxvwNCRxbnWAmdq1F5PQqmPthDC7NygFz90ZeEXg+iDJU49Q==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39856,15 +39856,15 @@ } }, "@wordpress/reusable-blocks": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.3.tgz", - "integrity": "sha512-nqr+/VDO42hB4d9fz07Eoen+SWi/H/9eeda76AdpgDzJq4oLmxxLgo/ze4lbnrYgdeeB3vSsKkJPi5ENPc9+jQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.4.tgz", + "integrity": "sha512-ie0ewJW/xIkvq8uupP20d7FDll58uuiqky+BV9f+GByWHbR8z01PQcErrlR4eId/epR5Cay+rHHLLwc0EV8A/A==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -40728,17 +40728,17 @@ "integrity": "sha512-xSVH/zMAg4ABeNOWo6mlkF+TDBDQNaWVdMNzi+yvGoSDImhaM6Bqrhr1e/65AS29iajnqQt6dlu7E56o5FZlcg==" }, "@wordpress/widgets": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.3.tgz", - "integrity": "sha512-/yY7ZWq80phLgrlL6kd4EJcrrG5nhWM7vGrHK8Hg0RBJ0zcQXMcfHG3a12Fxw5mbiKDLB3hKpNUJYxk+GpHcuQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.4.tgz", + "integrity": "sha512-n9VyatU28mFTQzn/O4NNPK9JQ0KeVYu4VhmVo4sxUeOxRJbdqGVW1L6MotnFn0uL/fbZOD5E07aiU22EJwJmlw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.3", + "@wordpress/block-editor": "^13.0.4", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.3", + "@wordpress/core-data": "^7.0.4", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", diff --git a/package.json b/package.json index 4041a61d25006..62cb44d6cc97e 100644 --- a/package.json +++ b/package.json @@ -83,31 +83,31 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.4", - "@wordpress/block-editor": "13.0.3", - "@wordpress/block-library": "9.0.4", + "@wordpress/block-directory": "5.0.5", + "@wordpress/block-editor": "13.0.4", + "@wordpress/block-library": "9.0.5", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.3", - "@wordpress/core-data": "7.0.3", - "@wordpress/customize-widgets": "5.0.4", + "@wordpress/core-commands": "1.0.4", + "@wordpress/core-data": "7.0.4", + "@wordpress/customize-widgets": "5.0.5", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.3", + "@wordpress/dataviews": "2.0.4", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.4", - "@wordpress/edit-site": "6.0.4", - "@wordpress/edit-widgets": "6.0.4", - "@wordpress/editor": "14.0.3", + "@wordpress/edit-post": "8.0.5", + "@wordpress/edit-site": "6.0.5", + "@wordpress/edit-widgets": "6.0.5", + "@wordpress/editor": "14.0.4", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.3", + "@wordpress/format-library": "5.0.4", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -122,7 +122,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.3", + "@wordpress/patterns": "2.0.4", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -130,7 +130,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.3", + "@wordpress/reusable-blocks": "5.0.4", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -142,7 +142,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.3", + "@wordpress/widgets": "4.0.4", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index 2be33f4016df3..a1997701d6a7c 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '923f5626c77e376cefe7'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '789183efb6ee10a7eda3'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'f55d87aa6a5f158f1aec'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'ac2999b763a1862f7a8b'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => 'e6cb9c8ac7fcce3b5e32'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '52e6ada8ff0a9f3a138e'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'eaed80842415cb2c8140'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'f55d87aa6a5f158f1aec'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '34dd596ec3cbcaf84177'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '29c0c50a059d2f0d31de'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '2bb44334a17254b90b83'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); diff --git a/src/wp-includes/blocks/block/block.json b/src/wp-includes/blocks/block/block.json index 34dcb9a396ac6..fdce3bcc02e07 100644 --- a/src/wp-includes/blocks/block/block.json +++ b/src/wp-includes/blocks/block/block.json @@ -12,9 +12,13 @@ "type": "number" }, "content": { - "type": "object" + "type": "object", + "default": {} } }, + "providesContext": { + "pattern/overrides": "content" + }, "supports": { "customClassName": false, "html": false, diff --git a/src/wp-includes/blocks/blocks-json.php b/src/wp-includes/blocks/blocks-json.php index bbab74be034c9..46e84707f5822 100644 --- a/src/wp-includes/blocks/blocks-json.php +++ b/src/wp-includes/blocks/blocks-json.php @@ -207,9 +207,15 @@ 'type' => 'number' ), 'content' => array( - 'type' => 'object' + 'type' => 'object', + 'default' => array( + + ) ) ), + 'providesContext' => array( + 'pattern/overrides' => 'content' + ), 'supports' => array( 'customClassName' => false, 'html' => false, From 6af639581727ae631d2d7e9c99106f93f11f00fa Mon Sep 17 00:00:00 2001 From: Kelly Choyce-Dwan Date: Tue, 2 Jul 2024 15:13:13 +0000 Subject: [PATCH 057/422] Help/About: Add images to the About page. The images have been uploaded to the w.org CDN and added into the About page. Additionally, the link to the release page has been fixed, and an extra translator note about the escaped percent sign has been added. Follow-up to [58568]. Props ryelle, joen. See #61320. git-svn-id: https://develop.svn.wordpress.org/trunk@58618 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index c64df64f7cc5b..a794ab9ec6668 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -65,7 +65,7 @@
    - +
    @@ -73,7 +73,7 @@
    - +
    @@ -89,7 +89,7 @@
    - +
    @@ -97,7 +97,7 @@
    From 67aa1d99bdf5ef136b360131a9ada662290d49e1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 2 Jul 2024 17:44:50 +0000 Subject: [PATCH 058/422] Login and Registration: Remove redundant escaping in `wp-login.php`. * `$user_login` in the `login` action is already escaped on output. * `$user_login` and `$user_email` in the `register` action are already unslashed a few lines above. Follow-up to [3120], [4339], [8454], [11104], [23416], [23554], [23594], [46640]. Props johnjamesjacoby, rajinsharwar, narenin. Fixes #55335. git-svn-id: https://develop.svn.wordpress.org/trunk@58623 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-login.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-login.php b/src/wp-login.php index 16faccb703687..45d7794c84ed7 100644 --- a/src/wp-login.php +++ b/src/wp-login.php @@ -1160,11 +1160,11 @@ function wp_login_viewport_meta() {

    - +

    - +

    get_error_code() || 'empty_password' === $errors->get_error_code() ) ? esc_attr( wp_unslash( $_POST['log'] ) ) : ''; + $user_login = ( 'incorrect_password' === $errors->get_error_code() || 'empty_password' === $errors->get_error_code() ) ? wp_unslash( $_POST['log'] ) : ''; } $rememberme = ! empty( $_POST['rememberme'] ); From 24646a4313e563eb62511cf1e477a06e07779660 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Tue, 2 Jul 2024 19:59:17 +0000 Subject: [PATCH 059/422] Twenty Nineteen: Adds center alignment to Archives and Categories List blocks. When selecting center alignment for Archives or Categories List blocks the alignment was not matching. It is worth noting this fixes for these blocks but another ticket could be made to fix for titles. Props pranitdugad, sabernhardt. Fixes #47044. git-svn-id: https://develop.svn.wordpress.org/trunk@58627 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/style-editor.css | 5 +++++ src/wp-content/themes/twentynineteen/style-editor.scss | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/wp-content/themes/twentynineteen/style-editor.css b/src/wp-content/themes/twentynineteen/style-editor.css index 4619b0177f14e..c736c6d4a376c 100644 --- a/src/wp-content/themes/twentynineteen/style-editor.css +++ b/src/wp-content/themes/twentynineteen/style-editor.css @@ -1366,6 +1366,11 @@ ul.wp-block-archives li ul, margin-bottom: -0.75rem; } +.wp-block[data-align="center"] > .wp-block-archives, +.wp-block[data-align="center"] > .wp-block-categories { + text-align: center; +} + /** === Latest Posts === */ .wp-block-latest-posts .wp-block-latest-posts__post-date { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; diff --git a/src/wp-content/themes/twentynineteen/style-editor.scss b/src/wp-content/themes/twentynineteen/style-editor.scss index de3c8a7c9352c..3695af6a368c1 100644 --- a/src/wp-content/themes/twentynineteen/style-editor.scss +++ b/src/wp-content/themes/twentynineteen/style-editor.scss @@ -756,6 +756,11 @@ ul.wp-block-archives, } +.wp-block[data-align="center"] > .wp-block-archives, +.wp-block[data-align="center"] > .wp-block-categories { + text-align: center; +} + /** === Latest Posts === */ .wp-block-latest-posts { From f1a3d209ba391140bf0cf2720a9faa1824ba213d Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Tue, 2 Jul 2024 20:34:04 +0000 Subject: [PATCH 060/422] Twenty Twenty-One: Resolves bug on primary navigation. The primary navigation was stuck in a vertical list when resize. This resolves that with positioning. Props nek285, mukesh27. Fixes #52663. git-svn-id: https://develop.svn.wordpress.org/trunk@58629 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwentyone/assets/css/ie.css | 2 +- .../twentytwentyone/assets/sass/06-components/navigation.scss | 2 +- src/wp-content/themes/twentytwentyone/style-rtl.css | 2 +- src/wp-content/themes/twentytwentyone/style.css | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wp-content/themes/twentytwentyone/assets/css/ie.css b/src/wp-content/themes/twentytwentyone/assets/css/ie.css index 87d14784e5264..e1f4b9d09a372 100644 --- a/src/wp-content/themes/twentytwentyone/assets/css/ie.css +++ b/src/wp-content/themes/twentytwentyone/assets/css/ie.css @@ -5167,7 +5167,7 @@ h1.page-title { } .primary-navigation-open .primary-navigation > .primary-menu-container { - position: absolute; + position: relative; visibility: visible; opacity: 1; transform: translateY(0); diff --git a/src/wp-content/themes/twentytwentyone/assets/sass/06-components/navigation.scss b/src/wp-content/themes/twentytwentyone/assets/sass/06-components/navigation.scss index d716ba3fb9882..58f2d054c4bdb 100644 --- a/src/wp-content/themes/twentytwentyone/assets/sass/06-components/navigation.scss +++ b/src/wp-content/themes/twentytwentyone/assets/sass/06-components/navigation.scss @@ -143,7 +143,7 @@ } > .primary-menu-container { - position: absolute; + position: relative; visibility: visible; opacity: 1; transform: translateY(0); diff --git a/src/wp-content/themes/twentytwentyone/style-rtl.css b/src/wp-content/themes/twentytwentyone/style-rtl.css index 32d227633b05d..1e4ab84aa7da1 100644 --- a/src/wp-content/themes/twentytwentyone/style-rtl.css +++ b/src/wp-content/themes/twentytwentyone/style-rtl.css @@ -4661,7 +4661,7 @@ h1.page-title { } .primary-navigation-open .primary-navigation > .primary-menu-container { - position: absolute; + position: relative; visibility: visible; opacity: 1; transform: translateY(0); diff --git a/src/wp-content/themes/twentytwentyone/style.css b/src/wp-content/themes/twentytwentyone/style.css index 8500e2d240d95..83cbdf3db0891 100644 --- a/src/wp-content/themes/twentytwentyone/style.css +++ b/src/wp-content/themes/twentytwentyone/style.css @@ -4681,7 +4681,7 @@ h1.page-title { } .primary-navigation-open .primary-navigation > .primary-menu-container { - position: absolute; + position: relative; visibility: visible; opacity: 1; transform: translateY(0); From d510058b793eb2deedb41ce1a6ec631ccdd6d5d5 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Tue, 2 Jul 2024 20:46:46 +0000 Subject: [PATCH 061/422] Twenty Nineteen: Fixes font size and citation display for Pullquote block. The pullquote block text decoration was not the same front and within the editor. This resolves that and resets. Props pitamdey, viralsampat, sabernhardt. Fixes #61507. git-svn-id: https://develop.svn.wordpress.org/trunk@58630 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss | 3 ++- src/wp-content/themes/twentynineteen/style-rtl.css | 3 ++- src/wp-content/themes/twentynineteen/style.css | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss b/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss index 65acd0f19ca1b..33788b7bf470d 100644 --- a/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss +++ b/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss @@ -370,6 +370,7 @@ border-color: transparent; border-width: 2px; padding: $size__spacing-unit; + font-size: 1em; blockquote { border: none; @@ -396,7 +397,7 @@ } cite { - display: inline-block; + display: block; @include font-family( $font__heading ); line-height: 1.6; text-transform: none; diff --git a/src/wp-content/themes/twentynineteen/style-rtl.css b/src/wp-content/themes/twentynineteen/style-rtl.css index 6f298863cc2aa..154fa40d289f6 100644 --- a/src/wp-content/themes/twentynineteen/style-rtl.css +++ b/src/wp-content/themes/twentynineteen/style-rtl.css @@ -5681,6 +5681,7 @@ body.page .main-navigation { border-color: transparent; border-width: 2px; padding: 1rem; + font-size: 1em; } .entry .entry-content .wp-block-pullquote blockquote { @@ -5710,7 +5711,7 @@ body.page .main-navigation { } .entry .entry-content .wp-block-pullquote cite { - display: inline-block; + display: block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; line-height: 1.6; text-transform: none; diff --git a/src/wp-content/themes/twentynineteen/style.css b/src/wp-content/themes/twentynineteen/style.css index d388a2254aa73..83e66158d0bce 100644 --- a/src/wp-content/themes/twentynineteen/style.css +++ b/src/wp-content/themes/twentynineteen/style.css @@ -5693,6 +5693,7 @@ body.page .main-navigation { border-color: transparent; border-width: 2px; padding: 1rem; + font-size: 1em; } .entry .entry-content .wp-block-pullquote blockquote { @@ -5722,7 +5723,7 @@ body.page .main-navigation { } .entry .entry-content .wp-block-pullquote cite { - display: inline-block; + display: block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; line-height: 1.6; text-transform: none; From ea3327ab6ee2cecc5ac1a006cf06927856383ab9 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 2 Jul 2024 21:45:18 +0000 Subject: [PATCH 062/422] HTML API: Add missing insertion mode constants. As the HTML Processor starts to support other insertion modes outside of "IN BODY" it needs to be aware of those other modes. This patch introduces the missing insertion modes in preparation for adding that support. Extracted as necessary prep work to the following more complete change: https://github.com/WordPress/wordpress-develop/pull/6020 Props jonsurrell. See #61549. git-svn-id: https://develop.svn.wordpress.org/trunk@58631 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-html-processor-state.php | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index 9cf10c344107a..659a019f7e0da 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -59,6 +59,162 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_IN_BODY = 'insertion-mode-in-body'; + /** + * In select insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inselect + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_SELECT = 'insertion-mode-in-select'; + + /** + * In select in table insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inselectintable + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_SELECT_IN_TABLE = 'insertion-mode-in-select-in-table'; + + /** + * In table insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-intable + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_TABLE = 'insertion-mode-in-table'; + + /** + * In caption insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-incaption + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_CAPTION = 'insertion-mode-in-caption'; + + /** + * In table body insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-intablebody + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_TABLE_BODY = 'insertion-mode-in-table-body'; + + /** + * In row insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inrow + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_ROW = 'insertion-mode-in-row'; + + /** + * In cell insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-incell + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_CELL = 'insertion-mode-in-cell'; + + /** + * In column group insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-incolumngroup + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_COLUMN_GROUP = 'insertion-mode-in-column-group'; + + /** + * In frameset insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inframeset + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_FRAMESET = 'insertion-mode-in-frameset'; + + /** + * In head insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inhead + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_HEAD = 'insertion-mode-in-head'; + + /** + * Before head insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-beforehead + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_BEFORE_HEAD = 'insertion-mode-before-head'; + + /** + * After head insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-afterhead + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_AFTER_HEAD = 'insertion-mode-after-head'; + + /** + * In template insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-intemplate + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_TEMPLATE = 'insertion-mode-in-template'; + /** * Tracks open elements while scanning HTML. * From 2930212ff6bf6619d026f525ceab2719c5229597 Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Tue, 2 Jul 2024 23:23:23 +0000 Subject: [PATCH 063/422] Themes: add "description" key to i18n schema Add "description" key to the theme.json i18n schema. Follows r56041. Fixes #61543. Props ramonopoly, oandregal. git-svn-id: https://develop.svn.wordpress.org/trunk@58632 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/theme-i18n.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/wp-includes/theme-i18n.json b/src/wp-includes/theme-i18n.json index 7ce52317ed65d..1781b9356f4bf 100644 --- a/src/wp-includes/theme-i18n.json +++ b/src/wp-includes/theme-i18n.json @@ -1,5 +1,6 @@ { "title": "Style variation name", + "description": "Style variation description", "settings": { "typography": { "fontSizes": [ From de74333c46f6f6f166d6ac90fc0a8267199060e3 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 3 Jul 2024 10:27:33 +0000 Subject: [PATCH 064/422] Twenty Ten: Fixes table and calendar block font size issues. The table and calendar block font sizes were not the same on front and in editor. This resolves in using relative line-height. Props iamfarhan09, bijit027, sabernhardt. Fixes #58362. git-svn-id: https://develop.svn.wordpress.org/trunk@58633 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyten/blocks.css | 8 ++++++++ src/wp-content/themes/twentyten/editor-blocks.css | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/wp-content/themes/twentyten/blocks.css b/src/wp-content/themes/twentyten/blocks.css index fb53e7be63ec8..0bceba13bf871 100644 --- a/src/wp-content/themes/twentyten/blocks.css +++ b/src/wp-content/themes/twentyten/blocks.css @@ -156,6 +156,14 @@ p.has-drop-cap:not(:focus)::first-letter { background: #f2f7fc; } +#content .wp-block-table[style*="font-size"] *, +#content .wp-block-table[class*="-font-size"] *, +#content .wp-block-calendar[style*="font-size"] *, +#content .wp-block-calendar[class*="-font-size"] * { + font-size: inherit; + line-height: 1.5; +} + /*-------------------------------------------------------------- 4.0 Blocks - Layout Elements --------------------------------------------------------------*/ diff --git a/src/wp-content/themes/twentyten/editor-blocks.css b/src/wp-content/themes/twentyten/editor-blocks.css index 86b2f5f8756a1..bdf98220f8b22 100644 --- a/src/wp-content/themes/twentyten/editor-blocks.css +++ b/src/wp-content/themes/twentyten/editor-blocks.css @@ -294,6 +294,14 @@ p.has-drop-cap:not(:focus)::first-letter { padding-top: 0; } +.wp-block-table[style*="font-size"] *, +.wp-block-table[class*="-font-size"] *, +.wp-block-calendar[style*="font-size"] *, +.wp-block-calendar[class*="-font-size"] * { + font-size: inherit; + line-height: 1.5; +} + /*-------------------------------------------------------------- 5.0 Blocks - Widgets --------------------------------------------------------------*/ From a28522877e030c0cea267875843ec7ed29e7d41b Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 3 Jul 2024 10:45:35 +0000 Subject: [PATCH 065/422] Twenty Seventeen and Twenty Ten: Fixes gallery captions being at the bottom of images. The margin specified in this theme caused issues when the gallery was placed in another block. This fix covers both themes as the selector is used within both. Props pevogam, sabernhardt. Fixes #58362. git-svn-id: https://develop.svn.wordpress.org/trunk@58634 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyeleven/blocks.css | 8 ++++---- .../themes/twentyseventeen/assets/css/blocks.css | 4 ++-- src/wp-content/themes/twentyten/blocks.css | 2 +- src/wp-content/themes/twentyten/editor-blocks.css | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/wp-content/themes/twentyeleven/blocks.css b/src/wp-content/themes/twentyeleven/blocks.css index a4da8c83ee440..65f176c1bd259 100644 --- a/src/wp-content/themes/twentyeleven/blocks.css +++ b/src/wp-content/themes/twentyeleven/blocks.css @@ -30,7 +30,7 @@ figure[class^="wp-block-"] { font-size: 12px; } -[class^="wp-block-"]:not(.wp-block-gallery) figcaption { +[class^="wp-block-"]:not(.wp-block-gallery) > figcaption { color: #666; margin-bottom: 1.625em; max-width: 96%; @@ -40,7 +40,7 @@ figure[class^="wp-block-"] { text-align: left; } -[class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { +[class^="wp-block-"]:not(.wp-block-gallery) > figcaption:before { color: #666; content: '\2014'; font-size: 14px; @@ -52,13 +52,13 @@ figure[class^="wp-block-"] { top: 0; } -.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { +.rtl [class^="wp-block-"]:not(.wp-block-gallery) > figcaption { padding-left: 0; padding-right: 40px; text-align: right; } -.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { +.rtl [class^="wp-block-"]:not(.wp-block-gallery) > figcaption:before { left: 0; margin-left: 5px; margin-right: 0; diff --git a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css index b3b077f587641..65efb8378a16c 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css @@ -20,13 +20,13 @@ Description: Used to style blocks. /* Captions */ -[class^="wp-block-"]:not(.wp-block-gallery) figcaption { +[class^="wp-block-"]:not(.wp-block-gallery) > figcaption { font-style: italic; margin-bottom: 1.5em; text-align: left; } -.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { +.rtl [class^="wp-block-"]:not(.wp-block-gallery) > figcaption { text-align: right; } diff --git a/src/wp-content/themes/twentyten/blocks.css b/src/wp-content/themes/twentyten/blocks.css index 0bceba13bf871..b439e24eaf374 100644 --- a/src/wp-content/themes/twentyten/blocks.css +++ b/src/wp-content/themes/twentyten/blocks.css @@ -20,7 +20,7 @@ Description: Used to style blocks. /* Captions */ -[class^="wp-block-"]:not(.wp-block-gallery) figcaption { +[class^="wp-block-"]:not(.wp-block-gallery) > figcaption { color: #777; font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; } diff --git a/src/wp-content/themes/twentyten/editor-blocks.css b/src/wp-content/themes/twentyten/editor-blocks.css index bdf98220f8b22..d315ee240e264 100644 --- a/src/wp-content/themes/twentyten/editor-blocks.css +++ b/src/wp-content/themes/twentyten/editor-blocks.css @@ -149,7 +149,7 @@ Description: Used to style blocks in the editor. /* Caption styles */ -[class^="wp-block-"] figcaption { +[class^="wp-block-"]:not(.wp-block-gallery) > figcaption { color: #777; font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; } From 6d40ef3adf053ba0d8d81e13163686d037e2588f Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Wed, 3 Jul 2024 11:02:50 +0000 Subject: [PATCH 066/422] Twenty Sixteen: Fixes editor styles for table and calendar blocks and captions. The table and calendar block font sizes were not as expected on front end within editor. This includes changes for header cells (th), removes redundant font size rules, corrects font-weight and updates figcaption selector along with editing text alignment and adding RTL font selection. Props nidhidhandhukiya, sabernhardt, sheulyshila, iamfarhan09, bijit027, jannathsyeda, pooja1210, shailu25, hmbashar. Fixes #58355. git-svn-id: https://develop.svn.wordpress.org/trunk@58635 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentysixteen/css/editor-blocks.css | 12 +++++------ .../themes/twentysixteen/css/editor-style.css | 20 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/wp-content/themes/twentysixteen/css/editor-blocks.css b/src/wp-content/themes/twentysixteen/css/editor-blocks.css index 6fd2ddb01e530..6d2a23662d623 100644 --- a/src/wp-content/themes/twentysixteen/css/editor-blocks.css +++ b/src/wp-content/themes/twentysixteen/css/editor-blocks.css @@ -27,6 +27,10 @@ Description: Used to style blocks in the editor. line-height: 1.75; } +.rtl .editor-styles-wrapper { + font-family: Arial, Tahoma, sans-serif; +} + .edit-post-visual-editor .editor-block-list__block { color: #1a1a1a; } @@ -262,16 +266,12 @@ Description: Used to style blocks in the editor. /* Captions */ -[class^="wp-block-"] figcaption { +figure[class*="wp-block-"] > figcaption { color: #686868; font-style: italic; line-height: 1.6153846154; padding-top: 0.5384615385em; - text-align: left; -} - -.rtl [class^="wp-block-"] figcaption { - text-align: right; + text-align: start; } /*-------------------------------------------------------------- diff --git a/src/wp-content/themes/twentysixteen/css/editor-style.css b/src/wp-content/themes/twentysixteen/css/editor-style.css index ef1682efee4bc..6f7d7e92e3302 100644 --- a/src/wp-content/themes/twentysixteen/css/editor-style.css +++ b/src/wp-content/themes/twentysixteen/css/editor-style.css @@ -313,19 +313,22 @@ table th, .mce-item-table th, table caption { border-width: 0 1px 1px 0; - font-size: 16px; font-weight: 700; padding: 7px; - text-align: left; + text-align: start; vertical-align: baseline; } +table caption { + font-weight: normal; +} + table td, .mce-item-table td { border-width: 0 1px 1px 0; - font-size: 16px; padding: 7px; vertical-align: baseline; + text-align: start; } img { @@ -502,6 +505,11 @@ fieldset { * 8.0 - RTL */ +body.rtl, +[dir="rtl"] body { + font-family: Arial, Tahoma, sans-serif; +} + .rtl blockquote { border: 0 solid #1a1a1a; border-right-width: 4px; @@ -533,9 +541,3 @@ fieldset { margin-right: 24px; margin-left: auto; } - -.rtl table th, -.rtl .mce-item-table th, -.rtl table caption { - text-align: right; -} From 4454f4aa2c6dd18b0a68a01c766b56b4a4d63d01 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Wed, 3 Jul 2024 15:51:48 +0000 Subject: [PATCH 067/422] Build/Test Tools: Rename current reusable PHPUnit workflow. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a ` -v3` suffix to the current reusable PHPUnit workflow name. This avoids having to update older branches in the future when the workflow’s logic drastically changes and a `v4` is needed. See #61213. git-svn-id: https://develop.svn.wordpress.org/trunk@58645 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/phpunit-tests.yml | 4 ++-- ...usable-phpunit-tests.yml => reusable-phpunit-tests-v3.yml} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{reusable-phpunit-tests.yml => reusable-phpunit-tests-v3.yml} (100%) diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index b40237f82802d..663b93bba48a9 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -36,7 +36,7 @@ jobs: # test-with-mysql: name: PHP ${{ matrix.php }} - uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests.yml@trunk + uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests-v3.yml@trunk permissions: contents: read secrets: inherit @@ -108,7 +108,7 @@ jobs: # test-with-mariadb: name: PHP ${{ matrix.php }} - uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests.yml@trunk + uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests-v3.yml@trunk permissions: contents: read secrets: inherit diff --git a/.github/workflows/reusable-phpunit-tests.yml b/.github/workflows/reusable-phpunit-tests-v3.yml similarity index 100% rename from .github/workflows/reusable-phpunit-tests.yml rename to .github/workflows/reusable-phpunit-tests-v3.yml From 5466b9c82674c30c885076fce8b99b4bfece8ab0 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 3 Jul 2024 16:08:55 +0000 Subject: [PATCH 068/422] Users: Pass the previous state of the user as context to the `wp_set_password` hook. Follow-up to [55056], [55250]. Props dd32. Fixes #61541. git-svn-id: https://develop.svn.wordpress.org/trunk@58653 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 10 +++++++--- tests/phpunit/tests/auth.php | 10 ++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index 5ed63e539cf66..04a4ef8b55797 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2768,6 +2768,8 @@ function wp_rand( $min = null, $max = null ) { function wp_set_password( $password, $user_id ) { global $wpdb; + $old_user_data = get_userdata( $user_id ); + $hash = wp_hash_password( $password ); $wpdb->update( $wpdb->users, @@ -2784,11 +2786,13 @@ function wp_set_password( $password, $user_id ) { * Fires after the user password is set. * * @since 6.2.0 + * @since 6.7.0 The `$old_user_data` parameter was added. * - * @param string $password The plaintext password just set. - * @param int $user_id The ID of the user whose password was just set. + * @param string $password The plaintext password just set. + * @param int $user_id The ID of the user whose password was just set. + * @param WP_User $old_user_data Object containing user's data prior to update. */ - do_action( 'wp_set_password', $password, $user_id ); + do_action( 'wp_set_password', $password, $user_id, $old_user_data ); } endif; diff --git a/tests/phpunit/tests/auth.php b/tests/phpunit/tests/auth.php index a28051dc09e2d..5c196b499fcce 100644 --- a/tests/phpunit/tests/auth.php +++ b/tests/phpunit/tests/auth.php @@ -115,16 +115,22 @@ public function test_password_trimming() { * Tests hooking into wp_set_password(). * * @ticket 57436 + * @ticket 61541 * * @covers ::wp_set_password */ public function test_wp_set_password_action() { $action = new MockAction(); - add_action( 'wp_set_password', array( $action, 'action' ) ); - wp_set_password( 'A simple password', self::$user_id ); + $previous_user_pass = get_user_by( 'id', $this->user->ID )->user_pass; + + add_action( 'wp_set_password', array( $action, 'action' ), 10, 3 ); + wp_set_password( 'A simple password', $this->user->ID ); $this->assertSame( 1, $action->get_call_count() ); + + // Check that the old data passed through the hook is correct. + $this->assertSame( $previous_user_pass, $action->get_args()[0][2]->user_pass ); } /** From e65f0f261fc2a7b09f8dd951b4a77aac05b4c274 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Wed, 3 Jul 2024 16:28:48 +0000 Subject: [PATCH 069/422] Build/Test Tools: Fix workflow names in test old branches workflow. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the changes in [58165] and [58645] and all associated backports, the workflow that dispatches regular testing in older branches needed to be updated. - The `test-npm.yml` workflow no longer exists. - The `test-build-processes.yml` has taken the place of `test-npm.yml` in all branches. Also, the workflow will now run whenever an old version of the reusable PHPUnit workflow is updated (v1 or v2). This is to ensure the changes don’t cause any compatibility problems in older branches. See #61213. git-svn-id: https://develop.svn.wordpress.org/trunk@58654 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/test-old-branches.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-old-branches.yml b/.github/workflows/test-old-branches.yml index bf749673563bb..397f2c6ef350f 100644 --- a/.github/workflows/test-old-branches.yml +++ b/.github/workflows/test-old-branches.yml @@ -7,6 +7,8 @@ on: - trunk paths: - '.github/workflows/test-old-branches.yml' + - '.github/workflows/reusable-phpunit-tests-v1.yml' + - '.github/workflows/reusable-phpunit-tests-v2.yml' # Run twice a month on the 1st and 15th at 00:00 UTC. schedule: - cron: '0 0 1 * *' @@ -34,7 +36,7 @@ jobs: 'coding-standards.yml', 'javascript-tests.yml', 'phpunit-tests.yml', - 'test-npm.yml' + 'test-build-processes.yml' ] branch: [ '6.6', '6.5', '6.4', '6.3', '6.2', '6.1','6.0', @@ -102,10 +104,6 @@ jobs: - branch: '6.2' workflow: 'performance.yml' - # Build Process testing was introduced in 6.5. - - branch: '6.5' - workflow: 'test-build-processes.yml' - # Run all branches monthly, but only the currently supported one twice per month. steps: - name: Dispatch workflow run From 28930fc10907782bd560ba810b8c1f0fe4c74521 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 3 Jul 2024 17:05:46 +0000 Subject: [PATCH 070/422] HTML API: Implement the _reset insertion mode appropriately_ algorithm. In order to add support for the SELECT and TABLE tags in the HTML Processor, it needs to implement the HTML algorithm named "reset the insertion mode appropriately". This patch implements that algorithm to unblock the additional tag support. The algorithm resets the parsing mode after specific state changes in complicated situations where alternative rules are in effect (such as rules governing how the parser handles tags found within a TABLE element). Developed in https://github.com/WordPress/wordpress-develop/pull/6020 Discussed in https://core.trac.wordpress.org/ticket/61549 Props dmsnell, jonsurrell. Fixes #61549. git-svn-id: https://develop.svn.wordpress.org/trunk@58656 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-html-processor-state.php | 22 +++ .../html-api/class-wp-html-processor.php | 183 ++++++++++++++++++ 2 files changed, 205 insertions(+) diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index 659a019f7e0da..f6e3721665402 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -215,6 +215,17 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_IN_TEMPLATE = 'insertion-mode-in-template'; + /** + * The stack of template insertion modes. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#the-insertion-mode:stack-of-template-insertion-modes + * + * @var array + */ + public $stack_of_template_insertion_modes = array(); + /** * Tracks open elements while scanning HTML. * @@ -272,6 +283,17 @@ class WP_HTML_Processor_State { */ public $context_node = null; + /** + * HEAD element pointer. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#head-element-pointer + * + * @var WP_HTML_Token|null + */ + public $head_element = null; + /** * The frameset-ok flag indicates if a `FRAMESET` element is allowed in the current state. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 29f1c7ac6d4cc..32800218f6404 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -2129,6 +2129,189 @@ private function reconstruct_active_formatting_elements() { throw new WP_HTML_Unsupported_Exception( 'Cannot reconstruct active formatting elements when advancing and rewinding is required.' ); } + /** + * Runs the reset the insertion mode appropriately algorithm. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#reset-the-insertion-mode-appropriately + */ + public function reset_insertion_mode(): void { + // Set the first node. + $first_node = null; + foreach ( $this->state->stack_of_open_elements->walk_down() as $first_node ) { + break; + } + + /* + * > 1. Let _last_ be false. + */ + $last = false; + foreach ( $this->state->stack_of_open_elements->walk_up() as $node ) { + /* + * > 2. Let _node_ be the last node in the stack of open elements. + * > 3. _Loop_: If _node_ is the first node in the stack of open elements, then set _last_ + * > to true, and, if the parser was created as part of the HTML fragment parsing + * > algorithm (fragment case), set node to the context element passed to + * > that algorithm. + * > … + */ + if ( $node === $first_node ) { + $last = true; + if ( isset( $this->context_node ) ) { + $node = $this->context_node; + } + } + + switch ( $node->node_name ) { + /* + * > 4. If node is a `select` element, run these substeps: + * > 1. If _last_ is true, jump to the step below labeled done. + * > 2. Let _ancestor_ be _node_. + * > 3. _Loop_: If _ancestor_ is the first node in the stack of open elements, + * > jump to the step below labeled done. + * > 4. Let ancestor be the node before ancestor in the stack of open elements. + * > … + * > 7. Jump back to the step labeled _loop_. + * > 8. _Done_: Switch the insertion mode to "in select" and return. + */ + case 'SELECT': + if ( ! $last ) { + foreach ( $this->state->stack_of_open_elements->walk_up( $node ) as $ancestor ) { + switch ( $ancestor->node_name ) { + /* + * > 5. If _ancestor_ is a `template` node, jump to the step below + * > labeled _done_. + */ + case 'TEMPLATE': + break 2; + + /* + * > 6. If _ancestor_ is a `table` node, switch the insertion mode to + * > "in select in table" and return. + */ + case 'TABLE': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE; + return; + } + } + } + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT; + return; + + /* + * > 5. If _node_ is a `td` or `th` element and _last_ is false, then switch the + * > insertion mode to "in cell" and return. + */ + case 'TD': + case 'TH': + if ( ! $last ) { + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_CELL; + return; + } + break; + + /* + * > 6. If _node_ is a `tr` element, then switch the insertion mode to "in row" + * > and return. + */ + case 'TR': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + return; + + /* + * > 7. If _node_ is a `tbody`, `thead`, or `tfoot` element, then switch the + * > insertion mode to "in table body" and return. + */ + case 'TBODY': + case 'THEAD': + case 'TFOOT': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return; + + /* + * > 8. If _node_ is a `caption` element, then switch the insertion mode to + * > "in caption" and return. + */ + case 'CAPTION': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION; + return; + + /* + * > 9. If _node_ is a `colgroup` element, then switch the insertion mode to + * > "in column group" and return. + */ + case 'COLGROUP': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP; + return; + + /* + * > 10. If _node_ is a `table` element, then switch the insertion mode to + * > "in table" and return. + */ + case 'TABLE': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return; + + /* + * > 11. If _node_ is a `template` element, then switch the insertion mode to the + * > current template insertion mode and return. + */ + case 'TEMPLATE': + $this->state->insertion_mode = end( $this->state->stack_of_template_insertion_modes ); + return; + + /* + * > 12. If _node_ is a `head` element and _last_ is false, then switch the + * > insertion mode to "in head" and return. + */ + case 'HEAD': + if ( ! $last ) { + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD; + return; + } + break; + + /* + * > 13. If _node_ is a `body` element, then switch the insertion mode to "in body" + * > and return. + */ + case 'BODY': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + return; + + /* + * > 14. If _node_ is a `frameset` element, then switch the insertion mode to + * > "in frameset" and return. (fragment case) + */ + case 'FRAMESET': + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_FRAMESET; + return; + + /* + * > 15. If _node_ is an `html` element, run these substeps: + * > 1. If the head element pointer is null, switch the insertion mode to + * > "before head" and return. (fragment case) + * > 2. Otherwise, the head element pointer is not null, switch the insertion + * > mode to "after head" and return. + */ + case 'HTML': + $this->state->insertion_mode = isset( $this->state->head_element ) + ? WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD + : WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD; + return; + } + } + + /* + * > 16. If _last_ is true, then switch the insertion mode to "in body" + * > and return. (fragment case) + * + * This is only reachable if `$last` is true, as per the fragment parsing case. + */ + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + } + /** * Runs the adoption agency algorithm. * From 80b7747ef165dd5ed0150003a8c2f957f097609e Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Thu, 4 Jul 2024 04:18:52 +0000 Subject: [PATCH 071/422] Help/About: Update performance improvements string. Updates the performance improvements string with the finalized percentage improvement in the editor and to improve styling and language consistency. Props ryelle, annezazu, peterwilsoncc. Fixes #61320. git-svn-id: https://develop.svn.wordpress.org/trunk@58671 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index a794ab9ec6668..ad87ec8f678f8 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -124,8 +124,9 @@

    WP_Theme_JSON', 'data-wp-on-async' ); ?> From 922949fb97334ec0bff551afb0bd8116ff8ade7c Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 4 Jul 2024 11:20:33 +0000 Subject: [PATCH 072/422] Docs: Update AJAX in Plugins HelpHub link to avoid unnecessary redirection. Follow-up to [17045], [20713], [41065], [45674], [55412], [57854], [58131], [58132]. Props shailu25. See #60732, #60699. git-svn-id: https://develop.svn.wordpress.org/trunk@58672 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/admin-ajax.php | 2 +- src/wp-settings.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/admin-ajax.php b/src/wp-admin/admin-ajax.php index b6645fd5ca0e8..3ad60f95766e3 100644 --- a/src/wp-admin/admin-ajax.php +++ b/src/wp-admin/admin-ajax.php @@ -5,7 +5,7 @@ * @package WordPress * @subpackage Administration * - * @link https://codex.wordpress.org/AJAX_in_Plugins + * @link https://developer.wordpress.org/plugins/javascript/ajax */ /** diff --git a/src/wp-settings.php b/src/wp-settings.php index a682c2a50380a..369493f3fcec0 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -715,7 +715,7 @@ * Ajax requests should use wp-admin/admin-ajax.php. admin-ajax.php can handle requests for * users not logged in. * - * @link https://codex.wordpress.org/AJAX_in_Plugins + * @link https://developer.wordpress.org/plugins/javascript/ajax * * @since 3.0.0 */ From 70bad67ef1aa3a329ba69ed461345ca9d6bdbd04 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 4 Jul 2024 15:09:15 +0000 Subject: [PATCH 073/422] Tests: Use `assertSame()` in `WP_REST_Global_Styles_Revisions_Controller` tests. This ensures that not only the return values match the expected results, but also that their type is the same. Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable. Follow-up to [56082]. See #61573. git-svn-id: https://develop.svn.wordpress.org/trunk@58673 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/rest-global-styles-revisions-controller.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php b/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php index 6b03aa3af1f42..b01ada9be28ff 100644 --- a/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php +++ b/tests/phpunit/tests/rest-api/rest-global-styles-revisions-controller.php @@ -272,12 +272,12 @@ protected function check_get_revision_response( $response_revision_item, $revisi // Global styles. $config = ( new WP_Theme_JSON( json_decode( $revision_expected_item->post_content, true ), 'custom' ) )->get_raw_data(); - $this->assertEquals( + $this->assertSame( $config['settings'], $response_revision_item['settings'], 'Check that the revision settings exist in the response.' ); - $this->assertEquals( + $this->assertSame( $config['styles'], $response_revision_item['styles'], 'Check that the revision styles match the updated styles.' @@ -371,7 +371,7 @@ public function test_get_items_eligible_roles() { $data = $response->get_data(); $this->assertCount( $this->total_revisions + 1, $data, 'Check that extra revision exist' ); - $this->assertEquals( self::$second_admin_id, $data[0]['author'], 'Check that second author id returns expected value.' ); + $this->assertSame( self::$second_admin_id, $data[0]['author'], 'Check that second author id returns expected value.' ); } /** From 82deed39a56f46bccde20724065ef0d50455f3a7 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 4 Jul 2024 21:59:34 +0000 Subject: [PATCH 074/422] Users: Avoid ambiguous password reset URLs for usernames ending in a period. When WordPress sends out a password-reset or new-user email, it generates a link for someone to follow in order to take them to the reset page. If the user login name ends in a period, however, that generated URL will end in a period and many email clients will confuse it with a sentence-ending period instead of being part of the query arguments. In this patch, the generated URL's query argument are rearranged so that the link will never end in a period. Alternative ideas were explored to create a new function to escape URL-ending periods, but this patch resolves the reported problem without raising any further architectural questions. Developed in https://github.com/WordPress/wordpress-develop/pull/6834 Discussed in https://core.trac.wordpress.org/ticket/42957 Props audrasjb, costdev, daveagp, dmsnell, hellofromTonya, markparnell, mukesh27, nhrrob, obrienlabs, paulcline. Fixes #42957. git-svn-id: https://develop.svn.wordpress.org/trunk@58674 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 10 +++++++++- src/wp-includes/user.php | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index 04a4ef8b55797..0e9e0d4579c19 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2224,7 +2224,15 @@ function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) /* translators: %s: User login. */ $message = sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n\r\n"; $message .= __( 'To set your password, visit the following address:' ) . "\r\n\r\n"; - $message .= network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . "\r\n\r\n"; + + /* + * Since some user login names end in a period, this could produce ambiguous URLs that + * end in a period. To avoid the ambiguity, ensure that the login is not the last query + * arg in the URL. If moving it to the end, a trailing period will need to be escaped. + * + * @see https://core.trac.wordpress.org/tickets/42957 + */ + $message .= network_site_url( 'wp-login.php?login=' . rawurlencode( $user->user_login ) . "&key=$key&action=rp", 'login' ) . "\r\n\r\n"; $message .= wp_login_url() . "\r\n"; diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index 38ff198286b3e..5a05fff2f4c73 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -3219,7 +3219,15 @@ function retrieve_password( $user_login = null ) { $message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n"; $message .= __( 'If this was a mistake, ignore this email and nothing will happen.' ) . "\r\n\r\n"; $message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n"; - $message .= network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . '&wp_lang=' . $locale . "\r\n\r\n"; + + /* + * Since some user login names end in a period, this could produce ambiguous URLs that + * end in a period. To avoid the ambiguity, ensure that the login is not the last query + * arg in the URL. If moving it to the end, a trailing period will need to be escaped. + * + * @see https://core.trac.wordpress.org/tickets/42957 + */ + $message .= network_site_url( 'wp-login.php?login=' . rawurlencode( $user_login ) . "&key=$key&action=rp", 'login' ) . '&wp_lang=' . $locale . "\r\n\r\n"; if ( ! is_user_logged_in() ) { $requester_ip = $_SERVER['REMOTE_ADDR']; From fee822de6ba5c586b20131e4882a62a8f73e9af3 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 4 Jul 2024 23:14:44 +0000 Subject: [PATCH 075/422] HTML API: Add `current_node_is()` helper method to stack of open elements. As part of work to add more spec support to the HTML API, this new method will make it easier to implement the logic when in the SELECT and TABLE insertion modes. Developed in https://github.com/WordPress/wordpress-develop/pull/6968 Discussed in https://core.trac.wordpress.org/ticket/51576 Props dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58676 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 42 +++++++++++++++++++ .../html-api/class-wp-html-processor.php | 8 ++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index 15479801dda10..b1ca2a5dfa918 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -144,6 +144,48 @@ public function current_node() { return $current_node ? $current_node : null; } + /** + * Indicates if the current node is of a given type or name. + * + * It's possible to pass either a node type or a node name to this function. + * In the case there is no current element it will always return `false`. + * + * Example: + * + * // Is the current node a text node? + * $stack->current_node_is( '#text' ); + * + * // Is the current node a DIV element? + * $stack->current_node_is( 'DIV' ); + * + * // Is the current node any element/tag? + * $stack->current_node_is( '#tag' ); + * + * @see WP_HTML_Tag_Processor::get_token_type + * @see WP_HTML_Tag_Processor::get_token_name + * + * @since 6.7.0 + * + * @access private + * + * @param string $identity Check if the current node has this name or type (depending on what is provided). + * @return bool Whether there is a current element that matches the given identity, whether a token name or type. + */ + public function current_node_is( string $identity ): bool { + $current_node = end( $this->stack ); + if ( false === $current_node ) { + return false; + } + + $current_node_name = $current_node->node_name; + + return ( + $current_node_name === $identity || + ( '#doctype' === $identity && 'html' === $current_node_name ) || + ( '#tag' === $identity && ctype_upper( $current_node_name ) ) + ); + } + /** * Returns whether an element is in a specific scope. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 32800218f6404..f187ef7fd1b66 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -1029,7 +1029,7 @@ private function step_in_body() { } $this->generate_implied_end_tags(); - if ( $this->state->stack_of_open_elements->current_node()->node_name !== $token_name ) { + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { // @todo Record parse error: this error doesn't impact parsing. } $this->state->stack_of_open_elements->pop_until( $token_name ); @@ -1094,7 +1094,7 @@ private function step_in_body() { $this->generate_implied_end_tags(); - if ( $this->state->stack_of_open_elements->current_node()->node_name !== $token_name ) { + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { // @todo Record parse error: this error doesn't impact parsing. } @@ -1120,7 +1120,7 @@ private function step_in_body() { if ( $is_li ? 'LI' === $node->node_name : ( 'DD' === $node->node_name || 'DT' === $node->node_name ) ) { $node_name = $is_li ? 'LI' : $node->node_name; $this->generate_implied_end_tags( $node_name ); - if ( $node_name !== $this->state->stack_of_open_elements->current_node()->node_name ) { + if ( ! $this->state->stack_of_open_elements->current_node_is( $node_name ) ) { // @todo Indicate a parse error once it's possible. This error does not impact the logic here. } @@ -1197,7 +1197,7 @@ private function step_in_body() { $this->generate_implied_end_tags( $token_name ); - if ( $token_name !== $this->state->stack_of_open_elements->current_node()->node_name ) { + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { // @todo Indicate a parse error once it's possible. This error does not impact the logic here. } From c1154f9d06fad5db7c4042820a7055e6e59b38de Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 5 Jul 2024 00:50:19 +0000 Subject: [PATCH 076/422] HTML API: Support SELECT insertion mode. As part of work to add more spec support to the HTML API, this patch adds support for the SELECT, OPTION, and OPTGROUP elements, including the requisite support for the IN SELECT insertion mode. Developed in https://github.com/WordPress/wordpress-develop/pull/5908 Discussed in https://core.trac.wordpress.org/ticket/61576 Props dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58677 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 36 ++- .../html-api/class-wp-html-processor.php | 281 +++++++++++++++++- .../tests/html-api/wpHtmlProcessor.php | 3 - .../html-api/wpHtmlProcessorBreadcrumbs.php | 3 - .../wpHtmlSupportRequiredHtmlProcessor.php | 4 - .../wpHtmlSupportRequiredOpenElements.php | 4 - 6 files changed, 300 insertions(+), 31 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index b1ca2a5dfa918..d1585cdea5bf5 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -189,11 +189,6 @@ public function current_node_is( string $identity ): bool { /** * Returns whether an element is in a specific scope. * - * ## HTML Support - * - * This function skips checking for the termination list because there - * are no supported elements which appear in the termination list. - * * @since 6.4.0 * * @see https://html.spec.whatwg.org/#has-an-element-in-the-specific-scope @@ -311,19 +306,38 @@ public function has_element_in_table_scope( $tag_name ) { /** * Returns whether a particular element is in select scope. * - * @since 6.4.0 + * This test differs from the others like it, in that its rules are inverted. + * Instead of arriving at a match when one of any tag in a termination group + * is reached, this one terminates if any other tag is reached. * - * @see https://html.spec.whatwg.org/#has-an-element-in-select-scope + * > The stack of open elements is said to have a particular element in select scope when it has + * > that element in the specific scope consisting of all element types except the following: + * > - optgroup in the HTML namespace + * > - option in the HTML namespace * - * @throws WP_HTML_Unsupported_Exception Always until this function is implemented. + * @since 6.4.0 Stub implementation (throws). + * @since 6.7.0 Full implementation. + * + * @see https://html.spec.whatwg.org/#has-an-element-in-select-scope * * @param string $tag_name Name of tag to check. - * @return bool Whether given element is in scope. + * @return bool Whether the given element is in SELECT scope. */ public function has_element_in_select_scope( $tag_name ) { - throw new WP_HTML_Unsupported_Exception( 'Cannot process elements depending on select scope.' ); + foreach ( $this->walk_up() as $node ) { + if ( $node->node_name === $tag_name ) { + return true; + } - return false; // The linter requires this unreachable code until the function is implemented and can return. + if ( + 'OPTION' !== $node->node_name && + 'OPTGROUP' !== $node->node_name + ) { + return false; + } + } + + return false; } /** diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index f187ef7fd1b66..40538491152ad 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -101,7 +101,7 @@ * * - Containers: ADDRESS, BLOCKQUOTE, DETAILS, DIALOG, DIV, FOOTER, HEADER, MAIN, MENU, SPAN, SUMMARY. * - Custom elements: All custom elements are supported. :) - * - Form elements: BUTTON, DATALIST, FIELDSET, INPUT, LABEL, LEGEND, METER, PROGRESS, SEARCH. + * - Form elements: BUTTON, DATALIST, FIELDSET, INPUT, LABEL, LEGEND, METER, OPTGROUP, OPTION, PROGRESS, SEARCH, SELECT. * - Formatting elements: B, BIG, CODE, EM, FONT, I, PRE, SMALL, STRIKE, STRONG, TT, U, WBR. * - Heading elements: H1, H2, H3, H4, H5, H6, HGROUP. * - Links: A. @@ -757,6 +757,12 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { case WP_HTML_Processor_State::INSERTION_MODE_IN_BODY: return $this->step_in_body(); + case WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD: + return $this->step_in_head(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT: + return $this->step_in_select(); + default: $this->last_error = self::ERROR_UNSUPPORTED; throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); @@ -1336,6 +1342,48 @@ private function step_in_body() { case '+TRACK': $this->insert_html_element( $this->state->current_token ); return true; + + /* + * > A start tag whose tag name is "select" + */ + case '+SELECT': + $this->reconstruct_active_formatting_elements(); + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + + switch ( $this->state->insertion_mode ) { + /* + * > If the insertion mode is one of "in table", "in caption", "in table body", "in row", + * > or "in cell", then switch the insertion mode to "in select in table". + */ + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE: + case WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION: + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY: + case WP_HTML_Processor_State::INSERTION_MODE_IN_ROW: + case WP_HTML_Processor_State::INSERTION_MODE_IN_CELL: + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE; + break; + + /* + * > Otherwise, switch the insertion mode to "in select". + */ + default: + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT; + break; + } + return true; + + /* + * > A start tag whose tag name is one of: "optgroup", "option" + */ + case '+OPTGROUP': + case '+OPTION': + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTION' ) ) { + $this->state->stack_of_open_elements->pop(); + } + $this->reconstruct_active_formatting_elements(); + $this->insert_html_element( $this->state->current_token ); + return true; } /* @@ -1378,8 +1426,6 @@ private function step_in_body() { case 'NOFRAMES': case 'NOSCRIPT': case 'OBJECT': - case 'OPTGROUP': - case 'OPTION': case 'PLAINTEXT': case 'RB': case 'RP': @@ -1387,7 +1433,6 @@ private function step_in_body() { case 'RTC': case 'SARCASM': case 'SCRIPT': - case 'SELECT': case 'STYLE': case 'SVG': case 'TABLE': @@ -1448,6 +1493,207 @@ private function step_in_body() { } } + /** + * Parses next element in the 'in head' insertion mode. + * + * This internal function performs the 'in head' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inhead + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_head() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in select' insertion mode. + * + * This internal function performs the 'in select' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inselect + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_select() { + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > Any other character token + */ + case '#text': + $current_token = $this->bookmarks[ $this->state->current_token->bookmark_name ]; + + /* + * > A character token that is U+0000 NULL + * + * If a text node only comprises null bytes then it should be + * entirely ignored and should not return to calling code. + */ + if ( + 1 <= $current_token->length && + "\x00" === $this->html[ $current_token->start ] && + strspn( $this->html, "\x00", $current_token->start, $current_token->length ) === $current_token->length + ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is "option" + */ + case '+OPTION': + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTION' ) ) { + $this->state->stack_of_open_elements->pop(); + } + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "optgroup" + * > A start tag whose tag name is "hr" + * + * These rules are identical except for the treatment of the self-closing flag and + * the subsequent pop of the HR void element, all of which is handled elsewhere in the processor. + */ + case '+OPTGROUP': + case '+HR': + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTION' ) ) { + $this->state->stack_of_open_elements->pop(); + } + + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTGROUP' ) ) { + $this->state->stack_of_open_elements->pop(); + } + + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > An end tag whose tag name is "optgroup" + */ + case '-OPTGROUP': + $current_node = $this->state->stack_of_open_elements->current_node(); + if ( $current_node && 'OPTION' === $current_node->node_name ) { + foreach ( $this->state->stack_of_open_elements->walk_up( $current_node ) as $parent ) { + break; + } + if ( $parent && 'OPTGROUP' === $parent->node_name ) { + $this->state->stack_of_open_elements->pop(); + } + } + + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTGROUP' ) ) { + $this->state->stack_of_open_elements->pop(); + return true; + } + + // Parse error: ignore the token. + return $this->step(); + + /* + * > An end tag whose tag name is "option" + */ + case '-OPTION': + if ( $this->state->stack_of_open_elements->current_node_is( 'OPTION' ) ) { + $this->state->stack_of_open_elements->pop(); + return true; + } + + // Parse error: ignore the token. + return $this->step(); + + /* + * > An end tag whose tag name is "select" + * > A start tag whose tag name is "select" + * + * > It just gets treated like an end tag. + */ + case '-SELECT': + case '+SELECT': + if ( ! $this->state->stack_of_open_elements->has_element_in_select_scope( 'SELECT' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + $this->state->stack_of_open_elements->pop_until( 'SELECT' ); + $this->reset_insertion_mode(); + return true; + + /* + * > A start tag whose tag name is one of: "input", "keygen", "textarea" + * + * All three of these tags are considered a parse error when found in this insertion mode. + */ + case '+INPUT': + case '+KEYGEN': + case '+TEXTAREA': + if ( ! $this->state->stack_of_open_elements->has_element_in_select_scope( 'SELECT' ) ) { + // Ignore the token. + return $this->step(); + } + $this->state->stack_of_open_elements->pop_until( 'SELECT' ); + $this->reset_insertion_mode(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is one of: "script", "template" + * > An end tag whose tag name is "template" + */ + case '+SCRIPT': + case '+TEMPLATE': + case '-TEMPLATE': + return $this->step_in_head(); + } + + /* + * > Anything else + * > Parse error: ignore the token. + */ + return $this->step(); + } + /* * Internal helpers */ @@ -2036,6 +2282,7 @@ private function close_a_p_element() { * Closes elements that have implied end tags. * * @since 6.4.0 + * @since 6.7.0 Full spec support. * * @see https://html.spec.whatwg.org/#generate-implied-end-tags * @@ -2046,12 +2293,19 @@ private function generate_implied_end_tags( $except_for_this_element = null ) { 'DD', 'DT', 'LI', + 'OPTGROUP', + 'OPTION', 'P', + 'RB', + 'RP', + 'RT', + 'RTC', ); - $current_node = $this->state->stack_of_open_elements->current_node(); + $no_exclusions = ! isset( $except_for_this_element ); + while ( - $current_node && $current_node->node_name !== $except_for_this_element && + ( $no_exclusions || ! $this->state->stack_of_open_elements->current_node_is( $except_for_this_element ) ) && in_array( $this->state->stack_of_open_elements->current_node(), $elements_with_implied_end_tags, true ) ) { $this->state->stack_of_open_elements->pop(); @@ -2065,16 +2319,31 @@ private function generate_implied_end_tags( $except_for_this_element = null ) { * different from generating end tags in the normal sense. * * @since 6.4.0 + * @since 6.7.0 Full spec support. * * @see WP_HTML_Processor::generate_implied_end_tags * @see https://html.spec.whatwg.org/#generate-implied-end-tags */ private function generate_implied_end_tags_thoroughly() { $elements_with_implied_end_tags = array( + 'CAPTION', + 'COLGROUP', 'DD', 'DT', 'LI', + 'OPTGROUP', + 'OPTION', 'P', + 'RB', + 'RP', + 'RT', + 'RTC', + 'TBODY', + 'TD', + 'TFOOT', + 'TH', + 'THEAD', + 'TR', ); while ( in_array( $this->state->stack_of_open_elements->current_node(), $elements_with_implied_end_tags, true ) ) { diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 536f6fdf4dd8f..b842703a7a135 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -406,8 +406,6 @@ public static function data_unsupported_special_in_body_tags() { 'NOFRAMES' => array( 'NOFRAMES' ), 'NOSCRIPT' => array( 'NOSCRIPT' ), 'OBJECT' => array( 'OBJECT' ), - 'OPTGROUP' => array( 'OPTGROUP' ), - 'OPTION' => array( 'OPTION' ), 'PLAINTEXT' => array( 'PLAINTEXT' ), 'RB' => array( 'RB' ), 'RP' => array( 'RP' ), @@ -415,7 +413,6 @@ public static function data_unsupported_special_in_body_tags() { 'RTC' => array( 'RTC' ), 'SARCASM' => array( 'SARCASM' ), 'SCRIPT' => array( 'SCRIPT' ), - 'SELECT' => array( 'SELECT' ), 'STYLE' => array( 'STYLE' ), 'SVG' => array( 'SVG' ), 'TABLE' => array( 'TABLE' ), diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 01dcd9c32d7fb..403f40a1da032 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -189,15 +189,12 @@ public static function data_unsupported_elements() { 'NOFRAMES', // Neutralized. 'NOSCRIPT', 'OBJECT', - 'OPTGROUP', - 'OPTION', 'PLAINTEXT', // Neutralized. 'RB', // Neutralized. 'RP', 'RT', 'RTC', // Neutralized. 'SCRIPT', - 'SELECT', 'STYLE', 'SVG', 'TABLE', diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php index 2d3cd21ce461b..07943cd62a2f4 100644 --- a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php @@ -58,8 +58,6 @@ private function ensure_support_is_added_everywhere( $tag_name ) { * @covers WP_HTML_Processor::generate_implied_end_tags */ public function test_generate_implied_end_tags_needs_support() { - $this->ensure_support_is_added_everywhere( 'OPTGROUP' ); - $this->ensure_support_is_added_everywhere( 'OPTION' ); $this->ensure_support_is_added_everywhere( 'RB' ); $this->ensure_support_is_added_everywhere( 'RP' ); $this->ensure_support_is_added_everywhere( 'RT' ); @@ -79,8 +77,6 @@ public function test_generate_implied_end_tags_needs_support() { public function test_generate_implied_end_tags_thoroughly_needs_support() { $this->ensure_support_is_added_everywhere( 'CAPTION' ); $this->ensure_support_is_added_everywhere( 'COLGROUP' ); - $this->ensure_support_is_added_everywhere( 'OPTGROUP' ); - $this->ensure_support_is_added_everywhere( 'OPTION' ); $this->ensure_support_is_added_everywhere( 'RB' ); $this->ensure_support_is_added_everywhere( 'RP' ); $this->ensure_support_is_added_everywhere( 'RT' ); diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php index c2e8c697e8156..48255190ad50c 100644 --- a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php +++ b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php @@ -308,9 +308,5 @@ public function test_has_element_in_select_scope_needs_support() { * FOREIGNOBJECT, DESC, TITLE. */ $this->ensure_support_is_added_everywhere( 'SVG' ); - - // These elements are specific to SELECT scope. - $this->ensure_support_is_added_everywhere( 'OPTGROUP' ); - $this->ensure_support_is_added_everywhere( 'OPTION' ); } } From aa11864a1eb09d6b12e51e585bdc6dd698c182a4 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 5 Jul 2024 10:10:50 +0000 Subject: [PATCH 077/422] Code Modernization: Remove obsolete code targeting PHP < 7.2.24. Follow-up to [44488], [45262], [53426], [57985]. Props ayeshrajans, jrf. See #61574. git-svn-id: https://develop.svn.wordpress.org/trunk@58678 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/file.php | 24 ------------------------ src/wp-cron.php | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/src/wp-admin/includes/file.php b/src/wp-admin/includes/file.php index bc5ef44366beb..d7258e094948c 100644 --- a/src/wp-admin/includes/file.php +++ b/src/wp-admin/includes/file.php @@ -1402,30 +1402,6 @@ function verify_file_signature( $filename, $signatures, $filename_for_errors = f ); } - // Check for an edge-case affecting PHP Maths abilities. - if ( - ! extension_loaded( 'sodium' ) && - in_array( PHP_VERSION_ID, array( 70200, 70201, 70202 ), true ) && - extension_loaded( 'opcache' ) - ) { - /* - * Sodium_Compat isn't compatible with PHP 7.2.0~7.2.2 due to a bug in the PHP Opcache extension, bail early as it'll fail. - * https://bugs.php.net/bug.php?id=75938 - */ - return new WP_Error( - 'signature_verification_unsupported', - sprintf( - /* translators: %s: The filename of the package. */ - __( 'The authenticity of %s could not be verified as signature verification is unavailable on this system.' ), - '' . esc_html( $filename_for_errors ) . '' - ), - array( - 'php' => PHP_VERSION, - 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), - ) - ); - } - // Verify runtime speed of Sodium_Compat is acceptable. if ( ! extension_loaded( 'sodium' ) && ! ParagonIE_Sodium_Compat::polyfill_is_fast() ) { $sodium_compat_is_fast = false; diff --git a/src/wp-cron.php b/src/wp-cron.php index 161478ac49469..c3161d9864865 100644 --- a/src/wp-cron.php +++ b/src/wp-cron.php @@ -24,7 +24,7 @@ } // Don't run cron until the request finishes, if possible. -if ( PHP_VERSION_ID >= 70016 && function_exists( 'fastcgi_finish_request' ) ) { +if ( function_exists( 'fastcgi_finish_request' ) ) { fastcgi_finish_request(); } elseif ( function_exists( 'litespeed_finish_request' ) ) { litespeed_finish_request(); From 6763e5dbb8b78b08b7d49236baa47bd01eaefc46 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 5 Jul 2024 16:37:41 +0000 Subject: [PATCH 078/422] HTML API: Stub out remaining insertion modes in the HTML Processor. As part of work to add more spec support to the HTML API, this patch adds stubs for all of the remaining parser insertion modes in the HTML Processor. These modes are not all supported yet, but they will be necessary to continue adding support for other tags and markup. Developed in https://github.com/WordPress/wordpress-develop/pull/6973 Discussed in https://core.trac.wordpress.org/ticket/61576 Props dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58679 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-html-processor-state.php | 144 +++++- .../html-api/class-wp-html-processor.php | 475 +++++++++++++++++- 2 files changed, 588 insertions(+), 31 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index f6e3721665402..75ad0a11c591e 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -48,40 +48,76 @@ class WP_HTML_Processor_State { const INSERTION_MODE_INITIAL = 'insertion-mode-initial'; /** - * In body insertion mode for full HTML parser. + * Before HTML insertion mode for full HTML parser. * * @since 6.4.0 * - * @see https://html.spec.whatwg.org/#parsing-main-inbody + * @see https://html.spec.whatwg.org/#the-before-html-insertion-mode * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_BODY = 'insertion-mode-in-body'; + const INSERTION_MODE_BEFORE_HTML = 'insertion-mode-before-html'; /** - * In select insertion mode for full HTML parser. + * Before head insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-inselect + * @see https://html.spec.whatwg.org/#parsing-main-beforehead * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_SELECT = 'insertion-mode-in-select'; + const INSERTION_MODE_BEFORE_HEAD = 'insertion-mode-before-head'; /** - * In select in table insertion mode for full HTML parser. + * In head insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-inselectintable + * @see https://html.spec.whatwg.org/#parsing-main-inhead * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_SELECT_IN_TABLE = 'insertion-mode-in-select-in-table'; + const INSERTION_MODE_IN_HEAD = 'insertion-mode-in-head'; + + /** + * In head noscript insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inheadnoscript + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_HEAD_NOSCRIPT = 'insertion-mode-in-head-noscript'; + + /** + * After head insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-afterhead + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_AFTER_HEAD = 'insertion-mode-after-head'; + + /** + * In body insertion mode for full HTML parser. + * + * @since 6.4.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inbody + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_BODY = 'insertion-mode-in-body'; /** * In table insertion mode for full HTML parser. @@ -95,6 +131,18 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_IN_TABLE = 'insertion-mode-in-table'; + /** + * In table text insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-intabletext + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_TABLE_TEXT = 'insertion-mode-in-table-text'; + /** * In caption insertion mode for full HTML parser. * @@ -107,6 +155,18 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_IN_CAPTION = 'insertion-mode-in-caption'; + /** + * In column group insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-incolumngroup + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_COLUMN_GROUP = 'insertion-mode-in-column-group'; + /** * In table body insertion mode for full HTML parser. * @@ -144,16 +204,52 @@ class WP_HTML_Processor_State { const INSERTION_MODE_IN_CELL = 'insertion-mode-in-cell'; /** - * In column group insertion mode for full HTML parser. + * In select insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-incolumngroup + * @see https://html.spec.whatwg.org/#parsing-main-inselect * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_COLUMN_GROUP = 'insertion-mode-in-column-group'; + const INSERTION_MODE_IN_SELECT = 'insertion-mode-in-select'; + + /** + * In select in table insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-inselectintable + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_SELECT_IN_TABLE = 'insertion-mode-in-select-in-table'; + + /** + * In template insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-intemplate + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_IN_TEMPLATE = 'insertion-mode-in-template'; + + /** + * After body insertion mode for full HTML parser. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#parsing-main-afterbody + * @see WP_HTML_Processor_State::$insertion_mode + * + * @var string + */ + const INSERTION_MODE_AFTER_BODY = 'insertion-mode-after-body'; /** * In frameset insertion mode for full HTML parser. @@ -168,52 +264,52 @@ class WP_HTML_Processor_State { const INSERTION_MODE_IN_FRAMESET = 'insertion-mode-in-frameset'; /** - * In head insertion mode for full HTML parser. + * After frameset insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-inhead + * @see https://html.spec.whatwg.org/#parsing-main-afterframeset * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_HEAD = 'insertion-mode-in-head'; + const INSERTION_MODE_AFTER_FRAMESET = 'insertion-mode-after-frameset'; /** - * Before head insertion mode for full HTML parser. + * After after body insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-beforehead + * @see https://html.spec.whatwg.org/#the-after-after-body-insertion-mode * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_BEFORE_HEAD = 'insertion-mode-before-head'; + const INSERTION_MODE_AFTER_AFTER_BODY = 'insertion-mode-after-after-body'; /** - * After head insertion mode for full HTML parser. + * After after frameset insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-afterhead + * @see https://html.spec.whatwg.org/#the-after-after-frameset-insertion-mode * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_AFTER_HEAD = 'insertion-mode-after-head'; + const INSERTION_MODE_AFTER_AFTER_FRAMESET = 'insertion-mode-after-after-frameset'; /** - * In template insertion mode for full HTML parser. + * In foreign content insertion mode for full HTML parser. * * @since 6.7.0 * - * @see https://html.spec.whatwg.org/#parsing-main-intemplate + * @see https://html.spec.whatwg.org/#parsing-main-inforeign * @see WP_HTML_Processor_State::$insertion_mode * * @var string */ - const INSERTION_MODE_IN_TEMPLATE = 'insertion-mode-in-template'; + const INSERTION_MODE_IN_FOREIGN_CONTENT = 'insertion-mode-in-foreign-content'; /** * The stack of template insertion modes. diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 40538491152ad..cbf1dc633616f 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -754,18 +754,79 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { try { switch ( $this->state->insertion_mode ) { - case WP_HTML_Processor_State::INSERTION_MODE_IN_BODY: - return $this->step_in_body(); + case WP_HTML_Processor_State::INSERTION_MODE_INITIAL: + return $this->step_initial(); + + case WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML: + return $this->step_before_html(); + + case WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD: + return $this->step_before_head(); case WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD: return $this->step_in_head(); + case WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD_NOSCRIPT: + return $this->step_in_head_noscript(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD: + return $this->step_after_head(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_BODY: + return $this->step_in_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE: + return $this->step_in_table(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_TEXT: + return $this->step_in_table_text(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION: + return $this->step_in_caption(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP: + return $this->step_in_column_group(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY: + return $this->step_in_table_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_ROW: + return $this->step_in_row(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_CELL: + return $this->step_in_cell(); + case WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT: return $this->step_in_select(); + case WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE: + return $this->step_in_select_in_table(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE: + return $this->step_in_template(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_BODY: + return $this->step_after_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_FRAMESET: + return $this->step_in_frameset(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_FRAMESET: + return $this->step_after_frameset(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_BODY: + return $this->step_after_after_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_FRAMESET: + return $this->step_after_after_frameset(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_FOREIGN_CONTENT: + return $this->step_in_foreign_content(); + + // This should be unreachable but PHP doesn't have total type checking on switch. default: $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + throw new WP_HTML_Unsupported_Exception( "Found unrecognized insertion mode '{$this->state->insertion_mode}'." ); } } catch ( WP_HTML_Unsupported_Exception $e ) { /* @@ -870,6 +931,126 @@ public function get_current_depth() { : $this->state->stack_of_open_elements->count(); } + /** + * Parses next element in the 'initial' insertion mode. + * + * This internal function performs the 'initial' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-initial-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_initial() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'before html' insertion mode. + * + * This internal function performs the 'before html' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-before-html-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_before_html() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'before head' insertion mode. + * + * This internal function performs the 'before head' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-before-head-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_before_head() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in head' insertion mode. + * + * This internal function performs the 'in head' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inhead + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_head() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in head noscript' insertion mode. + * + * This internal function performs the 'in head noscript' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-inheadnoscript + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_head_noscript() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'after head' insertion mode. + * + * This internal function performs the 'after head' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-after-head-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_after_head() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + /** * Parses next element in the 'in body' insertion mode. * @@ -1494,21 +1675,141 @@ private function step_in_body() { } /** - * Parses next element in the 'in head' insertion mode. + * Parses next element in the 'in table' insertion mode. * - * This internal function performs the 'in head' insertion mode + * This internal function performs the 'in table' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * * @since 6.7.0 Stub implementation. * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * - * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inhead + * @see https://html.spec.whatwg.org/#parsing-main-intable * @see WP_HTML_Processor::step * * @return bool Whether an element was found. */ - private function step_in_head() { + private function step_in_table() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in table text' insertion mode. + * + * This internal function performs the 'in table text' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-intabletext + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_table_text() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in caption' insertion mode. + * + * This internal function performs the 'in caption' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-incaption + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_caption() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in column group' insertion mode. + * + * This internal function performs the 'in column group' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-incolgroup + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_column_group() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in table body' insertion mode. + * + * This internal function performs the 'in table body' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-intbody + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_table_body() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in row' insertion mode. + * + * This internal function performs the 'in row' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-intr + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_row() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in cell' insertion mode. + * + * This internal function performs the 'in cell' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-intd + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_cell() { $this->last_error = self::ERROR_UNSUPPORTED; throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1694,6 +1995,166 @@ private function step_in_select() { return $this->step(); } + /** + * Parses next element in the 'in select in table' insertion mode. + * + * This internal function performs the 'in select in table' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-inselectintable + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_select_in_table() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in template' insertion mode. + * + * This internal function performs the 'in template' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-intemplate + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_template() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'after body' insertion mode. + * + * This internal function performs the 'after body' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-afterbody + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_after_body() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in frameset' insertion mode. + * + * This internal function performs the 'in frameset' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-inframeset + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_frameset() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'after frameset' insertion mode. + * + * This internal function performs the 'after frameset' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-afterframeset + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_after_frameset() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'after after body' insertion mode. + * + * This internal function performs the 'after after body' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-after-after-body-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_after_after_body() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'after after frameset' insertion mode. + * + * This internal function performs the 'after after frameset' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#the-after-after-frameset-insertion-mode + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_after_after_frameset() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + + /** + * Parses next element in the 'in foreign content' insertion mode. + * + * This internal function performs the 'in foreign content' insertion mode + * logic for the generalized WP_HTML_Processor::step() function. + * + * @since 6.7.0 Stub implementation. + * + * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. + * + * @see https://html.spec.whatwg.org/#parsing-main-inforeign + * @see WP_HTML_Processor::step + * + * @return bool Whether an element was found. + */ + private function step_in_foreign_content() { + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + } + /* * Internal helpers */ From ce10b4c75cf8e2009294d3f5e16a4ecba3ba0f80 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 5 Jul 2024 22:21:35 +0000 Subject: [PATCH 079/422] HTML API: Fix wrong @since tag. When the remaining insertion modes were stubbed in the HTML Processor, a `@since` tag was mistakenly copied with 6.4.0 instead of 6.7.0. This patch fixes the invalid tag. Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58679]. Props tobiasbg. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58680 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-processor-state.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index 75ad0a11c591e..ab75041bee3d0 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -50,7 +50,7 @@ class WP_HTML_Processor_State { /** * Before HTML insertion mode for full HTML parser. * - * @since 6.4.0 + * @since 6.7.0 * * @see https://html.spec.whatwg.org/#the-before-html-insertion-mode * @see WP_HTML_Processor_State::$insertion_mode From f90c8bf1ae620b7568851f6d6e155223a8a6bf73 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Sat, 6 Jul 2024 10:18:03 +0000 Subject: [PATCH 080/422] HTML API: Respect `tag_name` query arg in `HTML_Processor::next_tag()` Previously the HTML Processor was ignoring the `tag_name` argument in the `next_tag()` query if it existed. This was wrong adn would lead to calling code finding the very next tag, regardless of tag name, instead of the requested taag. This patch adds the tag name detection code into `next_tag()` to fix the bug and ensure that `next_tag()` always returns only when finding a tag of the given name. Developed in https://github.com/WordPress/wordpress-develop/pull/6980 Discussed in https://core.trac.wordpress.org/ticket/61581 Follow-up to [56274]. Fixes #61581. git-svn-id: https://develop.svn.wordpress.org/trunk@58681 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-processor.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index cbf1dc633616f..588d2fbe7d7c9 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -466,6 +466,10 @@ public function next_tag( $query = null ) { continue; } + if ( isset( $query['tag_name'] ) && $query['tag_name'] !== $this->get_token_name() ) { + continue; + } + if ( isset( $needs_class ) && ! $this->has_class( $needs_class ) ) { continue; } From 9de2177c4c77e05e4ae64d525ef3c17c8ab6845b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 6 Jul 2024 14:52:05 +0000 Subject: [PATCH 081/422] Code Modernization: Remove obsolete comments about older PHP versions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit: * Removes various comments referencing PHP versions which are no longer supported. * Removes various comments containing “hints” of things to do after a particular PHP version drop. These hints are incorrect/not actionable for various reasons, so have no value: * Even though a function could be turned into a closure, removing the function would be a backward compatibility break which is not acceptable, so this suggestion is not actionable. * Short ternaries are forbidden by the coding standard exactly to prevent the faulty code suggested in the comment from getting into the codebase. Follow-up to [1243/tests], [6543], [11816], [29861], [29864], [34928], [35369], [36698], [38694], [50786], [58678]. Props jrf, ayeshrajans. See #61574. git-svn-id: https://develop.svn.wordpress.org/trunk@58682 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/meta-boxes.php | 2 +- src/wp-includes/class-wp-customize-manager.php | 3 +-- src/wp-includes/class-wp-object-cache.php | 2 +- src/wp-includes/http.php | 8 ++------ src/wp-includes/load.php | 2 -- src/wp-includes/rest-api/class-wp-rest-request.php | 2 +- tests/phpunit/tests/formatting/escTextarea.php | 1 - tests/phpunit/tests/formatting/wpHtmleditPre.php | 1 - tests/phpunit/tests/formatting/wpRicheditPre.php | 1 - tests/phpunit/tests/http/http.php | 12 ++++++------ 10 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/wp-admin/includes/meta-boxes.php b/src/wp-admin/includes/meta-boxes.php index 43e33445d6916..dc363716d53cd 100644 --- a/src/wp-admin/includes/meta-boxes.php +++ b/src/wp-admin/includes/meta-boxes.php @@ -1270,7 +1270,7 @@ function xfn_check( $xfn_relationship, $xfn_value = '', $deprecated = '' ) { _deprecated_argument( __FUNCTION__, '2.5.0' ); // Never implemented. } - $link_rel = isset( $link->link_rel ) ? $link->link_rel : ''; // In PHP 5.3: $link_rel = $link->link_rel ?: ''; + $link_rel = isset( $link->link_rel ) ? $link->link_rel : ''; $link_rels = preg_split( '/\s+/', $link_rel ); // Mark the specified value as checked if it matches the current link's relationship. diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php index 8efcfc129b47a..906ce4cf671f3 100644 --- a/src/wp-includes/class-wp-customize-manager.php +++ b/src/wp-includes/class-wp-customize-manager.php @@ -6141,8 +6141,7 @@ public function _sanitize_external_header_video( $value ) { * This method exists because the partial object and context data are passed * into a partial's render_callback so we cannot use get_custom_logo() as * the render_callback directly since it expects a blog ID as the first - * argument. When WP no longer supports PHP 5.3, this method can be removed - * in favor of an anonymous function. + * argument. * * @see WP_Customize_Manager::register_controls() * diff --git a/src/wp-includes/class-wp-object-cache.php b/src/wp-includes/class-wp-object-cache.php index 8136ea3ad9f30..6086ddf0d9ea2 100644 --- a/src/wp-includes/class-wp-object-cache.php +++ b/src/wp-includes/class-wp-object-cache.php @@ -73,7 +73,7 @@ class WP_Object_Cache { private $multisite; /** - * Sets up object properties; PHP 5 style constructor. + * Sets up object properties. * * @since 2.0.8 */ diff --git a/src/wp-includes/http.php b/src/wp-includes/http.php index 08756f6294af5..26a0fc3a7e5a3 100644 --- a/src/wp-includes/http.php +++ b/src/wp-includes/http.php @@ -699,12 +699,8 @@ function ms_allowed_http_request_hosts( $is_external, $host ) { * A wrapper for PHP's parse_url() function that handles consistency in the return values * across PHP versions. * - * PHP 5.4.7 expanded parse_url()'s ability to handle non-absolute URLs, including - * schemeless and relative URLs with "://" in the path. This function works around - * those limitations providing a standard output on PHP 5.2~5.4+. - * - * Secondly, across various PHP versions, schemeless URLs containing a ":" in the query - * are being handled inconsistently. This function works around those differences as well. + * Across various PHP versions, schemeless URLs containing a ":" in the query + * are being handled inconsistently. This function works around those differences. * * @since 4.4.0 * @since 4.7.0 The `$component` parameter was added for parity with PHP's `parse_url()`. diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php index 6b743d459aa7b..e22bfb8c35bc5 100644 --- a/src/wp-includes/load.php +++ b/src/wp-includes/load.php @@ -453,8 +453,6 @@ function wp_is_maintenance_mode() { /** * Gets the time elapsed so far during this PHP script. * - * Uses REQUEST_TIME_FLOAT that appeared in PHP 5.4.0. - * * @since 5.8.0 * * @return float Seconds since the PHP script started. diff --git a/src/wp-includes/rest-api/class-wp-rest-request.php b/src/wp-includes/rest-api/class-wp-rest-request.php index c671fd3d132bc..cbe6e4e70ebae 100644 --- a/src/wp-includes/rest-api/class-wp-rest-request.php +++ b/src/wp-includes/rest-api/class-wp-rest-request.php @@ -709,7 +709,7 @@ protected function parse_json_params() { * Parses the request body parameters. * * Parses out URL-encoded bodies for request methods that aren't supported - * natively by PHP. In PHP 5.x, only POST has these parsed automatically. + * natively by PHP. * * @since 4.4.0 */ diff --git a/tests/phpunit/tests/formatting/escTextarea.php b/tests/phpunit/tests/formatting/escTextarea.php index f53f5bd31363b..8b3d0cf94487a 100644 --- a/tests/phpunit/tests/formatting/escTextarea.php +++ b/tests/phpunit/tests/formatting/escTextarea.php @@ -12,7 +12,6 @@ public function charset_iso_8859_1() { } /* - * Only fails in PHP 5.4 onwards * @ticket 23688 */ public function test_esc_textarea_charset_iso_8859_1() { diff --git a/tests/phpunit/tests/formatting/wpHtmleditPre.php b/tests/phpunit/tests/formatting/wpHtmleditPre.php index f9eb7dcc3ca52..272aac2684bf9 100644 --- a/tests/phpunit/tests/formatting/wpHtmleditPre.php +++ b/tests/phpunit/tests/formatting/wpHtmleditPre.php @@ -13,7 +13,6 @@ public function charset_iso_8859_1() { } /* - * Only fails in PHP 5.4 onwards * @ticket 23688 */ public function test_wp_htmledit_pre_charset_iso_8859_1() { diff --git a/tests/phpunit/tests/formatting/wpRicheditPre.php b/tests/phpunit/tests/formatting/wpRicheditPre.php index 04f85c6255155..323eda673c48d 100644 --- a/tests/phpunit/tests/formatting/wpRicheditPre.php +++ b/tests/phpunit/tests/formatting/wpRicheditPre.php @@ -13,7 +13,6 @@ public function charset_iso_8859_1() { } /* - * Only fails in PHP 5.4 onwards * @ticket 23688 */ public function test_wp_richedit_pre_charset_iso_8859_1() { diff --git a/tests/phpunit/tests/http/http.php b/tests/phpunit/tests/http/http.php index a2fd75b95d1cc..533c584f04d53 100644 --- a/tests/phpunit/tests/http/http.php +++ b/tests/phpunit/tests/http/http.php @@ -114,7 +114,7 @@ public function data_wp_parse_url() { ), ), - // < PHP 5.4.7: Schemeless URL. + // Schemeless URL. array( '//example.com/path/', array( @@ -138,7 +138,7 @@ public function data_wp_parse_url() { ), ), - // < PHP 5.4.7: Scheme separator in the URL. + // Scheme separator in the URL. array( 'http://example.com/http://example.net/', array( @@ -149,7 +149,7 @@ public function data_wp_parse_url() { ), array( '/path/http://example.net/', array( 'path' => '/path/http://example.net/' ) ), - // < PHP 5.4.7: IPv6 literals in schemeless URLs are handled incorrectly. + // IPv6 literals in schemeless URLs. array( '//[::FFFF::127.0.0.1]/', array( @@ -238,7 +238,7 @@ public function data_wp_parse_url_with_component() { array( self::FULL_TEST_URL, PHP_URL_QUERY, 'arg1=value1&arg2=value2' ), array( self::FULL_TEST_URL, PHP_URL_FRAGMENT, 'anchor' ), - // < PHP 5.4.7: Schemeless URL. + // Schemeless URL. array( '//example.com/path/', PHP_URL_HOST, 'example.com' ), array( '//example.com/path/', PHP_URL_PATH, '/path/' ), array( '//example.com/', PHP_URL_HOST, 'example.com' ), @@ -246,13 +246,13 @@ public function data_wp_parse_url_with_component() { array( 'http://example.com//path/', PHP_URL_HOST, 'example.com' ), array( 'http://example.com//path/', PHP_URL_PATH, '//path/' ), - // < PHP 5.4.7: Scheme separator in the URL. + // Scheme separator in the URL. array( 'http://example.com/http://example.net/', PHP_URL_HOST, 'example.com' ), array( 'http://example.com/http://example.net/', PHP_URL_PATH, '/http://example.net/' ), array( '/path/http://example.net/', PHP_URL_HOST, null ), array( '/path/http://example.net/', PHP_URL_PATH, '/path/http://example.net/' ), - // < PHP 5.4.7: IPv6 literals in schemeless URLs are handled incorrectly. + // IPv6 literals in schemeless URLs. array( '//[::FFFF::127.0.0.1]/', PHP_URL_HOST, '[::FFFF::127.0.0.1]' ), array( '//[::FFFF::127.0.0.1]/', PHP_URL_PATH, '/' ), From 55e0fafbbfaafad50adda1031ef54dc08506ac9a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 6 Jul 2024 15:05:37 +0000 Subject: [PATCH 082/422] Code Modernization: Simplify a conditional in `wp_is_ini_value_changeable()`. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit reverts the code to the code from before the bug fix related to PHP 5.2.6–5.2.17. As support for PHP 5.2 has been dropped, the workaround for the PHP 5.2 bug is no longer needed. Follow-up to [38015], [38017], [44950], [45058], [57985], [58678], [58682]. Props jrf, ayeshrajans. See #61574. git-svn-id: https://develop.svn.wordpress.org/trunk@58683 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/load.php | 3 +-- tests/phpunit/tests/load/wpIsIniValueChangeable.php | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php index e22bfb8c35bc5..b0b8209235c3e 100644 --- a/src/wp-includes/load.php +++ b/src/wp-includes/load.php @@ -1679,9 +1679,8 @@ function wp_is_ini_value_changeable( $setting ) { } } - // Bit operator to workaround https://bugs.php.net/bug.php?id=44936 which changes access level to 63 in PHP 5.2.6 - 5.2.17. if ( isset( $ini_all[ $setting ]['access'] ) - && ( INI_ALL === ( $ini_all[ $setting ]['access'] & 7 ) || INI_USER === ( $ini_all[ $setting ]['access'] & 7 ) ) + && ( INI_ALL === $ini_all[ $setting ]['access'] || INI_USER === $ini_all[ $setting ]['access'] ) ) { return true; } diff --git a/tests/phpunit/tests/load/wpIsIniValueChangeable.php b/tests/phpunit/tests/load/wpIsIniValueChangeable.php index 0f7779dc7dde6..db8dce74e7a63 100644 --- a/tests/phpunit/tests/load/wpIsIniValueChangeable.php +++ b/tests/phpunit/tests/load/wpIsIniValueChangeable.php @@ -41,7 +41,7 @@ public function data_wp_is_ini_value_changeable() { array( 'upload_tmp_dir', false ), // PHP_INI_SYSTEM. ); - if ( PHP_VERSION_ID > 70000 && extension_loaded( 'Tidy' ) ) { + if ( extension_loaded( 'Tidy' ) ) { $array[] = array( 'tidy.clean_output', true ); // PHP_INI_USER. } From e3e7fdbf7c3fd9f04871118a16b98f1544e94984 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 7 Jul 2024 12:42:44 +0000 Subject: [PATCH 083/422] Code Modernization: Replace `substr( PHP_OS, 0, 3 )` calls with `PHP_OS_FAMILY`. The `PHP_OS_FAMILY` constant indicates the operating system family PHP was built for, and is available as of PHP 7.2.0. Reference: [https://www.php.net/manual/en/reserved.constants.php#constant.php-os-family PHP Manual: Predefined Constants: PHP_OS_FAMILY]. Follow-up to [23255], [57753], [57985], [58678]. Props ayeshrajans, jrf. See #61574. git-svn-id: https://develop.svn.wordpress.org/trunk@58684 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 6 +++--- tests/phpunit/tests/filesystem/wpFilesystemDirect/base.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index ed41eed8c791d..c2fe1228bf1d6 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -2257,11 +2257,11 @@ function get_temp_dir() { * @return bool Whether the path is writable. */ function wp_is_writable( $path ) { - if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) ) { + if ( 'Windows' === PHP_OS_FAMILY ) { return win_is_writable( $path ); - } else { - return @is_writable( $path ); } + + return @is_writable( $path ); } /** diff --git a/tests/phpunit/tests/filesystem/wpFilesystemDirect/base.php b/tests/phpunit/tests/filesystem/wpFilesystemDirect/base.php index dc1252bd3a29c..97165de5c88df 100644 --- a/tests/phpunit/tests/filesystem/wpFilesystemDirect/base.php +++ b/tests/phpunit/tests/filesystem/wpFilesystemDirect/base.php @@ -160,7 +160,7 @@ public function create_file_if_needed( $path, $contents = '' ) { * @return bool Whether the operating system is Windows. */ public static function is_windows() { - return 'WIN' === substr( PHP_OS, 0, 3 ); + return 'Windows' === PHP_OS_FAMILY; } /** From 87d24ded54bd8bf6644086920cba5d3c17bed669 Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Mon, 8 Jul 2024 06:39:39 +0000 Subject: [PATCH 084/422] Editor: fix root padding for alignwide blocks. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the root padding CSS selectors so wide width container blocks with constrained layout don’t receive padding. Props isabel_brison, mukesh27, aaronrobertshaw. Fixes #61587. git-svn-id: https://develop.svn.wordpress.org/trunk@58685 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json.php | 6 +++--- tests/phpunit/tests/theme/wpThemeJson.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 63e24340732cf..0cd90575a5e20 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -2962,10 +2962,10 @@ public function get_root_layout_rules( $selector, $block_metadata ) { $css .= '.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }'; // Alignfull children of the container with left and right padding have negative margins so they can still be full width. $css .= '.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }'; - // Nested children of the container with left and right padding that are not wide or full aligned do not get padding, unless they are direct children of an alignfull flow container. - $css .= '.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) { padding-right: 0; padding-left: 0; }'; + // Nested children of the container with left and right padding that are not full aligned do not get padding, unless they are direct children of an alignfull flow container. + $css .= '.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }'; // Alignfull direct children of the containers that are targeted by the rule above do not need negative margins. - $css .= '.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) > .alignfull { margin-left: 0; margin-right: 0; }'; + $css .= '.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }'; } $css .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }'; diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index bea22948a500f..fea2013e17e1e 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -3746,7 +3746,7 @@ public function test_get_styles_for_block_with_padding_aware_alignments() { 'selector' => 'body', ); - $expected = ':where(body) { margin: 0; }.wp-site-blocks { 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 :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(body){--wp--style--root--padding-top: 10px;--wp--style--root--padding-right: 12px;--wp--style--root--padding-bottom: 10px;--wp--style--root--padding-left: 12px;}'; + $expected = ':where(body) { margin: 0; }.wp-site-blocks { 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 :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(body){--wp--style--root--padding-top: 10px;--wp--style--root--padding-right: 12px;--wp--style--root--padding-bottom: 10px;--wp--style--root--padding-left: 12px;}'; $root_rules = $theme_json->get_root_layout_rules( WP_Theme_JSON::ROOT_BLOCK_SELECTOR, $metadata ); $style_rules = $theme_json->get_styles_for_block( $metadata ); $this->assertSame( $expected, $root_rules . $style_rules ); From bd8f45f3bc8d7a2be2d962d41efc57fca3d28b80 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 8 Jul 2024 08:29:24 +0000 Subject: [PATCH 085/422] Twenty Fourteen: Updates styles for Table block and figure captions. There were multiple discrepancies between the editor and front end with [58399] matched incorrect border color due to specificity. This resolves that and also includes issues not caught in [60293]. The full list of what this does is in ticket but a summary is reduces specificity for table cell border, removes border color rules, replaces selectors and adds wrapper so alignment changes within the iframe. Props sabernhardt. Fixes #61563. git-svn-id: https://develop.svn.wordpress.org/trunk@58686 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyfourteen/css/blocks.css | 9 ++---- .../twentyfourteen/css/editor-blocks.css | 29 +++++++++---------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/wp-content/themes/twentyfourteen/css/blocks.css b/src/wp-content/themes/twentyfourteen/css/blocks.css index 7b0d3cd992949..4d001f52895c2 100644 --- a/src/wp-content/themes/twentyfourteen/css/blocks.css +++ b/src/wp-content/themes/twentyfourteen/css/blocks.css @@ -237,17 +237,12 @@ p.has-drop-cap:not(:focus)::first-letter { overflow-x: visible; } -.wp-block-table:not(.is-style-stripes) th, -.wp-block-table:not(.is-style-stripes) td { +.wp-block-table:where(:not(.is-style-stripes)) th, +.wp-block-table:where(:not(.is-style-stripes)) td { border-color: rgba(0, 0, 0, 0.1); border-width: 0 1px 1px 0; } -.wp-block-table:not(.is-style-stripes) table[class*="-text-color"] * { - border-color: inherit; - border: 1px solid; -} - /*-------------------------------------------------------------- 4.0 Blocks - Layout Elements --------------------------------------------------------------*/ diff --git a/src/wp-content/themes/twentyfourteen/css/editor-blocks.css b/src/wp-content/themes/twentyfourteen/css/editor-blocks.css index 9e7f8721ca1d3..222bf085a50c7 100644 --- a/src/wp-content/themes/twentyfourteen/css/editor-blocks.css +++ b/src/wp-content/themes/twentyfourteen/css/editor-blocks.css @@ -155,6 +155,7 @@ Description: Used to style blocks in the editor. /* Captions */ +[class*=" wp-block-"] figcaption, [class^="wp-block-"] figcaption, [class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { font-size: 12px; @@ -165,39 +166,35 @@ Description: Used to style blocks in the editor. /* Tables */ -.edit-post-visual-editor .editor-block-list__block table, -.edit-post-visual-editor .editor-block-list__block table th, -.edit-post-visual-editor .editor-block-list__block table td { - border: 1px solid rgba(0, 0, 0, 0.1); +.editor-styles-wrapper table, +.editor-styles-wrapper table th, +.editor-styles-wrapper table td { font-size: 14px; line-height: 1.2857142857; } -.edit-post-visual-editor .editor-block-list__block table { - border-collapse: separate; +.editor-styles-wrapper table { + border-collapse: collapse; border-spacing: 0; - border-width: 1px 0 0 1px; margin-bottom: 24px; width: 100%; } -.edit-post-visual-editor .editor-block-list__block table th { - border-width: 0 1px 1px 0; +.editor-styles-wrapper table th { font-weight: 700; text-align: left; text-transform: uppercase; } -.edit-post-visual-editor .editor-block-list__block table td { - border-width: 0 1px 1px 0; -} - -.rtl .edit-post-visual-editor .editor-block-list__block table th { +.rtl .editor-styles-wrapper table th, +[dir="rtl"] .editor-styles-wrapper table th { text-align: right; } -.editor-styles-wrapper .wp-block-table:not(.is-style-stripes) table:not([class*="-text-color"]) * { - border-color: rgba(0, 0, 0, 0.1); +.editor-styles-wrapper :where(:not(.is-style-stripes)) > table:where(:not(.is-style-stripes)), +.editor-styles-wrapper :where(:not(.is-style-stripes)) > table:where(:not(.is-style-stripes)) th, +.editor-styles-wrapper :where(:not(.is-style-stripes)) > table:where(:not(.is-style-stripes)) td { + border: 1px solid rgba(0, 0, 0, 0.1); } /* Quotes */ From b9e2bd9922cb22254c7e3134527eb29e4e2910c5 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 8 Jul 2024 10:43:22 +0000 Subject: [PATCH 086/422] Twenty Seventeen: Fixes front page panels allow pages of any status to be shown. If you have a published page set to a section but also private, draft, pending or trash at some point in the future it was still showing on the homepage. There was no clarity to the user what was happening. This adds in a check to the post_status variable before displaying panel content and adjusts the customizer to show a placeholder if the page is draft,trashed,deleted. Props brettshumaker, sabernhardt. Fixes #46604. git-svn-id: https://develop.svn.wordpress.org/trunk@58687 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyseventeen/inc/template-tags.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/wp-content/themes/twentyseventeen/inc/template-tags.php b/src/wp-content/themes/twentyseventeen/inc/template-tags.php index cd0afb7e3e403..a8bdac3d7c34f 100644 --- a/src/wp-content/themes/twentyseventeen/inc/template-tags.php +++ b/src/wp-content/themes/twentyseventeen/inc/template-tags.php @@ -149,16 +149,27 @@ function twentyseventeen_front_page_section( $partial = null, $id = 0 ) { $twentyseventeencounter = $id; } + // Only when in Customizer, use a placeholder for an empty panel. + $show_panel_placeholder = false; + global $post; // Modify the global post object before setting up post data. if ( get_theme_mod( 'panel_' . $id ) ) { $post = get_post( get_theme_mod( 'panel_' . $id ) ); setup_postdata( $post ); set_query_var( 'panel', $id ); - get_template_part( 'template-parts/page/content', 'front-page-panels' ); + if ( $post && in_array( $post->post_status, array( 'publish', 'private' ), true ) ) { + get_template_part( 'template-parts/page/content', 'front-page-panels' ); + } elseif ( is_customize_preview() ) { + $show_panel_placeholder = true; + } wp_reset_postdata(); } elseif ( is_customize_preview() ) { + $show_panel_placeholder = true; + } + + if ( $show_panel_placeholder ) { // The output placeholder anchor. printf( '

    ' . From baa8c7fe0d994da99cbd2c66a2e5349f06c3e51a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 8 Jul 2024 13:23:42 +0000 Subject: [PATCH 087/422] REST API: Correct variable type in `WP_Rest_Server::serve_batch_request_v1()`. `wp_parse_str()` expects an array as the second parameter. Follow-up to [49252]. Props antonvlasenko. See #61593. git-svn-id: https://develop.svn.wordpress.org/trunk@58688 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/rest-api/class-wp-rest-server.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/class-wp-rest-server.php b/src/wp-includes/rest-api/class-wp-rest-server.php index b85c020b0f112..0eedb0396bcc4 100644 --- a/src/wp-includes/rest-api/class-wp-rest-server.php +++ b/src/wp-includes/rest-api/class-wp-rest-server.php @@ -1667,7 +1667,7 @@ public function serve_batch_request_v1( WP_REST_Request $batch_request ) { $single_request = new WP_REST_Request( isset( $args['method'] ) ? $args['method'] : 'POST', $parsed_url['path'] ); if ( ! empty( $parsed_url['query'] ) ) { - $query_args = null; // Satisfy linter. + $query_args = array(); wp_parse_str( $parsed_url['query'], $query_args ); $single_request->set_query_params( $query_args ); } From ebe6f5aecd816f1156d2abafbc1bbd67a76f9fbd Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 8 Jul 2024 15:42:09 +0000 Subject: [PATCH 088/422] Twenty Sixteen: Fixes pullquote issues with border spacing. Pullquote spacings wasn't reflected on front when using border settings. This caused double borders which was due to styling but this was done before optional borders were implemented. The pull request chosen presumes when you have an external border you no longer want the internal one but does look visually better. Props nidhidhandhukiya, huzaifaalmesbah, poena, sabernhardt. Fixes #59754. git-svn-id: https://develop.svn.wordpress.org/trunk@58689 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentysixteen/css/blocks.css | 64 +++++++++++++++++-- .../twentysixteen/css/editor-blocks.css | 7 +- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/wp-content/themes/twentysixteen/css/blocks.css b/src/wp-content/themes/twentysixteen/css/blocks.css index 3b6257acf0e55..9ce7a295de875 100644 --- a/src/wp-content/themes/twentysixteen/css/blocks.css +++ b/src/wp-content/themes/twentysixteen/css/blocks.css @@ -171,15 +171,19 @@ p.has-drop-cap:not(:focus)::first-letter { .wp-block-pullquote blockquote { color: #686868; - border-left: 4px solid #1a1a1a; + border: 0; margin: 0; - padding: 0 0 0 24px; + padding: 0; } -.rtl .wp-block-pullquote blockquote { - border-left: none; - border-right: 4px solid #1a1a1a; - padding: 0 24px 0 0; +.entry-content .wp-block-pullquote blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; + margin-right: 0; +} + +.wp-block-pullquote:where([style*="border-width"]) blockquote { + padding-left: 1rem; + padding-right: 1rem; } .wp-block-pullquote.has-text-color blockquote, @@ -390,6 +394,10 @@ hr.wp-block-separator { background-color: #1a1a1a; } +.has-dark-gray-border-color { + border-color: #1a1a1a; +} + .has-medium-gray-color { color: #686868; } @@ -398,6 +406,10 @@ hr.wp-block-separator { background-color: #686868; } +.has-medium-gray-border-color { + border-color: #686868; +} + .has-light-gray-color { color: #e5e5e5; } @@ -406,6 +418,10 @@ hr.wp-block-separator { background-color: #e5e5e5; } +.has-light-gray-border-color { + border-color: #e5e5e5; +} + .has-white-color { color: #fff; } @@ -414,6 +430,10 @@ hr.wp-block-separator { background-color: #fff; } +.has-white-border-color { + border-color: #fff; +} + .has-blue-gray-color { color: #4d545c; } @@ -422,6 +442,10 @@ hr.wp-block-separator { background-color: #4d545c; } +.has-blue-gray-border-color { + border-color: #4d545c; +} + .has-bright-blue-color { color: #007acc; } @@ -430,6 +454,10 @@ hr.wp-block-separator { background-color: #007acc; } +.has-bright-blue-border-color { + border-color: #007acc; +} + .has-light-blue-color { color: #9adffd; } @@ -438,6 +466,10 @@ hr.wp-block-separator { background-color: #9adffd; } +.has-light-blue-border-color { + border-color: #9adffd; +} + .has-dark-brown-color { color: #402b30; } @@ -446,6 +478,10 @@ hr.wp-block-separator { background-color: #402b30; } +.has-dark-brown-border-color { + border-color: #402b30; +} + .has-medium-brown-color { color: #774e24; } @@ -454,6 +490,10 @@ hr.wp-block-separator { background-color: #774e24; } +.has-medium-brown-border-color { + border-color: #774e24; +} + .has-dark-red-color { color: #640c1f; } @@ -462,6 +502,10 @@ hr.wp-block-separator { background-color: #640c1f; } +.has-dark-red-border-color { + border-color: #640c1f; +} + .has-bright-red-color { color: #ff675f; } @@ -470,6 +514,10 @@ hr.wp-block-separator { background-color: #ff675f; } +.has-bright-red-border-color { + border-color: #ff675f; +} + .has-yellow-color { color: #ffef8e; } @@ -477,3 +525,7 @@ hr.wp-block-separator { .has-yellow-background-color { background-color: #ffef8e; } + +.has-yellow-border-color { + border-color: #ffef8e; +} diff --git a/src/wp-content/themes/twentysixteen/css/editor-blocks.css b/src/wp-content/themes/twentysixteen/css/editor-blocks.css index 6d2a23662d623..aeae27404e1ef 100644 --- a/src/wp-content/themes/twentysixteen/css/editor-blocks.css +++ b/src/wp-content/themes/twentysixteen/css/editor-blocks.css @@ -499,12 +499,17 @@ figure[class*="wp-block-"] > figcaption { /* Pullquote */ -.editor-block-list__block .wp-block-pullquote blockquote { +.editor-styles-wrapper .wp-block-pullquote blockquote { border: 0; margin: 0; padding: 0; } +.editor-styles-wrapper .wp-block-pullquote:where([style*="border-width"]) blockquote { + padding-left: 1rem; + padding-right: 1rem; +} + .wp-block-pullquote blockquote > .editor-rich-text p { font-size: 19px; font-size: 1.1875rem; From 5c4543964581256a4dad09b9328f380cb61229e5 Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 9 Jul 2024 10:00:48 +0000 Subject: [PATCH 089/422] Section Styles: Prevent flash of variation style updates. This is fixed by preloading the styles. Fixes #61589. Fixes https://github.com/WordPress/wordpress-develop/pull/6989. See https://github.com/WordPress/gutenberg/pull/63172. Props aaronrobertshaw, andrewserong, ramonopoly. git-svn-id: https://develop.svn.wordpress.org/trunk@58690 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit-form-blocks.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wp-admin/edit-form-blocks.php b/src/wp-admin/edit-form-blocks.php index dd66aeea90673..ecf83f2017ee6 100644 --- a/src/wp-admin/edit-form-blocks.php +++ b/src/wp-admin/edit-form-blocks.php @@ -72,6 +72,9 @@ static function ( $classes ) { sprintf( '%s/autosaves?context=edit', $rest_path ), '/wp/v2/settings', array( '/wp/v2/settings', 'OPTIONS' ), + '/wp/v2/global-styles/themes/' . get_stylesheet(), + '/wp/v2/themes?context=edit&status=active', + '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id() . '?context=edit', ); block_editor_rest_api_preload( $preload_paths, $block_editor_context ); From 4a2c9c5389dd0d4e34aedeabd3f67f2f325ae7c7 Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 9 Jul 2024 10:22:10 +0000 Subject: [PATCH 090/422] Section Styles: Fix ref values within block style variations. Fixes #61589. Fixes https://github.com/WordPress/wordpress-develop/pull/6989. See https://github.com/WordPress/gutenberg/pull/63172. Props aaronrobertshaw, andrewserong, ramonopoly. git-svn-id: https://develop.svn.wordpress.org/trunk@58691 602fd350-edb4-49c9-b593-d223f7449a82 --- .../block-supports/block-style-variations.php | 42 +++++++++++ .../block-supports/block-style-variations.php | 74 +++++++++++++++++++ 2 files changed, 116 insertions(+) diff --git a/src/wp-includes/block-supports/block-style-variations.php b/src/wp-includes/block-supports/block-style-variations.php index 5d92ecfb12734..77659bf86f858 100644 --- a/src/wp-includes/block-supports/block-style-variations.php +++ b/src/wp-includes/block-supports/block-style-variations.php @@ -40,6 +40,42 @@ function wp_get_block_style_variation_name_from_class( $class_string ) { return $matches[1] ?? null; } +/** + * Recursively resolves any `ref` values within a block style variation's data. + * + * @since 6.6.0 + * @access private + * + * @param array $variation_data Reference to the variation data being processed. + * @param array $theme_json Theme.json data to retrieve referenced values from. + */ +function wp_resolve_block_style_variation_ref_values( &$variation_data, $theme_json ) { + foreach ( $variation_data as $key => &$value ) { + // Only need to potentially process arrays. + if ( is_array( $value ) ) { + // If ref value is set, attempt to find its matching value and update it. + if ( array_key_exists( 'ref', $value ) ) { + // Clean up any invalid ref value. + if ( empty( $value['ref'] ) || ! is_string( $value['ref'] ) ) { + unset( $variation_data[ $key ] ); + } + + $value_path = explode( '.', $value['ref'] ?? '' ); + $ref_value = _wp_array_get( $theme_json, $value_path ); + + // Only update the current value if the referenced path matched a value. + if ( null === $ref_value ) { + unset( $variation_data[ $key ] ); + } else { + $value = $ref_value; + } + } else { + // Recursively look for ref instances. + wp_resolve_block_style_variation_ref_values( $value, $theme_json ); + } + } + } +} /** * Render the block style variation's styles. * @@ -82,6 +118,12 @@ function wp_render_block_style_variation_support_styles( $parsed_block ) { return $parsed_block; } + /* + * Recursively resolve any ref values with the appropriate value within the + * theme_json data. + */ + wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json ); + $variation_instance = wp_create_block_style_variation_instance_name( $parsed_block, $variation ); $class_name = "is-style-$variation_instance"; $updated_class_name = $parsed_block['attrs']['className'] . " $class_name"; diff --git a/tests/phpunit/tests/block-supports/block-style-variations.php b/tests/phpunit/tests/block-supports/block-style-variations.php index bc5a6b93b8310..fe43f5893c812 100644 --- a/tests/phpunit/tests/block-supports/block-style-variations.php +++ b/tests/phpunit/tests/block-supports/block-style-variations.php @@ -159,4 +159,78 @@ public function test_add_registered_block_styles_to_theme_data() { $this->assertSameSetsWithIndex( $expected, $group_styles, 'Variation data does not match' ); } + + /** + * Tests that block style variations resolve any `ref` values when generating styles. + * + * @ticket 61589 + */ + public function test_block_style_variation_ref_values() { + switch_theme( 'block-theme' ); + + $variation_data = array( + 'color' => array( + 'text' => array( + 'ref' => 'styles.does-not-exist', + ), + 'background' => array( + 'ref' => 'styles.blocks.core/group.variations.block-style-variation-a.color.text', + ), + ), + 'blocks' => array( + 'core/heading' => array( + 'color' => array( + 'text' => array( + 'ref' => 'styles.blocks.core/group.variations.block-style-variation-a.color.background', + ), + 'background' => array( + 'ref' => '', + ), + ), + ), + ), + 'elements' => array( + 'link' => array( + 'color' => array( + 'text' => array( + 'ref' => 'styles.blocks.core/group.variations.block-style-variation-b.color.text', + ), + 'background' => array( + 'ref' => null, + ), + ), + ':hover' => array( + 'color' => array( + 'text' => array( + 'ref' => 'styles.blocks.core/group.variations.block-style-variation-b.color.background', + ), + ), + ), + ), + ), + ); + + $theme_json = WP_Theme_JSON_Resolver::get_theme_data()->get_raw_data(); + + wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json ); + + $expected = array( + 'color' => array( 'background' => 'plum' ), + 'blocks' => array( + 'core/heading' => array( + 'color' => array( 'text' => 'indigo' ), + ), + ), + 'elements' => array( + 'link' => array( + 'color' => array( 'text' => 'lightblue' ), + ':hover' => array( + 'color' => array( 'text' => 'midnightblue' ), + ), + ), + ), + ); + + $this->assertSameSetsWithIndex( $expected, $variation_data, 'Variation data with resolved ref values does not match' ); + } } From 3b90d9403a1fd390cd8d12df94142a5326e5936b Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 9 Jul 2024 13:43:14 +0000 Subject: [PATCH 091/422] Editor: Update packages for 6.6 RC 3. Fixes #61603. Fixes https://github.com/WordPress/wordpress-develop/pull/6998. See https://make.wordpress.org/core/handbook/about/release-cycle/block-editor-release-process-for-major-releases/#package-updates-and-core-patches. Props ellatrix, youknowriad. git-svn-id: https://develop.svn.wordpress.org/trunk@58693 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 412 +++++++++--------- package.json | 32 +- .../assets/script-loader-packages.min.php | 2 +- src/wp-includes/blocks/image.php | 31 +- 4 files changed, 249 insertions(+), 228 deletions(-) diff --git a/package-lock.json b/package-lock.json index 498313d908822..580151ead5d64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,17 +14,17 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.5", - "@wordpress/block-editor": "13.0.4", - "@wordpress/block-library": "9.0.5", + "@wordpress/block-directory": "5.0.6", + "@wordpress/block-editor": "13.0.5", + "@wordpress/block-library": "9.0.6", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.4", - "@wordpress/core-data": "7.0.4", - "@wordpress/customize-widgets": "5.0.5", + "@wordpress/core-commands": "1.0.5", + "@wordpress/core-data": "7.0.5", + "@wordpress/customize-widgets": "5.0.6", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.4", @@ -32,13 +32,13 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.5", - "@wordpress/edit-site": "6.0.5", - "@wordpress/edit-widgets": "6.0.5", - "@wordpress/editor": "14.0.4", + "@wordpress/edit-post": "8.0.6", + "@wordpress/edit-site": "6.0.6", + "@wordpress/edit-widgets": "6.0.6", + "@wordpress/editor": "14.0.5", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.4", + "@wordpress/format-library": "5.0.5", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -53,7 +53,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.4", + "@wordpress/patterns": "2.0.5", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -61,7 +61,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.4", + "@wordpress/reusable-blocks": "5.0.5", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -73,7 +73,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.4", + "@wordpress/widgets": "4.0.5", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", @@ -106,11 +106,11 @@ "@playwright/test": "1.45.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "@wordpress/babel-preset-default": "8.0.1", - "@wordpress/dependency-extraction-webpack-plugin": "6.0.1", + "@wordpress/dependency-extraction-webpack-plugin": "6.0.2", "@wordpress/e2e-test-utils": "11.0.1", "@wordpress/e2e-test-utils-playwright": "1.0.1", "@wordpress/prettier-config": "4.0.1", - "@wordpress/scripts": "28.0.1", + "@wordpress/scripts": "28.0.2", "autoprefixer": "10.4.19", "chalk": "5.3.0", "check-node-version": "4.2.1", @@ -6160,21 +6160,21 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.5.tgz", - "integrity": "sha512-5JAfWA13wiLud+V2yS8uR4syInmqo9fcad391oetCfYxrYf5S3pH4WEdHamkNJsQ2a7pxkz7vaJsGa5VmkJYKA==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.6.tgz", + "integrity": "sha512-ry1zVnGOw0+L8LjkWY1VXwZwIdC8SpWdjqTVgdnbk+0GPDR/dy/CyR1fLKn1Vi8wKjDapz49JQr+B8UmEJDKNw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.5", - "@wordpress/editor": "^14.0.4", + "@wordpress/edit-post": "^8.0.6", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6196,9 +6196,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.4.tgz", - "integrity": "sha512-Vtimmmc7JHHNgNBoCr6Ud7/vGPHyfQDck/g9+sTkedCXbqL/dapA9PZsT1UvHNF6xEvEWOrd+kRxOKbn0PcpSg==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.5.tgz", + "integrity": "sha512-TfPq4x+LozVYi7v91HhOUeIRSxxYyqrNn4vC1ioT9Mgjs0tvpkEleZl63jFxVJKvADBUg8Lh51eGls0ocoPeBw==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6257,20 +6257,20 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.5.tgz", - "integrity": "sha512-0A1ZKV/6xtzQtjlvdCxoBqNb0gyr/8UeLsf1NtAi4gBT8GWBsXYKBfFSJ9Q1K9ATYszN6e1XiZqtyCBBiUDjFA==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.6.tgz", + "integrity": "sha512-+K7omh84h8BVuRCRlyQXxDF4EBL0smvmOQs3vN6Jx6fcXNMejre9RwxhVANsKMEhjvrmT2/5oEfWh4khlxB3LQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6286,10 +6286,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -6491,15 +6491,15 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.4.tgz", - "integrity": "sha512-VModTm9itHB/p1yEgs8JtJ3iiRcLIh0a5prR21Mhhp2eWPk1Ydzbg5eTlOMVM/F/zaSFcNA4yLnQ0SiUc4p3Ow==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.5.tgz", + "integrity": "sha512-wi3Rh8I+GG+sH2urKklI3WtnkhQLAWQotDsuQQlaMy/qdeUEzFSUPxxxaJodZ06+QhbpIRhlBELCZR6LQ95hcA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -6518,13 +6518,13 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.4.tgz", - "integrity": "sha512-qLGb31e9kS5tGGwvwGIr+MkfmmyzKktx7i53jk/w/zY559FvLOniQEJFEOyjC57WhT2alNvZtS5K+RGKD0tVlg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.5.tgz", + "integrity": "sha512-sFR+0X+QB6K2bj7RNGY5odAfKbMMFryChHm+lxV4fvymfwvgFA60pzmx/zNlNFeSvEJNuehryTfFG3q9HwDaGA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -6554,17 +6554,17 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.5.tgz", - "integrity": "sha512-hE4e4MPWRYkxSxuYlzBLnmZWG5XpVE1TTy/7xJzpkFKfSaIY7ysiBTtSe3tYkL2ZwCAyA60IqbGqgAQUe2336w==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.6.tgz", + "integrity": "sha512-MKiI1VnNHb2lGKaE5cU3kR3VOILyQHez8j95UbM/OBwG51Em8z63srb5JGunkV6mSTbxpXSwwiDTuaFTN5tdlg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -6578,7 +6578,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6679,9 +6679,9 @@ } }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-xfsDY9kr9J7Lec899t8BC/QaSfqa5w9ONnuj1AplwdVToIXrLO1LQNHaP6/Yw1qjRwA8iE7USMnW5huUTnDoUA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.0.2.tgz", + "integrity": "sha512-XvIEKvA4YB1mDyfiiOddhWDU18ICuDS0wf+et52EXu4ad5YYZzpKpnqKsLh9HoCHBbVCzgiWOesya3eugdqKKw==", "dev": true, "dependencies": { "json2php": "^0.0.7" @@ -6820,25 +6820,25 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.5.tgz", - "integrity": "sha512-NxEtAP7Ccz84COnuQKZji1UFi/CSeCD/8tr4yjvet4/4vvdlmTAR0GSIAeDl93ZmpNGCHF+d7mug2wDf9uLFtg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.6.tgz", + "integrity": "sha512-N+8uV7hXZTiLOUw3egjhgqV6qo7yq+VqDpFkLX6rJ/JkZbSU9QJoC9GzrG4kFfyX2tPRT18JowSsgtRzX9BEsA==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.4", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-commands": "^1.0.5", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.4", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6853,7 +6853,7 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -6867,29 +6867,29 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.5.tgz", - "integrity": "sha512-MGTs34PLC/NWGb07zQl/CFSPZXLE9IAsbY6IJy6mMUWB7BxNXdsVwm5OK91zubZV+54vzL5eo5YTGCgVd+8zFA==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.6.tgz", + "integrity": "sha512-XsbqTvXfUAgMz67+8OWcH2GoOG3oc6Foy6PQqHznezm34SnOBZopoa3CbWV4ldWEwGmHT2RpduLwZRVPjKDK0w==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.4", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-commands": "^1.0.5", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.4", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -6899,18 +6899,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -6929,18 +6929,18 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.5.tgz", - "integrity": "sha512-+kAQyGDHN0raEbZ5piaACO2AZ62JAWoG5zDG8VN63vp9UiFvOodNwrljJ0afLcLIz6Kcb3BN8cjs65LBsjVvKQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.6.tgz", + "integrity": "sha512-DeCgZrjYvGg9FplOD1dhgBnsjQZzbpvMQ+DiHfSyh8qGRREpQl+QnmamrF5weN+Ttzb4nKYJAIMr4xZYc43Ziw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -6953,13 +6953,13 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1" }, "engines": { @@ -6972,20 +6972,20 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.4.tgz", - "integrity": "sha512-Sy9dNAHJMFcHJzXlk8Y136+Ol0RmJ15CjhfnKZx4dxavRHrix5c+69MeQKavkmffrEN2XW9662C9cDlXAoczKg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.5.tgz", + "integrity": "sha512-bBbXu0TTFJRVX4DvfmRNLIF45AImPCP0H50rST/YV5Ba3CikSP05SFWsdNl17jgjFc9gk86UiEl9+vAmtJJUog==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -7000,11 +7000,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -7120,13 +7120,13 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.4.tgz", - "integrity": "sha512-rdyibYZ2FnozrPRY7U1/8YRjoHHqjDDxmywLPtSqvJ95QhhBGMzCp+DJCWEpi/FANj8j4n5FLVala0W8xdStZA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.5.tgz", + "integrity": "sha512-T2RiHHvNugWBtpqnHRYXKv85a3vmEnrJj29mE7Y6Wb2HWH5JWIoCD4rIZjMHtV7umIyxxMf/3MvMb/EdF0VaDg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -7431,17 +7431,17 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.4.tgz", - "integrity": "sha512-A5o490U8rAvZ9nJNz+ZWkP300hshfON0HE/FLmkxvwNCRxbnWAmdq1F5PQqmPthDC7NygFz90ZeEXg+iDJU49Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.5.tgz", + "integrity": "sha512-OQSThezvyVAWPyr//piLRqHV4gI0g/slIvZFeL9cburPKS4G2CxkGAj2MB/oAVc8fSCotENi5anety7IWuZpxQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -7610,15 +7610,15 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.4.tgz", - "integrity": "sha512-ie0ewJW/xIkvq8uupP20d7FDll58uuiqky+BV9f+GByWHbR8z01PQcErrlR4eId/epR5Cay+rHHLLwc0EV8A/A==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.5.tgz", + "integrity": "sha512-rXYoyQKaVGR5OXiUrO3EOIlOYugY8NQPELfPxpdL+hby6kumLXxcBJk47yS+CBuoE+yGTSBrMeFsxrbR6q416Q==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -7680,9 +7680,9 @@ } }, "node_modules/@wordpress/scripts": { - "version": "28.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.0.1.tgz", - "integrity": "sha512-ZvPFcGz+9Rj6OrvePOfNjigUlSDyL2FbZWlj2KyR4TM5H9S4XHd7q4NyjrnT1RFhj/D0ZyJETdBWjO6yTJtlVw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.0.2.tgz", + "integrity": "sha512-TawbVRncjSjDDsjdoBdwMIvJaFobTL9Dq5Euh3o+1iEjT5gAsb8nn+ICQpW5xSnZTBCoUps8EAksVpytwxOCIg==", "dev": true, "dependencies": { "@babel/core": "^7.16.0", @@ -7690,7 +7690,7 @@ "@svgr/webpack": "^8.0.1", "@wordpress/babel-preset-default": "^8.0.1", "@wordpress/browserslist-config": "^6.0.1", - "@wordpress/dependency-extraction-webpack-plugin": "^6.0.1", + "@wordpress/dependency-extraction-webpack-plugin": "^6.0.2", "@wordpress/e2e-test-utils-playwright": "^1.0.1", "@wordpress/eslint-plugin": "^19.0.1", "@wordpress/jest-preset-default": "^12.0.1", @@ -8919,17 +8919,17 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.4.tgz", - "integrity": "sha512-n9VyatU28mFTQzn/O4NNPK9JQ0KeVYu4VhmVo4sxUeOxRJbdqGVW1L6MotnFn0uL/fbZOD5E07aiU22EJwJmlw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.5.tgz", + "integrity": "sha512-r4XIpgiVq7ht5KCBrY8lSaZcadAL3OMSFZwO8m4+dkpvY3J/QvbcQE2oUSypqWvwTpQsPN2AO1H4GaouRgtCuw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -38789,21 +38789,21 @@ } }, "@wordpress/block-directory": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.5.tgz", - "integrity": "sha512-5JAfWA13wiLud+V2yS8uR4syInmqo9fcad391oetCfYxrYf5S3pH4WEdHamkNJsQ2a7pxkz7vaJsGa5VmkJYKA==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.6.tgz", + "integrity": "sha512-ry1zVnGOw0+L8LjkWY1VXwZwIdC8SpWdjqTVgdnbk+0GPDR/dy/CyR1fLKn1Vi8wKjDapz49JQr+B8UmEJDKNw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.5", - "@wordpress/editor": "^14.0.4", + "@wordpress/edit-post": "^8.0.6", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -38817,9 +38817,9 @@ } }, "@wordpress/block-editor": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.4.tgz", - "integrity": "sha512-Vtimmmc7JHHNgNBoCr6Ud7/vGPHyfQDck/g9+sTkedCXbqL/dapA9PZsT1UvHNF6xEvEWOrd+kRxOKbn0PcpSg==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.5.tgz", + "integrity": "sha512-TfPq4x+LozVYi7v91HhOUeIRSxxYyqrNn4vC1ioT9Mgjs0tvpkEleZl63jFxVJKvADBUg8Lh51eGls0ocoPeBw==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -38870,20 +38870,20 @@ } }, "@wordpress/block-library": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.5.tgz", - "integrity": "sha512-0A1ZKV/6xtzQtjlvdCxoBqNb0gyr/8UeLsf1NtAi4gBT8GWBsXYKBfFSJ9Q1K9ATYszN6e1XiZqtyCBBiUDjFA==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.6.tgz", + "integrity": "sha512-+K7omh84h8BVuRCRlyQXxDF4EBL0smvmOQs3vN6Jx6fcXNMejre9RwxhVANsKMEhjvrmT2/5oEfWh4khlxB3LQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -38899,10 +38899,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39058,15 +39058,15 @@ } }, "@wordpress/core-commands": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.4.tgz", - "integrity": "sha512-VModTm9itHB/p1yEgs8JtJ3iiRcLIh0a5prR21Mhhp2eWPk1Ydzbg5eTlOMVM/F/zaSFcNA4yLnQ0SiUc4p3Ow==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.5.tgz", + "integrity": "sha512-wi3Rh8I+GG+sH2urKklI3WtnkhQLAWQotDsuQQlaMy/qdeUEzFSUPxxxaJodZ06+QhbpIRhlBELCZR6LQ95hcA==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39077,13 +39077,13 @@ } }, "@wordpress/core-data": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.4.tgz", - "integrity": "sha512-qLGb31e9kS5tGGwvwGIr+MkfmmyzKktx7i53jk/w/zY559FvLOniQEJFEOyjC57WhT2alNvZtS5K+RGKD0tVlg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.5.tgz", + "integrity": "sha512-sFR+0X+QB6K2bj7RNGY5odAfKbMMFryChHm+lxV4fvymfwvgFA60pzmx/zNlNFeSvEJNuehryTfFG3q9HwDaGA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39105,17 +39105,17 @@ } }, "@wordpress/customize-widgets": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.5.tgz", - "integrity": "sha512-hE4e4MPWRYkxSxuYlzBLnmZWG5XpVE1TTy/7xJzpkFKfSaIY7ysiBTtSe3tYkL2ZwCAyA60IqbGqgAQUe2336w==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.6.tgz", + "integrity": "sha512-MKiI1VnNHb2lGKaE5cU3kR3VOILyQHez8j95UbM/OBwG51Em8z63srb5JGunkV6mSTbxpXSwwiDTuaFTN5tdlg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -39129,7 +39129,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" } @@ -39197,9 +39197,9 @@ } }, "@wordpress/dependency-extraction-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-xfsDY9kr9J7Lec899t8BC/QaSfqa5w9ONnuj1AplwdVToIXrLO1LQNHaP6/Yw1qjRwA8iE7USMnW5huUTnDoUA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.0.2.tgz", + "integrity": "sha512-XvIEKvA4YB1mDyfiiOddhWDU18ICuDS0wf+et52EXu4ad5YYZzpKpnqKsLh9HoCHBbVCzgiWOesya3eugdqKKw==", "dev": true, "requires": { "json2php": "^0.0.7" @@ -39296,25 +39296,25 @@ } }, "@wordpress/edit-post": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.5.tgz", - "integrity": "sha512-NxEtAP7Ccz84COnuQKZji1UFi/CSeCD/8tr4yjvet4/4vvdlmTAR0GSIAeDl93ZmpNGCHF+d7mug2wDf9uLFtg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.6.tgz", + "integrity": "sha512-N+8uV7hXZTiLOUw3egjhgqV6qo7yq+VqDpFkLX6rJ/JkZbSU9QJoC9GzrG4kFfyX2tPRT18JowSsgtRzX9BEsA==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.4", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-commands": "^1.0.5", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.4", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39329,35 +39329,35 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1", "memize": "^2.1.0" } }, "@wordpress/edit-site": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.5.tgz", - "integrity": "sha512-MGTs34PLC/NWGb07zQl/CFSPZXLE9IAsbY6IJy6mMUWB7BxNXdsVwm5OK91zubZV+54vzL5eo5YTGCgVd+8zFA==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.6.tgz", + "integrity": "sha512-XsbqTvXfUAgMz67+8OWcH2GoOG3oc6Foy6PQqHznezm34SnOBZopoa3CbWV4ldWEwGmHT2RpduLwZRVPjKDK0w==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.4", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-commands": "^1.0.5", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.4", + "@wordpress/editor": "^14.0.5", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -39367,18 +39367,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -39389,18 +39389,18 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.5.tgz", - "integrity": "sha512-+kAQyGDHN0raEbZ5piaACO2AZ62JAWoG5zDG8VN63vp9UiFvOodNwrljJ0afLcLIz6Kcb3BN8cjs65LBsjVvKQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.6.tgz", + "integrity": "sha512-DeCgZrjYvGg9FplOD1dhgBnsjQZzbpvMQ+DiHfSyh8qGRREpQl+QnmamrF5weN+Ttzb4nKYJAIMr4xZYc43Ziw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", - "@wordpress/block-library": "^9.0.5", + "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-library": "^9.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -39413,31 +39413,31 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.4", + "@wordpress/widgets": "^4.0.5", "clsx": "^2.1.1" } }, "@wordpress/editor": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.4.tgz", - "integrity": "sha512-Sy9dNAHJMFcHJzXlk8Y136+Ol0RmJ15CjhfnKZx4dxavRHrix5c+69MeQKavkmffrEN2XW9662C9cDlXAoczKg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.5.tgz", + "integrity": "sha512-bBbXu0TTFJRVX4DvfmRNLIF45AImPCP0H50rST/YV5Ba3CikSP05SFWsdNl17jgjFc9gk86UiEl9+vAmtJJUog==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -39452,11 +39452,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.4", + "@wordpress/patterns": "^2.0.5", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.4", + "@wordpress/reusable-blocks": "^5.0.5", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39534,13 +39534,13 @@ } }, "@wordpress/format-library": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.4.tgz", - "integrity": "sha512-rdyibYZ2FnozrPRY7U1/8YRjoHHqjDDxmywLPtSqvJ95QhhBGMzCp+DJCWEpi/FANj8j4n5FLVala0W8xdStZA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.5.tgz", + "integrity": "sha512-T2RiHHvNugWBtpqnHRYXKv85a3vmEnrJj29mE7Y6Wb2HWH5JWIoCD4rIZjMHtV7umIyxxMf/3MvMb/EdF0VaDg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39738,17 +39738,17 @@ } }, "@wordpress/patterns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.4.tgz", - "integrity": "sha512-A5o490U8rAvZ9nJNz+ZWkP300hshfON0HE/FLmkxvwNCRxbnWAmdq1F5PQqmPthDC7NygFz90ZeEXg+iDJU49Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.5.tgz", + "integrity": "sha512-OQSThezvyVAWPyr//piLRqHV4gI0g/slIvZFeL9cburPKS4G2CxkGAj2MB/oAVc8fSCotENi5anety7IWuZpxQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39856,15 +39856,15 @@ } }, "@wordpress/reusable-blocks": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.4.tgz", - "integrity": "sha512-ie0ewJW/xIkvq8uupP20d7FDll58uuiqky+BV9f+GByWHbR8z01PQcErrlR4eId/epR5Cay+rHHLLwc0EV8A/A==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.5.tgz", + "integrity": "sha512-rXYoyQKaVGR5OXiUrO3EOIlOYugY8NQPELfPxpdL+hby6kumLXxcBJk47yS+CBuoE+yGTSBrMeFsxrbR6q416Q==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39904,9 +39904,9 @@ } }, "@wordpress/scripts": { - "version": "28.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.0.1.tgz", - "integrity": "sha512-ZvPFcGz+9Rj6OrvePOfNjigUlSDyL2FbZWlj2KyR4TM5H9S4XHd7q4NyjrnT1RFhj/D0ZyJETdBWjO6yTJtlVw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-28.0.2.tgz", + "integrity": "sha512-TawbVRncjSjDDsjdoBdwMIvJaFobTL9Dq5Euh3o+1iEjT5gAsb8nn+ICQpW5xSnZTBCoUps8EAksVpytwxOCIg==", "dev": true, "requires": { "@babel/core": "^7.16.0", @@ -39914,7 +39914,7 @@ "@svgr/webpack": "^8.0.1", "@wordpress/babel-preset-default": "^8.0.1", "@wordpress/browserslist-config": "^6.0.1", - "@wordpress/dependency-extraction-webpack-plugin": "^6.0.1", + "@wordpress/dependency-extraction-webpack-plugin": "^6.0.2", "@wordpress/e2e-test-utils-playwright": "^1.0.1", "@wordpress/eslint-plugin": "^19.0.1", "@wordpress/jest-preset-default": "^12.0.1", @@ -40728,17 +40728,17 @@ "integrity": "sha512-xSVH/zMAg4ABeNOWo6mlkF+TDBDQNaWVdMNzi+yvGoSDImhaM6Bqrhr1e/65AS29iajnqQt6dlu7E56o5FZlcg==" }, "@wordpress/widgets": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.4.tgz", - "integrity": "sha512-n9VyatU28mFTQzn/O4NNPK9JQ0KeVYu4VhmVo4sxUeOxRJbdqGVW1L6MotnFn0uL/fbZOD5E07aiU22EJwJmlw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.5.tgz", + "integrity": "sha512-r4XIpgiVq7ht5KCBrY8lSaZcadAL3OMSFZwO8m4+dkpvY3J/QvbcQE2oUSypqWvwTpQsPN2AO1H4GaouRgtCuw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.4", + "@wordpress/block-editor": "^13.0.5", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.4", + "@wordpress/core-data": "^7.0.5", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", diff --git a/package.json b/package.json index 62cb44d6cc97e..95081485f1aac 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,11 @@ "@playwright/test": "1.45.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "@wordpress/babel-preset-default": "8.0.1", - "@wordpress/dependency-extraction-webpack-plugin": "6.0.1", + "@wordpress/dependency-extraction-webpack-plugin": "6.0.2", "@wordpress/e2e-test-utils": "11.0.1", "@wordpress/e2e-test-utils-playwright": "1.0.1", "@wordpress/prettier-config": "4.0.1", - "@wordpress/scripts": "28.0.1", + "@wordpress/scripts": "28.0.2", "autoprefixer": "10.4.19", "chalk": "5.3.0", "check-node-version": "4.2.1", @@ -83,17 +83,17 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.5", - "@wordpress/block-editor": "13.0.4", - "@wordpress/block-library": "9.0.5", + "@wordpress/block-directory": "5.0.6", + "@wordpress/block-editor": "13.0.5", + "@wordpress/block-library": "9.0.6", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.4", - "@wordpress/core-data": "7.0.4", - "@wordpress/customize-widgets": "5.0.5", + "@wordpress/core-commands": "1.0.5", + "@wordpress/core-data": "7.0.5", + "@wordpress/customize-widgets": "5.0.6", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.4", @@ -101,13 +101,13 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.5", - "@wordpress/edit-site": "6.0.5", - "@wordpress/edit-widgets": "6.0.5", - "@wordpress/editor": "14.0.4", + "@wordpress/edit-post": "8.0.6", + "@wordpress/edit-site": "6.0.6", + "@wordpress/edit-widgets": "6.0.6", + "@wordpress/editor": "14.0.5", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.4", + "@wordpress/format-library": "5.0.5", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -122,7 +122,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.4", + "@wordpress/patterns": "2.0.5", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -130,7 +130,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.4", + "@wordpress/reusable-blocks": "5.0.5", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -142,7 +142,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.4", + "@wordpress/widgets": "4.0.5", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index a1997701d6a7c..fa13681b8d7b2 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'eaed80842415cb2c8140'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'e69dd29bbed89764e60f'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'a1dd4d12e0ddd5d76418'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'f55d87aa6a5f158f1aec'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '34dd596ec3cbcaf84177'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '29c0c50a059d2f0d31de'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '2bb44334a17254b90b83'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'f9506c5f13cc3995ed19'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'c81574a3c95e631df2a9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '07feee0ca98b13ab617d'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'bf7b57a061aad9bf9020'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '908b9738a38cdf931130'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '734dedd6ead28ee4ca9c'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '2bb44334a17254b90b83'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); diff --git a/src/wp-includes/blocks/image.php b/src/wp-includes/blocks/image.php index 7fe05b2209c81..584318b51d196 100644 --- a/src/wp-includes/blocks/image.php +++ b/src/wp-includes/blocks/image.php @@ -28,12 +28,33 @@ function render_block_core_image( $attributes, $content, $block ) { return ''; } + $has_id_binding = isset( $attributes['metadata']['bindings']['id'] ) && isset( $attributes['id'] ); + + // Ensure the `wp-image-id` classname on the image block supports block bindings. + if ( $has_id_binding ) { + // If there's a mismatch with the 'wp-image-' class and the actual id, the id was + // probably overridden by block bindings. Update it to the correct value. + // See https://github.com/WordPress/gutenberg/issues/62886 for why this is needed. + $id = $attributes['id']; + $image_classnames = $p->get_attribute( 'class' ); + $class_with_binding_value = "wp-image-$id"; + if ( is_string( $image_classnames ) && ! str_contains( $image_classnames, $class_with_binding_value ) ) { + $image_classnames = preg_replace( '/wp-image-(\d+)/', $class_with_binding_value, $image_classnames ); + $p->set_attribute( 'class', $image_classnames ); + } + } + + // For backwards compatibility, the data-id html attribute is only set for + // image blocks nested in a gallery. Detect if the image is in a gallery by + // checking the data-id attribute. + // See the `block_core_gallery_data_id_backcompatibility` function. if ( isset( $attributes['data-id'] ) ) { - // Adds the data-id="$id" attribute to the img element to provide backwards - // compatibility for the Gallery Block, which now wraps Image Blocks within - // innerBlocks. The data-id attribute is added in a core/gallery - // `render_block_data` hook. - $p->set_attribute( 'data-id', $attributes['data-id'] ); + // If there's a binding for the `id`, the `id` attribute is used for the + // value, since `data-id` does not support block bindings. + // Else the `data-id` is used for backwards compatibility, since + // third parties may be filtering its value. + $data_id = $has_id_binding ? $attributes['id'] : $attributes['data-id']; + $p->set_attribute( 'data-id', $data_id ); } $link_destination = isset( $attributes['linkDestination'] ) ? $attributes['linkDestination'] : 'none'; From 80112f24ab0d0edce44097e4ed21ecdb933d8806 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 9 Jul 2024 13:51:12 +0000 Subject: [PATCH 092/422] REST API: Remove a few unused variables in `foreach` loops. Follow-up to [38832], [48173], [49132], [49925]. Props antonvlasenko. See #61593. git-svn-id: https://develop.svn.wordpress.org/trunk@58694 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/endpoints/class-wp-rest-attachments-controller.php | 2 +- .../rest-api/endpoints/class-wp-rest-block-types-controller.php | 2 +- .../endpoints/class-wp-rest-post-statuses-controller.php | 2 +- .../rest-api/endpoints/class-wp-rest-themes-controller.php | 2 +- .../search/class-wp-rest-post-format-search-handler.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index cbc62b49ea17b..e2bc034147e7a 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -1207,7 +1207,7 @@ public static function get_filename_from_disposition( $disposition_header ) { continue; } - list( $type, $attr_parts ) = explode( ';', $value, 2 ); + list( , $attr_parts ) = explode( ';', $value, 2 ); $attr_parts = explode( ';', $attr_parts ); $attributes = array(); diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php index 38ac0e1881d2a..263f2a8ef2066 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php @@ -141,7 +141,7 @@ public function get_items( $request ) { $namespace = $request['namespace']; } - foreach ( $block_types as $slug => $obj ) { + foreach ( $block_types as $obj ) { if ( $namespace ) { list ( $block_namespace ) = explode( '/', $obj->name ); diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php index 572950c24cbc5..fab2307a2ea7d 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php @@ -113,7 +113,7 @@ public function get_items( $request ) { $statuses = get_post_stati( array( 'internal' => false ), 'object' ); $statuses['trash'] = get_post_status_object( 'trash' ); - foreach ( $statuses as $slug => $obj ) { + foreach ( $statuses as $obj ) { $ret = $this->check_read_permission( $obj ); if ( ! $ret ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php index fe58480fb5554..be12707b3c750 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php @@ -201,7 +201,7 @@ public function get_items( $request ) { $current_theme = wp_get_theme(); $status = $request['status']; - foreach ( $active_themes as $theme_name => $theme ) { + foreach ( $active_themes as $theme ) { $theme_status = ( $this->is_same_theme( $theme, $current_theme ) ) ? 'active' : 'inactive'; if ( is_array( $status ) && ! in_array( $theme_status, $status, true ) ) { continue; diff --git a/src/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php b/src/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php index 8d815b1491b70..825a87a917a44 100644 --- a/src/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php +++ b/src/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php @@ -61,7 +61,7 @@ public function search_items( WP_REST_Request $request ) { $query_args = apply_filters( 'rest_post_format_search_query', $query_args, $request ); $found_ids = array(); - foreach ( $format_slugs as $index => $format_slug ) { + foreach ( $format_slugs as $format_slug ) { if ( ! empty( $query_args['search'] ) ) { $format_string = get_post_format_string( $format_slug ); $format_slug_match = stripos( $format_slug, $query_args['search'] ) !== false; From aec4f0b339a9195898f5c9d36a65bd775fd4b62b Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 9 Jul 2024 21:43:11 +0000 Subject: [PATCH 093/422] HTML API: Correct node name in `generate_implied_end_tags()`. The `generate_implied_end_tags()` algorithm has been comparing the current node to a list of node names, which means that it won't ever pop any elements from the stack of open elements. This patch corrects the mistake by comparing node name against the list, thus fixing the algorithm. This was noted in development work for the 6.7 release. Developed in https://github.com/WordPress/wordpress-develop/pull/6988 Discussed in https://core.trac.wordpress.org/ticket/61576 Props dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58702 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 588d2fbe7d7c9..223fcda76a885 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -2771,7 +2771,7 @@ private function generate_implied_end_tags( $except_for_this_element = null ) { while ( ( $no_exclusions || ! $this->state->stack_of_open_elements->current_node_is( $except_for_this_element ) ) && - in_array( $this->state->stack_of_open_elements->current_node(), $elements_with_implied_end_tags, true ) + in_array( $this->state->stack_of_open_elements->current_node()->node_name, $elements_with_implied_end_tags, true ) ) { $this->state->stack_of_open_elements->pop(); } @@ -2811,7 +2811,7 @@ private function generate_implied_end_tags_thoroughly() { 'TR', ); - while ( in_array( $this->state->stack_of_open_elements->current_node(), $elements_with_implied_end_tags, true ) ) { + while ( in_array( $this->state->stack_of_open_elements->current_node()->node_name, $elements_with_implied_end_tags, true ) ) { $this->state->stack_of_open_elements->pop(); } } From e41df7cb12c240e3cfc6d38b8e87fa56fb2511f5 Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Wed, 10 Jul 2024 06:17:44 +0000 Subject: [PATCH 094/422] Editor: enqueue block custom CSS only when block renders on the page. Updates the global styles custom CSS handling logic to be consistent with other global styles and take advantage of conditional enqueuing of block styles. Props isabel_brison, aaronrobertshaw, andrewserong. Fixes #61395. git-svn-id: https://develop.svn.wordpress.org/trunk@58703 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-editor.php | 2 +- src/wp-includes/class-wp-theme-json.php | 11 ++- src/wp-includes/default-filters.php | 3 - src/wp-includes/deprecated.php | 77 +++++++++++++++++++ .../global-styles-and-settings.php | 52 ------------- src/wp-includes/script-loader.php | 35 ++++----- tests/phpunit/tests/theme/wpThemeJson.php | 40 ++++++++-- 7 files changed, 136 insertions(+), 84 deletions(-) diff --git a/src/wp-includes/block-editor.php b/src/wp-includes/block-editor.php index fdc4846f69f80..00633d4d7edd9 100644 --- a/src/wp-includes/block-editor.php +++ b/src/wp-includes/block-editor.php @@ -532,7 +532,7 @@ function get_block_editor_settings( array $custom_settings, $block_editor_contex * entered by users does not break other global styles. */ $global_styles[] = array( - 'css' => wp_get_global_styles_custom_css(), + 'css' => wp_get_global_stylesheet( array( 'custom-css' ) ), '__unstableType' => 'user', 'isGlobalStyles' => true, ); diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 0cd90575a5e20..90de255c82971 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -1423,6 +1423,12 @@ public function get_stylesheet( $types = array( 'variables', 'styles', 'presets' $stylesheet .= $this->get_preset_classes( $setting_nodes, $origins ); } + // Load the custom CSS last so it has the highest specificity. + if ( in_array( 'custom-css', $types, true ) ) { + // Add the global styles root CSS. + $stylesheet .= _wp_array_get( $this->theme_json, array( 'styles', 'css' ) ); + } + return $stylesheet; } @@ -1467,10 +1473,12 @@ protected function process_blocks_custom_css( $css, $selector ) { * Returns the global styles custom CSS. * * @since 6.2.0 + * @deprecated 6.7.0 Use {@see 'get_stylesheet'} instead. * * @return string The global styles custom CSS. */ public function get_custom_css() { + _deprecated_function( __METHOD__, '6.7.0', 'get_stylesheet' ); // Add the global styles root CSS. $stylesheet = isset( $this->theme_json['styles']['css'] ) ? $this->theme_json['styles']['css'] : ''; @@ -2692,6 +2700,7 @@ private static function get_block_nodes( $theme_json, $selectors = array(), $opt 'duotone' => $duotone_selector, 'features' => $feature_selectors, 'variations' => $variation_selectors, + 'css' => $selector, ); if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) { @@ -2908,7 +2917,7 @@ static function ( $pseudo_selector ) use ( $selector ) { } } - // 7. Generate and append any custom CSS rules pertaining to nested block style variations. + // 7. Generate and append any custom CSS rules. if ( isset( $node['css'] ) && ! $is_root_selector ) { $block_rules .= $this->process_blocks_custom_css( $node['css'], $selector ); } diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 2c182747a5bc0..6fba4441d50bd 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -600,9 +600,6 @@ add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' ); add_action( 'wp_footer', 'wp_enqueue_global_styles', 1 ); -// Global styles custom CSS. -add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles_custom_css' ); - // Block supports, and other styles parsed and stored in the Style Engine. add_action( 'wp_enqueue_scripts', 'wp_enqueue_stored_styles' ); add_action( 'wp_footer', 'wp_enqueue_stored_styles', 1 ); diff --git a/src/wp-includes/deprecated.php b/src/wp-includes/deprecated.php index 8084cdd96cfac..457b7fc136718 100644 --- a/src/wp-includes/deprecated.php +++ b/src/wp-includes/deprecated.php @@ -6310,3 +6310,80 @@ function wp_interactivity_process_directives_of_interactive_blocks( array $parse _deprecated_function( __FUNCTION__, '6.6.0' ); return $parsed_block; } + +/** + * Gets the global styles custom CSS from theme.json. + * + * @since 6.2.0 + * @deprecated 6.7.0 Use {@see 'wp_get_global_stylesheet'} instead. + * + * @return string The global styles custom CSS. + */ +function wp_get_global_styles_custom_css() { + _deprecated_function( __FUNCTION__, '6.7.0', 'wp_get_global_stylesheet' ); + if ( ! wp_theme_has_theme_json() ) { + return ''; + } + /* + * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme + * developer's workflow. + */ + $can_use_cached = ! wp_is_development_mode( 'theme' ); + + /* + * By using the 'theme_json' group, this data is marked to be non-persistent across requests. + * @see `wp_cache_add_non_persistent_groups()`. + * + * The rationale for this is to make sure derived data from theme.json + * is always fresh from the potential modifications done via hooks + * that can use dynamic data (modify the stylesheet depending on some option, + * settings depending on user permissions, etc.). + * See some of the existing hooks to modify theme.json behavior: + * @see https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/ + * + * A different alternative considered was to invalidate the cache upon certain + * events such as options add/update/delete, user meta, etc. + * It was judged not enough, hence this approach. + * @see https://github.com/WordPress/gutenberg/pull/45372 + */ + $cache_key = 'wp_get_global_styles_custom_css'; + $cache_group = 'theme_json'; + if ( $can_use_cached ) { + $cached = wp_cache_get( $cache_key, $cache_group ); + if ( $cached ) { + return $cached; + } + } + + $tree = WP_Theme_JSON_Resolver::get_merged_data(); + $stylesheet = $tree->get_custom_css(); + + if ( $can_use_cached ) { + wp_cache_set( $cache_key, $stylesheet, $cache_group ); + } + + return $stylesheet; +} + +/** + * Enqueues the global styles custom css defined via theme.json. + * + * @since 6.2.0 + * @deprecated 6.7.0 Use {@see 'wp_enqueue_global_styles'} instead. + */ +function wp_enqueue_global_styles_custom_css() { + _deprecated_function( __FUNCTION__, '6.7.0', 'wp_enqueue_global_styles' ); + if ( ! wp_is_block_theme() ) { + return; + } + + // Don't enqueue Customizer's custom CSS separately. + remove_action( 'wp_head', 'wp_custom_css_cb', 101 ); + + $custom_css = wp_get_custom_css(); + $custom_css .= wp_get_global_styles_custom_css(); + + if ( ! empty( $custom_css ) ) { + wp_add_inline_style( 'global-styles', $custom_css ); + } +} diff --git a/src/wp-includes/global-styles-and-settings.php b/src/wp-includes/global-styles-and-settings.php index b413273a64974..efa68ce36b114 100644 --- a/src/wp-includes/global-styles-and-settings.php +++ b/src/wp-includes/global-styles-and-settings.php @@ -243,58 +243,6 @@ function wp_get_global_stylesheet( $types = array() ) { return $stylesheet; } -/** - * Gets the global styles custom CSS from theme.json. - * - * @since 6.2.0 - * - * @return string The global styles custom CSS. - */ -function wp_get_global_styles_custom_css() { - if ( ! wp_theme_has_theme_json() ) { - return ''; - } - /* - * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme - * developer's workflow. - */ - $can_use_cached = ! wp_is_development_mode( 'theme' ); - - /* - * By using the 'theme_json' group, this data is marked to be non-persistent across requests. - * @see `wp_cache_add_non_persistent_groups()`. - * - * The rationale for this is to make sure derived data from theme.json - * is always fresh from the potential modifications done via hooks - * that can use dynamic data (modify the stylesheet depending on some option, - * settings depending on user permissions, etc.). - * See some of the existing hooks to modify theme.json behavior: - * @see https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/ - * - * A different alternative considered was to invalidate the cache upon certain - * events such as options add/update/delete, user meta, etc. - * It was judged not enough, hence this approach. - * @see https://github.com/WordPress/gutenberg/pull/45372 - */ - $cache_key = 'wp_get_global_styles_custom_css'; - $cache_group = 'theme_json'; - if ( $can_use_cached ) { - $cached = wp_cache_get( $cache_key, $cache_group ); - if ( $cached ) { - return $cached; - } - } - - $tree = WP_Theme_JSON_Resolver::get_merged_data(); - $stylesheet = $tree->get_custom_css(); - - if ( $can_use_cached ) { - wp_cache_set( $cache_key, $stylesheet, $cache_group ); - } - - return $stylesheet; -} - /** * Adds global style rules to the inline style for each block. * diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 715477ad8ecdf..b7da065ad1796 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -2504,6 +2504,20 @@ function wp_enqueue_global_styles() { $stylesheet = wp_get_global_stylesheet(); + if ( $is_block_theme ) { + /* + * Dequeue the Customizer's custom CSS + * and add it before the global styles custom CSS. + */ + remove_action( 'wp_head', 'wp_custom_css_cb', 101 ); + // Get the custom CSS from the Customizer and add it to the global stylesheet. + $custom_css = wp_get_custom_css(); + $stylesheet .= $custom_css; + + // Add the global styles custom CSS at the end. + $stylesheet .= wp_get_global_stylesheet( array( 'custom-css' ) ); + } + if ( empty( $stylesheet ) ) { return; } @@ -2516,27 +2530,6 @@ function wp_enqueue_global_styles() { wp_add_global_styles_for_blocks(); } -/** - * Enqueues the global styles custom css defined via theme.json. - * - * @since 6.2.0 - */ -function wp_enqueue_global_styles_custom_css() { - if ( ! wp_is_block_theme() ) { - return; - } - - // Don't enqueue Customizer's custom CSS separately. - remove_action( 'wp_head', 'wp_custom_css_cb', 101 ); - - $custom_css = wp_get_custom_css(); - $custom_css .= wp_get_global_styles_custom_css(); - - if ( ! empty( $custom_css ) ) { - wp_add_inline_style( 'global-styles', $custom_css ); - } -} - /** * Checks if the editor scripts and styles for all registered block types * should be enqueued on the current screen. diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index fea2013e17e1e..7190399d8dc10 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -5035,15 +5035,34 @@ public function test_get_top_level_background_image_styles() { } /** - * @ticket 57536 - * @ticket 61165 + * Tests that base custom CSS is generated correctly. + * + * @ticket 61395 + */ + public function test_get_stylesheet_handles_base_custom_css() { + $theme_json = new WP_Theme_JSON( + array( + 'version' => WP_Theme_JSON::LATEST_SCHEMA, + 'styles' => array( + 'css' => 'body {color:purple;}', + ), + ) + ); + + $custom_css = 'body {color:purple;}'; + $this->assertSame( $custom_css, $theme_json->get_stylesheet( array( 'custom-css' ) ) ); + } + + /** + * Tests that block custom CSS is generated correctly. + * + * @ticket 61395 */ - public function test_get_custom_css_handles_global_custom_css() { + public function test_get_styles_for_block_handles_block_custom_css() { $theme_json = new WP_Theme_JSON( array( 'version' => WP_Theme_JSON::LATEST_SCHEMA, 'styles' => array( - 'css' => 'body {color:purple;}', 'blocks' => array( 'core/paragraph' => array( 'css' => 'color:red;', @@ -5053,8 +5072,17 @@ public function test_get_custom_css_handles_global_custom_css() { ) ); - $custom_css = 'body {color:purple;}:root :where(p){color:red;}'; - $this->assertSame( $custom_css, $theme_json->get_custom_css() ); + $paragraph_node = array( + 'name' => 'core/paragraph', + 'path' => array( 'styles', 'blocks', 'core/paragraph' ), + 'selector' => 'p', + 'selectors' => array( + 'root' => 'p', + ), + ); + + $custom_css = ':root :where(p){color:red;}'; + $this->assertSame( $custom_css, $theme_json->get_styles_for_block( $paragraph_node ) ); } /** From 9cff1de6b3adcf8767bfc60c4e71b5cce81f0e1b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 10 Jul 2024 11:10:44 +0000 Subject: [PATCH 095/422] Docs: Correct `@return` values for a few REST API class methods. Includes listing the expected type first, instead of `WP_Error`. Follow-up to [39031], [39033], [46696], [49927], [49929], [50993], [51286], [51973], [52079], [52286], [53152], [56415]. Props antonvlasenko. See #61593. git-svn-id: https://develop.svn.wordpress.org/trunk@58704 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-block-pattern-categories-controller.php | 2 +- .../endpoints/class-wp-rest-edit-site-export-controller.php | 4 ++-- .../endpoints/class-wp-rest-menu-locations-controller.php | 6 +++--- .../endpoints/class-wp-rest-taxonomies-controller.php | 2 +- .../rest-api/endpoints/class-wp-rest-terms-controller.php | 2 +- .../endpoints/class-wp-rest-url-details-controller.php | 2 +- .../rest-api/endpoints/class-wp-rest-widgets-controller.php | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php index 36a753416013f..5d31891678cf7 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php @@ -78,7 +78,7 @@ public function get_items_permissions_check( $request ) { * @since 6.0.0 * * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $response = array(); diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php index 691760812b065..d326782f15c25 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php @@ -50,7 +50,7 @@ public function register_routes() { * * @since 5.9.0 * - * @return WP_Error|true True if the request has access, or WP_Error object. + * @return true|WP_Error True if the request has access, or WP_Error object. */ public function permissions_check() { if ( current_user_can( 'edit_theme_options' ) ) { @@ -70,7 +70,7 @@ public function permissions_check() { * * @since 5.9.0 * - * @return WP_Error|void + * @return void|WP_Error */ public function export() { // Generate the export file. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php index 47686b915f325..e5bff633a2a87 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php @@ -77,7 +77,7 @@ public function register_routes() { * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|bool True if the request has read access, WP_Error object otherwise. + * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( ! current_user_can( 'edit_theme_options' ) ) { @@ -97,7 +97,7 @@ public function get_items_permissions_check( $request ) { * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $data = array(); @@ -140,7 +140,7 @@ public function get_item_permissions_check( $request ) { * @since 5.9.0 * * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $registered_menus = get_registered_nav_menus(); diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php index 6c8ddc3b48565..0b15f3494c4b5 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php @@ -149,7 +149,7 @@ public function get_items( $request ) { * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access for the item, otherwise false or WP_Error object. + * @return bool|WP_Error True if the request has read access for the item, otherwise false or WP_Error object. */ public function get_item_permissions_check( $request ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php index 8ffc6ade6eadf..148c6c1c63c72 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php @@ -462,7 +462,7 @@ public function get_item( $request ) { * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has access to create items, false or WP_Error object otherwise. + * @return bool|WP_Error True if the request has access to create items, otherwise false or WP_Error object. */ public function create_item_permissions_check( $request ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php index 7dcc4d79236a1..a724439ad66e3 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php @@ -192,7 +192,7 @@ public function parse_url_details( $request ) { * * @since 5.9.0 * - * @return WP_Error|bool True if the request has permission, else WP_Error. + * @return true|WP_Error True if the request has permission, else WP_Error. */ public function permissions_check() { if ( current_user_can( 'edit_posts' ) ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php index acbd88c4896d1..f2d17186b62d7 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php @@ -133,7 +133,7 @@ public function get_items_permissions_check( $request ) { * @since 5.8.0 * * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + * @return WP_REST_Response Response object. */ public function get_items( $request ) { $this->retrieve_widgets(); From 8557f28456e17e25bc63f472b20df613a41f29a1 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Wed, 10 Jul 2024 21:23:38 +0000 Subject: [PATCH 096/422] REST API: Ensure string returned in WP_REST_Templates_Controller::get_wp_templates_author_text_field(). Adds a fail-safe to return an empty string should the `switch` ever fall through without returning. Currently, `WP_REST_Templates_Controller::get_wp_templates_author_text_field()` is tightly coupled to `WP_REST_Templates_Controller::get_wp_templates_original_source_field()`. However, if the `$original_source` values change in either method, but not both, it is possible a `void` or `null` will be returned, rather than a `string`. Follow-up to [57366]. Props antonvlasenko, hellofromTonya, debarghyabanerjee. Fixes #61580. git-svn-id: https://develop.svn.wordpress.org/trunk@58705 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/endpoints/class-wp-rest-templates-controller.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php index cbf0ee040a9b0..de18cbf5aeadb 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php @@ -871,6 +871,9 @@ private static function get_wp_templates_author_text_field( $template_object ) { } return $author->get( 'display_name' ); } + + // Fail-safe to return a string should the original source ever fall through. + return ''; } From 349590c8135b003857b47ff1a4636dc283d8b71c Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 11 Jul 2024 06:22:51 +0000 Subject: [PATCH 097/422] Docs: Fix typos in various REST API DocBlocks and comments. Follow-up to [34928], [43739], [46422], [50717], [51973], [54528]. Props antonvlasenko. Fixes #61593. git-svn-id: https://develop.svn.wordpress.org/trunk@58706 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/rest-api/class-wp-rest-request.php | 2 +- .../endpoints/class-wp-rest-attachments-controller.php | 8 ++++---- .../endpoints/class-wp-rest-posts-controller.php | 4 ++-- .../endpoints/class-wp-rest-terms-controller.php | 2 +- .../endpoints/class-wp-rest-url-details-controller.php | 10 +++++----- .../search/class-wp-rest-post-search-handler.php | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/wp-includes/rest-api/class-wp-rest-request.php b/src/wp-includes/rest-api/class-wp-rest-request.php index cbe6e4e70ebae..6ed6ce667432c 100644 --- a/src/wp-includes/rest-api/class-wp-rest-request.php +++ b/src/wp-includes/rest-api/class-wp-rest-request.php @@ -165,7 +165,7 @@ public function get_headers() { * Canonicalizes the header name. * * Ensures that header names are always treated the same regardless of - * source. Header names are always case insensitive. + * source. Header names are always case-insensitive. * * Note that we treat `-` (dashes) and `_` (underscores) as the same * character, as per header parsing rules in both Apache and nginx. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index e2bc034147e7a..b3004adb5e59a 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -450,7 +450,7 @@ public function update_item( $request ) { } /** - * Performs post processing on an attachment. + * Performs post-processing on an attachment. * * @since 5.3.0 * @@ -471,7 +471,7 @@ public function post_process_item( $request ) { } /** - * Checks if a given request can perform post processing on an attachment. + * Checks if a given request can perform post-processing on an attachment. * * @since 5.3.0 * @@ -601,7 +601,7 @@ public function edit_media_item( $request ) { $args = $modifier['args']; switch ( $modifier['type'] ) { case 'rotate': - // Rotation direction: clockwise vs. counter clockwise. + // Rotation direction: clockwise vs. counterclockwise. $rotate = 0 - $args['angle']; if ( 0 !== $rotate ) { @@ -661,7 +661,7 @@ public function edit_media_item( $request ) { $filename = "{$image_name}.{$image_ext}"; - // Create the uploads sub-directory if needed. + // Create the uploads subdirectory if needed. $uploads = wp_upload_dir(); // Make the file name unique in the (new) upload directory. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index a29f92c56fec7..e5420c74fb3ea 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -183,7 +183,7 @@ public function get_items_permissions_check( $request ) { * * @param bool $required Whether the post requires a password check. * @param WP_Post $post The post been password checked. - * @return bool Result of password check taking in to account REST API considerations. + * @return bool Result of password check taking into account REST API considerations. */ public function check_password_required( $required, $post ) { if ( ! $required ) { @@ -2051,7 +2051,7 @@ public function prepare_item_for_response( $item, $request ) { * * By default, WordPress will show password protected posts with a title of * "Protected: %s", as the REST API communicates the protected status of a post - * in a machine readable format, we remove the "Protected: " prefix. + * in a machine-readable format, we remove the "Protected: " prefix. * * @since 4.7.0 * diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php index 148c6c1c63c72..78c9d1ca2b0d8 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php @@ -164,7 +164,7 @@ public function check_read_terms_permission_for_post( $post, $request ) { return true; } - // Otherwise grant access if the post is readable by the logged in user. + // Otherwise grant access if the post is readable by the logged-in user. if ( current_user_can( 'read_post', $post->ID ) ) { return true; } diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php index a724439ad66e3..ab126f981c340 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php @@ -347,7 +347,7 @@ private function get_icon( $html, $url ) { * @since 5.9.0 * * @param array $meta_elements { - * A multi-dimensional indexed array on success, else empty array. + * A multidimensional indexed array on success, else empty array. * * @type string[] $0 Meta elements with a content attribute. * @type string[] $1 Content attribute's opening quotation mark. @@ -383,7 +383,7 @@ private function get_description( $meta_elements ) { * @since 5.9.0 * * @param array $meta_elements { - * A multi-dimensional indexed array on success, else empty array. + * A multidimensional indexed array on success, else empty array. * * @type string[] $0 Meta elements with a content attribute. * @type string[] $1 Content attribute's opening quotation mark. @@ -525,7 +525,7 @@ private function get_document_head( $html ) { * * @param string $html The string of HTML to be parsed. * @return array { - * A multi-dimensional indexed array on success, else empty array. + * A multidimensional indexed array on success, else empty array. * * @type string[] $0 Meta elements with a content attribute. * @type string[] $1 Content attribute's opening quotation mark. @@ -588,7 +588,7 @@ private function get_meta_with_content_elements( $html ) { /* * These are the options: - * - i : case insensitive + * - i : case-insensitive * - s : allows newline characters for the . match (needed for multiline elements) * - U means non-greedy matching */ @@ -637,7 +637,7 @@ private function get_metadata_from_meta_element( $meta_elements, $attr, $attr_va /* * These are the options: - * - i : case insensitive + * - i : case-insensitive * - s : allows newline characters for the . match (needed for multiline elements) * - U means non-greedy matching */ diff --git a/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php index 1d47723b41488..58b36506e7d9f 100644 --- a/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php +++ b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php @@ -187,7 +187,7 @@ public function prepare_item_links( $id ) { * * By default, WordPress will show password protected posts with a title of * "Protected: %s". As the REST API communicates the protected status of a post - * in a machine readable format, we remove the "Protected: " prefix. + * in a machine-readable format, we remove the "Protected: " prefix. * * @since 5.0.0 * From f1489fbc81fa9e053982a9a8df5ebf1839fca728 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Thu, 11 Jul 2024 13:38:30 +0000 Subject: [PATCH 098/422] Docs: Fix multi-line inline comments in WP_REST_Templates_Controller. Converts single inline comment formatting into multi-line inline comment formatting, per the coding standards. Ref: https://developer.wordpress.org/coding-standards/inline-documentation-standards/php/#5-inline-comments Follow-up to [58303], [57366]. See #61608. git-svn-id: https://develop.svn.wordpress.org/trunk@58707 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-templates-controller.php | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php index de18cbf5aeadb..e2063a450de9c 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php @@ -668,8 +668,10 @@ protected function prepare_item_for_database( $request ) { * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { - // Resolve pattern blocks so they don't need to be resolved client-side - // in the editor, improving performance. + /* + * Resolve pattern blocks so they don't need to be resolved client-side + * in the editor, improving performance. + */ $blocks = parse_blocks( $item->content ); $blocks = resolve_pattern_blocks( $blocks ); $item->content = serialize_blocks( $blocks ); @@ -806,11 +808,13 @@ public function prepare_item_for_response( $item, $request ) { */ private static function get_wp_templates_original_source_field( $template_object ) { if ( 'wp_template' === $template_object->type || 'wp_template_part' === $template_object->type ) { - // Added by theme. - // Template originally provided by a theme, but customized by a user. - // Templates originally didn't have the 'origin' field so identify - // older customized templates by checking for no origin and a 'theme' - // or 'custom' source. + /* + * Added by theme. + * Template originally provided by a theme, but customized by a user. + * Templates originally didn't have the 'origin' field so identify + * older customized templates by checking for no origin and a 'theme' + * or 'custom' source. + */ if ( $template_object->has_theme_file && ( 'theme' === $template_object->origin || ( empty( $template_object->origin ) && in_array( @@ -831,10 +835,12 @@ private static function get_wp_templates_original_source_field( $template_object return 'plugin'; } - // Added by site. - // Template was created from scratch, but has no author. Author support - // was only added to templates in WordPress 5.9. Fallback to showing the - // site logo and title. + /* + * Added by site. + * Template was created from scratch, but has no author. Author support + * was only added to templates in WordPress 5.9. Fallback to showing the + * site logo and title. + */ if ( empty( $template_object->has_theme_file ) && 'custom' === $template_object->source && empty( $template_object->author ) ) { return 'site'; } From 18250a40cb411dfb56b5884956ea793db78796d9 Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Fri, 12 Jul 2024 01:32:24 +0000 Subject: [PATCH 099/422] Editor: remove Group inner container from Grid variation in classic themes. Updates the logic in the layout filter that replaces the Group block inner container in classic themes to exclude the Grid variation. Props isabel_brison, aaronrobertshaw, andrewserong. See #61635. git-svn-id: https://develop.svn.wordpress.org/trunk@58708 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/layout.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/block-supports/layout.php b/src/wp-includes/block-supports/layout.php index e1894cdb72743..a5b438cd6acaf 100644 --- a/src/wp-includes/block-supports/layout.php +++ b/src/wp-includes/block-supports/layout.php @@ -951,6 +951,7 @@ function wp_add_parent_layout_to_parsed_block( $parsed_block, $source_block, $pa * to avoid breaking styles relying on that div. * * @since 5.8.0 + * @since 6.6.1 Removed inner container from Grid variations. * @access private * * @param string $block_content Rendered block content. @@ -967,7 +968,7 @@ function wp_restore_group_inner_container( $block_content, $block ) { if ( wp_theme_has_theme_json() || 1 === preg_match( $group_with_inner_container_regex, $block_content ) || - ( isset( $block['attrs']['layout']['type'] ) && 'flex' === $block['attrs']['layout']['type'] ) + ( isset( $block['attrs']['layout']['type'] ) && ( 'flex' === $block['attrs']['layout']['type'] || 'grid' === $block['attrs']['layout']['type'] ) ) ) { return $block_content; } From ad135d5f0ac9cf0494da92fcf4235672868a1ff4 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 12 Jul 2024 03:34:52 +0000 Subject: [PATCH 100/422] KSES: Add `opacity` to the list of safe CSS properties. Original PR from Gutenberg repository: * [https://github.com/WordPress/gutenberg/pull/59891 #59891 Update overlay step function in cover block] Reference: [https://developer.mozilla.org/en-US/docs/Web/CSS/opacity MDN Web Docs: opacity]. Props sunil25393, wildworks, poena, Mamaduka, presstoke. Fixes #61536. git-svn-id: https://develop.svn.wordpress.org/trunk@58709 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/kses.php | 1 + tests/phpunit/tests/kses.php | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php index 0ef5803ebc7b4..cd30d845f83af 100644 --- a/src/wp-includes/kses.php +++ b/src/wp-includes/kses.php @@ -2526,6 +2526,7 @@ function safecss_filter_attr( $css, $deprecated = '' ) { 'list-style-type', 'object-fit', 'object-position', + 'opacity', 'overflow', 'vertical-align', 'writing-mode', diff --git a/tests/phpunit/tests/kses.php b/tests/phpunit/tests/kses.php index ea65a89092c07..b5cca81047172 100644 --- a/tests/phpunit/tests/kses.php +++ b/tests/phpunit/tests/kses.php @@ -1353,6 +1353,11 @@ public function data_safecss_filter_attr() { 'css' => 'background-repeat: no-repeat', 'expected' => 'background-repeat: no-repeat', ), + // `opacity` introduced in 6.7. + array( + 'css' => 'opacity: 10', + 'expected' => 'opacity: 10', + ), ); } From 7f697bceb1655d16a62561c02f432c14d30b5d88 Mon Sep 17 00:00:00 2001 From: Joe McGill Date: Fri, 12 Jul 2024 19:24:12 +0000 Subject: [PATCH 101/422] Editor: Revert caching of global styles for blocks. This reverts [58334] to fix a bug where edits to block styles made in the site editor were not showing in the front end. Props joemcgill, spacedmonkey, andrewserong, hellofromtonya, audrasjb. See #59595. git-svn-id: https://develop.svn.wordpress.org/trunk@58710 602fd350-edb4-49c9-b593-d223f7449a82 --- .../global-styles-and-settings.php | 42 +------- .../theme/wpAddGlobalStylesForBlocks.php | 102 ------------------ 2 files changed, 1 insertion(+), 143 deletions(-) diff --git a/src/wp-includes/global-styles-and-settings.php b/src/wp-includes/global-styles-and-settings.php index efa68ce36b114..b79eac58450e2 100644 --- a/src/wp-includes/global-styles-and-settings.php +++ b/src/wp-includes/global-styles-and-settings.php @@ -255,44 +255,8 @@ function wp_add_global_styles_for_blocks() { $tree = WP_Theme_JSON_Resolver::get_merged_data(); $block_nodes = $tree->get_styles_block_nodes(); - - $can_use_cached = ! wp_is_development_mode( 'theme' ); - if ( $can_use_cached ) { - // Hash global settings and block nodes together to optimize performance of key generation. - $hash = md5( - wp_json_encode( - array( - 'global_setting' => wp_get_global_settings(), - 'block_nodes' => $block_nodes, - ) - ) - ); - - $cache_key = "wp_styles_for_blocks:$hash"; - $cached = get_site_transient( $cache_key ); - if ( ! is_array( $cached ) ) { - $cached = array(); - } - } - - $update_cache = false; - foreach ( $block_nodes as $metadata ) { - - if ( $can_use_cached ) { - // Use the block name as the key for cached CSS data. Otherwise, use a hash of the metadata. - $cache_node_key = isset( $metadata['name'] ) ? $metadata['name'] : md5( wp_json_encode( $metadata ) ); - - if ( isset( $cached[ $cache_node_key ] ) ) { - $block_css = $cached[ $cache_node_key ]; - } else { - $block_css = $tree->get_styles_for_block( $metadata ); - $cached[ $cache_node_key ] = $block_css; - $update_cache = true; - } - } else { - $block_css = $tree->get_styles_for_block( $metadata ); - } + $block_css = $tree->get_styles_for_block( $metadata ); if ( ! wp_should_load_separate_core_block_assets() ) { wp_add_inline_style( 'global-styles', $block_css ); @@ -338,10 +302,6 @@ function wp_add_global_styles_for_blocks() { } } } - - if ( $update_cache ) { - set_site_transient( $cache_key, $cached, HOUR_IN_SECONDS ); - } } /** diff --git a/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php b/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php index fb547db50b763..7d34e8d2a6b33 100644 --- a/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php +++ b/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php @@ -75,87 +75,6 @@ public function test_third_party_blocks_inline_styles_get_registered_to_global_s ); } - /** - * Ensure that the block cache is set for global styles. - * - * @ticket 59595 - */ - public function test_styles_for_blocks_cache_is_set() { - $this->set_up_third_party_block(); - - wp_register_style( 'global-styles', false, array(), true, true ); - - $cache_key = $this->get_wp_styles_for_blocks_cache_key(); - $styles_for_blocks_before = get_site_transient( $cache_key ); - $this->assertFalse( $styles_for_blocks_before ); - - wp_add_global_styles_for_blocks(); - - $styles_for_blocks_after = get_site_transient( $cache_key ); - $this->assertNotEmpty( $styles_for_blocks_after ); - } - - /** - * Confirm that the block cache is skipped when in dev mode for themes. - * - * @ticket 59595 - */ - public function test_styles_for_blocks_skips_cache_in_dev_mode() { - global $_wp_tests_development_mode; - - $orig_dev_mode = $_wp_tests_development_mode; - - // Setting development mode to theme should skip the cache. - $_wp_tests_development_mode = 'theme'; - - wp_register_style( 'global-styles', false, array(), true, true ); - - // Initial register of global styles. - wp_add_global_styles_for_blocks(); - - $cache_key = $this->get_wp_styles_for_blocks_cache_key(); - $styles_for_blocks_initial = get_site_transient( $cache_key ); - - // Cleanup. - $_wp_tests_development_mode = $orig_dev_mode; - - $this->assertFalse( $styles_for_blocks_initial ); - } - - /** - * Confirm that the block cache is updated if the block meta has changed. - * - * @ticket 59595 - */ - public function test_styles_for_blocks_cache_is_skipped() { - wp_register_style( 'global-styles', false, array(), true, true ); - - // Initial register of global styles. - wp_add_global_styles_for_blocks(); - - $cache_key = $this->get_wp_styles_for_blocks_cache_key(); - $styles_for_blocks_initial = get_site_transient( $cache_key ); - $this->assertNotEmpty( $styles_for_blocks_initial, 'Initial cache was not set.' ); - - $this->set_up_third_party_block(); - - /* - * Call register of global styles again to ensure the cache is updated. - * In normal conditions, this function is only called once per request. - */ - wp_add_global_styles_for_blocks(); - - $cache_key = $this->get_wp_styles_for_blocks_cache_key(); - $styles_for_blocks_updated = get_site_transient( $cache_key ); - $this->assertNotEmpty( $styles_for_blocks_updated, 'Updated cache was not set.' ); - - $this->assertNotEquals( - $styles_for_blocks_initial, - $styles_for_blocks_updated, - 'Block style cache was not updated.' - ); - } - /** * @ticket 56915 * @ticket 61165 @@ -334,25 +253,4 @@ private function get_global_styles() { $actual = wp_styles()->get_data( 'global-styles', 'after' ); return is_array( $actual ) ? $actual : array(); } - - /** - * Get cache key for `wp_styles_for_blocks`. - * - * @return string The cache key. - */ - private function get_wp_styles_for_blocks_cache_key() { - $tree = WP_Theme_JSON_Resolver::get_merged_data(); - $block_nodes = $tree->get_styles_block_nodes(); - // md5 is a costly operation, so we hashing global settings and block_node in a single call. - $hash = md5( - wp_json_encode( - array( - 'global_setting' => wp_get_global_settings(), - 'block_nodes' => $block_nodes, - ) - ) - ); - - return "wp_styles_for_blocks:$hash"; - } } From cd3bf1b6fc6afec1aee47b0c3dd232c249a3772c Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 12 Jul 2024 21:58:20 +0000 Subject: [PATCH 102/422] HTML API: Join successive text nodes in html5lib test representation. Many tests from the html5lib test suite fail because of differences in text handling between a DOM API and the HTML API, even though the semantics of the parse are equivalent. For example, it's possible in the HTML API to read multiple successive text nodes when the tokens between them are ignored. The test suite didn't account for this and so was failing tests. This patch improves the construction of the representation to compare against the test suite so that those tests don't fail inaccurately. Developed in https://github.com/WordPress/wordpress-develop/pull/6984 Discussed in https://core.trac.wordpress.org/ticket/61576 Props bernhard-reiter, dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58712 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/wpHtmlProcessorHtml5lib.php | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index 523966d412d25..86abe7f5aeffb 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -40,7 +40,6 @@ class Tests_HtmlApi_Html5lib extends WP_UnitTestCase { 'menuitem-element/line0012' => 'Bug.', 'tests1/line0342' => "Closing P tag implicitly creates opener, which we don't visit.", 'tests1/line0720' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests1/line0833' => 'Bug.', 'tests15/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', 'tests15/line0022' => 'Unimplemented: Reconstruction of active formatting elements.', 'tests2/line0650' => 'Whitespace only test never enters "in body" parsing mode.', @@ -51,15 +50,8 @@ class Tests_HtmlApi_Html5lib extends WP_UnitTestCase { 'tests23/line0101' => 'Unimplemented: Reconstruction of active formatting elements.', 'tests25/line0169' => 'Bug.', 'tests26/line0263' => 'Bug: An active formatting element should be created for a trailing text node.', - 'tests7/line0354' => 'Bug.', - 'tests8/line0001' => 'Bug.', - 'tests8/line0020' => 'Bug.', - 'tests8/line0037' => 'Bug.', - 'tests8/line0052' => 'Bug.', - 'webkit01/line0174' => 'Bug.', ); - /** * Verify the parsing results of the HTML Processor against the * test cases in the Html5lib tests project. @@ -160,12 +152,20 @@ private static function build_tree_representation( ?string $fragment_context, st // Initially, assume we're 2 levels deep at: html > body > [position] $indent_level = 2; $indent = ' '; + $was_text = null; + $text_node = ''; while ( $processor->next_token() ) { if ( ! is_null( $processor->get_last_error() ) ) { return null; } + if ( $was_text && '#text' !== $processor->get_token_name() ) { + $output .= "{$text_node}\"\n"; + $was_text = false; + $text_node = ''; + } + switch ( $processor->get_token_type() ) { case '#tag': $tag_name = strtolower( $processor->get_tag() ); @@ -198,12 +198,27 @@ private static function build_tree_representation( ?string $fragment_context, st } $output .= str_repeat( $indent, $tag_indent + 1 ) . "{$attribute_name}=\"{$val}\"\n"; } + + // Self-contained tags contain their inner contents as modifiable text. + $modifiable_text = $processor->get_modifiable_text(); + if ( '' !== $modifiable_text ) { + $was_text = true; + if ( '' === $text_node ) { + $text_node = str_repeat( $indent, $indent_level ) . '"'; + } + $text_node .= $modifiable_text; + --$indent_level; + } } break; case '#text': - $output .= str_repeat( $indent, $indent_level ) . "\"{$processor->get_modifiable_text()}\"\n"; + $was_text = true; + if ( '' === $text_node ) { + $text_node .= str_repeat( $indent, $indent_level ) . '"'; + } + $text_node .= $processor->get_modifiable_text(); break; case '#comment': @@ -238,6 +253,10 @@ private static function build_tree_representation( ?string $fragment_context, st return null; } + if ( '' !== $text_node ) { + $output .= "${text_node}\"\n"; + } + // Tests always end with a trailing newline. return $output . "\n"; } From 4eec5cb9787ee18b8a4a1f7cbc28e861a885be55 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 12 Jul 2024 22:18:16 +0000 Subject: [PATCH 103/422] HTML API: Simplify breadcrumb accounting. Since the HTML Processor started visiting all nodes in a document, both real and virtual, the breadcrumb accounting became a bit complicated and it's not entirely clear that it is fully reliable. In this patch the breadcrumbs are rebuilt separately from the stack of open elements in order to eliminate the problem of the stateful stack interactions and the post-hoc event queue. Breadcrumbs are greatly simplified as a result, and more verifiably correct, in this construction. Developed in https://github.com/WordPress/wordpress-develop/pull/6981 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58590]. Props bernhard-reiter, dmsnell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58713 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 126 +++++++----------- .../html-api/wpHtmlProcessorSemanticRules.php | 11 +- 2 files changed, 61 insertions(+), 76 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 223fcda76a885..d7f77f495cbe9 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -211,6 +211,15 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { */ private $element_queue = array(); + /** + * Stores the current breadcrumbs. + * + * @since 6.7.0 + * + * @var string[] + */ + private $breadcrumbs = array(); + /** * Current stack event, if set, representing a matched token. * @@ -310,8 +319,8 @@ public static function create_fragment( $html, $context = '', $encoding = false ); - $processor->state->stack_of_open_elements->push( $context_node ); $processor->context_node = $context_node; + $processor->breadcrumbs = array( 'HTML', $context_node->node_name ); return $processor; } @@ -523,44 +532,46 @@ public function next_token() { return false; } - if ( 'done' !== $this->has_seen_context_node && 0 === count( $this->element_queue ) && ! $this->step() ) { - while ( 'context-node' !== $this->state->stack_of_open_elements->current_node()->bookmark_name && $this->state->stack_of_open_elements->pop() ) { - continue; - } - $this->has_seen_context_node = 'done'; - return $this->next_token(); + /* + * Prime the events if there are none. + * + * @todo In some cases, probably related to the adoption agency + * algorithm, this call to step() doesn't create any new + * events. Calling it again creates them. Figure out why + * this is and if it's inherent or if it's a bug. Looping + * until there are events or until there are no more + * tokens works in the meantime and isn't obviously wrong. + */ + while ( empty( $this->element_queue ) && $this->step() ) { + continue; } + // Process the next event on the queue. $this->current_element = array_shift( $this->element_queue ); - while ( isset( $this->context_node ) && ! $this->has_seen_context_node ) { - if ( isset( $this->current_element ) ) { - if ( $this->context_node === $this->current_element->token && WP_HTML_Stack_Event::PUSH === $this->current_element->operation ) { - $this->has_seen_context_node = true; - return $this->next_token(); - } - } - $this->current_element = array_shift( $this->element_queue ); + if ( ! isset( $this->current_element ) ) { + return false; } - if ( ! isset( $this->current_element ) ) { - if ( 'done' === $this->has_seen_context_node ) { - return false; - } else { - return $this->next_token(); - } + $is_pop = WP_HTML_Stack_Event::POP === $this->current_element->operation; + + /* + * The root node only exists in the fragment parser, and closing it + * indicates that the parse is complete. Stop before popping if from + * the breadcrumbs. + */ + if ( 'root-node' === $this->current_element->token->bookmark_name ) { + return ! $is_pop && $this->next_token(); } - if ( isset( $this->context_node ) && WP_HTML_Stack_Event::POP === $this->current_element->operation && $this->context_node === $this->current_element->token ) { - $this->element_queue = array(); - $this->current_element = null; - return false; + // Adjust the breadcrumbs for this event. + if ( $is_pop ) { + array_pop( $this->breadcrumbs ); + } else { + $this->breadcrumbs[] = $this->current_element->token->node_name; } // Avoid sending close events for elements which don't expect a closing. - if ( - WP_HTML_Stack_Event::POP === $this->current_element->operation && - ! static::expects_closer( $this->current_element->token ) - ) { + if ( $is_pop && ! static::expects_closer( $this->current_element->token ) ) { return $this->next_token(); } @@ -643,10 +654,11 @@ public function matches_breadcrumbs( $breadcrumbs ) { return false; } - foreach ( $this->state->stack_of_open_elements->walk_up() as $node ) { + for ( $i = count( $this->breadcrumbs ) - 1; $i >= 0; $i-- ) { + $node = $this->breadcrumbs[ $i ]; $crumb = strtoupper( current( $breadcrumbs ) ); - if ( '*' !== $crumb && $node->node_name !== $crumb ) { + if ( '*' !== $crumb && $node !== $crumb ) { return false; } @@ -862,46 +874,7 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { * @return string[]|null Array of tag names representing path to matched node, if matched, otherwise NULL. */ public function get_breadcrumbs() { - $breadcrumbs = array(); - - foreach ( $this->state->stack_of_open_elements->walk_down() as $stack_item ) { - $breadcrumbs[] = $stack_item->node_name; - } - - if ( ! $this->is_virtual() ) { - return $breadcrumbs; - } - - foreach ( $this->element_queue as $queue_item ) { - if ( $this->current_element->token->bookmark_name === $queue_item->token->bookmark_name ) { - break; - } - - if ( 'context-node' === $queue_item->token->bookmark_name ) { - break; - } - - if ( 'real' === $queue_item->provenance ) { - break; - } - - if ( WP_HTML_Stack_Event::PUSH === $queue_item->operation ) { - $breadcrumbs[] = $queue_item->token->node_name; - } else { - array_pop( $breadcrumbs ); - } - } - - if ( null !== parent::get_token_name() && ! parent::is_tag_closer() ) { - array_pop( $breadcrumbs ); - } - - // Add the virtual node we're at. - if ( WP_HTML_Stack_Event::PUSH === $this->current_element->operation ) { - $breadcrumbs[] = $this->current_element->token->node_name; - } - - return $breadcrumbs; + return $this->breadcrumbs; } /** @@ -930,9 +903,7 @@ public function get_breadcrumbs() { * @return int Nesting-depth of current location in the document. */ public function get_current_depth() { - return $this->is_virtual() - ? count( $this->get_breadcrumbs() ) - : $this->state->stack_of_open_elements->count(); + return count( $this->breadcrumbs ); } /** @@ -2552,7 +2523,6 @@ public function seek( $bookmark_name ) { ? $this->bookmarks[ $this->state->current_token->bookmark_name ]->start : 0; $bookmark_starts_at = $this->bookmarks[ $actual_bookmark_name ]->start; - $bookmark_length = $this->bookmarks[ $actual_bookmark_name ]->length; $direction = $bookmark_starts_at > $processor_started_at ? 'forward' : 'backward'; /* @@ -2610,6 +2580,12 @@ public function seek( $bookmark_name ) { $this->state->frameset_ok = true; $this->element_queue = array(); $this->current_element = null; + + if ( isset( $this->context_node ) ) { + $this->breadcrumbs = array_slice( $this->breadcrumbs, 0, 2 ); + } else { + $this->breadcrumbs = array(); + } } // When moving forwards, reparse the document until reaching the same location as the original bookmark. diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php index 717276935a780..adce614506429 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php @@ -387,7 +387,16 @@ public function test_in_body_any_other_end_tag_with_unclosed_non_special_element $this->assertSame( 'CODE', $processor->get_tag(), "Expected to start test on CODE element but found {$processor->get_tag()} instead." ); $this->assertSame( array( 'HTML', 'BODY', 'DIV', 'SPAN', 'CODE' ), $processor->get_breadcrumbs(), 'Failed to produce expected DOM nesting.' ); - $this->assertTrue( $processor->next_token(), 'Failed to advance past CODE tag to expected SPAN closer.' ); + $this->assertTrue( + $processor->next_tag( + array( + 'tag_name' => 'SPAN', + 'tag_closers' => 'visit', + ) + ), + 'Failed to advance past CODE tag to expected SPAN closer.' + ); + $this->assertSame( 'SPAN', $processor->get_tag() ); $this->assertTrue( $processor->is_tag_closer(), 'Expected to find closing SPAN, but found opener instead.' ); $this->assertSame( array( 'HTML', 'BODY', 'DIV' ), $processor->get_breadcrumbs(), 'Failed to advance past CODE tag to expected DIV opener.' ); From b64bb900e894f46a6d67eecb62901bffc2486ecb Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 12 Jul 2024 22:27:20 +0000 Subject: [PATCH 104/422] HTML API: Add context to Unsupported_Exception class for improved debugging. The HTML Processor internally throws an exception when it reaches HTML that it knows it cannot process, but this exception is not made available to calling code. It can be useful to extract more knowledge about why it gave up, especially for debugging purposes. In this patch, more context is added to the WP_HTML_Unsupported_Exception and the last exception is made available to calling code through a new method, `get_unsupported_exception()`. Developed in https://github.com/WordPress/wordpress-develop/pull/6985 Discussed in https://core.trac.wordpress.org/ticket/61646 Props bernhard-reiter, dmsnell, jonsurrell. See #61646. git-svn-id: https://develop.svn.wordpress.org/trunk@58714 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 151 +++++++++++------- .../class-wp-html-unsupported-exception.php | 84 ++++++++++ 2 files changed, 179 insertions(+), 56 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index d7f77f495cbe9..04c387c003d8f 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -188,6 +188,17 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { */ private $last_error = null; + /** + * Stores context for why the parser bailed on unsupported HTML, if it did. + * + * @see self::get_unsupported_exception + * + * @since 6.7.0 + * + * @var WP_HTML_Unsupported_Exception|null + */ + private $unsupported_exception = null; + /** * Releases a bookmark when PHP garbage-collects its wrapping WP_HTML_Token instance. * @@ -384,6 +395,45 @@ function ( WP_HTML_Token $token ) { }; } + /** + * Stops the parser and terminates its execution when encountering unsupported markup. + * + * @throws WP_HTML_Unsupported_Exception Halts execution of the parser. + * + * @since 6.7.0 + * + * @param string $message Explains support is missing in order to parse the current node. + * + * @return mixed + */ + private function bail( string $message ) { + $here = $this->bookmarks[ $this->state->current_token->bookmark_name ]; + $token = substr( $this->html, $here->start, $here->length ); + + $open_elements = array(); + foreach ( $this->state->stack_of_open_elements->stack as $item ) { + $open_elements[] = $item->node_name; + } + + $active_formats = array(); + foreach ( $this->state->active_formatting_elements->walk_down() as $item ) { + $active_formats[] = $item->node_name; + } + + $this->last_error = self::ERROR_UNSUPPORTED; + + $this->unsupported_exception = new WP_HTML_Unsupported_Exception( + $message, + $this->state->current_token->node_name, + $here->start, + $token, + $open_elements, + $active_formats + ); + + throw $this->unsupported_exception; + } + /** * Returns the last error, if any. * @@ -411,6 +461,21 @@ public function get_last_error() { return $this->last_error; } + /** + * Returns context for why the parser aborted due to unsupported HTML, if it did. + * + * This is meant for debugging purposes, not for production use. + * + * @since 6.7.0 + * + * @see self::$unsupported_exception + * + * @return WP_HTML_Unsupported_Exception|null + */ + public function get_unsupported_exception() { + return $this->unsupported_exception; + } + /** * Finds the next tag matching the $query. * @@ -841,8 +906,7 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { // This should be unreachable but PHP doesn't have total type checking on switch. default: - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "Found unrecognized insertion mode '{$this->state->insertion_mode}'." ); + $this->bail( "Unaware of the requested parsing mode: '{$this->state->insertion_mode}'." ); } } catch ( WP_HTML_Unsupported_Exception $e ) { /* @@ -922,8 +986,7 @@ public function get_current_depth() { * @return bool Whether an element was found. */ private function step_initial() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -942,8 +1005,7 @@ private function step_initial() { * @return bool Whether an element was found. */ private function step_before_html() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -962,8 +1024,7 @@ private function step_before_html() { * @return bool Whether an element was found. */ private function step_before_head() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -982,8 +1043,7 @@ private function step_before_head() { * @return bool Whether an element was found. */ private function step_in_head() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1002,8 +1062,7 @@ private function step_in_head() { * @return bool Whether an element was found. */ private function step_in_head_noscript() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1022,8 +1081,7 @@ private function step_in_head_noscript() { * @return bool Whether an element was found. */ private function step_after_head() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1445,8 +1503,9 @@ private function step_in_body() { * > than the end tag token that it actually is. */ case '-BR': - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( 'Closing BR tags require unimplemented special handling.' ); + $this->bail( 'Closing BR tags require unimplemented special handling.' ); + // This return required because PHPCS can't determine that the call to bail() throws. + return false; /* * > A start tag whose tag name is one of: "area", "br", "embed", "img", "keygen", "wbr" @@ -1602,8 +1661,7 @@ private function step_in_body() { case 'TITLE': case 'TR': case 'XMP': - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "Cannot process {$token_name} element." ); + $this->bail( "Cannot process {$token_name} element." ); } if ( ! parent::is_tag_closer() ) { @@ -1665,8 +1723,7 @@ private function step_in_body() { * @return bool Whether an element was found. */ private function step_in_table() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1685,8 +1742,7 @@ private function step_in_table() { * @return bool Whether an element was found. */ private function step_in_table_text() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1705,8 +1761,7 @@ private function step_in_table_text() { * @return bool Whether an element was found. */ private function step_in_caption() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1725,8 +1780,7 @@ private function step_in_caption() { * @return bool Whether an element was found. */ private function step_in_column_group() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1745,8 +1799,7 @@ private function step_in_column_group() { * @return bool Whether an element was found. */ private function step_in_table_body() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1765,8 +1818,7 @@ private function step_in_table_body() { * @return bool Whether an element was found. */ private function step_in_row() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1785,8 +1837,7 @@ private function step_in_row() { * @return bool Whether an element was found. */ private function step_in_cell() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -1986,8 +2037,7 @@ private function step_in_select() { * @return bool Whether an element was found. */ private function step_in_select_in_table() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2006,8 +2056,7 @@ private function step_in_select_in_table() { * @return bool Whether an element was found. */ private function step_in_template() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2026,8 +2075,7 @@ private function step_in_template() { * @return bool Whether an element was found. */ private function step_after_body() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2046,8 +2094,7 @@ private function step_after_body() { * @return bool Whether an element was found. */ private function step_in_frameset() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2066,8 +2113,7 @@ private function step_in_frameset() { * @return bool Whether an element was found. */ private function step_after_frameset() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2086,8 +2132,7 @@ private function step_after_frameset() { * @return bool Whether an element was found. */ private function step_after_after_body() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2106,8 +2151,7 @@ private function step_after_after_body() { * @return bool Whether an element was found. */ private function step_after_after_frameset() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /** @@ -2126,8 +2170,7 @@ private function step_after_after_frameset() { * @return bool Whether an element was found. */ private function step_in_foreign_content() { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } /* @@ -2835,8 +2878,7 @@ private function reconstruct_active_formatting_elements() { return false; } - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( 'Cannot reconstruct active formatting elements when advancing and rewinding is required.' ); + $this->bail( 'Cannot reconstruct active formatting elements when advancing and rewinding is required.' ); } /** @@ -3072,8 +3114,7 @@ private function run_adoption_agency_algorithm() { // > If there is no such element, then return and instead act as described in the "any other end tag" entry above. if ( null === $formatting_element ) { - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( 'Cannot run adoption agency when "any other end tag" is required.' ); + $this->bail( 'Cannot run adoption agency when "any other end tag" is required.' ); } // > If formatting element is not in the stack of open elements, then this is a parse error; remove the element from the list, and return. @@ -3125,12 +3166,10 @@ private function run_adoption_agency_algorithm() { } } - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( 'Cannot extract common ancestor in adoption agency algorithm.' ); + $this->bail( 'Cannot extract common ancestor in adoption agency algorithm.' ); } - $this->last_error = self::ERROR_UNSUPPORTED; - throw new WP_HTML_Unsupported_Exception( 'Cannot run adoption agency when looping required.' ); + $this->bail( 'Cannot run adoption agency when looping required.' ); } /** diff --git a/src/wp-includes/html-api/class-wp-html-unsupported-exception.php b/src/wp-includes/html-api/class-wp-html-unsupported-exception.php index 6e7228670bf8b..7b244a5e8a8dd 100644 --- a/src/wp-includes/html-api/class-wp-html-unsupported-exception.php +++ b/src/wp-includes/html-api/class-wp-html-unsupported-exception.php @@ -21,11 +21,95 @@ * operation and signify that the given HTML cannot be processed. * * @since 6.4.0 + * @since 6.7.0 Gained contextual information for use in debugging parse failures. * * @access private * * @see WP_HTML_Processor */ class WP_HTML_Unsupported_Exception extends Exception { + /** + * Name of the matched token when the exception was raised, + * if matched on a token. + * + * This does not imply that the token itself was unsupported, but it + * may have been the case that the token triggered part of the HTML + * parsing that isn't supported, such as the adoption agency algorithm. + * + * @since 6.7.0 + * + * @var string + */ + public $token_name; + /** + * Number of bytes into the input HTML document where the parser was + * parsing when the exception was raised. + * + * Use this to reconstruct context for the failure. + * + * @since 6.7.0 + * + * @var int + */ + public $token_at; + + /** + * Full raw text of the matched token when the exception was raised, + * if matched on a token. + * + * Whereas the `$token_name` will be normalized, this contains the full + * raw text of the token, including original casing, duplicated attributes, + * and other syntactic variations that are normally abstracted in the HTML API. + * + * @since 6.7.0 + * + * @var string + */ + public $token; + + /** + * Stack of open elements when the exception was raised. + * + * Use this to trace the parsing circumstances which led to the exception. + * + * @since 6.7.0 + * + * @var string[] + */ + public $stack_of_open_elements = array(); + + /** + * List of active formatting elements when the exception was raised. + * + * Use this to trace the parsing circumstances which led to the exception. + * + * @since 6.7.0 + * + * @var string[] + */ + public $active_formatting_elements = array(); + + /** + * Constructor function. + * + * @since 6.7.0 + * + * @param string $message Brief message explaining what is unsupported, the reason this exception was raised. + * @param string $token_name Normalized name of matched token when this exception was raised. + * @param int $token_at Number of bytes into source HTML document where matched token starts. + * @param string $token Full raw text of matched token when this exception was raised. + * @param string[] $stack_of_open_elements Stack of open elements when this exception was raised. + * @param string[] $active_formatting_elements List of active formatting elements when this exception was raised. + */ + public function __construct( string $message, string $token_name, int $token_at, string $token, array $stack_of_open_elements, array $active_formatting_elements ) { + parent::__construct( $message ); + + $this->token_name = $token_name; + $this->token_at = $token_at; + $this->token = $token; + + $this->stack_of_open_elements = $stack_of_open_elements; + $this->active_formatting_elements = $active_formatting_elements; + } } From 8616ad913aea19270939968b8ba5d3a1c78d5278 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 13 Jul 2024 05:01:47 +0000 Subject: [PATCH 105/422] Filesystem API: Add a return value for `wp_delete_file()`. This addresses a discrepancy where using `unlink()` allows for checking if it was successful via the return value, but `wp_delete_file()` did not have a return value, making it impossible to verify the result without doing overhead checks if the file still exists. This also brings more consistency with the other `wp_delete_*()` functions, specifically: * `wp_delete_file_from_directory()` * `wp_delete_post()` * `wp_delete_post_revision()` * `wp_delete_attachment()` * `wp_delete_attachment_files()` * `wp_delete_comment()` * `wp_delete_nav_menu()` * `wp_delete_term()` * `wp_delete_site()` * `wp_delete_user()` Includes adding basic unit tests for `wp_delete_file()`. Follow-up to [31575]. Props bedas, debarghyabanerjee, mukesh27, SergeyBiryukov. Fixes #61590. git-svn-id: https://develop.svn.wordpress.org/trunk@58715 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 11 ++++-- .../phpunit/tests/functions/wpDeleteFile.php | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 tests/phpunit/tests/functions/wpDeleteFile.php diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index c2fe1228bf1d6..e99a93b80db71 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -7644,8 +7644,10 @@ function wp_validate_boolean( $value ) { * Deletes a file. * * @since 4.2.0 + * @since 6.7.0 A return value was added. * * @param string $file The path to the file to delete. + * @return bool True on success, false on failure. */ function wp_delete_file( $file ) { /** @@ -7656,9 +7658,12 @@ function wp_delete_file( $file ) { * @param string $file Path to the file to delete. */ $delete = apply_filters( 'wp_delete_file', $file ); + if ( ! empty( $delete ) ) { - @unlink( $delete ); + return @unlink( $delete ); } + + return false; } /** @@ -7691,9 +7696,7 @@ function wp_delete_file_from_directory( $file, $directory ) { return false; } - wp_delete_file( $file ); - - return true; + return wp_delete_file( $file ); } /** diff --git a/tests/phpunit/tests/functions/wpDeleteFile.php b/tests/phpunit/tests/functions/wpDeleteFile.php new file mode 100644 index 0000000000000..33de72a9ed1d4 --- /dev/null +++ b/tests/phpunit/tests/functions/wpDeleteFile.php @@ -0,0 +1,38 @@ +assertTrue( wp_delete_file( $file ), 'File deletion failed.' ); + $this->assertFileDoesNotExist( $file, 'The file was not deleted.' ); + } + + /** + * @ticket 61590 + */ + public function test_wp_delete_file_with_empty_path() { + $this->assertFalse( wp_delete_file( '' ) ); + } + + /** + * @ticket 61590 + */ + public function test_wp_delete_file_with_file_that_does_not_exist() { + $file = DIR_TESTDATA . '/a_file_that_does_not_exist.txt'; + + $this->assertFileDoesNotExist( $file, "$file already existed as a file before testing." ); + $this->assertFalse( wp_delete_file( $file ), 'Attempting to delete a non-existent file should return false.' ); + } +} From 8afa3b92f4764f0ba6ea59cd44ca1cd2c14d476b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 14 Jul 2024 03:45:12 +0000 Subject: [PATCH 106/422] Site Health: Correctly display auto-update status for parent theme. Follow-up to [47835], [48731]. Props apermo. Fixes #61649. See #61648. git-svn-id: https://develop.svn.wordpress.org/trunk@58716 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-debug-data.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php index 2d6fb418d6807..109e38b0635d6 100644 --- a/src/wp-admin/includes/class-wp-debug-data.php +++ b/src/wp-admin/includes/class-wp-debug-data.php @@ -1299,7 +1299,7 @@ public static function debug_data() { } /** This filter is documented in wp-admin/includes/class-wp-debug-data.php */ - $parent_theme_auto_update_string = apply_filters( 'theme_auto_update_debug_string', $auto_updates_string, $parent_theme, $enabled ); + $parent_theme_auto_update_string = apply_filters( 'theme_auto_update_debug_string', $parent_theme_auto_update_string, $parent_theme, $enabled ); $info['wp-parent-theme']['fields']['auto_update'] = array( 'label' => __( 'Auto-update' ), From 5b0006ca9b5408aa73b6dc71fb5b3ebf85f497ec Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 15 Jul 2024 01:57:22 +0000 Subject: [PATCH 107/422] Docs: Correct documentation for `_wp_preview_meta_filter()`. The `$single` parameter is passed via the `get_post_metadata` filter and has no default value. Includes minor code layout fixes for consistency with the formatting of other long conditionals in core. Follow-up to [56714]. Props rodrigosprimo. Fixes #61645. git-svn-id: https://develop.svn.wordpress.org/trunk@58717 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/revision.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/wp-includes/revision.php b/src/wp-includes/revision.php index 065278b5f8319..2747ea92673d8 100644 --- a/src/wp-includes/revision.php +++ b/src/wp-includes/revision.php @@ -1107,24 +1107,24 @@ function _wp_upgrade_revisions_of_post( $post, $revisions ) { * @param mixed $value Meta value to filter. * @param int $object_id Object ID. * @param string $meta_key Meta key to filter a value for. - * @param bool $single Whether to return a single value. Default false. + * @param bool $single Whether to return a single value. * @return mixed Original meta value if the meta key isn't revisioned, the object doesn't exist, * the post type is a revision or the post ID doesn't match the object ID. * Otherwise, the revisioned meta value is returned for the preview. */ function _wp_preview_meta_filter( $value, $object_id, $meta_key, $single ) { - $post = get_post(); - if ( - empty( $post ) || - $post->ID !== $object_id || - ! in_array( $meta_key, wp_post_revision_meta_keys( $post->post_type ), true ) || - 'revision' === $post->post_type + + if ( empty( $post ) + || $post->ID !== $object_id + || ! in_array( $meta_key, wp_post_revision_meta_keys( $post->post_type ), true ) + || 'revision' === $post->post_type ) { return $value; } $preview = wp_get_post_autosave( $post->ID ); + if ( false === $preview ) { return $value; } From f778b816873f1da0c02ceaf12f0682bd514f846d Mon Sep 17 00:00:00 2001 From: David Baumwald Date: Mon, 15 Jul 2024 13:57:11 +0000 Subject: [PATCH 108/422] Bundled Themes: Bump default theme versions for release with 6.6. This updates the version of each default theme to the following versions: - Twenty Ten: 4.2 - Twenty Eleven: 4.7 - Twenty Twelve: 4.3 - Twenty Thirteen: 4.2 - Twenty Fourteen: 4.0 - Twenty Fifteen: 3.8 - Twenty Sixteen: 3.3 - Twenty Seventeen: 3.7 - Twenty Nineteen: 2.9 - Twenty Twenty: 2.7 - Twenty Twenty-One: 2.3 - Twenty Twenty-Two: 1.8 - Twenty Twenty-Three: 1.5 - Twenty Twenty-Four: 1.2 These versions will released in coordination with WordPress 6.6. Props sabernhardt, shail-mehta, rudlinkon. Fixes #60701. git-svn-id: https://develop.svn.wordpress.org/trunk@58718 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyeleven/functions.php | 4 ++-- src/wp-content/themes/twentyeleven/header.php | 2 +- src/wp-content/themes/twentyeleven/inc/theme-options.php | 2 +- src/wp-content/themes/twentyeleven/readme.txt | 9 +++++++-- src/wp-content/themes/twentyeleven/style.css | 4 ++-- src/wp-content/themes/twentyfifteen/functions.php | 6 +++--- src/wp-content/themes/twentyfifteen/readme.txt | 9 +++++++-- src/wp-content/themes/twentyfifteen/style.css | 4 ++-- src/wp-content/themes/twentyfourteen/functions.php | 6 +++--- src/wp-content/themes/twentyfourteen/readme.txt | 9 +++++++-- src/wp-content/themes/twentyfourteen/style.css | 4 ++-- src/wp-content/themes/twentynineteen/package-lock.json | 4 ++-- src/wp-content/themes/twentynineteen/package.json | 2 +- src/wp-content/themes/twentynineteen/readme.txt | 9 +++++++-- src/wp-content/themes/twentynineteen/style-rtl.css | 4 ++-- src/wp-content/themes/twentynineteen/style.css | 4 ++-- src/wp-content/themes/twentynineteen/style.scss | 4 ++-- src/wp-content/themes/twentyseventeen/functions.php | 8 ++++---- src/wp-content/themes/twentyseventeen/readme.txt | 9 +++++++-- src/wp-content/themes/twentyseventeen/style.css | 4 ++-- src/wp-content/themes/twentysixteen/functions.php | 2 +- src/wp-content/themes/twentysixteen/readme.txt | 9 +++++++-- src/wp-content/themes/twentysixteen/style.css | 4 ++-- src/wp-content/themes/twentyten/header.php | 2 +- src/wp-content/themes/twentyten/readme.txt | 9 +++++++-- src/wp-content/themes/twentyten/style.css | 4 ++-- src/wp-content/themes/twentythirteen/functions.php | 6 +++--- src/wp-content/themes/twentythirteen/readme.txt | 9 +++++++-- src/wp-content/themes/twentythirteen/style.css | 4 ++-- src/wp-content/themes/twentytwelve/functions.php | 6 +++--- src/wp-content/themes/twentytwelve/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwelve/style.css | 4 ++-- src/wp-content/themes/twentytwenty/package-lock.json | 4 ++-- src/wp-content/themes/twentytwenty/package.json | 2 +- src/wp-content/themes/twentytwenty/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwenty/style-rtl.css | 4 ++-- src/wp-content/themes/twentytwenty/style.css | 4 ++-- src/wp-content/themes/twentytwentyfour/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwentyfour/style.css | 4 ++-- src/wp-content/themes/twentytwentyone/assets/css/ie.css | 4 ++-- .../assets/sass/01-settings/file-header.scss | 4 ++-- src/wp-content/themes/twentytwentyone/package-lock.json | 4 ++-- src/wp-content/themes/twentytwentyone/package.json | 2 +- src/wp-content/themes/twentytwentyone/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwentyone/style-rtl.css | 4 ++-- src/wp-content/themes/twentytwentyone/style.css | 4 ++-- src/wp-content/themes/twentytwentythree/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwentythree/style.css | 4 ++-- src/wp-content/themes/twentytwentytwo/readme.txt | 9 +++++++-- src/wp-content/themes/twentytwentytwo/style.css | 4 ++-- 50 files changed, 169 insertions(+), 99 deletions(-) diff --git a/src/wp-content/themes/twentyeleven/functions.php b/src/wp-content/themes/twentyeleven/functions.php index 3c7fa3c3a8167..e9eb530af7091 100644 --- a/src/wp-content/themes/twentyeleven/functions.php +++ b/src/wp-content/themes/twentyeleven/functions.php @@ -304,7 +304,7 @@ function twentyeleven_setup() { */ function twentyeleven_scripts_styles() { // Theme block stylesheet. - wp_enqueue_style( 'twentyeleven-block-style', get_template_directory_uri() . '/blocks.css', array(), '20230122' ); + wp_enqueue_style( 'twentyeleven-block-style', get_template_directory_uri() . '/blocks.css', array(), '20240621' ); } add_action( 'wp_enqueue_scripts', 'twentyeleven_scripts_styles' ); @@ -315,7 +315,7 @@ function twentyeleven_scripts_styles() { */ function twentyeleven_block_editor_styles() { // Block styles. - wp_enqueue_style( 'twentyeleven-block-editor-style', get_template_directory_uri() . '/editor-blocks.css', array(), '20220927' ); + wp_enqueue_style( 'twentyeleven-block-editor-style', get_template_directory_uri() . '/editor-blocks.css', array(), '20240621' ); } add_action( 'enqueue_block_editor_assets', 'twentyeleven_block_editor_styles' ); diff --git a/src/wp-content/themes/twentyeleven/header.php b/src/wp-content/themes/twentyeleven/header.php index c2bacfa28046f..98af9ff362922 100644 --- a/src/wp-content/themes/twentyeleven/header.php +++ b/src/wp-content/themes/twentyeleven/header.php @@ -49,7 +49,7 @@ ?> - + ', WP_HTML_Processor::COMMENT_AS_HTML_COMMENT, ' A comment. ' ), + 'Abruptly closed comment' => array( '', WP_HTML_Processor::COMMENT_AS_ABRUPTLY_CLOSED_COMMENT, '' ), + 'Invalid HTML comment !' => array( '', WP_HTML_Processor::COMMENT_AS_INVALID_HTML, ' Bang opener ' ), + 'Invalid HTML comment ?' => array( '', WP_HTML_Processor::COMMENT_AS_INVALID_HTML, ' Question opener ' ), + 'CDATA comment' => array( '', WP_HTML_Processor::COMMENT_AS_CDATA_LOOKALIKE, ' cdata body ' ), + 'Processing instriction comment' => array( '', WP_HTML_Processor::COMMENT_AS_PI_NODE_LOOKALIKE, ' Instruction body. ', 'pi-target' ), + 'Processing instriction php' => array( '', WP_HTML_Processor::COMMENT_AS_PI_NODE_LOOKALIKE, ' const HTML_COMMENT = true; ', 'php' ), + ); + } + + /** + * Ensures that different types of comments are processed correctly. + * + * @ticket 61530 + * + * @dataProvider data_funky_comments + */ + public function test_funky_comment( string $html, string $expected_modifiable_text ) { + $processor = WP_HTML_Processor::create_fragment( $html ); + $processor->next_token(); + + $this->assertSame( '#funky-comment', $processor->get_token_name() ); + $this->assertSame( $expected_modifiable_text, $processor->get_modifiable_text() ); + } + + /** + * Data provider. + * + * @return array[] + */ + public static function data_funky_comments() { + return array( + 'Funky comment # (empty)' => array( '', '#' ), + 'Funky comment #' => array( '', '# foo' ), + 'Funky comment •' => array( '', '• bar' ), + ); + } +} From a6d5694cde82b6a39a53ca0e9e348b7794b7bd26 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Tue, 16 Jul 2024 18:20:43 +0000 Subject: [PATCH 121/422] Tests: Don't declare nested named function in Tests_Interactivity_API_wpInteractivityAPIFunctions. Once the `test_process_directives_when_block_is_filtered()` method has run, the named `test_render_block_data()` function declared nested within becomes part of the global namespace, which could cause problems for other tests. Quite apart from the fact that the name starting with `test_` is confusing (as methods prefixed with `test_` are supposed to be test methods to be run by PHPUnit). Using a closure for this callback fixes the issue. Declared as `static` for a micro-optimization. Follow-up to [57826]. Props jrf, hellofromTonya. See #61530. git-svn-id: https://develop.svn.wordpress.org/trunk@58738 602fd350-edb4-49c9-b593-d223f7449a82 --- .../interactivity-api/wpInteractivityAPIFunctions.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php index 8a59f181a3b99..f5089dd04b86e 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php @@ -332,16 +332,18 @@ public function test_process_directives_when_block_is_filtered() { ), ) ); - function test_render_block_data( $parsed_block ) { + + $test_render_block_data = static function ( $parsed_block ) { $parsed_block['testKey'] = true; return $parsed_block; - } - add_filter( 'render_block_data', 'test_render_block_data' ); + }; + + add_filter( 'render_block_data', $test_render_block_data ); $post_content = ''; $processed_content = do_blocks( $post_content ); $processor = new WP_HTML_Tag_Processor( $processed_content ); $processor->next_tag( array( 'data-wp-interactive' => 'nameSpace' ) ); - remove_filter( 'render_block_data', 'test_render_block_data' ); + remove_filter( 'render_block_data', $test_render_block_data ); unregister_block_type( 'test/custom-directive-block' ); $this->assertSame( 'test', $processor->get_attribute( 'value' ) ); } From 81702ce6de2aa83096f76e3680ea8773f237674d Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Tue, 16 Jul 2024 18:37:46 +0000 Subject: [PATCH 122/422] Tests: Use data provider in Tests_Interactivity_API_wpInteractivityAPIFunctions. Refactors the following tests to use a data provider with named test cases: * `test_wp_interactivity_data_wp_context_with_different_arrays()` * `test_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace()` * `test_wp_interactivity_data_wp_context_with_json_flags()` This is better as: 1. One failing test will not block the other tests from running. 2. Each test is now referenced by name in any error message, making it more straight forward to see which test failed. 3. The test no longer contains multiple assertions. 3. It makes it more straight forward to add additional tests. Follow-up to [58594], [58234], [57762], [57743], [57742], [57563]. Props jrf. See #61530. git-svn-id: https://develop.svn.wordpress.org/trunk@58739 602fd350-edb4-49c9-b593-d223f7449a82 --- .../wpInteractivityAPIFunctions.php | 143 +++++++++++++----- 1 file changed, 103 insertions(+), 40 deletions(-) diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php index f5089dd04b86e..7c933109154a4 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPIFunctions.php @@ -354,27 +354,43 @@ public function test_process_directives_when_block_is_filtered() { * * @ticket 60356 * - * @covers wp_interactivity_data_wp_context + * @covers wp_interactivity_data_wp_context + * @dataProvider data_wp_interactivity_data_wp_context_with_different_arrays + * + * @param array $context Context to encode. + * @param string $expected Expected function output. + */ + public function test_wp_interactivity_data_wp_context_with_different_arrays( $context, $expected ) { + $this->assertSame( $expected, wp_interactivity_data_wp_context( $context ) ); + } + + /** + * Data provider. + * + * @return array */ - public function test_wp_interactivity_data_wp_context_with_different_arrays() { - $this->assertSame( 'data-wp-context=\'{}\'', wp_interactivity_data_wp_context( array() ) ); - $this->assertSame( - 'data-wp-context=\'{"a":1,"b":"2","c":true}\'', - wp_interactivity_data_wp_context( - array( + public function data_wp_interactivity_data_wp_context_with_different_arrays() { + return array( + 'empty array' => array( + 'context' => array(), + 'expected' => 'data-wp-context=\'{}\'', + ), + 'associative array with mixed values' => array( + 'context' => array( 'a' => 1, 'b' => '2', 'c' => true, - ) - ) - ); - $this->assertSame( - 'data-wp-context=\'{"a":[1,2]}\'', - wp_interactivity_data_wp_context( array( 'a' => array( 1, 2 ) ) ) - ); - $this->assertSame( - 'data-wp-context=\'[1,2]\'', - wp_interactivity_data_wp_context( array( 1, 2 ) ) + ), + 'expected' => 'data-wp-context=\'{"a":1,"b":"2","c":true}\'', + ), + 'associative array with nested array as value' => array( + 'context' => array( 'a' => array( 1, 2 ) ), + 'expected' => 'data-wp-context=\'{"a":[1,2]}\'', + ), + 'array without keys, integer values' => array( + 'context' => array( 1, 2 ), + 'expected' => 'data-wp-context=\'[1,2]\'', + ), ); } @@ -384,28 +400,48 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays() { * * @ticket 60356 * - * @covers wp_interactivity_data_wp_context + * @covers wp_interactivity_data_wp_context + * @dataProvider data_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace + * + * @param array $context Context to encode. + * @param string $store Store namespace. + * @param string $expected Expected function output. + */ + public function test_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace( $context, $store, $expected ) { + $this->assertSame( $expected, wp_interactivity_data_wp_context( $context, $store ) ); + } + + /** + * Data provider. + * + * @return array */ - public function test_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace() { - $this->assertSame( 'data-wp-context=\'myPlugin::{}\'', wp_interactivity_data_wp_context( array(), 'myPlugin' ) ); - $this->assertSame( - 'data-wp-context=\'myPlugin::{"a":1,"b":"2","c":true}\'', - wp_interactivity_data_wp_context( - array( + public function data_wp_interactivity_data_wp_context_with_different_arrays_and_a_namespace() { + return array( + 'empty array' => array( + 'context' => array(), + 'store' => 'myPlugin', + 'expected' => 'data-wp-context=\'myPlugin::{}\'', + ), + 'associative array with mixed values' => array( + 'context' => array( 'a' => 1, 'b' => '2', 'c' => true, ), - 'myPlugin' - ) - ); - $this->assertSame( - 'data-wp-context=\'myPlugin::{"a":[1,2]}\'', - wp_interactivity_data_wp_context( array( 'a' => array( 1, 2 ) ), 'myPlugin' ) - ); - $this->assertSame( - 'data-wp-context=\'myPlugin::[1,2]\'', - wp_interactivity_data_wp_context( array( 1, 2 ), 'myPlugin' ) + 'store' => 'myPlugin', + 'expected' => 'data-wp-context=\'myPlugin::{"a":1,"b":"2","c":true}\'', + ), + 'associative array with nested array as value' => array( + 'context' => array( 'a' => array( 1, 2 ) ), + 'store' => 'myPlugin', + 'expected' => 'data-wp-context=\'myPlugin::{"a":[1,2]}\'', + ), + 'array without keys, integer values' => array( + 'context' => array( 1, 2 ), + 'store' => 'myPlugin', + 'expected' => 'data-wp-context=\'myPlugin::[1,2]\'', + ), ); } @@ -417,13 +453,40 @@ public function test_wp_interactivity_data_wp_context_with_different_arrays_and_ * * @ticket 60356 * - * @covers wp_interactivity_data_wp_context + * @covers wp_interactivity_data_wp_context + * @dataProvider data_wp_interactivity_data_wp_context_with_json_flags + * + * @param array $context Context to encode. + * @param string $expected Expected function output. */ - public function test_wp_interactivity_data_wp_context_with_json_flags() { - $this->assertSame( 'data-wp-context=\'{"tag":"\u003Cfoo\u003E"}\'', wp_interactivity_data_wp_context( array( 'tag' => '' ) ) ); - $this->assertSame( 'data-wp-context=\'{"apos":"\u0027bar\u0027"}\'', wp_interactivity_data_wp_context( array( 'apos' => "'bar'" ) ) ); - $this->assertSame( 'data-wp-context=\'{"quot":"\u0022baz\u0022"}\'', wp_interactivity_data_wp_context( array( 'quot' => '"baz"' ) ) ); - $this->assertSame( 'data-wp-context=\'{"amp":"T\u0026T"}\'', wp_interactivity_data_wp_context( array( 'amp' => 'T&T' ) ) ); + public function test_wp_interactivity_data_wp_context_with_json_flags( $context, $expected ) { + $this->assertSame( $expected, wp_interactivity_data_wp_context( $context ) ); + } + + /** + * Data provider. + * + * @return array + */ + public function data_wp_interactivity_data_wp_context_with_json_flags() { + return array( + 'value contains <> brackets' => array( + 'context' => array( 'tag' => '' ), + 'expected' => 'data-wp-context=\'{"tag":"\u003Cfoo\u003E"}\'', + ), + 'value contains single quote chars' => array( + 'context' => array( 'apos' => "'bar'" ), + 'expected' => 'data-wp-context=\'{"apos":"\u0027bar\u0027"}\'', + ), + 'value contains double quote chars' => array( + 'context' => array( 'quot' => '"baz"' ), + 'expected' => 'data-wp-context=\'{"quot":"\u0022baz\u0022"}\'', + ), + 'value contains & ampersand' => array( + 'context' => array( 'amp' => 'T&T' ), + 'expected' => 'data-wp-context=\'{"amp":"T\u0026T"}\'', + ), + ); } /** From 2f1cf1f3db26e189d0782c3ddbd83a95a387f2b3 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 17 Jul 2024 00:10:52 +0000 Subject: [PATCH 123/422] HTML API: Remove leading whitespace after removing class names. In part of a larger review of CSS semantics and behaviors, this patch takes the opportunity to remove leading whitespace in an updated class attribute after the first class in the attribute has been removed. Previously, if the first class name had been removed, the whitespace that formerly followed it would remain in the class attribute. This stood in contrast to removing other class names, which removed their associated whitespace. There should be no semantic or functional changes in this patch, only a slightly-large diff for modified HTML documents that looks prettier when removing the first class name in a class attribute. Developed in https://github.com/WordPress/wordpress-develop/pull/6933 Discussed in https://core.trac.wordpress.org/ticket/61531 Props dmsnell, jonsurrell. See #61531. git-svn-id: https://develop.svn.wordpress.org/trunk@58740 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 4 +++- .../tests/html-api/wpHtmlTagProcessor.php | 16 ++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index a388af1ef79c3..46fc192083ec6 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2218,7 +2218,9 @@ private function class_name_updates_to_attributes_updates() { * whitespace to a single space, which might appear cleaner * in the output HTML but produce a noisier change. */ - $class .= substr( $existing_class, $ws_at, $ws_length ); + if ( '' !== $class ) { + $class .= substr( $existing_class, $ws_at, $ws_length ); + } $class .= $name; } diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php index fad1000dd763c..fceaaddb04af6 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php @@ -1376,12 +1376,12 @@ public function test_remove_class_removes_a_single_class_from_the_class_attribut $processor->remove_class( 'main' ); $this->assertSame( - '
    Text
    ', + '
    Text
    ', $processor->get_updated_html(), 'Updated HTML does not reflect class name removed from existing class attribute via remove_class()' ); $this->assertSame( - ' with-border', + 'with-border', $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect class name removed from existing class attribute via remove_class()" ); @@ -1466,12 +1466,12 @@ public function test_add_class_when_there_is_a_class_attribute_with_excessive_wh $processor->add_class( 'foo-class' ); $this->assertSame( - '
    Text
    ', + '
    Text
    ', $processor->get_updated_html(), 'Updated HTML does not reflect existing excessive whitespace after adding class name via add_class()' ); $this->assertSame( - ' main with-border foo-class', + 'main with-border foo-class', $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect existing excessive whitespace after adding class name via add_class()" ); @@ -1490,12 +1490,12 @@ public function test_remove_class_preserves_whitespaces_when_there_is_a_class_at $processor->remove_class( 'with-border' ); $this->assertSame( - '
    Text
    ', + '
    Text
    ', $processor->get_updated_html(), 'Updated HTML does not reflect existing excessive whitespace after removing class name via remove_class()' ); $this->assertSame( - ' main', + 'main', $processor->get_attribute( 'class' ), "get_attribute( 'class' ) does not reflect existing excessive whitespace after removing class name via removing_class()" ); @@ -1696,8 +1696,8 @@ public function test_advanced_use_case() { $expected_output = <<
    -
    -
    +
    +
    From 8f11947d791c005cfed21fe2783e0a6c3e34fbf5 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 17 Jul 2024 00:33:21 +0000 Subject: [PATCH 124/422] HTML API: Test code improvements in virtual node breadcrumb tests. Follow-up after feedback to newly-introduced tests, mostly to enhance the message when the tests fail. Developed in https://github.com/WordPress/wordpress-develop/pull/7030 Discussed in https://core.trac.wordpress.org/ticket/61646 Follow-up to [58592]. Props dmsnell, jonsurrell. See #61646. git-svn-id: https://develop.svn.wordpress.org/trunk@58741 602fd350-edb4-49c9-b593-d223f7449a82 --- .../phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 403f40a1da032..c3d02ba7db4fd 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -587,14 +587,14 @@ public function test_breadcrumbs_on_virtual_nodes( string $html, int $token_posi $processor->next_token(); } - $this->assertSame( $expected_tag_name, $processor->get_tag(), "Found incorrect tag name {$processor->get_tag()}." ); + $this->assertSame( $expected_tag_name, $processor->get_tag(), "Found incorrect tag name {$processor->get_token_name()}." ); if ( 'open' === $expect_open_close ) { - $this->assertFalse( $processor->is_tag_closer(), "Found closer when opener expected at {$processor->get_tag()}." ); + $this->assertFalse( $processor->is_tag_closer(), "Found closer when opener expected at {$processor->get_token_name()}." ); } else { - $this->assertTrue( $processor->is_tag_closer(), "Found opener when closer expected at {$processor->get_tag()}." ); + $this->assertTrue( $processor->is_tag_closer(), "Found opener when closer expected at {$processor->get_token_name()}." ); } - $this->assertEquals( $expected_breadcrumbs, $processor->get_breadcrumbs(), "Found incorrect breadcrumbs in {$html}." ); + $this->assertSame( $expected_breadcrumbs, $processor->get_breadcrumbs(), "Found incorrect breadcrumbs in {$html}." ); } /** From 48c0c968468b54ec2909317e1a9384c0943c0dd3 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 17 Jul 2024 00:51:34 +0000 Subject: [PATCH 125/422] Fix phpdoc nullable types in some files. It was found that in several places in the HTML API and its supporting files, the wrong form of type annotation was used for optional parameters. Instead of using `?type`, this patch uses `type|type-of-default-value` instead, noting where important if the parameter is optional, and if so, what its default value is. Developed in https://github.com/WordPress/wordpress-develop/pull/7031 Discussed in https://core.trac.wordpress.org/ticket/61399 Props dmsnell, jonsurrell. See #61399. git-svn-id: https://develop.svn.wordpress.org/trunk@58742 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-token-map.php | 9 +++++---- src/wp-includes/functions.php | 5 +++-- .../html-api/class-wp-html-open-elements.php | 3 ++- src/wp-includes/html-api/class-wp-html-processor.php | 11 ++++++----- .../tests/html-api/wpHtmlProcessorHtml5lib.php | 2 +- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/wp-includes/class-wp-token-map.php b/src/wp-includes/class-wp-token-map.php index a932f4cae4d27..524ab57fd4587 100644 --- a/src/wp-includes/class-wp-token-map.php +++ b/src/wp-includes/class-wp-token-map.php @@ -520,10 +520,11 @@ public function contains( $word, $case_sensitivity = 'case-sensitive' ) { * * @since 6.6.0 * - * @param string $text String in which to search for a lookup key. - * @param int $offset Optional. How many bytes into the string where the lookup key ought to start. Default 0. - * @param ?int &$matched_token_byte_length Optional. Holds byte-length of found token matched, otherwise not set. Default null. - * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'. + * @param string $text String in which to search for a lookup key. + * @param int $offset Optional. How many bytes into the string where the lookup key ought to start. Default 0. + * @param int|null &$matched_token_byte_length Optional. Holds byte-length of found token matched, otherwise not set. Default null. + * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'. + * * @return string|null Mapped value of lookup key if found, otherwise `null`. */ public function read_token( $text, $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ) { diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index e99a93b80db71..94155249fef0d 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -7497,8 +7497,9 @@ function get_tag_regex( $tag ) { * * @since 6.6.0 * - * @param ?string $blog_charset Slug representing a text character encoding, or "charset". - * E.g. "UTF-8", "Windows-1252", "ISO-8859-1", "SJIS". + * @param string|null $blog_charset Optional. Slug representing a text character encoding, or "charset". + * E.g. "UTF-8", "Windows-1252", "ISO-8859-1", "SJIS". + * Default value is to infer from "blog_charset" option. * @return bool Whether the slug represents the UTF-8 encoding. */ function is_utf8_charset( $blog_charset = null ) { diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index d1585cdea5bf5..df6ba8158b085 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -499,7 +499,8 @@ public function walk_down() { * @since 6.4.0 * @since 6.5.0 Accepts $above_this_node to start traversal above a given node, if it exists. * - * @param ?WP_HTML_Token $above_this_node Start traversing above this node, if provided and if the node exists. + * @param WP_HTML_Token|null $above_this_node Optional. Start traversing above this node, + * if provided and if the node exists. */ public function walk_up( $above_this_node = null ) { $has_found_node = null === $above_this_node; diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 04c387c003d8f..679c4a7e50fa5 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -241,14 +241,14 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * * @since 6.6.0 * - * @var ?WP_HTML_Stack_Event + * @var WP_HTML_Stack_Event|null */ private $current_element = null; /** * Context node if created as a fragment parser. * - * @var ?WP_HTML_Token + * @var WP_HTML_Token|null */ private $context_node = null; @@ -752,9 +752,10 @@ public function matches_breadcrumbs( $breadcrumbs ) { * this returns false for self-closing elements in the * SVG and MathML namespace. * - * @param ?WP_HTML_Token $node Node to examine instead of current node, if provided. - * @return bool Whether to expect a closer for the currently-matched node, - * or `null` if not matched on any token. + * @param WP_HTML_Token|null $node Optional. Node to examine, if provided. + * Default is to examine current node. + * @return bool|null Whether to expect a closer for the currently-matched node, + * or `null` if not matched on any token. */ public function expects_closer( $node = null ) { $token_name = $node->node_name ?? $this->get_token_name(); diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index 7cde415f0f796..f8f1b666c2233 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -275,7 +275,7 @@ public static function parse_html5_dat_testfile( $filename ) { /** * Represents which section of the test case is being parsed. * - * @var ?string + * @var string|null */ $state = null; From 2889f304aa8571065f83cc3a6276c87302c8cc8d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 17 Jul 2024 11:26:33 +0000 Subject: [PATCH 126/422] Docs: Fix typo in a comment in `wp.media.view.Attachment.Details.TwoColumn`. Follow-up to [41351]. Props devansh2002, mukesh27. Fixes #61658. git-svn-id: https://develop.svn.wordpress.org/trunk@58743 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/media/views/attachment/details-two-column.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/media/views/attachment/details-two-column.js b/src/js/media/views/attachment/details-two-column.js index f02de03c0ff4b..c6a2096cf0303 100644 --- a/src/js/media/views/attachment/details-two-column.js +++ b/src/js/media/views/attachment/details-two-column.js @@ -16,7 +16,7 @@ var Details = wp.media.view.Attachment.Details, * @augments wp.Backbone.View * @augments Backbone.View */ -TwoColumn = Details.extend(/** @lends wp.media.view.Attachment.Details.TowColumn.prototype */{ +TwoColumn = Details.extend(/** @lends wp.media.view.Attachment.Details.TwoColumn.prototype */{ template: wp.template( 'attachment-details-two-column' ), initialize: function() { From 3296c6b842adc5e7c8c78cd06db9ccca2ee56ce6 Mon Sep 17 00:00:00 2001 From: David Baumwald Date: Wed, 17 Jul 2024 13:33:28 +0000 Subject: [PATCH 127/422] Upgrade/Install: Update the `$_old_files` array for 6.6. Props dd32, audrasjb, hellofromTonya. Fixes #61665. git-svn-id: https://develop.svn.wordpress.org/trunk@58744 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/update-core.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php index fd0032601fc1c..9b6ece8d21a94 100644 --- a/src/wp-admin/includes/update-core.php +++ b/src/wp-admin/includes/update-core.php @@ -765,6 +765,11 @@ 'wp-admin/images/about-header-freedoms.svg', 'wp-admin/images/about-header-contribute.svg', 'wp-admin/images/about-header-background.svg', + // 6.6 + 'wp-includes/blocks/block/editor.css', + 'wp-includes/blocks/block/editor.min.css', + 'wp-includes/blocks/block/editor-rtl.css', + 'wp-includes/blocks/block/editor-rtl.min.css', ); /** From b97bc0488491f5854a4117fc8532250c51285c67 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 17 Jul 2024 15:41:06 +0000 Subject: [PATCH 128/422] Docs: Add missing description for the `display_rows()` method in list table classes. Follow-up to [15491], [17002], [27301]. Props nikitasolanki1812, narenin, mukesh27, dd32, SergeyBiryukov. Fixes #61670. git-svn-id: https://develop.svn.wordpress.org/trunk@58745 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-links-list-table.php | 5 +++++ src/wp-admin/includes/class-wp-list-table.php | 2 +- src/wp-admin/includes/class-wp-media-list-table.php | 4 ++++ src/wp-admin/includes/class-wp-ms-sites-list-table.php | 4 +++- src/wp-admin/includes/class-wp-ms-themes-list-table.php | 3 +++ src/wp-admin/includes/class-wp-ms-users-list-table.php | 5 +++++ .../includes/class-wp-plugin-install-list-table.php | 5 +++++ src/wp-admin/includes/class-wp-plugins-list-table.php | 4 ++++ src/wp-admin/includes/class-wp-posts-list-table.php | 7 ++++++- .../includes/class-wp-theme-install-list-table.php | 3 +++ src/wp-admin/includes/class-wp-themes-list-table.php | 3 +++ 11 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/includes/class-wp-links-list-table.php b/src/wp-admin/includes/class-wp-links-list-table.php index 66c4990d0f7b7..b038f79a76b6c 100644 --- a/src/wp-admin/includes/class-wp-links-list-table.php +++ b/src/wp-admin/includes/class-wp-links-list-table.php @@ -307,6 +307,11 @@ public function column_default( $item, $column_name ) { do_action( 'manage_link_custom_column', $column_name, $link->link_id ); } + /** + * Generates the list table rows. + * + * @since 3.1.0 + */ public function display_rows() { foreach ( $this->items as $link ) { $link = sanitize_bookmark( $link ); diff --git a/src/wp-admin/includes/class-wp-list-table.php b/src/wp-admin/includes/class-wp-list-table.php index 2879a0a356736..253bcca800b29 100644 --- a/src/wp-admin/includes/class-wp-list-table.php +++ b/src/wp-admin/includes/class-wp-list-table.php @@ -1718,7 +1718,7 @@ public function display_rows_or_placeholder() { } /** - * Generates the table rows. + * Generates the list table rows. * * @since 3.1.0 */ diff --git a/src/wp-admin/includes/class-wp-media-list-table.php b/src/wp-admin/includes/class-wp-media-list-table.php index 02362e3a89cbb..fb0d67d7058bd 100644 --- a/src/wp-admin/includes/class-wp-media-list-table.php +++ b/src/wp-admin/includes/class-wp-media-list-table.php @@ -708,6 +708,10 @@ public function column_default( $item, $column_name ) { } /** + * Generates the list table rows. + * + * @since 3.1.0 + * * @global WP_Post $post Global post object. * @global WP_Query $wp_query WordPress Query object. */ diff --git a/src/wp-admin/includes/class-wp-ms-sites-list-table.php b/src/wp-admin/includes/class-wp-ms-sites-list-table.php index c28a454840982..19fb0e009b014 100644 --- a/src/wp-admin/includes/class-wp-ms-sites-list-table.php +++ b/src/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -611,7 +611,9 @@ public function column_default( $item, $column_name ) { } /** - * @global string $mode List table view mode. + * Generates the list table rows. + * + * @since 3.1.0 */ public function display_rows() { foreach ( $this->items as $blog ) { diff --git a/src/wp-admin/includes/class-wp-ms-themes-list-table.php b/src/wp-admin/includes/class-wp-ms-themes-list-table.php index 96a1d99576cfe..372e499209b39 100644 --- a/src/wp-admin/includes/class-wp-ms-themes-list-table.php +++ b/src/wp-admin/includes/class-wp-ms-themes-list-table.php @@ -494,6 +494,9 @@ protected function get_bulk_actions() { } /** + * Generates the list table rows. + * + * @since 3.1.0 */ public function display_rows() { foreach ( $this->items as $theme ) { diff --git a/src/wp-admin/includes/class-wp-ms-users-list-table.php b/src/wp-admin/includes/class-wp-ms-users-list-table.php index d02d380536129..58d31f67f8465 100644 --- a/src/wp-admin/includes/class-wp-ms-users-list-table.php +++ b/src/wp-admin/includes/class-wp-ms-users-list-table.php @@ -470,6 +470,11 @@ public function column_default( $item, $column_name ) { echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); } + /** + * Generates the list table rows. + * + * @since 3.1.0 + */ public function display_rows() { foreach ( $this->items as $user ) { $class = ''; diff --git a/src/wp-admin/includes/class-wp-plugin-install-list-table.php b/src/wp-admin/includes/class-wp-plugin-install-list-table.php index 1a318d374b583..f39ec60a24aef 100644 --- a/src/wp-admin/includes/class-wp-plugin-install-list-table.php +++ b/src/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -464,6 +464,11 @@ private function order_callback( $plugin_a, $plugin_b ) { } } + /** + * Generates the list table rows. + * + * @since 3.1.0 + */ public function display_rows() { $plugins_allowedtags = array( 'a' => array( diff --git a/src/wp-admin/includes/class-wp-plugins-list-table.php b/src/wp-admin/includes/class-wp-plugins-list-table.php index b9cc969f1c599..77ae9b57d087a 100644 --- a/src/wp-admin/includes/class-wp-plugins-list-table.php +++ b/src/wp-admin/includes/class-wp-plugins-list-table.php @@ -694,6 +694,10 @@ public function current_action() { } /** + * Generates the list table rows. + * + * @since 3.1.0 + * * @global string $status */ public function display_rows() { diff --git a/src/wp-admin/includes/class-wp-posts-list-table.php b/src/wp-admin/includes/class-wp-posts-list-table.php index 826be9b67dc09..1c6ae83119a30 100644 --- a/src/wp-admin/includes/class-wp-posts-list-table.php +++ b/src/wp-admin/includes/class-wp-posts-list-table.php @@ -790,8 +790,13 @@ protected function get_sortable_columns() { } /** + * Generates the list table rows. + * + * @since 3.1.0 + * * @global WP_Query $wp_query WordPress Query object. - * @global int $per_page + * @global int $per_page + * * @param array $posts * @param int $level */ diff --git a/src/wp-admin/includes/class-wp-theme-install-list-table.php b/src/wp-admin/includes/class-wp-theme-install-list-table.php index e273d4bc81bbd..ca179b6c2d972 100644 --- a/src/wp-admin/includes/class-wp-theme-install-list-table.php +++ b/src/wp-admin/includes/class-wp-theme-install-list-table.php @@ -230,6 +230,9 @@ public function display() { } /** + * Generates the list table rows. + * + * @since 3.1.0 */ public function display_rows() { $themes = $this->items; diff --git a/src/wp-admin/includes/class-wp-themes-list-table.php b/src/wp-admin/includes/class-wp-themes-list-table.php index fce362011db3e..53b34e93f99b7 100644 --- a/src/wp-admin/includes/class-wp-themes-list-table.php +++ b/src/wp-admin/includes/class-wp-themes-list-table.php @@ -189,6 +189,9 @@ public function display_rows_or_placeholder() { } /** + * Generates the list table rows. + * + * @since 3.1.0 */ public function display_rows() { $themes = $this->items; From 13fe3881eb1e11af6ed73175f58e60ee1faf2432 Mon Sep 17 00:00:00 2001 From: Joe Dolson Date: Wed, 17 Jul 2024 23:35:11 +0000 Subject: [PATCH 129/422] Editor: Limit scope of resizable menu container CSS. The CSS to make menu item containers resizable in the admin menu editor was too broadly scoped, and caused classic editor metaboxes to have unconstrained height. Limit the scope of the CSS changes to only impact menu item containers. Props neotrope, sabernhardt, joedolson. Fixes #61662. git-svn-id: https://develop.svn.wordpress.org/trunk@58747 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/edit.css | 12 +----------- src/wp-admin/css/nav-menus.css | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/wp-admin/css/edit.css b/src/wp-admin/css/edit.css index bcd8b276770fc..757d676b727f5 100644 --- a/src/wp-admin/css/edit.css +++ b/src/wp-admin/css/edit.css @@ -1271,23 +1271,13 @@ label.post-format-icon { margin: 0; } -.categorydiv, -.customlinkdiv, -.posttypediv, -.taxonomydiv { - max-height: inherit; - height: 100%; -} - .wp-tab-panel, .categorydiv div.tabs-panel, .customlinkdiv div.tabs-panel, .posttypediv div.tabs-panel, .taxonomydiv div.tabs-panel { min-height: 42px; - /* Allow space for content after tab panels in nav menu editor. */ - max-height: calc( 100% - 75px ); - height: 100%; + max-height: 200px; overflow: auto; padding: 0 0.9em; border: solid 1px #dcdcde; diff --git a/src/wp-admin/css/nav-menus.css b/src/wp-admin/css/nav-menus.css index 4bb2a539b23f4..7e9cf57bd4fdd 100644 --- a/src/wp-admin/css/nav-menus.css +++ b/src/wp-admin/css/nav-menus.css @@ -53,6 +53,24 @@ ul.add-menu-item-tabs li { max-height: inherit; } +#menu-settings-column .categorydiv, +#menu-settings-column .customlinkdiv, +#menu-settings-column .posttypediv, +#menu-settings-column .taxonomydiv { + max-height: inherit; + height: 100%; +} + +#menu-settings-column .wp-tab-panel, +#menu-settings-column .categorydiv div.tabs-panel, +#menu-settings-column .customlinkdiv div.tabs-panel, +#menu-settings-column .posttypediv div.tabs-panel, +#menu-settings-column .taxonomydiv div.tabs-panel { + /* Allow space for content after tab panels in nav menu editor. */ + max-height: calc( 100% - 75px ); + height: 100%; +} + .metabox-holder-disabled .postbox, .metabox-holder-disabled .accordion-section-content, .metabox-holder-disabled .accordion-section-title { From 340bf4c10d0c976501fc83c057a339ac68a4c8ec Mon Sep 17 00:00:00 2001 From: Joe Dolson Date: Thu, 18 Jul 2024 00:50:16 +0000 Subject: [PATCH 130/422] Toolbar: Move user and recovery menus to a higher priority. Following [58215], admin bar items in the `top-secondary` group have a changed visual order. Increase the priority of the user and recovery menu items so nodes added with higher priorities will still be shown visually before the user and recovery menu items, as they were prior to 58215. The items will appear in the reverse of the previous order, but the new order now matches their priority order, rather than being the opposite. Props sabernhardt, joemcgill, pbiron, joedolson. Fixes #61615. git-svn-id: https://develop.svn.wordpress.org/trunk@58748 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-admin-bar.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-admin-bar.php b/src/wp-includes/class-wp-admin-bar.php index ee3d6d1baad31..dfebbb20e4c86 100644 --- a/src/wp-includes/class-wp-admin-bar.php +++ b/src/wp-includes/class-wp-admin-bar.php @@ -648,8 +648,8 @@ public function recursive_render( $id, $node ) { public function add_menus() { // User-related, aligned right. add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_menu', 0 ); - add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_item', 7 ); - add_action( 'admin_bar_menu', 'wp_admin_bar_recovery_mode_menu', 8 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_item', 9991 ); + add_action( 'admin_bar_menu', 'wp_admin_bar_recovery_mode_menu', 9992 ); add_action( 'admin_bar_menu', 'wp_admin_bar_search_menu', 9999 ); // Site-related. From 842a353673e224f0258ab50e56dded1315da7a47 Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Thu, 18 Jul 2024 06:41:29 +0000 Subject: [PATCH 131/422] Block Themes: Avoid specificity bump for top-level element-only selectors Prevent issues (e.g. links being underlined) caused by a bump in CSS specificity for top-level element-only global element styles. Backports the PHP changes from https://github.com/WordPress/gutenberg/pull/63403. Fixes #61630. Fixes #61660. Props aaronrobertshaw, andrewserong, noisysocks. git-svn-id: https://develop.svn.wordpress.org/trunk@58749 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json.php | 17 ++++++++++++++++- tests/phpunit/tests/theme/wpThemeJson.php | 21 ++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 90de255c82971..512df0fbf8c0f 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -2888,8 +2888,23 @@ static function ( $pseudo_selector ) use ( $selector ) { $declarations = static::update_separator_declarations( $declarations ); } + /* + * Top-level element styles using element-only specificity selectors should + * not get wrapped in `:root :where()` to maintain backwards compatibility. + * + * Pseudo classes, e.g. :hover, :focus etc., are a class-level selector so + * still need to be wrapped in `:root :where` to cap specificity for nested + * variations etc. Pseudo selectors won't match the ELEMENTS selector exactly. + */ + $element_only_selector = $current_element && + isset( static::ELEMENTS[ $current_element ] ) && + // buttons, captions etc. still need `:root :where()` as they are class based selectors. + ! isset( static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $current_element ] ) && + static::ELEMENTS[ $current_element ] === $selector; + // 2. Generate and append the rules that use the general selector. - $block_rules .= static::to_ruleset( ":root :where($selector)", $declarations ); + $general_selector = $element_only_selector ? $selector : ":root :where($selector)"; + $block_rules .= static::to_ruleset( $general_selector, $declarations ); // 3. Generate and append the rules that use the duotone selector. if ( isset( $block_metadata['duotone'] ) && ! empty( $declarations_duotone ) ) { diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 7190399d8dc10..68b5cd9aaf7d9 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -395,6 +395,7 @@ public function test_get_settings_appearance_false_does_not_opt_in() { * @ticket 60365 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_stylesheet() { $theme_json = new WP_Theme_JSON( @@ -565,7 +566,7 @@ public function test_get_stylesheet() { ); $variables = ':root{--wp--preset--color--grey: grey;--wp--preset--gradient--custom-gradient: linear-gradient(135deg,rgba(0,0,0) 0%,rgb(0,0,0) 100%);--wp--preset--font-size--small: 14px;--wp--preset--font-size--big: 41px;--wp--preset--font-family--arial: Arial, serif;}.wp-block-group{--wp--custom--base-font: 16;--wp--custom--line-height--small: 1.2;--wp--custom--line-height--medium: 1.4;--wp--custom--line-height--large: 1.8;}'; - $styles = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(body){color: var(--wp--preset--color--grey);}:root :where(a:where(:not(.wp-element-button))){background-color: #333;color: #111;}:root :where(.wp-element-button, .wp-block-button__link){box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}:root :where(.wp-block-cover){min-height: unset;aspect-ratio: 16/9;}:root :where(.wp-block-group){background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;min-height: 50vh;padding: 24px;}:root :where(.wp-block-group a:where(:not(.wp-element-button))){color: #111;}:root :where(.wp-block-heading){color: #123456;}:root :where(.wp-block-heading a:where(:not(.wp-element-button))){background-color: #333;color: #111;font-size: 60px;}:root :where(.wp-block-media-text){text-align: center;}:root :where(.wp-block-post-date){color: #123456;}:root :where(.wp-block-post-date a:where(:not(.wp-element-button))){background-color: #777;color: #555;}:root :where(.wp-block-post-excerpt){column-count: 2;}:root :where(.wp-block-image){margin-bottom: 30px;}:root :where(.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder){border-top-left-radius: 10px;border-bottom-right-radius: 1em;}:root :where(.wp-block-image img, .wp-block-image .components-placeholder){filter: var(--wp--preset--duotone--custom-duotone);}'; + $styles = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(body){color: var(--wp--preset--color--grey);}a:where(:not(.wp-element-button)){background-color: #333;color: #111;}:root :where(.wp-element-button, .wp-block-button__link){box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}:root :where(.wp-block-cover){min-height: unset;aspect-ratio: 16/9;}:root :where(.wp-block-group){background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;min-height: 50vh;padding: 24px;}:root :where(.wp-block-group a:where(:not(.wp-element-button))){color: #111;}:root :where(.wp-block-heading){color: #123456;}:root :where(.wp-block-heading a:where(:not(.wp-element-button))){background-color: #333;color: #111;font-size: 60px;}:root :where(.wp-block-media-text){text-align: center;}:root :where(.wp-block-post-date){color: #123456;}:root :where(.wp-block-post-date a:where(:not(.wp-element-button))){background-color: #777;color: #555;}:root :where(.wp-block-post-excerpt){column-count: 2;}:root :where(.wp-block-image){margin-bottom: 30px;}:root :where(.wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder){border-top-left-radius: 10px;border-bottom-right-radius: 1em;}:root :where(.wp-block-image img, .wp-block-image .components-placeholder){filter: var(--wp--preset--duotone--custom-duotone);}'; $presets = '.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-custom-gradient-gradient-background{background: var(--wp--preset--gradient--custom-gradient) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-big-font-size{font-size: var(--wp--preset--font-size--big) !important;}.has-arial-font-family{font-family: var(--wp--preset--font-family--arial) !important;}'; $all = $variables . $styles . $presets; @@ -835,6 +836,7 @@ public function test_get_stylesheet_generates_proper_classes_and_css_vars_from_s * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_styles_for_block_handles_whitelisted_element_pseudo_selectors() { $theme_json = new WP_Theme_JSON( @@ -882,7 +884,7 @@ public function test_get_styles_for_block_handles_whitelisted_element_pseudo_sel 'selector' => 'a:where(:not(.wp-element-button)):focus', ); - $link_style = ':root :where(a:where(:not(.wp-element-button))){background-color: red;color: green;}'; + $link_style = 'a:where(:not(.wp-element-button)){background-color: red;color: green;}'; $hover_style = ':root :where(a:where(:not(.wp-element-button)):hover){background-color: green;color: red;font-size: 10em;text-transform: uppercase;}'; $focus_style = ':root :where(a:where(:not(.wp-element-button)):focus){background-color: black;color: yellow;}'; @@ -938,6 +940,7 @@ public function test_get_stylesheet_handles_only_pseudo_selector_rules_for_given * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_stylesheet_ignores_pseudo_selectors_on_non_whitelisted_elements() { $theme_json = new WP_Theme_JSON( @@ -968,7 +971,7 @@ public function test_get_stylesheet_ignores_pseudo_selectors_on_non_whitelisted_ ) ); - $expected = ':root :where(h4){background-color: red;color: green;}'; + $expected = 'h4{background-color: red;color: green;}'; $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ), null, array( 'skip_root_layout_styles' => true ) ) ); } @@ -978,6 +981,7 @@ public function test_get_stylesheet_ignores_pseudo_selectors_on_non_whitelisted_ * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_stylesheet_ignores_non_whitelisted_pseudo_selectors() { $theme_json = new WP_Theme_JSON( @@ -1008,7 +1012,7 @@ public function test_get_stylesheet_ignores_non_whitelisted_pseudo_selectors() { ) ); - $expected = ':root :where(a:where(:not(.wp-element-button))){background-color: red;color: green;}:root :where(a:where(:not(.wp-element-button)):hover){background-color: green;color: red;}'; + $expected = 'a:where(:not(.wp-element-button)){background-color: red;color: green;}:root :where(a:where(:not(.wp-element-button)):hover){background-color: green;color: red;}'; $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ), null, array( 'skip_root_layout_styles' => true ) ) ); $this->assertStringNotContainsString( 'a:levitate{', $theme_json->get_stylesheet( array( 'styles' ) ) ); @@ -1022,6 +1026,7 @@ public function test_get_stylesheet_ignores_non_whitelisted_pseudo_selectors() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_stylesheet_handles_priority_of_elements_vs_block_elements_pseudo_selectors() { $theme_json = new WP_Theme_JSON( @@ -1060,7 +1065,7 @@ public function test_get_stylesheet_handles_priority_of_elements_vs_block_elemen ) ); - $expected = ':root :where(a:where(:not(.wp-element-button))){background-color: red;color: green;}:root :where(a:where(:not(.wp-element-button)):hover){background-color: green;color: red;}:root :where(.wp-block-group a:where(:not(.wp-element-button)):hover){background-color: black;color: yellow;}'; + $expected = 'a:where(:not(.wp-element-button)){background-color: red;color: green;}:root :where(a:where(:not(.wp-element-button)):hover){background-color: green;color: red;}:root :where(.wp-block-group a:where(:not(.wp-element-button)):hover){background-color: black;color: yellow;}'; $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ), null, array( 'skip_root_layout_styles' => true ) ) ); } @@ -1359,6 +1364,7 @@ public function test_get_stylesheet_custom_root_selector() { * * @ticket 61118 * @ticket 61165 + * @ticket 61630 */ public function test_get_stylesheet_generates_fluid_typography_values() { register_block_type( @@ -1413,7 +1419,7 @@ public function test_get_stylesheet_generates_fluid_typography_values() { unregister_block_type( 'test/clamp-me' ); $this->assertSame( - ':root{--wp--preset--font-size--pickles: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.156), 16px);--wp--preset--font-size--toast: clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.575), 22px);}:root :where(body){font-size: clamp(0.875em, 0.875rem + ((1vw - 0.2em) * 0.156), 1em);}:root :where(h1){font-size: clamp(50.171px, 3.136rem + ((1vw - 3.2px) * 3.893), 100px);}:root :where(.wp-block-test-clamp-me){font-size: clamp(27.894px, 1.743rem + ((1vw - 3.2px) * 1.571), 48px);}.has-pickles-font-size{font-size: var(--wp--preset--font-size--pickles) !important;}.has-toast-font-size{font-size: var(--wp--preset--font-size--toast) !important;}', + ':root{--wp--preset--font-size--pickles: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.156), 16px);--wp--preset--font-size--toast: clamp(14.642px, 0.915rem + ((1vw - 3.2px) * 0.575), 22px);}:root :where(body){font-size: clamp(0.875em, 0.875rem + ((1vw - 0.2em) * 0.156), 1em);}h1{font-size: clamp(50.171px, 3.136rem + ((1vw - 3.2px) * 3.893), 100px);}:root :where(.wp-block-test-clamp-me){font-size: clamp(27.894px, 1.743rem + ((1vw - 3.2px) * 1.571), 48px);}.has-pickles-font-size{font-size: var(--wp--preset--font-size--pickles) !important;}.has-toast-font-size{font-size: var(--wp--preset--font-size--toast) !important;}', $theme_json->get_stylesheet( array( 'styles', 'variables', 'presets' ), null, array( 'skip_root_layout_styles' => true ) ) ); } @@ -4946,6 +4952,7 @@ public function test_shadow_preset_styles() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61630 */ public function test_get_shadow_styles_for_blocks() { $theme_json = new WP_Theme_JSON( @@ -4980,7 +4987,7 @@ public function test_get_shadow_styles_for_blocks() { ); $variable_styles = ':root{--wp--preset--shadow--natural: 5px 5px 0 0 black;}'; - $element_styles = ':root :where(a:where(:not(.wp-element-button))){box-shadow: var(--wp--preset--shadow--natural);}:root :where(.wp-element-button, .wp-block-button__link){box-shadow: var(--wp--preset--shadow--natural);}:root :where(p){box-shadow: var(--wp--preset--shadow--natural);}'; + $element_styles = 'a:where(:not(.wp-element-button)){box-shadow: var(--wp--preset--shadow--natural);}:root :where(.wp-element-button, .wp-block-button__link){box-shadow: var(--wp--preset--shadow--natural);}:root :where(p){box-shadow: var(--wp--preset--shadow--natural);}'; $expected_styles = $variable_styles . $element_styles; $this->assertSame( $expected_styles, $theme_json->get_stylesheet( array( 'styles', 'presets', 'variables' ), null, array( 'skip_root_layout_styles' => true ) ) ); } From dea027eac82ca7244eff421642562b2d75918e19 Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Thu, 18 Jul 2024 06:48:08 +0000 Subject: [PATCH 132/422] Block Themes: Fix invalid css for nested fullwidth layouts with zero padding applied In the Layout block support, handle 0 values for padding as 0px in calc() rules. This resolves a bug for nested fullwidth layouts when zero padding is applied. Due to how calc() works, without supplying the unit, the rule will not work, resulting in a horizontal scrollbar. Backports the PHP changes in https://github.com/WordPress/gutenberg/pull/63436. Fixes #61656. Props andrewserong, mukesh27, aaronrobertshaw. git-svn-id: https://develop.svn.wordpress.org/trunk@58750 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/layout.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/block-supports/layout.php b/src/wp-includes/block-supports/layout.php index a5b438cd6acaf..d3718930d5062 100644 --- a/src/wp-includes/block-supports/layout.php +++ b/src/wp-includes/block-supports/layout.php @@ -322,14 +322,22 @@ function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false * They're added separately because padding might only be set on one side. */ if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) { - $padding_right = $block_spacing_values['declarations']['padding-right']; + $padding_right = $block_spacing_values['declarations']['padding-right']; + // Add unit if 0. + if ( '0' === $padding_right ) { + $padding_right = '0px'; + } $layout_styles[] = array( 'selector' => "$selector > .alignfull", 'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ), ); } if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) { - $padding_left = $block_spacing_values['declarations']['padding-left']; + $padding_left = $block_spacing_values['declarations']['padding-left']; + // Add unit if 0. + if ( '0' === $padding_left ) { + $padding_left = '0px'; + } $layout_styles[] = array( 'selector' => "$selector > .alignfull", 'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ), From 05f261a0a3a222803ce1e8350b0a971ad4efd798 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Jul 2024 12:58:40 +0000 Subject: [PATCH 133/422] Upgrade/Install: Update sodium_compat to v1.21.1. The latest version of sodium_compat includes support for AEGIS and preliminary support for PHP 8.4. Additionally, the PHP 8.2+ `SensitiveParameter` attribute is now applied where appropriate to functions in the public API. This attribute is used to mark parameters that are sensitive and should be redacted from stack traces. References: * [https://github.com/paragonie/sodium_compat/releases/tag/v1.21.0 sodium_compat 1.21.0 release notes] * [https://github.com/paragonie/sodium_compat/releases/tag/v1.21.1 sodium_compat 1.21.1 release notes] * [https://github.com/paragonie/sodium_compat/compare/v1.20.0...v1.21.1 Full list of changes in sodium_compat 1.21.1] Follow-up to [49741], [51002], [51591], [52988], [54150], [54310], [55699]. Props jrf, dd32, paragoninitiativeenterprises. Fixes #61686. git-svn-id: https://develop.svn.wordpress.org/trunk@58752 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/sodium_compat/autoload.php | 6 + .../sodium_compat/lib/php72compat.php | 498 ++++++++--- .../sodium_compat/lib/ristretto255.php | 90 +- .../sodium_compat/lib/sodium_compat.php | 352 ++++++-- .../sodium_compat/lib/stream-xchacha20.php | 27 +- src/wp-includes/sodium_compat/src/Compat.php | 825 ++++++++++++++---- .../sodium_compat/src/Core/Base64/Common.php | 213 ----- .../src/Core/Curve25519/Ge/Cached.php | 20 +- .../src/Core/Curve25519/Ge/P1p1.php | 20 +- .../src/Core/Curve25519/Ge/P2.php | 15 +- .../src/Core/Curve25519/Ge/P3.php | 20 +- .../src/Core/Curve25519/Ge/Precomp.php | 15 +- .../sodium_compat/src/Core/Util.php | 24 + src/wp-includes/sodium_compat/src/File.php | 74 +- 14 files changed, 1536 insertions(+), 663 deletions(-) delete mode 100644 src/wp-includes/sodium_compat/src/Core/Base64/Common.php diff --git a/src/wp-includes/sodium_compat/autoload.php b/src/wp-includes/sodium_compat/autoload.php index fd12f87b20e98..bfd9e4a034e29 100644 --- a/src/wp-includes/sodium_compat/autoload.php +++ b/src/wp-includes/sodium_compat/autoload.php @@ -54,6 +54,9 @@ function sodiumCompatAutoloader($class) // unless PHP >= 5.3.0 require_once dirname(__FILE__) . '/lib/namespaced.php'; require_once dirname(__FILE__) . '/lib/sodium_compat.php'; + if (!defined('SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES')) { + require_once dirname(__FILE__) . '/lib/php84compat_const.php'; + } } else { require_once dirname(__FILE__) . '/src/PHP52/SplFixedArray.php'; } @@ -71,5 +74,8 @@ function sodiumCompatAutoloader($class) // Older versions of {PHP, ext/sodium} will not define these require_once(dirname(__FILE__) . '/lib/php72compat.php'); } +if (PHP_VERSION_ID < 80400 || !extension_loaded('sodium')) { + require_once dirname(__FILE__) . '/lib/php84compat.php'; +} require_once(dirname(__FILE__) . '/lib/stream-xchacha20.php'); require_once(dirname(__FILE__) . '/lib/ristretto255.php'); diff --git a/src/wp-includes/sodium_compat/lib/php72compat.php b/src/wp-includes/sodium_compat/lib/php72compat.php index e949dbdc68465..b9da5e036505b 100644 --- a/src/wp-includes/sodium_compat/lib/php72compat.php +++ b/src/wp-includes/sodium_compat/lib/php72compat.php @@ -14,14 +14,14 @@ 'BASE64_VARIANT_ORIGINAL_NO_PADDING', 'BASE64_VARIANT_URLSAFE', 'BASE64_VARIANT_URLSAFE_NO_PADDING', - 'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES', - 'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES', - 'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES', - 'CRYPTO_AEAD_CHACHA20POLY1305_ABYTES', 'CRYPTO_AEAD_AES256GCM_KEYBYTES', 'CRYPTO_AEAD_AES256GCM_NSECBYTES', 'CRYPTO_AEAD_AES256GCM_NPUBBYTES', 'CRYPTO_AEAD_AES256GCM_ABYTES', + 'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES', + 'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES', + 'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES', + 'CRYPTO_AEAD_CHACHA20POLY1305_ABYTES', 'CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES', 'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES', 'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES', @@ -115,8 +115,12 @@ * @return void * @throws SodiumException */ - function sodium_add(&$string1, $string2) - { + function sodium_add( + #[\SensitiveParameter] + &$string1, + #[\SensitiveParameter] + $string2 + ) { ParagonIE_Sodium_Compat::add($string1, $string2); } } @@ -130,8 +134,12 @@ function sodium_add(&$string1, $string2) * @throws SodiumException * @throws TypeError */ - function sodium_base642bin($string, $variant, $ignore ='') - { + function sodium_base642bin( + #[\SensitiveParameter] + $string, + $variant, + $ignore ='' + ) { return ParagonIE_Sodium_Compat::base642bin($string, $variant, $ignore); } } @@ -144,8 +152,11 @@ function sodium_base642bin($string, $variant, $ignore ='') * @throws SodiumException * @throws TypeError */ - function sodium_bin2base64($string, $variant) - { + function sodium_bin2base64( + #[\SensitiveParameter] + $string, + $variant + ) { return ParagonIE_Sodium_Compat::bin2base64($string, $variant); } } @@ -157,8 +168,10 @@ function sodium_bin2base64($string, $variant) * @throws SodiumException * @throws TypeError */ - function sodium_bin2hex($string) - { + function sodium_bin2hex( + #[\SensitiveParameter] + $string + ) { return ParagonIE_Sodium_Compat::bin2hex($string); } } @@ -171,8 +184,12 @@ function sodium_bin2hex($string) * @throws SodiumException * @throws TypeError */ - function sodium_compare($string1, $string2) - { + function sodium_compare( + #[\SensitiveParameter] + $string1, + #[\SensitiveParameter] + $string2 + ) { return ParagonIE_Sodium_Compat::compare($string1, $string2); } } @@ -185,8 +202,13 @@ function sodium_compare($string1, $string2) * @param string $key * @return string|bool */ - function sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_aes256gcm_decrypt( + $ciphertext, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt( $ciphertext, @@ -215,8 +237,14 @@ function sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $additional_data, $no * @throws SodiumException * @throws TypeError */ - function sodium_crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_aes256gcm_encrypt( + #[\SensitiveParameter] + $message, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key); } } @@ -239,8 +267,13 @@ function sodium_crypto_aead_aes256gcm_is_available() * @param string $key * @return string|bool */ - function sodium_crypto_aead_chacha20poly1305_decrypt($ciphertext, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_chacha20poly1305_decrypt( + $ciphertext, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt( $ciphertext, @@ -266,8 +299,14 @@ function sodium_crypto_aead_chacha20poly1305_decrypt($ciphertext, $additional_da * @throws SodiumException * @throws TypeError */ - function sodium_crypto_aead_chacha20poly1305_encrypt($message, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_chacha20poly1305_encrypt( + #[\SensitiveParameter] + $message, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt( $message, $additional_data, @@ -296,8 +335,13 @@ function sodium_crypto_aead_chacha20poly1305_keygen() * @param string $key * @return string|bool */ - function sodium_crypto_aead_chacha20poly1305_ietf_decrypt($message, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_chacha20poly1305_ietf_decrypt( + $message, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt( $message, @@ -323,8 +367,14 @@ function sodium_crypto_aead_chacha20poly1305_ietf_decrypt($message, $additional_ * @throws SodiumException * @throws TypeError */ - function sodium_crypto_aead_chacha20poly1305_ietf_encrypt($message, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_chacha20poly1305_ietf_encrypt( + #[\SensitiveParameter] + $message, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt( $message, $additional_data, @@ -353,8 +403,13 @@ function sodium_crypto_aead_chacha20poly1305_ietf_keygen() * @param string $key * @return string|bool */ - function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($ciphertext, $additional_data, $nonce, $key) - { + function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt( + $ciphertext, + $additional_data, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, @@ -382,9 +437,11 @@ function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($ciphertext, $additio * @throws TypeError */ function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt( + #[\SensitiveParameter] $message, $additional_data, $nonce, + #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt( @@ -416,8 +473,11 @@ function sodium_crypto_aead_xchacha20poly1305_ietf_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_auth($message, $key) - { + function sodium_crypto_auth( + $message, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_auth($message, $key); } } @@ -442,8 +502,12 @@ function sodium_crypto_auth_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_auth_verify($mac, $message, $key) - { + function sodium_crypto_auth_verify( + $mac, + $message, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key); } } @@ -457,8 +521,13 @@ function sodium_crypto_auth_verify($mac, $message, $key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box($message, $nonce, $key_pair) - { + function sodium_crypto_box( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $key_pair); } } @@ -483,8 +552,11 @@ function sodium_crypto_box_keypair() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key) - { + function sodium_crypto_box_keypair_from_secretkey_and_publickey( + #[\SensitiveParameter] + $secret_key, + $public_key + ) { return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } @@ -496,8 +568,12 @@ function sodium_crypto_box_keypair_from_secretkey_and_publickey($secret_key, $pu * @param string $key_pair * @return string|bool */ - function sodium_crypto_box_open($ciphertext, $nonce, $key_pair) - { + function sodium_crypto_box_open( + $ciphertext, + $nonce, + #[\SensitiveParameter] + $key_pair + ) { try { return ParagonIE_Sodium_Compat::crypto_box_open($ciphertext, $nonce, $key_pair); } catch (Error $ex) { @@ -515,8 +591,10 @@ function sodium_crypto_box_open($ciphertext, $nonce, $key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_publickey($key_pair) - { + function sodium_crypto_box_publickey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_box_publickey($key_pair); } } @@ -528,8 +606,10 @@ function sodium_crypto_box_publickey($key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_publickey_from_secretkey($secret_key) - { + function sodium_crypto_box_publickey_from_secretkey( + #[\SensitiveParameter] + $secret_key + ) { return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($secret_key); } } @@ -542,8 +622,11 @@ function sodium_crypto_box_publickey_from_secretkey($secret_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_seal($message, $public_key) - { + function sodium_crypto_box_seal( + #[\SensitiveParameter] + $message, + $public_key + ) { return ParagonIE_Sodium_Compat::crypto_box_seal($message, $public_key); } } @@ -555,8 +638,11 @@ function sodium_crypto_box_seal($message, $public_key) * @return string|bool * @throws SodiumException */ - function sodium_crypto_box_seal_open($message, $key_pair) - { + function sodium_crypto_box_seal_open( + $message, + #[\SensitiveParameter] + $key_pair + ) { try { return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $key_pair); } catch (SodiumException $ex) { @@ -575,8 +661,10 @@ function sodium_crypto_box_seal_open($message, $key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_secretkey($key_pair) - { + function sodium_crypto_box_secretkey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_box_secretkey($key_pair); } } @@ -588,8 +676,10 @@ function sodium_crypto_box_secretkey($key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_box_seed_keypair($seed) - { + function sodium_crypto_box_seed_keypair( + #[\SensitiveParameter] + $seed + ) { return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed); } } @@ -603,8 +693,12 @@ function sodium_crypto_box_seed_keypair($seed) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_generichash($message, $key = null, $length = 32) - { + function sodium_crypto_generichash( + $message, + #[\SensitiveParameter] + $key = null, + $length = 32 + ) { return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $length); } } @@ -631,8 +725,11 @@ function sodium_crypto_generichash_final(&$state, $outputLength = 32) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_generichash_init($key = null, $length = 32) - { + function sodium_crypto_generichash_init( + #[\SensitiveParameter] + $key = null, + $length = 32 + ) { return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $length); } } @@ -656,8 +753,11 @@ function sodium_crypto_generichash_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_generichash_update(&$state, $message = '') - { + function sodium_crypto_generichash_update( + #[\SensitiveParameter] + &$state, + $message = '' + ) { ParagonIE_Sodium_Compat::crypto_generichash_update($state, $message); } } @@ -682,8 +782,13 @@ function sodium_crypto_kdf_keygen() * @return string * @throws Exception */ - function sodium_crypto_kdf_derive_from_key($subkey_length, $subkey_id, $context, $key) - { + function sodium_crypto_kdf_derive_from_key( + $subkey_length, + $subkey_id, + $context, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key( $subkey_length, $subkey_id, @@ -703,8 +808,13 @@ function sodium_crypto_kdf_derive_from_key($subkey_length, $subkey_id, $context, * @throws SodiumException * @throws TypeError */ - function sodium_crypto_kx($my_secret, $their_public, $client_public, $server_public) - { + function sodium_crypto_kx( + #[\SensitiveParameter] + $my_secret, + $their_public, + $client_public, + $server_public + ) { return ParagonIE_Sodium_Compat::crypto_kx( $my_secret, $their_public, @@ -719,8 +829,10 @@ function sodium_crypto_kx($my_secret, $their_public, $client_public, $server_pub * @return string * @throws Exception */ - function sodium_crypto_kx_seed_keypair($seed) - { + function sodium_crypto_kx_seed_keypair( + #[\SensitiveParameter] + $seed + ) { return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed); } } @@ -741,8 +853,11 @@ function sodium_crypto_kx_keypair() * @return array{0: string, 1: string} * @throws SodiumException */ - function sodium_crypto_kx_client_session_keys($client_key_pair, $server_key) - { + function sodium_crypto_kx_client_session_keys( + #[\SensitiveParameter] + $client_key_pair, + $server_key + ) { return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($client_key_pair, $server_key); } } @@ -753,8 +868,11 @@ function sodium_crypto_kx_client_session_keys($client_key_pair, $server_key) * @return array{0: string, 1: string} * @throws SodiumException */ - function sodium_crypto_kx_server_session_keys($server_key_pair, $client_key) - { + function sodium_crypto_kx_server_session_keys( + #[\SensitiveParameter] + $server_key_pair, + $client_key + ) { return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($server_key_pair, $client_key); } } @@ -764,8 +882,10 @@ function sodium_crypto_kx_server_session_keys($server_key_pair, $client_key) * @return string * @throws Exception */ - function sodium_crypto_kx_secretkey($key_pair) - { + function sodium_crypto_kx_secretkey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_kx_secretkey($key_pair); } } @@ -775,8 +895,10 @@ function sodium_crypto_kx_secretkey($key_pair) * @return string * @throws Exception */ - function sodium_crypto_kx_publickey($key_pair) - { + function sodium_crypto_kx_publickey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_kx_publickey($key_pair); } } @@ -793,8 +915,15 @@ function sodium_crypto_kx_publickey($key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo = null) - { + function sodium_crypto_pwhash( + $length, + #[\SensitiveParameter] + $passwd, + $salt, + $opslimit, + $memlimit, + $algo = null + ) { return ParagonIE_Sodium_Compat::crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo); } } @@ -808,8 +937,12 @@ function sodium_crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $al * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit) - { + function sodium_crypto_pwhash_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); } } @@ -823,8 +956,12 @@ function sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit) * * @throws SodiumException */ - function sodium_crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit) - { + function sodium_crypto_pwhash_str_needs_rehash( + #[\SensitiveParameter] + $hash, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit); } } @@ -837,8 +974,12 @@ function sodium_crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash_str_verify($passwd, $hash) - { + function sodium_crypto_pwhash_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); } } @@ -854,8 +995,14 @@ function sodium_crypto_pwhash_str_verify($passwd, $hash) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash_scryptsalsa208sha256($length, $passwd, $salt, $opslimit, $memlimit) - { + function sodium_crypto_pwhash_scryptsalsa208sha256( + $length, + #[\SensitiveParameter] + $passwd, + $salt, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256( $length, $passwd, @@ -875,8 +1022,12 @@ function sodium_crypto_pwhash_scryptsalsa208sha256($length, $passwd, $salt, $ops * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) - { + function sodium_crypto_pwhash_scryptsalsa208sha256_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); } } @@ -889,8 +1040,12 @@ function sodium_crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $meml * @throws SodiumException * @throws TypeError */ - function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) - { + function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); } } @@ -903,8 +1058,11 @@ function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_scalarmult($n, $p) - { + function sodium_crypto_scalarmult( + #[\SensitiveParameter] + $n, + $p + ) { return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); } } @@ -916,8 +1074,10 @@ function sodium_crypto_scalarmult($n, $p) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_scalarmult_base($n) - { + function sodium_crypto_scalarmult_base( + #[\SensitiveParameter] + $n + ) { return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); } } @@ -931,8 +1091,13 @@ function sodium_crypto_scalarmult_base($n) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_secretbox($message, $nonce, $key) - { + function sodium_crypto_secretbox( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); } } @@ -955,8 +1120,12 @@ function sodium_crypto_secretbox_keygen() * @param string $key * @return string|bool */ - function sodium_crypto_secretbox_open($ciphertext, $nonce, $key) - { + function sodium_crypto_secretbox_open( + $ciphertext, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key); } catch (Error $ex) { @@ -972,8 +1141,10 @@ function sodium_crypto_secretbox_open($ciphertext, $nonce, $key) * @return array * @throws SodiumException */ - function sodium_crypto_secretstream_xchacha20poly1305_init_push($key) - { + function sodium_crypto_secretstream_xchacha20poly1305_init_push( + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key); } } @@ -987,7 +1158,9 @@ function sodium_crypto_secretstream_xchacha20poly1305_init_push($key) * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_push( + #[\SensitiveParameter] &$state, + #[\SensitiveParameter] $message, $additional_data = '', $tag = 0 @@ -1007,8 +1180,11 @@ function sodium_crypto_secretstream_xchacha20poly1305_push( * @return string * @throws Exception */ - function sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key) - { + function sodium_crypto_secretstream_xchacha20poly1305_init_pull( + $header, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key); } } @@ -1020,8 +1196,12 @@ function sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key) * @return bool|array{0: string, 1: int} * @throws SodiumException */ - function sodium_crypto_secretstream_xchacha20poly1305_pull(&$state, $ciphertext, $additional_data = '') - { + function sodium_crypto_secretstream_xchacha20poly1305_pull( + #[\SensitiveParameter] + &$state, + $ciphertext, + $additional_data = '' + ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull( $state, $ciphertext, @@ -1035,8 +1215,10 @@ function sodium_crypto_secretstream_xchacha20poly1305_pull(&$state, $ciphertext, * @return void * @throws SodiumException */ - function sodium_crypto_secretstream_xchacha20poly1305_rekey(&$state) - { + function sodium_crypto_secretstream_xchacha20poly1305_rekey( + #[\SensitiveParameter] + &$state + ) { ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state); } } @@ -1059,8 +1241,11 @@ function sodium_crypto_secretstream_xchacha20poly1305_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_shorthash($message, $key = '') - { + function sodium_crypto_shorthash( + $message, + #[\SensitiveParameter] + $key = '' + ) { return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); } } @@ -1084,8 +1269,11 @@ function sodium_crypto_shorthash_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign($message, $secret_key) - { + function sodium_crypto_sign( + $message, + #[\SensitiveParameter] + $secret_key + ) { return ParagonIE_Sodium_Compat::crypto_sign($message, $secret_key); } } @@ -1098,8 +1286,11 @@ function sodium_crypto_sign($message, $secret_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_detached($message, $secret_key) - { + function sodium_crypto_sign_detached( + $message, + #[\SensitiveParameter] + $secret_key + ) { return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $secret_key); } } @@ -1112,8 +1303,11 @@ function sodium_crypto_sign_detached($message, $secret_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key) - { + function sodium_crypto_sign_keypair_from_secretkey_and_publickey( + #[\SensitiveParameter] + $secret_key, + $public_key + ) { return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } @@ -1155,8 +1349,10 @@ function sodium_crypto_sign_open($signedMessage, $public_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_publickey($key_pair) - { + function sodium_crypto_sign_publickey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey($key_pair); } } @@ -1168,8 +1364,10 @@ function sodium_crypto_sign_publickey($key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_publickey_from_secretkey($secret_key) - { + function sodium_crypto_sign_publickey_from_secretkey( + #[\SensitiveParameter] + $secret_key + ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($secret_key); } } @@ -1181,8 +1379,10 @@ function sodium_crypto_sign_publickey_from_secretkey($secret_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_secretkey($key_pair) - { + function sodium_crypto_sign_secretkey( + #[\SensitiveParameter] + $key_pair + ) { return ParagonIE_Sodium_Compat::crypto_sign_secretkey($key_pair); } } @@ -1194,8 +1394,10 @@ function sodium_crypto_sign_secretkey($key_pair) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_seed_keypair($seed) - { + function sodium_crypto_sign_seed_keypair( + #[\SensitiveParameter] + $seed + ) { return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); } } @@ -1235,8 +1437,10 @@ function sodium_crypto_sign_ed25519_pk_to_curve25519($public_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_sign_ed25519_sk_to_curve25519($secret_key) - { + function sodium_crypto_sign_ed25519_sk_to_curve25519( + #[\SensitiveParameter] + $secret_key + ) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($secret_key); } } @@ -1250,8 +1454,12 @@ function sodium_crypto_sign_ed25519_sk_to_curve25519($secret_key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_stream($length, $nonce, $key) - { + function sodium_crypto_stream( + $length, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream($length, $nonce, $key); } } @@ -1276,8 +1484,13 @@ function sodium_crypto_stream_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_stream_xor($message, $nonce, $key) - { + function sodium_crypto_stream_xor( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); } } @@ -1291,8 +1504,11 @@ function sodium_crypto_stream_xor($message, $nonce, $key) * @throws SodiumException * @throws TypeError */ - function sodium_hex2bin($string, $ignore = '') - { + function sodium_hex2bin( + #[\SensitiveParameter] + $string, + $ignore = '' + ) { return ParagonIE_Sodium_Compat::hex2bin($string, $ignore); } } @@ -1304,8 +1520,10 @@ function sodium_hex2bin($string, $ignore = '') * @throws SodiumException * @throws TypeError */ - function sodium_increment(&$string) - { + function sodium_increment( + #[\SensitiveParameter] + &$string + ) { ParagonIE_Sodium_Compat::increment($string); } } @@ -1348,8 +1566,12 @@ function sodium_version_string() * @throws SodiumException * @throws TypeError */ - function sodium_memcmp($string1, $string2) - { + function sodium_memcmp( + #[\SensitiveParameter] + $string1, + #[\SensitiveParameter] + $string2 + ) { return ParagonIE_Sodium_Compat::memcmp($string1, $string2); } } @@ -1363,8 +1585,10 @@ function sodium_memcmp($string1, $string2) * * @psalm-suppress ReferenceConstraintViolation */ - function sodium_memzero(&$string) - { + function sodium_memzero( + #[\SensitiveParameter] + &$string + ) { ParagonIE_Sodium_Compat::memzero($string); } } @@ -1377,8 +1601,11 @@ function sodium_memzero(&$string) * @throws SodiumException * @throws TypeError */ - function sodium_pad($unpadded, $block_size) - { + function sodium_pad( + #[\SensitiveParameter] + $unpadded, + $block_size + ) { return ParagonIE_Sodium_Compat::pad($unpadded, $block_size, true); } } @@ -1391,8 +1618,11 @@ function sodium_pad($unpadded, $block_size) * @throws SodiumException * @throws TypeError */ - function sodium_unpad($padded, $block_size) - { + function sodium_unpad( + #[\SensitiveParameter] + $padded, + $block_size + ) { return ParagonIE_Sodium_Compat::unpad($padded, $block_size, true); } } diff --git a/src/wp-includes/sodium_compat/lib/ristretto255.php b/src/wp-includes/sodium_compat/lib/ristretto255.php index 5a0c6dc67f7c2..587b4f6939ac6 100644 --- a/src/wp-includes/sodium_compat/lib/ristretto255.php +++ b/src/wp-includes/sodium_compat/lib/ristretto255.php @@ -47,8 +47,12 @@ * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_add($p, $q) - { + function sodium_crypto_core_ristretto255_add( + #[\SensitiveParameter] + $p, + #[\SensitiveParameter] + $q + ) { return ParagonIE_Sodium_Compat::ristretto255_add($p, $q, true); } } @@ -60,8 +64,10 @@ function sodium_crypto_core_ristretto255_add($p, $q) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_from_hash($s) - { + function sodium_crypto_core_ristretto255_from_hash( + #[\SensitiveParameter] + $s + ) { return ParagonIE_Sodium_Compat::ristretto255_from_hash($s, true); } } @@ -73,8 +79,10 @@ function sodium_crypto_core_ristretto255_from_hash($s) * @return bool * @throws SodiumException */ - function sodium_crypto_core_ristretto255_is_valid_point($s) - { + function sodium_crypto_core_ristretto255_is_valid_point( + #[\SensitiveParameter] + $s + ) { return ParagonIE_Sodium_Compat::ristretto255_is_valid_point($s, true); } } @@ -99,8 +107,12 @@ function sodium_crypto_core_ristretto255_random() * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_add($x, $y) - { + function sodium_crypto_core_ristretto255_scalar_add( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_add($x, $y, true); } } @@ -112,8 +124,10 @@ function sodium_crypto_core_ristretto255_scalar_add($x, $y) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_complement($s) - { + function sodium_crypto_core_ristretto255_scalar_complement( + #[\SensitiveParameter] + $s + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_complement($s, true); } } @@ -125,8 +139,10 @@ function sodium_crypto_core_ristretto255_scalar_complement($s) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_invert($p) - { + function sodium_crypto_core_ristretto255_scalar_invert( + #[\SensitiveParameter] + $p + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_invert($p, true); } } @@ -139,8 +155,12 @@ function sodium_crypto_core_ristretto255_scalar_invert($p) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_mul($x, $y) - { + function sodium_crypto_core_ristretto255_scalar_mul( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_mul($x, $y, true); } } @@ -152,8 +172,10 @@ function sodium_crypto_core_ristretto255_scalar_mul($x, $y) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_negate($s) - { + function sodium_crypto_core_ristretto255_scalar_negate( + #[\SensitiveParameter] + $s + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_negate($s, true); } } @@ -177,8 +199,10 @@ function sodium_crypto_core_ristretto255_scalar_random() * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_reduce($s) - { + function sodium_crypto_core_ristretto255_scalar_reduce( + #[\SensitiveParameter] + $s + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_reduce($s, true); } } @@ -191,8 +215,12 @@ function sodium_crypto_core_ristretto255_scalar_reduce($s) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_scalar_sub($x, $y) - { + function sodium_crypto_core_ristretto255_scalar_sub( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y + ) { return ParagonIE_Sodium_Compat::ristretto255_scalar_sub($x, $y, true); } } @@ -205,8 +233,12 @@ function sodium_crypto_core_ristretto255_scalar_sub($x, $y) * @return string * @throws SodiumException */ - function sodium_crypto_core_ristretto255_sub($p, $q) - { + function sodium_crypto_core_ristretto255_sub( + #[\SensitiveParameter] + $p, + #[\SensitiveParameter] + $q + ) { return ParagonIE_Sodium_Compat::ristretto255_sub($p, $q, true); } } @@ -219,8 +251,12 @@ function sodium_crypto_core_ristretto255_sub($p, $q) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_scalarmult_ristretto255($n, $p) - { + function sodium_crypto_scalarmult_ristretto255( + #[\SensitiveParameter] + $n, + #[\SensitiveParameter] + $p + ) { return ParagonIE_Sodium_Compat::scalarmult_ristretto255($n, $p, true); } } @@ -232,8 +268,10 @@ function sodium_crypto_scalarmult_ristretto255($n, $p) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_scalarmult_ristretto255_base($n) - { + function sodium_crypto_scalarmult_ristretto255_base( + #[\SensitiveParameter] + $n + ) { return ParagonIE_Sodium_Compat::scalarmult_ristretto255_base($n, true); } } \ No newline at end of file diff --git a/src/wp-includes/sodium_compat/lib/sodium_compat.php b/src/wp-includes/sodium_compat/lib/sodium_compat.php index 04f4bc7ac46be..72a561da8a2ff 100644 --- a/src/wp-includes/sodium_compat/lib/sodium_compat.php +++ b/src/wp-includes/sodium_compat/lib/sodium_compat.php @@ -20,8 +20,10 @@ * @throws \SodiumException * @throws \TypeError */ - function bin2hex($string) - { + function bin2hex( + #[\SensitiveParameter] + $string + ) { return ParagonIE_Sodium_Compat::bin2hex($string); } } @@ -34,8 +36,12 @@ function bin2hex($string) * @throws \SodiumException * @throws \TypeError */ - function compare($a, $b) - { + function compare( + #[\SensitiveParameter] + $a, + #[\SensitiveParameter] + $b + ) { return ParagonIE_Sodium_Compat::compare($a, $b); } } @@ -48,8 +54,13 @@ function compare($a, $b) * @param string $key * @return string|bool */ - function crypto_aead_aes256gcm_decrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_aes256gcm_decrypt( + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt($message, $assocData, $nonce, $key); } catch (\TypeError $ex) { @@ -70,8 +81,14 @@ function crypto_aead_aes256gcm_decrypt($message, $assocData, $nonce, $key) * @throws \SodiumException * @throws \TypeError */ - function crypto_aead_aes256gcm_encrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_aes256gcm_encrypt( + #[\SensitiveParameter] + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $assocData, $nonce, $key); } } @@ -94,8 +111,13 @@ function crypto_aead_aes256gcm_is_available() * @param string $key * @return string|bool */ - function crypto_aead_chacha20poly1305_decrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_chacha20poly1305_decrypt( + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt($message, $assocData, $nonce, $key); } catch (\TypeError $ex) { @@ -116,8 +138,14 @@ function crypto_aead_chacha20poly1305_decrypt($message, $assocData, $nonce, $key * @throws \SodiumException * @throws \TypeError */ - function crypto_aead_chacha20poly1305_encrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_chacha20poly1305_encrypt( + #[\SensitiveParameter] + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt($message, $assocData, $nonce, $key); } } @@ -130,8 +158,13 @@ function crypto_aead_chacha20poly1305_encrypt($message, $assocData, $nonce, $key * @param string $key * @return string|bool */ - function crypto_aead_chacha20poly1305_ietf_decrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_chacha20poly1305_ietf_decrypt( + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt($message, $assocData, $nonce, $key); } catch (\TypeError $ex) { @@ -152,8 +185,14 @@ function crypto_aead_chacha20poly1305_ietf_decrypt($message, $assocData, $nonce, * @throws \SodiumException * @throws \TypeError */ - function crypto_aead_chacha20poly1305_ietf_encrypt($message, $assocData, $nonce, $key) - { + function crypto_aead_chacha20poly1305_ietf_encrypt( + #[\SensitiveParameter] + $message, + $assocData, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt($message, $assocData, $nonce, $key); } } @@ -166,8 +205,11 @@ function crypto_aead_chacha20poly1305_ietf_encrypt($message, $assocData, $nonce, * @throws \SodiumException * @throws \TypeError */ - function crypto_auth($message, $key) - { + function crypto_auth( + $message, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_auth($message, $key); } } @@ -181,8 +223,12 @@ function crypto_auth($message, $key) * @throws \SodiumException * @throws \TypeError */ - function crypto_auth_verify($mac, $message, $key) - { + function crypto_auth_verify( + $mac, + $message, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key); } } @@ -196,8 +242,13 @@ function crypto_auth_verify($mac, $message, $key) * @throws \SodiumException * @throws \TypeError */ - function crypto_box($message, $nonce, $kp) - { + function crypto_box( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $kp + ) { return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $kp); } } @@ -222,8 +273,11 @@ function crypto_box_keypair() * @throws \SodiumException * @throws \TypeError */ - function crypto_box_keypair_from_secretkey_and_publickey($sk, $pk) - { + function crypto_box_keypair_from_secretkey_and_publickey( + #[\SensitiveParameter] + $sk, + $pk + ) { return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($sk, $pk); } } @@ -235,8 +289,13 @@ function crypto_box_keypair_from_secretkey_and_publickey($sk, $pk) * @param string $kp * @return string|bool */ - function crypto_box_open($message, $nonce, $kp) - { + function crypto_box_open( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $kp + ) { try { return ParagonIE_Sodium_Compat::crypto_box_open($message, $nonce, $kp); } catch (\TypeError $ex) { @@ -254,8 +313,10 @@ function crypto_box_open($message, $nonce, $kp) * @throws \SodiumException * @throws \TypeError */ - function crypto_box_publickey($keypair) - { + function crypto_box_publickey( + #[\SensitiveParameter] + $keypair + ) { return ParagonIE_Sodium_Compat::crypto_box_publickey($keypair); } } @@ -267,8 +328,10 @@ function crypto_box_publickey($keypair) * @throws \SodiumException * @throws \TypeError */ - function crypto_box_publickey_from_secretkey($sk) - { + function crypto_box_publickey_from_secretkey( + #[\SensitiveParameter] + $sk + ) { return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($sk); } } @@ -281,8 +344,11 @@ function crypto_box_publickey_from_secretkey($sk) * @throws \SodiumException * @throws \TypeError */ - function crypto_box_seal($message, $publicKey) - { + function crypto_box_seal( + #[\SensitiveParameter] + $message, + $publicKey + ) { return ParagonIE_Sodium_Compat::crypto_box_seal($message, $publicKey); } } @@ -293,8 +359,11 @@ function crypto_box_seal($message, $publicKey) * @param string $kp * @return string|bool */ - function crypto_box_seal_open($message, $kp) - { + function crypto_box_seal_open( + $message, + #[\SensitiveParameter] + $kp + ) { try { return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $kp); } catch (\TypeError $ex) { @@ -312,8 +381,10 @@ function crypto_box_seal_open($message, $kp) * @throws \SodiumException * @throws \TypeError */ - function crypto_box_secretkey($keypair) - { + function crypto_box_secretkey( + #[\SensitiveParameter] + $keypair + ) { return ParagonIE_Sodium_Compat::crypto_box_secretkey($keypair); } } @@ -327,8 +398,12 @@ function crypto_box_secretkey($keypair) * @throws \SodiumException * @throws \TypeError */ - function crypto_generichash($message, $key = null, $outLen = 32) - { + function crypto_generichash( + $message, + #[\SensitiveParameter] + $key = null, + $outLen = 32 + ) { return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $outLen); } } @@ -341,8 +416,11 @@ function crypto_generichash($message, $key = null, $outLen = 32) * @throws \SodiumException * @throws \TypeError */ - function crypto_generichash_final(&$ctx, $outputLength = 32) - { + function crypto_generichash_final( + #[\SensitiveParameter] + &$ctx, + $outputLength = 32 + ) { return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength); } } @@ -355,8 +433,11 @@ function crypto_generichash_final(&$ctx, $outputLength = 32) * @throws \SodiumException * @throws \TypeError */ - function crypto_generichash_init($key = null, $outLen = 32) - { + function crypto_generichash_init( + #[\SensitiveParameter] + $key = null, + $outLen = 32 + ) { return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outLen); } } @@ -369,8 +450,11 @@ function crypto_generichash_init($key = null, $outLen = 32) * @throws \SodiumException * @throws \TypeError */ - function crypto_generichash_update(&$ctx, $message = '') - { + function crypto_generichash_update( + #[\SensitiveParameter] + &$ctx, + $message = '' + ) { ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message); } } @@ -385,8 +469,13 @@ function crypto_generichash_update(&$ctx, $message = '') * @throws \SodiumException * @throws \TypeError */ - function crypto_kx($my_secret, $their_public, $client_public, $server_public) - { + function crypto_kx( + #[\SensitiveParameter] + $my_secret, + $their_public, + $client_public, + $server_public + ) { return ParagonIE_Sodium_Compat::crypto_kx( $my_secret, $their_public, @@ -408,8 +497,14 @@ function crypto_kx($my_secret, $their_public, $client_public, $server_public) * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit) - { + function crypto_pwhash( + $outlen, + #[\SensitiveParameter] + $passwd, + $salt, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit); } } @@ -423,8 +518,12 @@ function crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit) * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash_str($passwd, $opslimit, $memlimit) - { + function crypto_pwhash_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); } } @@ -437,8 +536,12 @@ function crypto_pwhash_str($passwd, $opslimit, $memlimit) * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash_str_verify($passwd, $hash) - { + function crypto_pwhash_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); } } @@ -454,8 +557,15 @@ function crypto_pwhash_str_verify($passwd, $hash) * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit) - { + function crypto_pwhash_scryptsalsa208sha256( + $outlen, + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $salt, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit); } } @@ -469,8 +579,12 @@ function crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) - { + function crypto_pwhash_scryptsalsa208sha256_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); } } @@ -483,8 +597,12 @@ function crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) * @throws \SodiumException * @throws \TypeError */ - function crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) - { + function crypto_pwhash_scryptsalsa208sha256_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); } } @@ -497,8 +615,11 @@ function crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) * @throws \SodiumException * @throws \TypeError */ - function crypto_scalarmult($n, $p) - { + function crypto_scalarmult( + #[\SensitiveParameter] + $n, + $p + ) { return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); } } @@ -510,8 +631,10 @@ function crypto_scalarmult($n, $p) * @throws \SodiumException * @throws \TypeError */ - function crypto_scalarmult_base($n) - { + function crypto_scalarmult_base( + #[\SensitiveParameter] + $n + ) { return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); } } @@ -525,8 +648,13 @@ function crypto_scalarmult_base($n) * @throws \SodiumException * @throws \TypeError */ - function crypto_secretbox($message, $nonce, $key) - { + function crypto_secretbox( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); } } @@ -538,8 +666,12 @@ function crypto_secretbox($message, $nonce, $key) * @param string $key * @return string|bool */ - function crypto_secretbox_open($message, $nonce, $key) - { + function crypto_secretbox_open( + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { try { return ParagonIE_Sodium_Compat::crypto_secretbox_open($message, $nonce, $key); } catch (\TypeError $ex) { @@ -558,8 +690,11 @@ function crypto_secretbox_open($message, $nonce, $key) * @throws \SodiumException * @throws \TypeError */ - function crypto_shorthash($message, $key = '') - { + function crypto_shorthash( + $message, + #[\SensitiveParameter] + $key = '' + ) { return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); } } @@ -572,8 +707,11 @@ function crypto_shorthash($message, $key = '') * @throws \SodiumException * @throws \TypeError */ - function crypto_sign($message, $sk) - { + function crypto_sign( + $message, + #[\SensitiveParameter] + $sk + ) { return ParagonIE_Sodium_Compat::crypto_sign($message, $sk); } } @@ -586,8 +724,11 @@ function crypto_sign($message, $sk) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_detached($message, $sk) - { + function crypto_sign_detached( + $message, + #[\SensitiveParameter] + $sk + ) { return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk); } } @@ -629,8 +770,10 @@ function crypto_sign_open($signedMessage, $pk) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_publickey($keypair) - { + function crypto_sign_publickey( + #[\SensitiveParameter] + $keypair + ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair); } } @@ -642,8 +785,10 @@ function crypto_sign_publickey($keypair) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_publickey_from_secretkey($sk) - { + function crypto_sign_publickey_from_secretkey( + #[\SensitiveParameter] + $sk + ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($sk); } } @@ -655,8 +800,10 @@ function crypto_sign_publickey_from_secretkey($sk) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_secretkey($keypair) - { + function crypto_sign_secretkey( + #[\SensitiveParameter] + $keypair + ) { return ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair); } } @@ -668,8 +815,10 @@ function crypto_sign_secretkey($keypair) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_seed_keypair($seed) - { + function crypto_sign_seed_keypair( + #[\SensitiveParameter] + $seed + ) { return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); } } @@ -709,8 +858,10 @@ function crypto_sign_ed25519_pk_to_curve25519($pk) * @throws \SodiumException * @throws \TypeError */ - function crypto_sign_ed25519_sk_to_curve25519($sk) - { + function crypto_sign_ed25519_sk_to_curve25519( + #[\SensitiveParameter] + $sk + ) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($sk); } } @@ -724,8 +875,12 @@ function crypto_sign_ed25519_sk_to_curve25519($sk) * @throws \SodiumException * @throws \TypeError */ - function crypto_stream($len, $nonce, $key) - { + function crypto_stream( + $len, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream($len, $nonce, $key); } } @@ -739,8 +894,13 @@ function crypto_stream($len, $nonce, $key) * @throws \SodiumException * @throws \TypeError */ - function crypto_stream_xor($message, $nonce, $key) - { + function crypto_stream_xor( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); } } @@ -752,8 +912,10 @@ function crypto_stream_xor($message, $nonce, $key) * @throws \SodiumException * @throws \TypeError */ - function hex2bin($string) - { + function hex2bin( + #[\SensitiveParameter] + $string + ) { return ParagonIE_Sodium_Compat::hex2bin($string); } } @@ -766,8 +928,12 @@ function hex2bin($string) * @throws \SodiumException * @throws \TypeError */ - function memcmp($a, $b) - { + function memcmp( + #[\SensitiveParameter] + $a, + #[\SensitiveParameter] + $b + ) { return ParagonIE_Sodium_Compat::memcmp($a, $b); } } @@ -783,8 +949,10 @@ function memcmp($a, $b) * @psalm-suppress MissingReturnType * @psalm-suppress ReferenceConstraintViolation */ - function memzero(&$str) - { + function memzero( + #[\SensitiveParameter] + &$str + ) { ParagonIE_Sodium_Compat::memzero($str); } } diff --git a/src/wp-includes/sodium_compat/lib/stream-xchacha20.php b/src/wp-includes/sodium_compat/lib/stream-xchacha20.php index ffeae33f3330d..f1c551f91ce48 100644 --- a/src/wp-includes/sodium_compat/lib/stream-xchacha20.php +++ b/src/wp-includes/sodium_compat/lib/stream-xchacha20.php @@ -10,8 +10,12 @@ * @throws SodiumException * @throws TypeError */ - function sodium_crypto_stream_xchacha20($len, $nonce, $key) - { + function sodium_crypto_stream_xchacha20( + $len, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream_xchacha20($len, $nonce, $key, true); } } @@ -36,8 +40,13 @@ function sodium_crypto_stream_xchacha20_keygen() * @throws SodiumException * @throws TypeError */ - function sodium_crypto_stream_xchacha20_xor($message, $nonce, $key) - { + function sodium_crypto_stream_xchacha20_xor( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor($message, $nonce, $key, true); } } @@ -52,8 +61,14 @@ function sodium_crypto_stream_xchacha20_xor($message, $nonce, $key) * @throws SodiumException * @throws TypeError */ - function sodium_crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key) - { + function sodium_crypto_stream_xchacha20_xor_ic( + #[\SensitiveParameter] + $message, + $nonce, + $counter, + #[\SensitiveParameter] + $key + ) { return ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key, true); } } diff --git a/src/wp-includes/sodium_compat/src/Compat.php b/src/wp-includes/sodium_compat/src/Compat.php index 3afe97c00e6c4..7c4cd7031f126 100644 --- a/src/wp-includes/sodium_compat/src/Compat.php +++ b/src/wp-includes/sodium_compat/src/Compat.php @@ -59,6 +59,14 @@ class ParagonIE_Sodium_Compat const CRYPTO_AEAD_AES256GCM_NSECBYTES = 0; const CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12; const CRYPTO_AEAD_AES256GCM_ABYTES = 16; + const CRYPTO_AEAD_AEGIS128L_KEYBYTES = 16; + const CRYPTO_AEAD_AEGIS128L_NSECBYTES = 0; + const CRYPTO_AEAD_AEGIS128L_NPUBBYTES = 16; + const CRYPTO_AEAD_AEGIS128L_ABYTES = 32; + const CRYPTO_AEAD_AEGIS256_KEYBYTES = 32; + const CRYPTO_AEAD_AEGIS256_NSECBYTES = 0; + const CRYPTO_AEAD_AEGIS256_NPUBBYTES = 32; + const CRYPTO_AEAD_AEGIS256_ABYTES = 32; const CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32; const CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0; const CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8; @@ -155,8 +163,12 @@ class ParagonIE_Sodium_Compat * @return void * @throws SodiumException */ - public static function add(&$val, $addv) - { + public static function add( + #[\SensitiveParameter] + &$val, + #[\SensitiveParameter] + $addv + ) { $val_len = ParagonIE_Sodium_Core_Util::strlen($val); $addv_len = ParagonIE_Sodium_Core_Util::strlen($addv); if ($val_len !== $addv_len) { @@ -181,8 +193,12 @@ public static function add(&$val, $addv) * @return string * @throws SodiumException */ - public static function base642bin($encoded, $variant, $ignore = '') - { + public static function base642bin( + #[\SensitiveParameter] + $encoded, + $variant, + $ignore = '' + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($encoded, 'string', 1); @@ -224,8 +240,11 @@ public static function base642bin($encoded, $variant, $ignore = '') * @return string * @throws SodiumException */ - public static function bin2base64($decoded, $variant) - { + public static function bin2base64( + #[\SensitiveParameter] + $decoded, + $variant + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($decoded, 'string', 1); /** @var string $decoded */ @@ -257,8 +276,10 @@ public static function bin2base64($decoded, $variant) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function bin2hex($string) - { + public static function bin2hex( + #[\SensitiveParameter] + $string + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1); @@ -284,8 +305,12 @@ public static function bin2hex($string) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function compare($left, $right) - { + public static function compare( + #[\SensitiveParameter] + $left, + #[\SensitiveParameter] + $right + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); @@ -299,6 +324,224 @@ public static function compare($left, $right) return ParagonIE_Sodium_Core_Util::compare($left, $right); } + /** + * Authenticated Encryption with Associated Data: Decryption + * + * Algorithm: + * AEGIS-128L + * + * @param string $ciphertext Encrypted message (with MAC appended) + * @param string $assocData Authenticated Associated Data (unencrypted) + * @param string $nonce Number to be used only Once; must be 32 bytes + * @param string $key Encryption key + * + * @return string The original plaintext message + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedInferredReturnType + * @psalm-suppress MixedReturnStatement + */ + public static function crypto_aead_aegis128l_decrypt( + $ciphertext = '', + $assocData = '', + $nonce = '', + #[\SensitiveParameter] + $key = '' + ) { + ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); + ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); + ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); + ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); + + /* Input validation: */ + if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) { + throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS_128L_NPUBBYTES long'); + } + if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) { + throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); + } + $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext); + if ($ct_length < self::CRYPTO_AEAD_AEGIS128L_ABYTES) { + throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS128L_ABYTES long'); + } + + $ct = ParagonIE_Sodium_Core_Util::substr( + $ciphertext, + 0, + $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES + ); + $tag = ParagonIE_Sodium_Core_Util::substr( + $ciphertext, + $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES, + self::CRYPTO_AEAD_AEGIS128L_ABYTES + ); + return ParagonIE_Sodium_Core_AEGIS128L::decrypt($ct, $tag, $assocData, $key, $nonce); + } + + /** + * Authenticated Encryption with Associated Data: Encryption + * + * Algorithm: + * AEGIS-128L + * + * @param string $plaintext Message to be encrypted + * @param string $assocData Authenticated Associated Data (unencrypted) + * @param string $nonce Number to be used only Once; must be 32 bytes + * @param string $key Encryption key + * + * @return string Ciphertext with 32-byte authentication tag appended + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + */ + public static function crypto_aead_aegis128l_encrypt( + #[\SensitiveParameter] + $plaintext = '', + $assocData = '', + $nonce = '', + #[\SensitiveParameter] + $key = '' + ) { + ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); + ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); + ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); + ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); + + /* Input validation: */ + if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) { + throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); + } + if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) { + throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); + } + + list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS128L::encrypt($plaintext, $assocData, $key, $nonce); + return $ct . $tag; + } + + /** + * Return a secure random key for use with the AEGIS-128L + * symmetric AEAD interface. + * + * @return string + * @throws Exception + * @throws Error + */ + public static function crypto_aead_aegis128l_keygen() + { + return random_bytes(self::CRYPTO_AEAD_AEGIS128L_KEYBYTES); + } + + /** + * Authenticated Encryption with Associated Data: Decryption + * + * Algorithm: + * AEGIS-256 + * + * @param string $ciphertext Encrypted message (with MAC appended) + * @param string $assocData Authenticated Associated Data (unencrypted) + * @param string $nonce Number to be used only Once; must be 32 bytes + * @param string $key Encryption key + * + * @return string The original plaintext message + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedInferredReturnType + * @psalm-suppress MixedReturnStatement + */ + public static function crypto_aead_aegis256_decrypt( + $ciphertext = '', + $assocData = '', + $nonce = '', + #[\SensitiveParameter] + $key = '' + ) { + ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); + ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); + ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); + ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); + + /* Input validation: */ + if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) { + throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS256_NPUBBYTES long'); + } + if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) { + throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS256_KEYBYTES long'); + } + $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext); + if ($ct_length < self::CRYPTO_AEAD_AEGIS256_ABYTES) { + throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS256_ABYTES long'); + } + + $ct = ParagonIE_Sodium_Core_Util::substr( + $ciphertext, + 0, + $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES + ); + $tag = ParagonIE_Sodium_Core_Util::substr( + $ciphertext, + $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES, + self::CRYPTO_AEAD_AEGIS256_ABYTES + ); + return ParagonIE_Sodium_Core_AEGIS256::decrypt($ct, $tag, $assocData, $key, $nonce); + } + + /** + * Authenticated Encryption with Associated Data: Encryption + * + * Algorithm: + * AEGIS-256 + * + * @param string $plaintext Message to be encrypted + * @param string $assocData Authenticated Associated Data (unencrypted) + * @param string $nonce Number to be used only Once; must be 32 bytes + * @param string $key Encryption key + * + * @return string Ciphertext with 32-byte authentication tag appended + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + */ + public static function crypto_aead_aegis256_encrypt( + #[\SensitiveParameter] + $plaintext = '', + $assocData = '', + $nonce = '', + #[\SensitiveParameter] + $key = '' + ) { + ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); + ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); + ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); + ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); + + /* Input validation: */ + if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) { + throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); + } + if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) { + throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long'); + } + + list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS256::encrypt($plaintext, $assocData, $key, $nonce); + return $ct . $tag; + } + + /** + * Return a secure random key for use with the AEGIS-256 + * symmetric AEAD interface. + * + * @return string + * @throws Exception + * @throws Error + */ + public static function crypto_aead_aegis256_keygen() + { + return random_bytes(self::CRYPTO_AEAD_AEGIS256_KEYBYTES); + } + /** * Is AES-256-GCM even available to use? * @@ -351,6 +594,7 @@ public static function crypto_aead_aes256gcm_decrypt( $ciphertext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { if (!self::crypto_aead_aes256gcm_is_available()) { @@ -408,9 +652,11 @@ public static function crypto_aead_aes256gcm_decrypt( * @psalm-suppress MixedArgument */ public static function crypto_aead_aes256gcm_encrypt( + #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { if (!self::crypto_aead_aes256gcm_is_available()) { @@ -484,6 +730,7 @@ public static function crypto_aead_chacha20poly1305_decrypt( $ciphertext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { /* Type checks: */ @@ -561,9 +808,11 @@ public static function crypto_aead_chacha20poly1305_decrypt( * @psalm-suppress MixedArgument */ public static function crypto_aead_chacha20poly1305_encrypt( + #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { /* Type checks: */ @@ -638,6 +887,7 @@ public static function crypto_aead_chacha20poly1305_ietf_decrypt( $ciphertext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { /* Type checks: */ @@ -728,9 +978,11 @@ public static function crypto_aead_chacha20poly1305_keygen() * @psalm-suppress MixedArgument */ public static function crypto_aead_chacha20poly1305_ietf_encrypt( + #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '' ) { /* Type checks: */ @@ -819,6 +1071,7 @@ public static function crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '', $dontFallback = false ) { @@ -891,9 +1144,11 @@ public static function crypto_aead_xchacha20poly1305_ietf_decrypt( * @psalm-suppress MixedArgument */ public static function crypto_aead_xchacha20poly1305_ietf_encrypt( + #[\SensitiveParameter] $plaintext = '', $assocData = '', $nonce = '', + #[\SensitiveParameter] $key = '', $dontFallback = false ) { @@ -971,8 +1226,11 @@ public static function crypto_aead_xchacha20poly1305_ietf_keygen() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_auth($message, $key) - { + public static function crypto_auth( + $message, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); @@ -1016,8 +1274,12 @@ public static function crypto_auth_keygen() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_auth_verify($mac, $message, $key) - { + public static function crypto_auth_verify( + $mac, + $message, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($mac, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); @@ -1060,8 +1322,12 @@ public static function crypto_auth_verify($mac, $message, $key) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box($plaintext, $nonce, $keypair) - { + public static function crypto_box( + $plaintext, + $nonce, + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -1104,8 +1370,11 @@ public static function crypto_box($plaintext, $nonce, $keypair) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box_seal($plaintext, $publicKey) - { + public static function crypto_box_seal( + #[\SensitiveParameter] + $plaintext, + $publicKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); @@ -1142,8 +1411,11 @@ public static function crypto_box_seal($plaintext, $publicKey) * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_box_seal_open($ciphertext, $keypair) - { + public static function crypto_box_seal_open( + $ciphertext, + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 2); @@ -1205,8 +1477,11 @@ public static function crypto_box_keypair() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box_keypair_from_secretkey_and_publickey($secretKey, $publicKey) - { + public static function crypto_box_keypair_from_secretkey_and_publickey( + #[\SensitiveParameter] + $secretKey, + $publicKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); @@ -1244,8 +1519,12 @@ public static function crypto_box_keypair_from_secretkey_and_publickey($secretKe * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_box_open($ciphertext, $nonce, $keypair) - { + public static function crypto_box_open( + $ciphertext, + $nonce, + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -1287,8 +1566,10 @@ public static function crypto_box_open($ciphertext, $nonce, $keypair) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box_publickey($keypair) - { + public static function crypto_box_publickey( + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); @@ -1318,8 +1599,10 @@ public static function crypto_box_publickey($keypair) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box_publickey_from_secretkey($secretKey) - { + public static function crypto_box_publickey_from_secretkey( + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); @@ -1349,8 +1632,10 @@ public static function crypto_box_publickey_from_secretkey($secretKey) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_box_secretkey($keypair) - { + public static function crypto_box_secretkey( + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); @@ -1381,8 +1666,10 @@ public static function crypto_box_secretkey($keypair) * @psalm-suppress MixedArgument * @psalm-suppress UndefinedFunction */ - public static function crypto_box_seed_keypair($seed) - { + public static function crypto_box_seed_keypair( + #[\SensitiveParameter] + $seed + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); @@ -1411,8 +1698,12 @@ public static function crypto_box_seed_keypair($seed) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_generichash($message, $key = '', $length = self::CRYPTO_GENERICHASH_BYTES) - { + public static function crypto_generichash( + $message, + #[\SensitiveParameter] + $key = '', + $length = self::CRYPTO_GENERICHASH_BYTES + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); if (is_null($key)) { @@ -1455,8 +1746,11 @@ public static function crypto_generichash($message, $key = '', $length = self::C * @psalm-suppress ReferenceConstraintViolation * @psalm-suppress ConflictingReferenceConstraint */ - public static function crypto_generichash_final(&$ctx, $length = self::CRYPTO_GENERICHASH_BYTES) - { + public static function crypto_generichash_final( + #[\SensitiveParameter] + &$ctx, + $length = self::CRYPTO_GENERICHASH_BYTES + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); @@ -1500,8 +1794,11 @@ public static function crypto_generichash_final(&$ctx, $length = self::CRYPTO_GE * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_generichash_init($key = '', $length = self::CRYPTO_GENERICHASH_BYTES) - { + public static function crypto_generichash_init( + #[\SensitiveParameter] + $key = '', + $length = self::CRYPTO_GENERICHASH_BYTES + ) { /* Type checks: */ if (is_null($key)) { $key = ''; @@ -1545,6 +1842,7 @@ public static function crypto_generichash_init($key = '', $length = self::CRYPTO * @psalm-suppress MixedArgument */ public static function crypto_generichash_init_salt_personal( + #[\SensitiveParameter] $key = '', $length = self::CRYPTO_GENERICHASH_BYTES, $salt = '', @@ -1591,8 +1889,11 @@ public static function crypto_generichash_init_salt_personal( * @psalm-suppress MixedArgument * @psalm-suppress ReferenceConstraintViolation */ - public static function crypto_generichash_update(&$ctx, $message) - { + public static function crypto_generichash_update( + #[\SensitiveParameter] + &$ctx, + $message + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); @@ -1635,6 +1936,7 @@ public static function crypto_kdf_derive_from_key( $subkey_len, $subkey_id, $context, + #[\SensitiveParameter] $key ) { ParagonIE_Sodium_Core_Util::declareScalarType($subkey_len, 'int', 1); @@ -1712,8 +2014,14 @@ public static function crypto_kdf_keygen() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_kx($my_secret, $their_public, $client_public, $server_public, $dontFallback = false) - { + public static function crypto_kx( + #[\SensitiveParameter] + $my_secret, + $their_public, + $client_public, + $server_public, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($my_secret, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($their_public, 'string', 2); @@ -1774,8 +2082,10 @@ public static function crypto_kx($my_secret, $their_public, $client_public, $ser * @return string * @throws SodiumException */ - public static function crypto_kx_seed_keypair($seed) - { + public static function crypto_kx_seed_keypair( + #[\SensitiveParameter] + $seed + ) { ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); $seed = (string) $seed; @@ -1806,8 +2116,11 @@ public static function crypto_kx_keypair() * @return array{0: string, 1: string} * @throws SodiumException */ - public static function crypto_kx_client_session_keys($keypair, $serverPublicKey) - { + public static function crypto_kx_client_session_keys( + #[\SensitiveParameter] + $keypair, + $serverPublicKey + ) { ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($serverPublicKey, 'string', 2); @@ -1848,8 +2161,11 @@ public static function crypto_kx_client_session_keys($keypair, $serverPublicKey) * @return array{0: string, 1: string} * @throws SodiumException */ - public static function crypto_kx_server_session_keys($keypair, $clientPublicKey) - { + public static function crypto_kx_server_session_keys( + #[\SensitiveParameter] + $keypair, + $clientPublicKey + ) { ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($clientPublicKey, 'string', 2); @@ -1889,8 +2205,10 @@ public static function crypto_kx_server_session_keys($keypair, $clientPublicKey) * @return string * @throws SodiumException */ - public static function crypto_kx_secretkey($kp) - { + public static function crypto_kx_secretkey( + #[\SensitiveParameter] + $kp + ) { return ParagonIE_Sodium_Core_Util::substr( $kp, 0, @@ -1924,8 +2242,15 @@ public static function crypto_kx_publickey($kp) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $alg = null) - { + public static function crypto_pwhash( + $outlen, + #[\SensitiveParameter] + $passwd, + $salt, + $opslimit, + $memlimit, + $alg = null + ) { ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); @@ -1976,8 +2301,12 @@ public static function crypto_pwhash_is_available() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_pwhash_str($passwd, $opslimit, $memlimit) - { + public static function crypto_pwhash_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); @@ -2003,8 +2332,12 @@ public static function crypto_pwhash_str($passwd, $opslimit, $memlimit) * @return bool * @throws SodiumException */ - public static function crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit) - { + public static function crypto_pwhash_str_needs_rehash( + #[\SensitiveParameter] + $hash, + $opslimit, + $memlimit + ) { ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); @@ -2032,8 +2365,12 @@ public static function crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimi * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_pwhash_str_verify($passwd, $hash) - { + public static function crypto_pwhash_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); @@ -2059,8 +2396,14 @@ public static function crypto_pwhash_str_verify($passwd, $hash) * @throws SodiumException * @throws TypeError */ - public static function crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit) - { + public static function crypto_pwhash_scryptsalsa208sha256( + $outlen, + #[\SensitiveParameter] + $passwd, + $salt, + $opslimit, + $memlimit + ) { ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); @@ -2119,8 +2462,12 @@ public static function crypto_pwhash_scryptsalsa208sha256_is_available() * @throws SodiumException * @throws TypeError */ - public static function crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) - { + public static function crypto_pwhash_scryptsalsa208sha256_str( + #[\SensitiveParameter] + $passwd, + $opslimit, + $memlimit + ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); @@ -2153,8 +2500,12 @@ public static function crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit * @throws SodiumException * @throws TypeError */ - public static function crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) - { + public static function crypto_pwhash_scryptsalsa208sha256_str_verify( + #[\SensitiveParameter] + $passwd, + #[\SensitiveParameter] + $hash + ) { ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); @@ -2190,8 +2541,11 @@ public static function crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $h * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_scalarmult($secretKey, $publicKey) - { + public static function crypto_scalarmult( + #[\SensitiveParameter] + $secretKey, + $publicKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); @@ -2234,8 +2588,10 @@ public static function crypto_scalarmult($secretKey, $publicKey) * @psalm-suppress TooFewArguments * @psalm-suppress MixedArgument */ - public static function crypto_scalarmult_base($secretKey) - { + public static function crypto_scalarmult_base( + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); @@ -2272,8 +2628,13 @@ public static function crypto_scalarmult_base($secretKey) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_secretbox($plaintext, $nonce, $key) - { + public static function crypto_secretbox( + #[\SensitiveParameter] + $plaintext, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -2312,8 +2673,12 @@ public static function crypto_secretbox($plaintext, $nonce, $key) * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_secretbox_open($ciphertext, $nonce, $key) - { + public static function crypto_secretbox_open( + $ciphertext, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -2398,8 +2763,12 @@ public static function crypto_secretbox_xchacha20poly1305($plaintext, $nonce, $k * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) - { + public static function crypto_secretbox_xchacha20poly1305_open( + $ciphertext, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -2425,8 +2794,10 @@ public static function crypto_secretbox_xchacha20poly1305_open($ciphertext, $non * @throws Exception * @throws SodiumException */ - public static function crypto_secretstream_xchacha20poly1305_init_push($key) - { + public static function crypto_secretstream_xchacha20poly1305_init_push( + #[\SensitiveParameter] + $key + ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_push($key); } @@ -2439,8 +2810,11 @@ public static function crypto_secretstream_xchacha20poly1305_init_push($key) * @return string Returns a state. * @throws Exception */ - public static function crypto_secretstream_xchacha20poly1305_init_pull($header, $key) - { + public static function crypto_secretstream_xchacha20poly1305_init_pull( + $header, + #[\SensitiveParameter] + $key + ) { if (ParagonIE_Sodium_Core_Util::strlen($header) < self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) { throw new SodiumException( 'header size should be SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES bytes' @@ -2460,8 +2834,14 @@ public static function crypto_secretstream_xchacha20poly1305_init_pull($header, * @return string * @throws SodiumException */ - public static function crypto_secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0) - { + public static function crypto_secretstream_xchacha20poly1305_push( + #[\SensitiveParameter] + &$state, + #[\SensitiveParameter] + $msg, + $aad = '', + $tag = 0 + ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_push( $state, @@ -2485,8 +2865,12 @@ public static function crypto_secretstream_xchacha20poly1305_push(&$state, $msg, * @return bool|array{0: string, 1: int} * @throws SodiumException */ - public static function crypto_secretstream_xchacha20poly1305_pull(&$state, $msg, $aad = '') - { + public static function crypto_secretstream_xchacha20poly1305_pull( + #[\SensitiveParameter] + &$state, + $msg, + $aad = '' + ) { if (PHP_INT_SIZE === 4) { return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_pull( $state, @@ -2515,8 +2899,10 @@ public static function crypto_secretstream_xchacha20poly1305_keygen() * @return void * @throws SodiumException */ - public static function crypto_secretstream_xchacha20poly1305_rekey(&$state) - { + public static function crypto_secretstream_xchacha20poly1305_rekey( + #[\SensitiveParameter] + &$state + ) { if (PHP_INT_SIZE === 4) { ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_rekey($state); } else { @@ -2536,8 +2922,11 @@ public static function crypto_secretstream_xchacha20poly1305_rekey(&$state) * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_shorthash($message, $key) - { + public static function crypto_shorthash( + $message, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); @@ -2586,8 +2975,11 @@ public static function crypto_shorthash_keygen() * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_sign($message, $secretKey) - { + public static function crypto_sign( + $message, + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); @@ -2622,8 +3014,10 @@ public static function crypto_sign($message, $secretKey) * @psalm-suppress MixedInferredReturnType * @psalm-suppress MixedReturnStatement */ - public static function crypto_sign_open($signedMessage, $publicKey) - { + public static function crypto_sign_open( + $signedMessage, + $publicKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($signedMessage, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); @@ -2679,8 +3073,11 @@ public static function crypto_sign_keypair() * @return string * @throws SodiumException */ - public static function crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk) - { + public static function crypto_sign_keypair_from_secretkey_and_publickey( + #[\SensitiveParameter] + $sk, + $pk + ) { ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1); $sk = (string) $sk; @@ -2708,8 +3105,10 @@ public static function crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_seed_keypair($seed) - { + public static function crypto_sign_seed_keypair( + #[\SensitiveParameter] + $seed + ) { ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); if (self::useNewSodiumAPI()) { @@ -2737,8 +3136,10 @@ public static function crypto_sign_seed_keypair($seed) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_publickey($keypair) - { + public static function crypto_sign_publickey( + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); @@ -2768,8 +3169,10 @@ public static function crypto_sign_publickey($keypair) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_publickey_from_secretkey($secretKey) - { + public static function crypto_sign_publickey_from_secretkey( + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); @@ -2799,8 +3202,10 @@ public static function crypto_sign_publickey_from_secretkey($secretKey) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_secretkey($keypair) - { + public static function crypto_sign_secretkey( + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); @@ -2833,8 +3238,11 @@ public static function crypto_sign_secretkey($keypair) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_detached($message, $secretKey) - { + public static function crypto_sign_detached( + $message, + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); @@ -2941,8 +3349,10 @@ public static function crypto_sign_ed25519_pk_to_curve25519($pk) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_sign_ed25519_sk_to_curve25519($sk) - { + public static function crypto_sign_ed25519_sk_to_curve25519( + #[\SensitiveParameter] + $sk + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1); @@ -2983,8 +3393,12 @@ public static function crypto_sign_ed25519_sk_to_curve25519($sk) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_stream($len, $nonce, $key) - { + public static function crypto_stream( + $len, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -3030,8 +3444,13 @@ public static function crypto_stream($len, $nonce, $key) * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_stream_xor($message, $nonce, $key) - { + public static function crypto_stream_xor( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -3085,8 +3504,13 @@ public static function crypto_stream_keygen() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_stream_xchacha20($len, $nonce, $key, $dontFallback = false) - { + public static function crypto_stream_xchacha20( + $len, + $nonce, + #[\SensitiveParameter] + $key, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -3130,8 +3554,14 @@ public static function crypto_stream_xchacha20($len, $nonce, $key, $dontFallback * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_stream_xchacha20_xor($message, $nonce, $key, $dontFallback = false) - { + public static function crypto_stream_xchacha20_xor( + #[\SensitiveParameter] + $message, + $nonce, + #[\SensitiveParameter] + $key, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -3176,8 +3606,15 @@ public static function crypto_stream_xchacha20_xor($message, $nonce, $key, $dont * @throws TypeError * @psalm-suppress MixedArgument */ - public static function crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key, $dontFallback = false) - { + public static function crypto_stream_xchacha20_xor_ic( + #[\SensitiveParameter] + $message, + $nonce, + $counter, + #[\SensitiveParameter] + $key, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); @@ -3226,8 +3663,11 @@ public static function crypto_stream_xchacha20_keygen() * @psalm-suppress TooFewArguments * @psalm-suppress MixedArgument */ - public static function hex2bin($string, $ignore = '') - { + public static function hex2bin( + #[\SensitiveParameter] + $string, + $ignore = '' + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($ignore, 'string', 2); @@ -3253,8 +3693,10 @@ public static function hex2bin($string, $ignore = '') * @throws TypeError * @psalm-suppress MixedArgument */ - public static function increment(&$var) - { + public static function increment( + #[\SensitiveParameter] + &$var + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); @@ -3287,8 +3729,10 @@ public static function increment(&$var) * * @throws SodiumException */ - public static function is_zero($str) - { + public static function is_zero( + #[\SensitiveParameter] + $str + ) { $d = 0; for ($i = 0; $i < 32; ++$i) { $d |= ParagonIE_Sodium_Core_Util::chrToInt($str[$i]); @@ -3342,8 +3786,12 @@ public static function library_version_minor() * @throws TypeError * @psalm-suppress MixedArgument */ - public static function memcmp($left, $right) - { + public static function memcmp( + #[\SensitiveParameter] + $left, + #[\SensitiveParameter] + $right + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); @@ -3371,8 +3819,10 @@ public static function memcmp($left, $right) * @throws TypeError * @psalm-suppress TooFewArguments */ - public static function memzero(&$var) - { + public static function memzero( + #[\SensitiveParameter] + &$var + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); @@ -3402,8 +3852,12 @@ public static function memzero(&$var) * @return string * @throws SodiumException */ - public static function pad($unpadded, $blockSize, $dontFallback = false) - { + public static function pad( + #[\SensitiveParameter] + $unpadded, + $blockSize, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($unpadded, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2); @@ -3488,8 +3942,12 @@ public static function pad($unpadded, $blockSize, $dontFallback = false) * @return string * @throws SodiumException */ - public static function unpad($padded, $blockSize, $dontFallback = false) - { + public static function unpad( + #[\SensitiveParameter] + $padded, + $blockSize, + $dontFallback = false + ) { /* Type checks: */ ParagonIE_Sodium_Core_Util::declareScalarType($padded, 'string', 1); ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2); @@ -3643,8 +4101,11 @@ public static function randombytes_random16() * @return bool * @throws SodiumException */ - public static function ristretto255_is_valid_point($p, $dontFallback = false) - { + public static function ristretto255_is_valid_point( + #[\SensitiveParameter] + $p, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_is_valid_point($p); } @@ -3667,8 +4128,13 @@ public static function ristretto255_is_valid_point($p, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_add($p, $q, $dontFallback = false) - { + public static function ristretto255_add( + #[\SensitiveParameter] + $p, + #[\SensitiveParameter] + $q, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_add($p, $q); } @@ -3682,8 +4148,13 @@ public static function ristretto255_add($p, $q, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_sub($p, $q, $dontFallback = false) - { + public static function ristretto255_sub( + #[\SensitiveParameter] + $p, + #[\SensitiveParameter] + $q, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_sub($p, $q); } @@ -3697,8 +4168,11 @@ public static function ristretto255_sub($p, $q, $dontFallback = false) * * @throws SodiumException */ - public static function ristretto255_from_hash($r, $dontFallback = false) - { + public static function ristretto255_from_hash( + #[\SensitiveParameter] + $r, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_from_hash($r); } @@ -3739,8 +4213,11 @@ public static function ristretto255_scalar_random($dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_invert($s, $dontFallback = false) - { + public static function ristretto255_scalar_invert( + #[\SensitiveParameter] + $s, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_invert($s); } @@ -3752,8 +4229,11 @@ public static function ristretto255_scalar_invert($s, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_negate($s, $dontFallback = false) - { + public static function ristretto255_scalar_negate( + #[\SensitiveParameter] + $s, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_negate($s); } @@ -3766,8 +4246,11 @@ public static function ristretto255_scalar_negate($s, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_complement($s, $dontFallback = false) - { + public static function ristretto255_scalar_complement( + #[\SensitiveParameter] + $s, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_complement($s); } @@ -3781,8 +4264,13 @@ public static function ristretto255_scalar_complement($s, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_add($x, $y, $dontFallback = false) - { + public static function ristretto255_scalar_add( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_add($x, $y); } @@ -3796,8 +4284,13 @@ public static function ristretto255_scalar_add($x, $y, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_sub($x, $y, $dontFallback = false) - { + public static function ristretto255_scalar_sub( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_sub($x, $y); } @@ -3811,8 +4304,13 @@ public static function ristretto255_scalar_sub($x, $y, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_mul($x, $y, $dontFallback = false) - { + public static function ristretto255_scalar_mul( + #[\SensitiveParameter] + $x, + #[\SensitiveParameter] + $y, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_mul($x, $y); } @@ -3826,8 +4324,13 @@ public static function ristretto255_scalar_mul($x, $y, $dontFallback = false) * @return string * @throws SodiumException */ - public static function scalarmult_ristretto255($n, $p, $dontFallback = false) - { + public static function scalarmult_ristretto255( + #[\SensitiveParameter] + $n, + #[\SensitiveParameter] + $p, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_scalarmult_ristretto255($n, $p); } @@ -3841,8 +4344,11 @@ public static function scalarmult_ristretto255($n, $p, $dontFallback = false) * @return string * @throws SodiumException */ - public static function scalarmult_ristretto255_base($n, $dontFallback = false) - { + public static function scalarmult_ristretto255_base( + #[\SensitiveParameter] + $n, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_scalarmult_ristretto255_base($n); } @@ -3855,8 +4361,11 @@ public static function scalarmult_ristretto255_base($n, $dontFallback = false) * @return string * @throws SodiumException */ - public static function ristretto255_scalar_reduce($s, $dontFallback = false) - { + public static function ristretto255_scalar_reduce( + #[\SensitiveParameter] + $s, + $dontFallback = false + ) { if (self::useNewSodiumAPI() && !$dontFallback) { return sodium_crypto_core_ristretto255_scalar_reduce($s); } @@ -3910,8 +4419,12 @@ public static function runtime_speed_test($iterations, $maxTimeout) * @return void * @throws SodiumException */ - public static function sub(&$val, $addv) - { + public static function sub( + #[\SensitiveParameter] + &$val, + #[\SensitiveParameter] + $addv + ) { $val_len = ParagonIE_Sodium_Core_Util::strlen($val); $addv_len = ParagonIE_Sodium_Core_Util::strlen($addv); if ($val_len !== $addv_len) { diff --git a/src/wp-includes/sodium_compat/src/Core/Base64/Common.php b/src/wp-includes/sodium_compat/src/Core/Base64/Common.php deleted file mode 100644 index 94b2e8f33ab3f..0000000000000 --- a/src/wp-includes/sodium_compat/src/Core/Base64/Common.php +++ /dev/null @@ -1,213 +0,0 @@ - $chunk */ - $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3)); - $b0 = $chunk[1]; - $b1 = $chunk[2]; - $b2 = $chunk[3]; - - $dest .= - self::encode6Bits( $b0 >> 2 ) . - self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . - self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) . - self::encode6Bits( $b2 & 63); - } - // The last chunk, which may have padding: - if ($i < $srcLen) { - /** @var array $chunk */ - $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); - $b0 = $chunk[1]; - if ($i + 1 < $srcLen) { - $b1 = $chunk[2]; - $dest .= - self::encode6Bits($b0 >> 2) . - self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) . - self::encode6Bits(($b1 << 2) & 63); - if ($pad) { - $dest .= '='; - } - } else { - $dest .= - self::encode6Bits( $b0 >> 2) . - self::encode6Bits(($b0 << 4) & 63); - if ($pad) { - $dest .= '=='; - } - } - } - return $dest; - } - - /** - * decode from base64 into binary - * - * Base64 character set "./[A-Z][a-z][0-9]" - * - * @param string $src - * @param bool $strictPadding - * @return string - * @throws RangeException - * @throws TypeError - * @psalm-suppress RedundantCondition - */ - public static function decode($src, $strictPadding = false) - { - // Remove padding - $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); - if ($srcLen === 0) { - return ''; - } - - if ($strictPadding) { - if (($srcLen & 3) === 0) { - if ($src[$srcLen - 1] === '=') { - $srcLen--; - if ($src[$srcLen - 1] === '=') { - $srcLen--; - } - } - } - if (($srcLen & 3) === 1) { - throw new RangeException( - 'Incorrect padding' - ); - } - if ($src[$srcLen - 1] === '=') { - throw new RangeException( - 'Incorrect padding' - ); - } - } else { - $src = rtrim($src, '='); - $srcLen = ParagonIE_Sodium_Core_Util::strlen($src); - } - - $err = 0; - $dest = ''; - // Main loop (no padding): - for ($i = 0; $i + 4 <= $srcLen; $i += 4) { - /** @var array $chunk */ - $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4)); - $c0 = self::decode6Bits($chunk[1]); - $c1 = self::decode6Bits($chunk[2]); - $c2 = self::decode6Bits($chunk[3]); - $c3 = self::decode6Bits($chunk[4]); - - $dest .= pack( - 'CCC', - ((($c0 << 2) | ($c1 >> 4)) & 0xff), - ((($c1 << 4) | ($c2 >> 2)) & 0xff), - ((($c2 << 6) | $c3 ) & 0xff) - ); - $err |= ($c0 | $c1 | $c2 | $c3) >> 8; - } - // The last chunk, which may have padding: - if ($i < $srcLen) { - /** @var array $chunk */ - $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i)); - $c0 = self::decode6Bits($chunk[1]); - - if ($i + 2 < $srcLen) { - $c1 = self::decode6Bits($chunk[2]); - $c2 = self::decode6Bits($chunk[3]); - $dest .= pack( - 'CC', - ((($c0 << 2) | ($c1 >> 4)) & 0xff), - ((($c1 << 4) | ($c2 >> 2)) & 0xff) - ); - $err |= ($c0 | $c1 | $c2) >> 8; - } elseif ($i + 1 < $srcLen) { - $c1 = self::decode6Bits($chunk[2]); - $dest .= pack( - 'C', - ((($c0 << 2) | ($c1 >> 4)) & 0xff) - ); - $err |= ($c0 | $c1) >> 8; - } elseif ($i < $srcLen && $strictPadding) { - $err |= 1; - } - } - /** @var bool $check */ - $check = ($err === 0); - if (!$check) { - throw new RangeException( - 'Base64::decode() only expects characters in the correct base64 alphabet' - ); - } - return $dest; - } - - /** - * Uses bitwise operators instead of table-lookups to turn 6-bit integers - * into 8-bit integers. - * - * Base64 character set: - * [A-Z] [a-z] [0-9] + / - * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f - * - * @param int $src - * @return int - */ - abstract protected static function decode6Bits($src); - - /** - * Uses bitwise operators instead of table-lookups to turn 8-bit integers - * into 6-bit integers. - * - * @param int $src - * @return string - */ - abstract protected static function encode6Bits($src); -} diff --git a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Cached.php b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Cached.php index 39bf8977766c9..06774ba4fd13d 100644 --- a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Cached.php +++ b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Cached.php @@ -40,26 +40,38 @@ class ParagonIE_Sodium_Core_Curve25519_Ge_Cached * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $T2d */ public function __construct( - ParagonIE_Sodium_Core_Curve25519_Fe $YplusX = null, - ParagonIE_Sodium_Core_Curve25519_Fe $YminusX = null, - ParagonIE_Sodium_Core_Curve25519_Fe $Z = null, - ParagonIE_Sodium_Core_Curve25519_Fe $T2d = null + $YplusX = null, + $YminusX = null, + $Z = null, + $T2d = null ) { if ($YplusX === null) { $YplusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($YplusX instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->YplusX = $YplusX; if ($YminusX === null) { $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($YminusX instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->YminusX = $YminusX; if ($Z === null) { $Z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Z = $Z; if ($T2d === null) { $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($T2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->T2d = $T2d; } } diff --git a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P1p1.php b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P1p1.php index a63d6ab232e7c..62d36eb05cb15 100644 --- a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P1p1.php +++ b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P1p1.php @@ -39,26 +39,38 @@ class ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $t */ public function __construct( - ParagonIE_Sodium_Core_Curve25519_Fe $x = null, - ParagonIE_Sodium_Core_Curve25519_Fe $y = null, - ParagonIE_Sodium_Core_Curve25519_Fe $z = null, - ParagonIE_Sodium_Core_Curve25519_Fe $t = null + $x = null, + $y = null, + $z = null, + $t = null ) { if ($x === null) { $x = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Z = $z; if ($t === null) { $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->T = $t; } } diff --git a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P2.php b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P2.php index aee4000d14193..029be720c1068 100644 --- a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P2.php +++ b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P2.php @@ -34,21 +34,30 @@ class ParagonIE_Sodium_Core_Curve25519_Ge_P2 * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $z */ public function __construct( - ParagonIE_Sodium_Core_Curve25519_Fe $x = null, - ParagonIE_Sodium_Core_Curve25519_Fe $y = null, - ParagonIE_Sodium_Core_Curve25519_Fe $z = null + $x = null, + $y = null, + $z = null ) { if ($x === null) { $x = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Z = $z; } } diff --git a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P3.php b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P3.php index 00f5b27a4b288..e5b2fe45992fd 100644 --- a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P3.php +++ b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/P3.php @@ -40,26 +40,38 @@ class ParagonIE_Sodium_Core_Curve25519_Ge_P3 * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $t */ public function __construct( - ParagonIE_Sodium_Core_Curve25519_Fe $x = null, - ParagonIE_Sodium_Core_Curve25519_Fe $y = null, - ParagonIE_Sodium_Core_Curve25519_Fe $z = null, - ParagonIE_Sodium_Core_Curve25519_Fe $t = null + $x = null, + $y = null, + $z = null, + $t = null ) { if ($x === null) { $x = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->X = $x; if ($y === null) { $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Y = $y; if ($z === null) { $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->Z = $z; if ($t === null) { $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->T = $t; } } diff --git a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Precomp.php b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Precomp.php index 59611c103669e..2503d7a6a86f9 100644 --- a/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Precomp.php +++ b/src/wp-includes/sodium_compat/src/Core/Curve25519/Ge/Precomp.php @@ -34,21 +34,30 @@ class ParagonIE_Sodium_Core_Curve25519_Ge_Precomp * @param ParagonIE_Sodium_Core_Curve25519_Fe $xy2d */ public function __construct( - ParagonIE_Sodium_Core_Curve25519_Fe $yplusx = null, - ParagonIE_Sodium_Core_Curve25519_Fe $yminusx = null, - ParagonIE_Sodium_Core_Curve25519_Fe $xy2d = null + $yplusx = null, + $yminusx = null, + $xy2d = null ) { if ($yplusx === null) { $yplusx = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($yplusx instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->yplusx = $yplusx; if ($yminusx === null) { $yminusx = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($yminusx instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->yminusx = $yminusx; if ($xy2d === null) { $xy2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); } + if (!($xy2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) { + throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe'); + } $this->xy2d = $xy2d; } } diff --git a/src/wp-includes/sodium_compat/src/Core/Util.php b/src/wp-includes/sodium_compat/src/Core/Util.php index 73e463f298158..e5d96dcdceda8 100644 --- a/src/wp-includes/sodium_compat/src/Core/Util.php +++ b/src/wp-includes/sodium_compat/src/Core/Util.php @@ -9,6 +9,8 @@ */ abstract class ParagonIE_Sodium_Core_Util { + const U32_MAX = 0xFFFFFFFF; + /** * @param int $integer * @param int $size (16, 32, 64) @@ -33,6 +35,28 @@ public static function abs($integer, $size = 0) ); } + /** + * @param string $a + * @param string $b + * @return string + * @throws SodiumException + */ + public static function andStrings($a, $b) + { + /* Type checks: */ + if (!is_string($a)) { + throw new TypeError('Argument 1 must be a string'); + } + if (!is_string($b)) { + throw new TypeError('Argument 2 must be a string'); + } + $len = self::strlen($a); + if (self::strlen($b) !== $len) { + throw new SodiumException('Both strings must be of equal length to combine with bitwise AND'); + } + return $a & $b; + } + /** * Convert a binary string into a hexadecimal string without cache-timing * leaks diff --git a/src/wp-includes/sodium_compat/src/File.php b/src/wp-includes/sodium_compat/src/File.php index e8622c7eba2da..1b02fc4be619e 100644 --- a/src/wp-includes/sodium_compat/src/File.php +++ b/src/wp-includes/sodium_compat/src/File.php @@ -25,8 +25,13 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util * @throws SodiumException * @throws TypeError */ - public static function box($inputFile, $outputFile, $nonce, $keyPair) - { + public static function box( + $inputFile, + $outputFile, + $nonce, + #[\SensitiveParameter] + $keyPair + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); @@ -91,8 +96,13 @@ public static function box($inputFile, $outputFile, $nonce, $keyPair) * @throws SodiumException * @throws TypeError */ - public static function box_open($inputFile, $outputFile, $nonce, $keypair) - { + public static function box_open( + $inputFile, + $outputFile, + $nonce, + #[\SensitiveParameter] + $keypair + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); @@ -161,8 +171,12 @@ public static function box_open($inputFile, $outputFile, $nonce, $keypair) * @throws SodiumException * @throws TypeError */ - public static function box_seal($inputFile, $outputFile, $publicKey) - { + public static function box_seal( + $inputFile, + $outputFile, + #[\SensitiveParameter] + $publicKey + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); @@ -265,8 +279,12 @@ public static function box_seal($inputFile, $outputFile, $publicKey) * @throws SodiumException * @throws TypeError */ - public static function box_seal_open($inputFile, $outputFile, $ecdhKeypair) - { + public static function box_seal_open( + $inputFile, + $outputFile, + #[\SensitiveParameter] + $ecdhKeypair + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); @@ -350,8 +368,12 @@ public static function box_seal_open($inputFile, $outputFile, $ecdhKeypair) * @throws TypeError * @psalm-suppress FailedTypeResolution */ - public static function generichash($filePath, $key = '', $outputLength = 32) - { + public static function generichash( + $filePath, + #[\SensitiveParameter] + $key = '', + $outputLength = 32 + ) { /* Type checks: */ if (!is_string($filePath)) { throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.'); @@ -428,8 +450,13 @@ public static function generichash($filePath, $key = '', $outputLength = 32) * @throws SodiumException * @throws TypeError */ - public static function secretbox($inputFile, $outputFile, $nonce, $key) - { + public static function secretbox( + $inputFile, + $outputFile, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given..'); @@ -493,8 +520,13 @@ public static function secretbox($inputFile, $outputFile, $nonce, $key) * @throws SodiumException * @throws TypeError */ - public static function secretbox_open($inputFile, $outputFile, $nonce, $key) - { + public static function secretbox_open( + $inputFile, + $outputFile, + $nonce, + #[\SensitiveParameter] + $key + ) { /* Type checks: */ if (!is_string($inputFile)) { throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); @@ -560,8 +592,11 @@ public static function secretbox_open($inputFile, $outputFile, $nonce, $key) * @throws SodiumException * @throws TypeError */ - public static function sign($filePath, $secretKey) - { + public static function sign( + $filePath, + #[\SensitiveParameter] + $secretKey + ) { /* Type checks: */ if (!is_string($filePath)) { throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.'); @@ -656,8 +691,11 @@ public static function sign($filePath, $secretKey) * @throws TypeError * @throws Exception */ - public static function verify($sig, $filePath, $publicKey) - { + public static function verify( + $sig, + $filePath, + $publicKey + ) { /* Type checks: */ if (!is_string($sig)) { throw new TypeError('Argument 1 must be a string, ' . gettype($sig) . ' given.'); From f2991061e4d8d0361dc725115e5eda9c49c2b1cf Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Jul 2024 13:46:07 +0000 Subject: [PATCH 134/422] Upgrade/Install: Add missing files from the sodium_compat v1.21.1 update. Follow-up to [58752]. Props paulkevan. See #61686. git-svn-id: https://develop.svn.wordpress.org/trunk@58753 602fd350-edb4-49c9-b593-d223f7449a82 --- .../sodium_compat/lib/php84compat.php | 130 +++++ .../sodium_compat/lib/php84compat_const.php | 10 + .../src/Core/AEGIS/State128L.php | 284 ++++++++++ .../sodium_compat/src/Core/AEGIS/State256.php | 240 ++++++++ .../sodium_compat/src/Core/AEGIS128L.php | 119 ++++ .../sodium_compat/src/Core/AEGIS256.php | 118 ++++ .../sodium_compat/src/Core/AES.php | 518 ++++++++++++++++++ .../sodium_compat/src/Core/AES/Block.php | 343 ++++++++++++ .../sodium_compat/src/Core/AES/Expanded.php | 14 + .../src/Core/AES/KeySchedule.php | 82 +++ 10 files changed, 1858 insertions(+) create mode 100644 src/wp-includes/sodium_compat/lib/php84compat.php create mode 100644 src/wp-includes/sodium_compat/lib/php84compat_const.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AEGIS/State128L.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AEGIS/State256.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AEGIS128L.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AEGIS256.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AES.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AES/Block.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AES/Expanded.php create mode 100644 src/wp-includes/sodium_compat/src/Core/AES/KeySchedule.php diff --git a/src/wp-includes/sodium_compat/lib/php84compat.php b/src/wp-includes/sodium_compat/lib/php84compat.php new file mode 100644 index 0000000000000..ee172a08d0fc7 --- /dev/null +++ b/src/wp-includes/sodium_compat/lib/php84compat.php @@ -0,0 +1,130 @@ + $state */ + protected $state; + public function __construct() + { + $this->state = array_fill(0, 8, ''); + } + + /** + * @internal Only use this for unit tests! + * @return string[] + */ + public function getState() + { + return array_values($this->state); + } + + /** + * @param array $input + * @return self + * @throws SodiumException + * + * @internal Only for unit tests + */ + public static function initForUnitTests(array $input) + { + if (count($input) < 8) { + throw new SodiumException('invalid input'); + } + $state = new self(); + for ($i = 0; $i < 8; ++$i) { + $state->state[$i] = $input[$i]; + } + return $state; + } + + /** + * @param string $key + * @param string $nonce + * @return self + */ + public static function init($key, $nonce) + { + $state = new self(); + + // S0 = key ^ nonce + $state->state[0] = $key ^ $nonce; + // S1 = C1 + $state->state[1] = SODIUM_COMPAT_AEGIS_C1; + // S2 = C0 + $state->state[2] = SODIUM_COMPAT_AEGIS_C0; + // S3 = C1 + $state->state[3] = SODIUM_COMPAT_AEGIS_C1; + // S4 = key ^ nonce + $state->state[4] = $key ^ $nonce; + // S5 = key ^ C0 + $state->state[5] = $key ^ SODIUM_COMPAT_AEGIS_C0; + // S6 = key ^ C1 + $state->state[6] = $key ^ SODIUM_COMPAT_AEGIS_C1; + // S7 = key ^ C0 + $state->state[7] = $key ^ SODIUM_COMPAT_AEGIS_C0; + + // Repeat(10, Update(nonce, key)) + for ($i = 0; $i < 10; ++$i) { + $state->update($nonce, $key); + } + return $state; + } + + /** + * @param string $ai + * @return self + */ + public function absorb($ai) + { + if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 32) { + throw new SodiumException('Input must be two AES blocks in size'); + } + $t0 = ParagonIE_Sodium_Core_Util::substr($ai, 0, 16); + $t1 = ParagonIE_Sodium_Core_Util::substr($ai, 16, 16); + return $this->update($t0, $t1); + } + + + /** + * @param string $ci + * @return string + * @throws SodiumException + */ + public function dec($ci) + { + if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 32) { + throw new SodiumException('Input must be two AES blocks in size'); + } + + // z0 = S6 ^ S1 ^ (S2 & S3) + $z0 = $this->state[6] + ^ $this->state[1] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + // z1 = S2 ^ S5 ^ (S6 & S7) + $z1 = $this->state[2] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); + + // t0, t1 = Split(xi, 128) + $t0 = ParagonIE_Sodium_Core_Util::substr($ci, 0, 16); + $t1 = ParagonIE_Sodium_Core_Util::substr($ci, 16, 16); + + // out0 = t0 ^ z0 + // out1 = t1 ^ z1 + $out0 = $t0 ^ $z0; + $out1 = $t1 ^ $z1; + + // Update(out0, out1) + // xi = out0 || out1 + $this->update($out0, $out1); + return $out0 . $out1; + } + + /** + * @param string $cn + * @return string + */ + public function decPartial($cn) + { + $len = ParagonIE_Sodium_Core_Util::strlen($cn); + + // z0 = S6 ^ S1 ^ (S2 & S3) + $z0 = $this->state[6] + ^ $this->state[1] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + // z1 = S2 ^ S5 ^ (S6 & S7) + $z1 = $this->state[2] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); + + // t0, t1 = Split(ZeroPad(cn, 256), 128) + $cn = str_pad($cn, 32, "\0", STR_PAD_RIGHT); + $t0 = ParagonIE_Sodium_Core_Util::substr($cn, 0, 16); + $t1 = ParagonIE_Sodium_Core_Util::substr($cn, 16, 16); + // out0 = t0 ^ z0 + // out1 = t1 ^ z1 + $out0 = $t0 ^ $z0; + $out1 = $t1 ^ $z1; + + // xn = Truncate(out0 || out1, |cn|) + $xn = ParagonIE_Sodium_Core_Util::substr($out0 . $out1, 0, $len); + + // v0, v1 = Split(ZeroPad(xn, 256), 128) + $padded = str_pad($xn, 32, "\0", STR_PAD_RIGHT); + $v0 = ParagonIE_Sodium_Core_Util::substr($padded, 0, 16); + $v1 = ParagonIE_Sodium_Core_Util::substr($padded, 16, 16); + // Update(v0, v1) + $this->update($v0, $v1); + + // return xn + return $xn; + } + + /** + * @param string $xi + * @return string + * @throws SodiumException + */ + public function enc($xi) + { + if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 32) { + throw new SodiumException('Input must be two AES blocks in size'); + } + + // z0 = S6 ^ S1 ^ (S2 & S3) + $z0 = $this->state[6] + ^ $this->state[1] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + // z1 = S2 ^ S5 ^ (S6 & S7) + $z1 = $this->state[2] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]); + + // t0, t1 = Split(xi, 128) + $t0 = ParagonIE_Sodium_Core_Util::substr($xi, 0, 16); + $t1 = ParagonIE_Sodium_Core_Util::substr($xi, 16, 16); + + // out0 = t0 ^ z0 + // out1 = t1 ^ z1 + $out0 = $t0 ^ $z0; + $out1 = $t1 ^ $z1; + + // Update(t0, t1) + // ci = out0 || out1 + $this->update($t0, $t1); + + // return ci + return $out0 . $out1; + } + + /** + * @param int $ad_len_bits + * @param int $msg_len_bits + * @return string + */ + public function finalize($ad_len_bits, $msg_len_bits) + { + $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) . + ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits); + $t = $this->state[2] ^ $encoded; + for ($i = 0; $i < 7; ++$i) { + $this->update($t, $t); + } + return ($this->state[0] ^ $this->state[1] ^ $this->state[2] ^ $this->state[3]) . + ($this->state[4] ^ $this->state[5] ^ $this->state[6] ^ $this->state[7]); + } + + /** + * @param string $m0 + * @param string $m1 + * @return self + */ + public function update($m0, $m1) + { + /* + S'0 = AESRound(S7, S0 ^ M0) + S'1 = AESRound(S0, S1) + S'2 = AESRound(S1, S2) + S'3 = AESRound(S2, S3) + S'4 = AESRound(S3, S4 ^ M1) + S'5 = AESRound(S4, S5) + S'6 = AESRound(S5, S6) + S'7 = AESRound(S6, S7) + */ + list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[7], $this->state[0] ^ $m0, + $this->state[0], $this->state[1] + ); + + list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[1], $this->state[2], + $this->state[2], $this->state[3] + ); + + list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[3], $this->state[4] ^ $m1, + $this->state[4], $this->state[5] + ); + list($s_6, $s_7) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[5], $this->state[6], + $this->state[6], $this->state[7] + ); + + /* + S0 = S'0 + S1 = S'1 + S2 = S'2 + S3 = S'3 + S4 = S'4 + S5 = S'5 + S6 = S'6 + S7 = S'7 + */ + $this->state[0] = $s_0; + $this->state[1] = $s_1; + $this->state[2] = $s_2; + $this->state[3] = $s_3; + $this->state[4] = $s_4; + $this->state[5] = $s_5; + $this->state[6] = $s_6; + $this->state[7] = $s_7; + return $this; + } +} \ No newline at end of file diff --git a/src/wp-includes/sodium_compat/src/Core/AEGIS/State256.php b/src/wp-includes/sodium_compat/src/Core/AEGIS/State256.php new file mode 100644 index 0000000000000..6f88b828e1bcf --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AEGIS/State256.php @@ -0,0 +1,240 @@ + $state */ + protected $state; + public function __construct() + { + $this->state = array_fill(0, 6, ''); + } + + /** + * @internal Only use this for unit tests! + * @return string[] + */ + public function getState() + { + return array_values($this->state); + } + + /** + * @param array $input + * @return self + * @throws SodiumException + * + * @internal Only for unit tests + */ + public static function initForUnitTests(array $input) + { + if (count($input) < 6) { + throw new SodiumException('invalid input'); + } + $state = new self(); + for ($i = 0; $i < 6; ++$i) { + $state->state[$i] = $input[$i]; + } + return $state; + } + + /** + * @param string $key + * @param string $nonce + * @return self + */ + public static function init($key, $nonce) + { + $state = new self(); + $k0 = ParagonIE_Sodium_Core_Util::substr($key, 0, 16); + $k1 = ParagonIE_Sodium_Core_Util::substr($key, 16, 16); + $n0 = ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16); + $n1 = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 16); + + // S0 = k0 ^ n0 + // S1 = k1 ^ n1 + // S2 = C1 + // S3 = C0 + // S4 = k0 ^ C0 + // S5 = k1 ^ C1 + $k0_n0 = $k0 ^ $n0; + $k1_n1 = $k1 ^ $n1; + $state->state[0] = $k0_n0; + $state->state[1] = $k1_n1; + $state->state[2] = SODIUM_COMPAT_AEGIS_C1; + $state->state[3] = SODIUM_COMPAT_AEGIS_C0; + $state->state[4] = $k0 ^ SODIUM_COMPAT_AEGIS_C0; + $state->state[5] = $k1 ^ SODIUM_COMPAT_AEGIS_C1; + + // Repeat(4, + // Update(k0) + // Update(k1) + // Update(k0 ^ n0) + // Update(k1 ^ n1) + // ) + for ($i = 0; $i < 4; ++$i) { + $state->update($k0); + $state->update($k1); + $state->update($k0 ^ $n0); + $state->update($k1 ^ $n1); + } + return $state; + } + + /** + * @param string $ai + * @return self + * @throws SodiumException + */ + public function absorb($ai) + { + if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 16) { + throw new SodiumException('Input must be an AES block in size'); + } + return $this->update($ai); + } + + /** + * @param string $ci + * @return string + * @throws SodiumException + */ + public function dec($ci) + { + if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 16) { + throw new SodiumException('Input must be an AES block in size'); + } + // z = S1 ^ S4 ^ S5 ^ (S2 & S3) + $z = $this->state[1] + ^ $this->state[4] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + $xi = $ci ^ $z; + $this->update($xi); + return $xi; + } + + /** + * @param string $cn + * @return string + */ + public function decPartial($cn) + { + $len = ParagonIE_Sodium_Core_Util::strlen($cn); + // z = S1 ^ S4 ^ S5 ^ (S2 & S3) + $z = $this->state[1] + ^ $this->state[4] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + + // t = ZeroPad(cn, 128) + $t = str_pad($cn, 16, "\0", STR_PAD_RIGHT); + + // out = t ^ z + $out = $t ^ $z; + + // xn = Truncate(out, |cn|) + $xn = ParagonIE_Sodium_Core_Util::substr($out, 0, $len); + + // v = ZeroPad(xn, 128) + $v = str_pad($xn, 16, "\0", STR_PAD_RIGHT); + // Update(v) + $this->update($v); + + // return xn + return $xn; + } + + /** + * @param string $xi + * @return string + * @throws SodiumException + */ + public function enc($xi) + { + if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 16) { + throw new SodiumException('Input must be an AES block in size'); + } + // z = S1 ^ S4 ^ S5 ^ (S2 & S3) + $z = $this->state[1] + ^ $this->state[4] + ^ $this->state[5] + ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]); + $this->update($xi); + return $xi ^ $z; + } + + /** + * @param int $ad_len_bits + * @param int $msg_len_bits + * @return string + */ + public function finalize($ad_len_bits, $msg_len_bits) + { + $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) . + ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits); + $t = $this->state[3] ^ $encoded; + + for ($i = 0; $i < 7; ++$i) { + $this->update($t); + } + + return ($this->state[0] ^ $this->state[1] ^ $this->state[2]) . + ($this->state[3] ^ $this->state[4] ^ $this->state[5]); + } + + /** + * @param string $m + * @return self + */ + public function update($m) + { + /* + S'0 = AESRound(S5, S0 ^ M) + S'1 = AESRound(S0, S1) + S'2 = AESRound(S1, S2) + S'3 = AESRound(S2, S3) + S'4 = AESRound(S3, S4) + S'5 = AESRound(S4, S5) + */ + list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[5],$this->state[0] ^ $m, + $this->state[0], $this->state[1] + ); + + list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[1], $this->state[2], + $this->state[2], $this->state[3] + ); + list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound( + $this->state[3], $this->state[4], + $this->state[4], $this->state[5] + ); + + /* + S0 = S'0 + S1 = S'1 + S2 = S'2 + S3 = S'3 + S4 = S'4 + S5 = S'5 + */ + $this->state[0] = $s_0; + $this->state[1] = $s_1; + $this->state[2] = $s_2; + $this->state[3] = $s_3; + $this->state[4] = $s_4; + $this->state[5] = $s_5; + return $this; + } +} diff --git a/src/wp-includes/sodium_compat/src/Core/AEGIS128L.php b/src/wp-includes/sodium_compat/src/Core/AEGIS128L.php new file mode 100644 index 0000000000000..ad1e85d324d3f --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AEGIS128L.php @@ -0,0 +1,119 @@ +> 5; + for ($i = 0; $i < $ad_blocks; ++$i) { + $ai = self::substr($ad, $i << 5, 32); + if (self::strlen($ai) < 32) { + $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT); + } + $state->absorb($ai); + } + + $msg = ''; + $cn = self::strlen($ct) & 31; + $ct_blocks = self::strlen($ct) >> 5; + for ($i = 0; $i < $ct_blocks; ++$i) { + $msg .= $state->dec(self::substr($ct, $i << 5, 32)); + } + if ($cn) { + $start = $ct_blocks << 5; + $msg .= $state->decPartial(self::substr($ct, $start, $cn)); + } + $expected_tag = $state->finalize( + self::strlen($ad) << 3, + self::strlen($msg) << 3 + ); + if (!self::hashEquals($expected_tag, $tag)) { + try { + // The RFC says to erase msg, so we shall try: + ParagonIE_Sodium_Compat::memzero($msg); + } catch (SodiumException $ex) { + // Do nothing if we cannot memzero + } + throw new SodiumException('verification failed'); + } + return $msg; + } + + /** + * @param string $msg + * @param string $ad + * @param string $key + * @param string $nonce + * @return array + * + * @throws SodiumException + */ + public static function encrypt($msg, $ad, $key, $nonce) + { + $state = self::init($key, $nonce); + // ad_blocks = Split(ZeroPad(ad, 256), 256) + // for ai in ad_blocks: + // Absorb(ai) + $ad_len = self::strlen($ad); + $msg_len = self::strlen($msg); + $ad_blocks = ($ad_len + 31) >> 5; + for ($i = 0; $i < $ad_blocks; ++$i) { + $ai = self::substr($ad, $i << 5, 32); + if (self::strlen($ai) < 32) { + $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT); + } + $state->absorb($ai); + } + + // msg_blocks = Split(ZeroPad(msg, 256), 256) + // for xi in msg_blocks: + // ct = ct || Enc(xi) + $ct = ''; + $msg_blocks = ($msg_len + 31) >> 5; + for ($i = 0; $i < $msg_blocks; ++$i) { + $xi = self::substr($msg, $i << 5, 32); + if (self::strlen($xi) < 32) { + $xi = str_pad($xi, 32, "\0", STR_PAD_RIGHT); + } + $ct .= $state->enc($xi); + } + // tag = Finalize(|ad|, |msg|) + // ct = Truncate(ct, |msg|) + $tag = $state->finalize( + $ad_len << 3, + $msg_len << 3 + ); + // return ct and tag + return array( + self::substr($ct, 0, $msg_len), + $tag + ); + } + + /** + * @param string $key + * @param string $nonce + * @return ParagonIE_Sodium_Core_AEGIS_State128L + */ + public static function init($key, $nonce) + { + return ParagonIE_Sodium_Core_AEGIS_State128L::init($key, $nonce); + } +} diff --git a/src/wp-includes/sodium_compat/src/Core/AEGIS256.php b/src/wp-includes/sodium_compat/src/Core/AEGIS256.php new file mode 100644 index 0000000000000..605bbcafde9a2 --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AEGIS256.php @@ -0,0 +1,118 @@ +> 4; + // for ai in ad_blocks: + // Absorb(ai) + for ($i = 0; $i < $ad_blocks; ++$i) { + $ai = self::substr($ad, $i << 4, 16); + if (self::strlen($ai) < 16) { + $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT); + } + $state->absorb($ai); + } + + $msg = ''; + $cn = self::strlen($ct) & 15; + $ct_blocks = self::strlen($ct) >> 4; + // ct_blocks = Split(ZeroPad(ct, 128), 128) + // cn = Tail(ct, |ct| mod 128) + for ($i = 0; $i < $ct_blocks; ++$i) { + $msg .= $state->dec(self::substr($ct, $i << 4, 16)); + } + // if cn is not empty: + // msg = msg || DecPartial(cn) + if ($cn) { + $start = $ct_blocks << 4; + $msg .= $state->decPartial(self::substr($ct, $start, $cn)); + } + $expected_tag = $state->finalize( + self::strlen($ad) << 3, + self::strlen($msg) << 3 + ); + if (!self::hashEquals($expected_tag, $tag)) { + try { + // The RFC says to erase msg, so we shall try: + ParagonIE_Sodium_Compat::memzero($msg); + } catch (SodiumException $ex) { + // Do nothing if we cannot memzero + } + throw new SodiumException('verification failed'); + } + return $msg; + } + + /** + * @param string $msg + * @param string $ad + * @param string $key + * @param string $nonce + * @return array + * @throws SodiumException + */ + public static function encrypt($msg, $ad, $key, $nonce) + { + $state = self::init($key, $nonce); + $ad_len = self::strlen($ad); + $msg_len = self::strlen($msg); + $ad_blocks = ($ad_len + 15) >> 4; + for ($i = 0; $i < $ad_blocks; ++$i) { + $ai = self::substr($ad, $i << 4, 16); + if (self::strlen($ai) < 16) { + $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT); + } + $state->absorb($ai); + } + + $ct = ''; + $msg_blocks = ($msg_len + 15) >> 4; + for ($i = 0; $i < $msg_blocks; ++$i) { + $xi = self::substr($msg, $i << 4, 16); + if (self::strlen($xi) < 16) { + $xi = str_pad($xi, 16, "\0", STR_PAD_RIGHT); + } + $ct .= $state->enc($xi); + } + $tag = $state->finalize( + $ad_len << 3, + $msg_len << 3 + ); + return array( + self::substr($ct, 0, $msg_len), + $tag + ); + + } + + /** + * @param string $key + * @param string $nonce + * @return ParagonIE_Sodium_Core_AEGIS_State256 + */ + public static function init($key, $nonce) + { + return ParagonIE_Sodium_Core_AEGIS_State256::init($key, $nonce); + } +} diff --git a/src/wp-includes/sodium_compat/src/Core/AES.php b/src/wp-includes/sodium_compat/src/Core/AES.php new file mode 100644 index 0000000000000..d86cff1a5b1f4 --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AES.php @@ -0,0 +1,518 @@ +orthogonalize(); + self::sbox($q); + $q->orthogonalize(); + return $q[0] & self::U32_MAX; + } + + /** + * Calculate the key schedule from a given random key + * + * @param string $key + * @return ParagonIE_Sodium_Core_AES_KeySchedule + * @throws SodiumException + */ + public static function keySchedule($key) + { + $key_len = self::strlen($key); + switch ($key_len) { + case 16: + $num_rounds = 10; + break; + case 24: + $num_rounds = 12; + break; + case 32: + $num_rounds = 14; + break; + default: + throw new SodiumException('Invalid key length: ' . $key_len); + } + $skey = array(); + $comp_skey = array(); + $nk = $key_len >> 2; + $nkf = ($num_rounds + 1) << 2; + $tmp = 0; + + for ($i = 0; $i < $nk; ++$i) { + $tmp = self::load_4(self::substr($key, $i << 2, 4)); + $skey[($i << 1)] = $tmp; + $skey[($i << 1) + 1] = $tmp; + } + + for ($i = $nk, $j = 0, $k = 0; $i < $nkf; ++$i) { + if ($j === 0) { + $tmp = (($tmp & 0xff) << 24) | ($tmp >> 8); + $tmp = (self::subWord($tmp) ^ self::$Rcon[$k]) & self::U32_MAX; + } elseif ($nk > 6 && $j === 4) { + $tmp = self::subWord($tmp); + } + $tmp ^= $skey[($i - $nk) << 1]; + $skey[($i << 1)] = $tmp & self::U32_MAX; + $skey[($i << 1) + 1] = $tmp & self::U32_MAX; + if (++$j === $nk) { + /** @psalm-suppress LoopInvalidation */ + $j = 0; + ++$k; + } + } + for ($i = 0; $i < $nkf; $i += 4) { + $q = ParagonIE_Sodium_Core_AES_Block::fromArray( + array_slice($skey, $i << 1, 8) + ); + $q->orthogonalize(); + // We have to overwrite $skey since we're not using C pointers like BearSSL did + for ($j = 0; $j < 8; ++$j) { + $skey[($i << 1) + $j] = $q[$j]; + } + } + for ($i = 0, $j = 0; $i < $nkf; ++$i, $j += 2) { + $comp_skey[$i] = ($skey[$j] & 0x55555555) + | ($skey[$j + 1] & 0xAAAAAAAA); + } + return new ParagonIE_Sodium_Core_AES_KeySchedule($comp_skey, $num_rounds); + } + + /** + * Mutates $q + * + * @param ParagonIE_Sodium_Core_AES_KeySchedule $skey + * @param ParagonIE_Sodium_Core_AES_Block $q + * @param int $offset + * @return void + */ + public static function addRoundKey( + ParagonIE_Sodium_Core_AES_Block $q, + ParagonIE_Sodium_Core_AES_KeySchedule $skey, + $offset = 0 + ) { + $block = $skey->getRoundKey($offset); + for ($j = 0; $j < 8; ++$j) { + $q[$j] = ($q[$j] ^ $block[$j]) & ParagonIE_Sodium_Core_Util::U32_MAX; + } + } + + /** + * This mainly exists for testing, as we need the round key features for AEGIS. + * + * @param string $message + * @param string $key + * @return string + * @throws SodiumException + */ + public static function decryptBlockECB($message, $key) + { + if (self::strlen($message) !== 16) { + throw new SodiumException('decryptBlockECB() expects a 16 byte message'); + } + $skey = self::keySchedule($key)->expand(); + $q = ParagonIE_Sodium_Core_AES_Block::init(); + $q[0] = self::load_4(self::substr($message, 0, 4)); + $q[2] = self::load_4(self::substr($message, 4, 4)); + $q[4] = self::load_4(self::substr($message, 8, 4)); + $q[6] = self::load_4(self::substr($message, 12, 4)); + + $q->orthogonalize(); + self::bitsliceDecryptBlock($skey, $q); + $q->orthogonalize(); + + return self::store32_le($q[0]) . + self::store32_le($q[2]) . + self::store32_le($q[4]) . + self::store32_le($q[6]); + } + + /** + * This mainly exists for testing, as we need the round key features for AEGIS. + * + * @param string $message + * @param string $key + * @return string + * @throws SodiumException + */ + public static function encryptBlockECB($message, $key) + { + if (self::strlen($message) !== 16) { + throw new SodiumException('encryptBlockECB() expects a 16 byte message'); + } + $comp_skey = self::keySchedule($key); + $skey = $comp_skey->expand(); + $q = ParagonIE_Sodium_Core_AES_Block::init(); + $q[0] = self::load_4(self::substr($message, 0, 4)); + $q[2] = self::load_4(self::substr($message, 4, 4)); + $q[4] = self::load_4(self::substr($message, 8, 4)); + $q[6] = self::load_4(self::substr($message, 12, 4)); + + $q->orthogonalize(); + self::bitsliceEncryptBlock($skey, $q); + $q->orthogonalize(); + + return self::store32_le($q[0]) . + self::store32_le($q[2]) . + self::store32_le($q[4]) . + self::store32_le($q[6]); + } + + /** + * Mutates $q + * + * @param ParagonIE_Sodium_Core_AES_Expanded $skey + * @param ParagonIE_Sodium_Core_AES_Block $q + * @return void + */ + public static function bitsliceEncryptBlock( + ParagonIE_Sodium_Core_AES_Expanded $skey, + ParagonIE_Sodium_Core_AES_Block $q + ) { + self::addRoundKey($q, $skey); + for ($u = 1; $u < $skey->getNumRounds(); ++$u) { + self::sbox($q); + $q->shiftRows(); + $q->mixColumns(); + self::addRoundKey($q, $skey, ($u << 3)); + } + self::sbox($q); + $q->shiftRows(); + self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3)); + } + + /** + * @param string $x + * @param string $y + * @return string + */ + public static function aesRound($x, $y) + { + $q = ParagonIE_Sodium_Core_AES_Block::init(); + $q[0] = self::load_4(self::substr($x, 0, 4)); + $q[2] = self::load_4(self::substr($x, 4, 4)); + $q[4] = self::load_4(self::substr($x, 8, 4)); + $q[6] = self::load_4(self::substr($x, 12, 4)); + + $rk = ParagonIE_Sodium_Core_AES_Block::init(); + $rk[0] = $rk[1] = self::load_4(self::substr($y, 0, 4)); + $rk[2] = $rk[3] = self::load_4(self::substr($y, 4, 4)); + $rk[4] = $rk[5] = self::load_4(self::substr($y, 8, 4)); + $rk[6] = $rk[7] = self::load_4(self::substr($y, 12, 4)); + + $q->orthogonalize(); + self::sbox($q); + $q->shiftRows(); + $q->mixColumns(); + $q->orthogonalize(); + // add round key without key schedule: + for ($i = 0; $i < 8; ++$i) { + $q[$i] ^= $rk[$i]; + } + return self::store32_le($q[0]) . + self::store32_le($q[2]) . + self::store32_le($q[4]) . + self::store32_le($q[6]); + } + + /** + * Process two AES blocks in one shot. + * + * @param string $b0 First AES block + * @param string $rk0 First round key + * @param string $b1 Second AES block + * @param string $rk1 Second round key + * @return string[] + */ + public static function doubleRound($b0, $rk0, $b1, $rk1) + { + $q = ParagonIE_Sodium_Core_AES_Block::init(); + // First block + $q[0] = self::load_4(self::substr($b0, 0, 4)); + $q[2] = self::load_4(self::substr($b0, 4, 4)); + $q[4] = self::load_4(self::substr($b0, 8, 4)); + $q[6] = self::load_4(self::substr($b0, 12, 4)); + // Second block + $q[1] = self::load_4(self::substr($b1, 0, 4)); + $q[3] = self::load_4(self::substr($b1, 4, 4)); + $q[5] = self::load_4(self::substr($b1, 8, 4)); + $q[7] = self::load_4(self::substr($b1, 12, 4));; + + $rk = ParagonIE_Sodium_Core_AES_Block::init(); + // First round key + $rk[0] = self::load_4(self::substr($rk0, 0, 4)); + $rk[2] = self::load_4(self::substr($rk0, 4, 4)); + $rk[4] = self::load_4(self::substr($rk0, 8, 4)); + $rk[6] = self::load_4(self::substr($rk0, 12, 4)); + // Second round key + $rk[1] = self::load_4(self::substr($rk1, 0, 4)); + $rk[3] = self::load_4(self::substr($rk1, 4, 4)); + $rk[5] = self::load_4(self::substr($rk1, 8, 4)); + $rk[7] = self::load_4(self::substr($rk1, 12, 4)); + + $q->orthogonalize(); + self::sbox($q); + $q->shiftRows(); + $q->mixColumns(); + $q->orthogonalize(); + // add round key without key schedule: + for ($i = 0; $i < 8; ++$i) { + $q[$i] ^= $rk[$i]; + } + return array( + self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]), + self::store32_le($q[1]) . self::store32_le($q[3]) . self::store32_le($q[5]) . self::store32_le($q[7]), + ); + } + + /** + * @param ParagonIE_Sodium_Core_AES_Expanded $skey + * @param ParagonIE_Sodium_Core_AES_Block $q + * @return void + */ + public static function bitsliceDecryptBlock( + ParagonIE_Sodium_Core_AES_Expanded $skey, + ParagonIE_Sodium_Core_AES_Block $q + ) { + self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3)); + for ($u = $skey->getNumRounds() - 1; $u > 0; --$u) { + $q->inverseShiftRows(); + self::invSbox($q); + self::addRoundKey($q, $skey, ($u << 3)); + $q->inverseMixColumns(); + } + $q->inverseShiftRows(); + self::invSbox($q); + self::addRoundKey($q, $skey, ($u << 3)); + } +} diff --git a/src/wp-includes/sodium_compat/src/Core/AES/Block.php b/src/wp-includes/sodium_compat/src/Core/AES/Block.php new file mode 100644 index 0000000000000..070eb8d329b07 --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AES/Block.php @@ -0,0 +1,343 @@ + + */ + protected $values = array(); + + /** + * @var int + */ + protected $size; + + /** + * @param int $size + */ + public function __construct($size = 8) + { + parent::__construct($size); + $this->size = $size; + $this->values = array_fill(0, $size, 0); + } + + /** + * @return self + */ + public static function init() + { + return new self(8); + } + + /** + * @internal You should not use this directly from another application + * + * @param array $array + * @param bool $save_indexes + * @return self + * + * @psalm-suppress MethodSignatureMismatch + */ + #[ReturnTypeWillChange] + public static function fromArray($array, $save_indexes = null) + { + $count = count($array); + if ($save_indexes) { + $keys = array_keys($array); + } else { + $keys = range(0, $count - 1); + } + $array = array_values($array); + /** @var array $keys */ + + $obj = new ParagonIE_Sodium_Core_AES_Block(); + if ($save_indexes) { + for ($i = 0; $i < $count; ++$i) { + $obj->offsetSet($keys[$i], $array[$i]); + } + } else { + for ($i = 0; $i < $count; ++$i) { + $obj->offsetSet($i, $array[$i]); + } + } + return $obj; + } + + + /** + * @internal You should not use this directly from another application + * + * @param int|null $offset + * @param int $value + * @return void + * + * @psalm-suppress MethodSignatureMismatch + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetSet($offset, $value) + { + if (!is_int($value)) { + throw new InvalidArgumentException('Expected an integer'); + } + if (is_null($offset)) { + $this->values[] = $value; + } else { + $this->values[$offset] = $value; + } + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return bool + * + * @psalm-suppress MethodSignatureMismatch + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetExists($offset) + { + return isset($this->values[$offset]); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return void + * + * @psalm-suppress MethodSignatureMismatch + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetUnset($offset) + { + unset($this->values[$offset]); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return int + * + * @psalm-suppress MethodSignatureMismatch + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetGet($offset) + { + if (!isset($this->values[$offset])) { + $this->values[$offset] = 0; + } + return (int) ($this->values[$offset]); + } + + /** + * @internal You should not use this directly from another application + * + * @return array + */ + public function __debugInfo() + { + $out = array(); + foreach ($this->values as $v) { + $out[] = str_pad(dechex($v), 8, '0', STR_PAD_LEFT); + } + return array(implode(', ', $out)); + /* + return array(implode(', ', $this->values)); + */ + } + + /** + * @param int $cl low bit mask + * @param int $ch high bit mask + * @param int $s shift + * @param int $x index 1 + * @param int $y index 2 + * @return self + */ + public function swapN($cl, $ch, $s, $x, $y) + { + static $u32mask = ParagonIE_Sodium_Core_Util::U32_MAX; + $a = $this->values[$x] & $u32mask; + $b = $this->values[$y] & $u32mask; + // (x) = (a & cl) | ((b & cl) << (s)); + $this->values[$x] = ($a & $cl) | ((($b & $cl) << $s) & $u32mask); + // (y) = ((a & ch) >> (s)) | (b & ch); + $this->values[$y] = ((($a & $ch) & $u32mask) >> $s) | ($b & $ch); + return $this; + } + + /** + * @param int $x index 1 + * @param int $y index 2 + * @return self + */ + public function swap2($x, $y) + { + return $this->swapN(0x55555555, 0xAAAAAAAA, 1, $x, $y); + } + + /** + * @param int $x index 1 + * @param int $y index 2 + * @return self + */ + public function swap4($x, $y) + { + return $this->swapN(0x33333333, 0xCCCCCCCC, 2, $x, $y); + } + + /** + * @param int $x index 1 + * @param int $y index 2 + * @return self + */ + public function swap8($x, $y) + { + return $this->swapN(0x0F0F0F0F, 0xF0F0F0F0, 4, $x, $y); + } + + /** + * @return self + */ + public function orthogonalize() + { + return $this + ->swap2(0, 1) + ->swap2(2, 3) + ->swap2(4, 5) + ->swap2(6, 7) + + ->swap4(0, 2) + ->swap4(1, 3) + ->swap4(4, 6) + ->swap4(5, 7) + + ->swap8(0, 4) + ->swap8(1, 5) + ->swap8(2, 6) + ->swap8(3, 7); + } + + /** + * @return self + */ + public function shiftRows() + { + for ($i = 0; $i < 8; ++$i) { + $x = $this->values[$i] & ParagonIE_Sodium_Core_Util::U32_MAX; + $this->values[$i] = ( + ($x & 0x000000FF) + | (($x & 0x0000FC00) >> 2) | (($x & 0x00000300) << 6) + | (($x & 0x00F00000) >> 4) | (($x & 0x000F0000) << 4) + | (($x & 0xC0000000) >> 6) | (($x & 0x3F000000) << 2) + ) & ParagonIE_Sodium_Core_Util::U32_MAX; + } + return $this; + } + + /** + * @param int $x + * @return int + */ + public static function rotr16($x) + { + return (($x << 16) & ParagonIE_Sodium_Core_Util::U32_MAX) | ($x >> 16); + } + + /** + * @return self + */ + public function mixColumns() + { + $q0 = $this->values[0]; + $q1 = $this->values[1]; + $q2 = $this->values[2]; + $q3 = $this->values[3]; + $q4 = $this->values[4]; + $q5 = $this->values[5]; + $q6 = $this->values[6]; + $q7 = $this->values[7]; + $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + + $this->values[0] = $q7 ^ $r7 ^ $r0 ^ self::rotr16($q0 ^ $r0); + $this->values[1] = $q0 ^ $r0 ^ $q7 ^ $r7 ^ $r1 ^ self::rotr16($q1 ^ $r1); + $this->values[2] = $q1 ^ $r1 ^ $r2 ^ self::rotr16($q2 ^ $r2); + $this->values[3] = $q2 ^ $r2 ^ $q7 ^ $r7 ^ $r3 ^ self::rotr16($q3 ^ $r3); + $this->values[4] = $q3 ^ $r3 ^ $q7 ^ $r7 ^ $r4 ^ self::rotr16($q4 ^ $r4); + $this->values[5] = $q4 ^ $r4 ^ $r5 ^ self::rotr16($q5 ^ $r5); + $this->values[6] = $q5 ^ $r5 ^ $r6 ^ self::rotr16($q6 ^ $r6); + $this->values[7] = $q6 ^ $r6 ^ $r7 ^ self::rotr16($q7 ^ $r7); + return $this; + } + + /** + * @return self + */ + public function inverseMixColumns() + { + $q0 = $this->values[0]; + $q1 = $this->values[1]; + $q2 = $this->values[2]; + $q3 = $this->values[3]; + $q4 = $this->values[4]; + $q5 = $this->values[5]; + $q6 = $this->values[6]; + $q7 = $this->values[7]; + $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX; + + $this->values[0] = $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r5 ^ $r7 ^ self::rotr16($q0 ^ $q5 ^ $q6 ^ $r0 ^ $r5); + $this->values[1] = $q0 ^ $q5 ^ $r0 ^ $r1 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q5 ^ $q7 ^ $r1 ^ $r5 ^ $r6); + $this->values[2] = $q0 ^ $q1 ^ $q6 ^ $r1 ^ $r2 ^ $r6 ^ $r7 ^ self::rotr16($q0 ^ $q2 ^ $q6 ^ $r2 ^ $r6 ^ $r7); + $this->values[3] = $q0 ^ $q1 ^ $q2 ^ $q5 ^ $q6 ^ $r0 ^ $r2 ^ $r3 ^ $r5 ^ self::rotr16($q0 ^ $q1 ^ $q3 ^ $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r3 ^ $r5 ^ $r7); + $this->values[4] = $q1 ^ $q2 ^ $q3 ^ $q5 ^ $r1 ^ $r3 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q2 ^ $q4 ^ $q5 ^ $q7 ^ $r1 ^ $r4 ^ $r5 ^ $r6); + $this->values[5] = $q2 ^ $q3 ^ $q4 ^ $q6 ^ $r2 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q2 ^ $q3 ^ $q5 ^ $q6 ^ $r2 ^ $r5 ^ $r6 ^ $r7); + $this->values[6] = $q3 ^ $q4 ^ $q5 ^ $q7 ^ $r3 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q3 ^ $q4 ^ $q6 ^ $q7 ^ $r3 ^ $r6 ^ $r7); + $this->values[7] = $q4 ^ $q5 ^ $q6 ^ $r4 ^ $r6 ^ $r7 ^ self::rotr16($q4 ^ $q5 ^ $q7 ^ $r4 ^ $r7); + return $this; + } + + /** + * @return self + */ + public function inverseShiftRows() + { + for ($i = 0; $i < 8; ++$i) { + $x = $this->values[$i]; + $this->values[$i] = ParagonIE_Sodium_Core_Util::U32_MAX & ( + ($x & 0x000000FF) + | (($x & 0x00003F00) << 2) | (($x & 0x0000C000) >> 6) + | (($x & 0x000F0000) << 4) | (($x & 0x00F00000) >> 4) + | (($x & 0x03000000) << 6) | (($x & 0xFC000000) >> 2) + ); + } + return $this; + } +} diff --git a/src/wp-includes/sodium_compat/src/Core/AES/Expanded.php b/src/wp-includes/sodium_compat/src/Core/AES/Expanded.php new file mode 100644 index 0000000000000..84a6a47658691 --- /dev/null +++ b/src/wp-includes/sodium_compat/src/Core/AES/Expanded.php @@ -0,0 +1,14 @@ + $skey -- has size 120 */ + protected $skey; + + /** @var bool $expanded */ + protected $expanded = false; + + /** @var int $numRounds */ + private $numRounds; + + /** + * @param array $skey + * @param int $numRounds + */ + public function __construct(array $skey, $numRounds = 10) + { + $this->skey = $skey; + $this->numRounds = $numRounds; + } + + /** + * Get a value at an arbitrary index. Mostly used for unit testing. + * + * @param int $i + * @return int + */ + public function get($i) + { + return $this->skey[$i]; + } + + /** + * @return int + */ + public function getNumRounds() + { + return $this->numRounds; + } + + /** + * @param int $offset + * @return ParagonIE_Sodium_Core_AES_Block + */ + public function getRoundKey($offset) + { + return ParagonIE_Sodium_Core_AES_Block::fromArray( + array_slice($this->skey, $offset, 8) + ); + } + + /** + * Return an expanded key schedule + * + * @return ParagonIE_Sodium_Core_AES_Expanded + */ + public function expand() + { + $exp = new ParagonIE_Sodium_Core_AES_Expanded( + array_fill(0, 120, 0), + $this->numRounds + ); + $n = ($exp->numRounds + 1) << 2; + for ($u = 0, $v = 0; $u < $n; ++$u, $v += 2) { + $x = $y = $this->skey[$u]; + $x &= 0x55555555; + $exp->skey[$v] = ($x | ($x << 1)) & ParagonIE_Sodium_Core_Util::U32_MAX; + $y &= 0xAAAAAAAA; + $exp->skey[$v + 1] = ($y | ($y >> 1)) & ParagonIE_Sodium_Core_Util::U32_MAX; + } + return $exp; + } +} From 8d2c73bff356a1956cae33670a633a591c7ea392 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 18 Jul 2024 14:09:50 +0000 Subject: [PATCH 135/422] Build/Test Tools: Remove regular 6.2 & 6.3 branch performance testing. Prior to WordPress 6.4, performance testing was performed using Puppeteer instead of Playwright (converted in [56926]). Because of the flaky nature of the workflow using Puppeteer, it was not converted to the reusable pattern implemented through #61213. It was instead removed from 6.2 and 6.3 in [58301] and [58330], respectively. This removes the workflow for these branches from the strategy matrix when testing old branches to avoid errors and adds an expanded note about why those branches are missing. See #61213, #61564. git-svn-id: https://develop.svn.wordpress.org/trunk@58754 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/test-old-branches.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-old-branches.yml b/.github/workflows/test-old-branches.yml index 397f2c6ef350f..5ac2b7c03a78a 100644 --- a/.github/workflows/test-old-branches.yml +++ b/.github/workflows/test-old-branches.yml @@ -92,17 +92,15 @@ jobs: - branch: '5.8' workflow: 'end-to-end-tests.yml' - # Performance testing was introduced in 6.2. + # Performance testing was introduced in 6.2 using Puppeteer but was overhauled to use Playwright instead in 6.4. + # Since the workflow frequently failed for 6.2 and 6.3 due to the flaky nature of the Puppeteer tests, + # the workflow was removed from those two branches. - branch: '6.6' workflow: 'performance.yml' - branch: '6.5' workflow: 'performance.yml' - branch: '6.4' workflow: 'performance.yml' - - branch: '6.3' - workflow: 'performance.yml' - - branch: '6.2' - workflow: 'performance.yml' # Run all branches monthly, but only the currently supported one twice per month. steps: From 9aa777d9f4a70666111f7a16e666ecbe6770a0d3 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Thu, 18 Jul 2024 15:08:01 +0000 Subject: [PATCH 136/422] Comments: Fix fatal error when get_comment_author() receives an object with no comment_id. [58335] introduced `(string)` type casting of the passed in `$comment_id` value. If `$comment_id` is a scalar, it works as expected. But if it's an `object`, the following fatal error is thrown: {{{ Object of class WP_Comment could not be converted to string }}} This fatal error happens when the incoming `$comment_id` is an instance of `WP_Comment` (or any object) without a `comment_ID` (empty). This changeset adds tests to demonstrate the fatal error and validate the fix. It fixes the fatal error by restructuring the ternary checks into an `if/elseif/else` structure for the 3 paths: - When `$comment->comment_ID` is not empty, then it uses the property. - When `$comment_id` is scalar, then it type casts it to a `string`. - Else, the default is an empty `string`. Follow-up to [58335], [41127], [52818]. Props ambrosiawt, hellofromTonya, jorbin, mukesh27, SergeyBiryukov. Fixes #61681. git-svn-id: https://develop.svn.wordpress.org/trunk@58755 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment-template.php | 8 ++- .../tests/comment/getCommentAuthor.php | 54 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php index 8c560973339b8..fed6568af33d5 100644 --- a/src/wp-includes/comment-template.php +++ b/src/wp-includes/comment-template.php @@ -24,7 +24,13 @@ function get_comment_author( $comment_id = 0 ) { $comment = get_comment( $comment_id ); - $comment_id = ! empty( $comment->comment_ID ) ? $comment->comment_ID : (string) $comment_id; + if ( ! empty( $comment->comment_ID ) ) { + $comment_id = $comment->comment_ID; + } elseif ( is_scalar( $comment_id ) ) { + $comment_id = (string) $comment_id; + } else { + $comment_id = ''; + } if ( empty( $comment->comment_author ) ) { $user = ! empty( $comment->user_id ) ? get_userdata( $comment->user_id ) : false; diff --git a/tests/phpunit/tests/comment/getCommentAuthor.php b/tests/phpunit/tests/comment/getCommentAuthor.php index 31d5a57bdbe7e..a298532e96577 100644 --- a/tests/phpunit/tests/comment/getCommentAuthor.php +++ b/tests/phpunit/tests/comment/getCommentAuthor.php @@ -56,4 +56,58 @@ public function test_comment_author_passes_correct_comment_id_for_non_existent_c get_comment_author( self::$non_existent_comment_id ); // Non-existent comment ID. } + + /** + * @ticket 61681 + * + * @dataProvider data_should_return_author_when_given_object_without_comment_id + * + * @param stdClass $comment_props Comment properties test data. + * @param string $expected The expected result. + * @param array $user_data Optional. User data for creating an author. Default empty array. + */ + public function test_should_return_author_when_given_object_without_comment_id( $comment_props, $expected, $user_data = array() ) { + if ( ! empty( $comment_props->user_id ) ) { + $user = self::factory()->user->create_and_get( $user_data ); + $comment_props->user_id = $user->ID; + } + $comment = new WP_Comment( $comment_props ); + $this->assertSame( $expected, get_comment_author( $comment ) ); + } + + /** + * Data provider. + * + * @return array + */ + public function data_should_return_author_when_given_object_without_comment_id() { + return array( + 'with no author' => array( + 'comment_props' => new stdClass(), + 'expected' => 'Anonymous', + ), + 'with author name' => array( + 'comment_props' => (object) array( + 'comment_author' => 'tester1', + ), + 'expected' => 'tester1', + ), + 'with author name, empty ID' => array( + 'comment_props' => (object) array( + 'comment_author' => 'tester2', + 'comment_ID' => '', + ), + 'expected' => 'tester2', + ), + 'with author ID' => array( + 'comment_props' => (object) array( + 'user_id' => 1, // populates in the test with an actual user ID. + ), + 'expected' => 'Tester3', + 'user_data' => array( + 'display_name' => 'Tester3', + ), + ), + ); + } } From f600e5409f43a2148c9bf7b29381ce216e7b23a7 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Thu, 18 Jul 2024 15:17:58 +0000 Subject: [PATCH 137/422] Coding Standards: Capitalize inline comment in get_comment_author() test dataset. Per coding standards, capitalizes the first character of the inline comment in the test dataset. Follow-up to [58755]. Props SergeyBiryukov. See #61681. git-svn-id: https://develop.svn.wordpress.org/trunk@58756 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/comment/getCommentAuthor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/comment/getCommentAuthor.php b/tests/phpunit/tests/comment/getCommentAuthor.php index a298532e96577..93570b51d16dd 100644 --- a/tests/phpunit/tests/comment/getCommentAuthor.php +++ b/tests/phpunit/tests/comment/getCommentAuthor.php @@ -101,7 +101,7 @@ public function data_should_return_author_when_given_object_without_comment_id() ), 'with author ID' => array( 'comment_props' => (object) array( - 'user_id' => 1, // populates in the test with an actual user ID. + 'user_id' => 1, // Populates in the test with an actual user ID. ), 'expected' => 'Tester3', 'user_data' => array( From 53f1c433ebf536ea369597eb723114fe2fdf6d43 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Thu, 18 Jul 2024 16:01:22 +0000 Subject: [PATCH 138/422] Editor: Update packages for 6.6.1. Bugfixes included: * [https://github.com/WordPress/gutenberg/pull/63637 Elements: Avoid specificity bump for top-level element-only selectors]. * [https://github.com/WordPress/gutenberg/pull/63406 Navigation block: Allow themes to override block library text-decoration rule]. * [https://github.com/WordPress/gutenberg/pull/63436 Fix invalid css for nested fullwidth layouts with zero padding applied]. * [https://github.com/WordPress/gutenberg/pull/63397 Prevent empty void at the bottom of editor when block directory results are present]. * [https://github.com/WordPress/gutenberg/pull/63291 Pattern overrides: Ensure "Reset" button always shows as last item and with border]. * [https://github.com/WordPress/gutenberg/pull/63562 Global Styles: Disable "Reset styles" button when there are no changes]. * [https://github.com/WordPress/gutenberg/pull/63093 Fix: Removed shuffle button when only 1 pattern is present]. * [https://github.com/WordPress/gutenberg/pull/62675 fix: wp icon focus issue]. * [https://github.com/WordPress/gutenberg/pull/63565 useBlockElement: return null until ref callback has time to clean up the old element]. Props ellatrix. Fixes #61692. See #61660, #61630, #61656. git-svn-id: https://develop.svn.wordpress.org/trunk@58757 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 380 +++++++++--------- package.json | 28 +- .../assets/script-loader-packages.min.php | 2 +- 3 files changed, 205 insertions(+), 205 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c5d7f27f76a3..17e20b756c8c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,17 +14,17 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.7", - "@wordpress/block-editor": "13.0.5", - "@wordpress/block-library": "9.0.6", + "@wordpress/block-directory": "5.0.8", + "@wordpress/block-editor": "13.0.6", + "@wordpress/block-library": "9.0.7", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.5", - "@wordpress/core-data": "7.0.5", - "@wordpress/customize-widgets": "5.0.6", + "@wordpress/core-commands": "1.0.6", + "@wordpress/core-data": "7.0.6", + "@wordpress/customize-widgets": "5.0.7", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.4", @@ -32,13 +32,13 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.7", - "@wordpress/edit-site": "6.0.7", - "@wordpress/edit-widgets": "6.0.6", - "@wordpress/editor": "14.0.6", + "@wordpress/edit-post": "8.0.8", + "@wordpress/edit-site": "6.0.8", + "@wordpress/edit-widgets": "6.0.7", + "@wordpress/editor": "14.0.7", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.5", + "@wordpress/format-library": "5.0.6", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -53,7 +53,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.5", + "@wordpress/patterns": "2.0.6", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -61,7 +61,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.5", + "@wordpress/reusable-blocks": "5.0.6", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -73,7 +73,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.5", + "@wordpress/widgets": "4.0.6", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", @@ -6160,21 +6160,21 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.7.tgz", - "integrity": "sha512-NQxLUmigW4yAihbtij69mkGJkEL1UILj8+vlYF2bk74BbM4yVeQXwO+Rxzm7bHAZOf87D9dTkw3hO76W+/tMPw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.8.tgz", + "integrity": "sha512-rHU/X3OZrE/IBtA1ayRqfsqw72IYonb8jiVWYBod+NI2bMeOEyXJ3PP/o7N856YFDVEka8b3sBNcr+A15xGysw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.7", - "@wordpress/editor": "^14.0.6", + "@wordpress/edit-post": "^8.0.8", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6196,9 +6196,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.5.tgz", - "integrity": "sha512-TfPq4x+LozVYi7v91HhOUeIRSxxYyqrNn4vC1ioT9Mgjs0tvpkEleZl63jFxVJKvADBUg8Lh51eGls0ocoPeBw==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.6.tgz", + "integrity": "sha512-j1+wfHK5qIi/LBdUyaT1ipIGfkcBnLZBlFglaCliwTO7jOMH0+Kyc8vwKFW4waPZVesGt1+w+s1YZrtgkA+vdQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6257,20 +6257,20 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.6.tgz", - "integrity": "sha512-+K7omh84h8BVuRCRlyQXxDF4EBL0smvmOQs3vN6Jx6fcXNMejre9RwxhVANsKMEhjvrmT2/5oEfWh4khlxB3LQ==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.7.tgz", + "integrity": "sha512-n4ON/8AqcXdJmvW15d4cTYxxljgjPsUzWH7JvQreQdZDoOTnaDaF8rdil0gYa7YSaDCVMsniDxAItyUFxUbijg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6286,10 +6286,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -6491,15 +6491,15 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.5.tgz", - "integrity": "sha512-wi3Rh8I+GG+sH2urKklI3WtnkhQLAWQotDsuQQlaMy/qdeUEzFSUPxxxaJodZ06+QhbpIRhlBELCZR6LQ95hcA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.6.tgz", + "integrity": "sha512-KkZ93Q79XlpxwL9tAsw/MSmrJ1T0Q9DFa48p2U4xcnZGrKh5p4vFAwJV3MOpZDbVXkoT/1msBNe6+FHmRdaREQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -6518,13 +6518,13 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.5.tgz", - "integrity": "sha512-sFR+0X+QB6K2bj7RNGY5odAfKbMMFryChHm+lxV4fvymfwvgFA60pzmx/zNlNFeSvEJNuehryTfFG3q9HwDaGA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.6.tgz", + "integrity": "sha512-hjLoLBmRFvueEK5HWQMVWQYL985zq5gPouWYvpSDpjTRUkRctThmilB8xrdX17Zjgs52xOX/DpLAvFbWGlCsYw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -6554,17 +6554,17 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.6.tgz", - "integrity": "sha512-MKiI1VnNHb2lGKaE5cU3kR3VOILyQHez8j95UbM/OBwG51Em8z63srb5JGunkV6mSTbxpXSwwiDTuaFTN5tdlg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.7.tgz", + "integrity": "sha512-rGpa8ylei6tUN55QHLo79JcglySC263SDc+TPR8CXXwUiGG9h03ZgrMTo/Ho50KSp4WGhZELWccGAk4uPxh8Bw==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -6578,7 +6578,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6820,25 +6820,25 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.7.tgz", - "integrity": "sha512-RVg9llTU4eQuHt5WPT1U7rTOtlFdBo8OzxdqfxOvMVaaVBGngpJmyqCCXDFpD8KHWr635sKjzyt3ZRzEu2pzag==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.8.tgz", + "integrity": "sha512-zB4k+1NbD1J9dhxq+c+Nqih+Zm6yOgMNs4TRNF6YYBOGSuAPxcNSA0qtfALC8PtI19MpUv0JCh3HckaJQs+fHQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.5", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-commands": "^1.0.6", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.6", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6853,7 +6853,7 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -6867,29 +6867,29 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.7.tgz", - "integrity": "sha512-WWNxwZLvC/dmNitPGnPxS5eKXO1DtpatbFcwrLixrJdhzyp7Ig7MGrA5Q4bskWftKYMNc2bz1U9CpMurJHvR6A==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.8.tgz", + "integrity": "sha512-HJZmmpV3UDPylfa0+3MNXNzfgWt+eGoYdmLG4z2JpNPEyOZ+w0yY3nx8oSsx85sHtT5bRT0drWsj0gqr4qZynw==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.5", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-commands": "^1.0.6", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.6", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -6899,18 +6899,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -6929,18 +6929,18 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.6.tgz", - "integrity": "sha512-DeCgZrjYvGg9FplOD1dhgBnsjQZzbpvMQ+DiHfSyh8qGRREpQl+QnmamrF5weN+Ttzb4nKYJAIMr4xZYc43Ziw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.7.tgz", + "integrity": "sha512-KUas6yd7Lmt623F5lQNd/n2S9VWFfmtjckemlwlP7niXaU8XrdEhRFxDAY52W6Jk90KXVxLsG20qnx8nYah3NQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -6953,13 +6953,13 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1" }, "engines": { @@ -6972,20 +6972,20 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.6.tgz", - "integrity": "sha512-zXAf3kewpMh9dgpKTKd/G21Bez0pkgK26EbkAkvLR4J/mUE/EiYEClpHn5uUcgfPoKw8nPcQLnYJWvIZJCFpwQ==", + "version": "14.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.7.tgz", + "integrity": "sha512-Y3eHgVbf8h+T3Ssn1hLFpAGBwNxbP2ZeWQIwopIZ2V5d/qcHWzRW2Aoss3Wy1K+NHQJTkXJSsfrnC2zyd7dZBQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -7000,11 +7000,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -7120,13 +7120,13 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.5.tgz", - "integrity": "sha512-T2RiHHvNugWBtpqnHRYXKv85a3vmEnrJj29mE7Y6Wb2HWH5JWIoCD4rIZjMHtV7umIyxxMf/3MvMb/EdF0VaDg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.6.tgz", + "integrity": "sha512-91LTfbjfgPqVnI8uuBEtA6ZBzJCmFyUJn1amGcvlpK9gX1BRvCZmmbOwTfAs4Wce7NIJswUr//5I765pz7P8Tg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -7431,17 +7431,17 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.5.tgz", - "integrity": "sha512-OQSThezvyVAWPyr//piLRqHV4gI0g/slIvZFeL9cburPKS4G2CxkGAj2MB/oAVc8fSCotENi5anety7IWuZpxQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.6.tgz", + "integrity": "sha512-b1ne2lxq4sdl4/HvIFIVcbnGfDL5BWpo3x+uf22N/bMXVxSNBWlGlI9TDtISnkHzpXFlrjcPiAmCBz//hEJa/g==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -7610,15 +7610,15 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.5.tgz", - "integrity": "sha512-rXYoyQKaVGR5OXiUrO3EOIlOYugY8NQPELfPxpdL+hby6kumLXxcBJk47yS+CBuoE+yGTSBrMeFsxrbR6q416Q==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.6.tgz", + "integrity": "sha512-a/ZeUFGkAr7Ki/a0pQ0SsSODrY3q1ff+qe2E2+I0ORk5FSX71yli56bmlqbsFr/KCTRcITtYRsev4oalL6QzDg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -8919,17 +8919,17 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.5.tgz", - "integrity": "sha512-r4XIpgiVq7ht5KCBrY8lSaZcadAL3OMSFZwO8m4+dkpvY3J/QvbcQE2oUSypqWvwTpQsPN2AO1H4GaouRgtCuw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.6.tgz", + "integrity": "sha512-PPhSX9NuQKpBVdF+bw2Ai134fOBACinUjksN49PWdSbBpTH5uCr5QEOisMsRsKuqr8k6hphMNnKuRxq0qfulBw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -38789,21 +38789,21 @@ } }, "@wordpress/block-directory": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.7.tgz", - "integrity": "sha512-NQxLUmigW4yAihbtij69mkGJkEL1UILj8+vlYF2bk74BbM4yVeQXwO+Rxzm7bHAZOf87D9dTkw3hO76W+/tMPw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.8.tgz", + "integrity": "sha512-rHU/X3OZrE/IBtA1ayRqfsqw72IYonb8jiVWYBod+NI2bMeOEyXJ3PP/o7N856YFDVEka8b3sBNcr+A15xGysw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.7", - "@wordpress/editor": "^14.0.6", + "@wordpress/edit-post": "^8.0.8", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -38817,9 +38817,9 @@ } }, "@wordpress/block-editor": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.5.tgz", - "integrity": "sha512-TfPq4x+LozVYi7v91HhOUeIRSxxYyqrNn4vC1ioT9Mgjs0tvpkEleZl63jFxVJKvADBUg8Lh51eGls0ocoPeBw==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.6.tgz", + "integrity": "sha512-j1+wfHK5qIi/LBdUyaT1ipIGfkcBnLZBlFglaCliwTO7jOMH0+Kyc8vwKFW4waPZVesGt1+w+s1YZrtgkA+vdQ==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -38870,20 +38870,20 @@ } }, "@wordpress/block-library": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.6.tgz", - "integrity": "sha512-+K7omh84h8BVuRCRlyQXxDF4EBL0smvmOQs3vN6Jx6fcXNMejre9RwxhVANsKMEhjvrmT2/5oEfWh4khlxB3LQ==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.7.tgz", + "integrity": "sha512-n4ON/8AqcXdJmvW15d4cTYxxljgjPsUzWH7JvQreQdZDoOTnaDaF8rdil0gYa7YSaDCVMsniDxAItyUFxUbijg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -38899,10 +38899,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39058,15 +39058,15 @@ } }, "@wordpress/core-commands": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.5.tgz", - "integrity": "sha512-wi3Rh8I+GG+sH2urKklI3WtnkhQLAWQotDsuQQlaMy/qdeUEzFSUPxxxaJodZ06+QhbpIRhlBELCZR6LQ95hcA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.6.tgz", + "integrity": "sha512-KkZ93Q79XlpxwL9tAsw/MSmrJ1T0Q9DFa48p2U4xcnZGrKh5p4vFAwJV3MOpZDbVXkoT/1msBNe6+FHmRdaREQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39077,13 +39077,13 @@ } }, "@wordpress/core-data": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.5.tgz", - "integrity": "sha512-sFR+0X+QB6K2bj7RNGY5odAfKbMMFryChHm+lxV4fvymfwvgFA60pzmx/zNlNFeSvEJNuehryTfFG3q9HwDaGA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.6.tgz", + "integrity": "sha512-hjLoLBmRFvueEK5HWQMVWQYL985zq5gPouWYvpSDpjTRUkRctThmilB8xrdX17Zjgs52xOX/DpLAvFbWGlCsYw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39105,17 +39105,17 @@ } }, "@wordpress/customize-widgets": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.6.tgz", - "integrity": "sha512-MKiI1VnNHb2lGKaE5cU3kR3VOILyQHez8j95UbM/OBwG51Em8z63srb5JGunkV6mSTbxpXSwwiDTuaFTN5tdlg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.7.tgz", + "integrity": "sha512-rGpa8ylei6tUN55QHLo79JcglySC263SDc+TPR8CXXwUiGG9h03ZgrMTo/Ho50KSp4WGhZELWccGAk4uPxh8Bw==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -39129,7 +39129,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" } @@ -39296,25 +39296,25 @@ } }, "@wordpress/edit-post": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.7.tgz", - "integrity": "sha512-RVg9llTU4eQuHt5WPT1U7rTOtlFdBo8OzxdqfxOvMVaaVBGngpJmyqCCXDFpD8KHWr635sKjzyt3ZRzEu2pzag==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.8.tgz", + "integrity": "sha512-zB4k+1NbD1J9dhxq+c+Nqih+Zm6yOgMNs4TRNF6YYBOGSuAPxcNSA0qtfALC8PtI19MpUv0JCh3HckaJQs+fHQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.5", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-commands": "^1.0.6", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.6", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39329,35 +39329,35 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1", "memize": "^2.1.0" } }, "@wordpress/edit-site": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.7.tgz", - "integrity": "sha512-WWNxwZLvC/dmNitPGnPxS5eKXO1DtpatbFcwrLixrJdhzyp7Ig7MGrA5Q4bskWftKYMNc2bz1U9CpMurJHvR6A==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.8.tgz", + "integrity": "sha512-HJZmmpV3UDPylfa0+3MNXNzfgWt+eGoYdmLG4z2JpNPEyOZ+w0yY3nx8oSsx85sHtT5bRT0drWsj0gqr4qZynw==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.5", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-commands": "^1.0.6", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/dataviews": "^2.0.4", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.6", + "@wordpress/editor": "^14.0.7", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -39367,18 +39367,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -39389,18 +39389,18 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.6.tgz", - "integrity": "sha512-DeCgZrjYvGg9FplOD1dhgBnsjQZzbpvMQ+DiHfSyh8qGRREpQl+QnmamrF5weN+Ttzb4nKYJAIMr4xZYc43Ziw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.7.tgz", + "integrity": "sha512-KUas6yd7Lmt623F5lQNd/n2S9VWFfmtjckemlwlP7niXaU8XrdEhRFxDAY52W6Jk90KXVxLsG20qnx8nYah3NQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", - "@wordpress/block-library": "^9.0.6", + "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-library": "^9.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -39413,31 +39413,31 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.5", + "@wordpress/widgets": "^4.0.6", "clsx": "^2.1.1" } }, "@wordpress/editor": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.6.tgz", - "integrity": "sha512-zXAf3kewpMh9dgpKTKd/G21Bez0pkgK26EbkAkvLR4J/mUE/EiYEClpHn5uUcgfPoKw8nPcQLnYJWvIZJCFpwQ==", + "version": "14.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.7.tgz", + "integrity": "sha512-Y3eHgVbf8h+T3Ssn1hLFpAGBwNxbP2ZeWQIwopIZ2V5d/qcHWzRW2Aoss3Wy1K+NHQJTkXJSsfrnC2zyd7dZBQ==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -39452,11 +39452,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.5", + "@wordpress/patterns": "^2.0.6", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.5", + "@wordpress/reusable-blocks": "^5.0.6", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39534,13 +39534,13 @@ } }, "@wordpress/format-library": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.5.tgz", - "integrity": "sha512-T2RiHHvNugWBtpqnHRYXKv85a3vmEnrJj29mE7Y6Wb2HWH5JWIoCD4rIZjMHtV7umIyxxMf/3MvMb/EdF0VaDg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.6.tgz", + "integrity": "sha512-91LTfbjfgPqVnI8uuBEtA6ZBzJCmFyUJn1amGcvlpK9gX1BRvCZmmbOwTfAs4Wce7NIJswUr//5I765pz7P8Tg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39738,17 +39738,17 @@ } }, "@wordpress/patterns": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.5.tgz", - "integrity": "sha512-OQSThezvyVAWPyr//piLRqHV4gI0g/slIvZFeL9cburPKS4G2CxkGAj2MB/oAVc8fSCotENi5anety7IWuZpxQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.6.tgz", + "integrity": "sha512-b1ne2lxq4sdl4/HvIFIVcbnGfDL5BWpo3x+uf22N/bMXVxSNBWlGlI9TDtISnkHzpXFlrjcPiAmCBz//hEJa/g==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39856,15 +39856,15 @@ } }, "@wordpress/reusable-blocks": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.5.tgz", - "integrity": "sha512-rXYoyQKaVGR5OXiUrO3EOIlOYugY8NQPELfPxpdL+hby6kumLXxcBJk47yS+CBuoE+yGTSBrMeFsxrbR6q416Q==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.6.tgz", + "integrity": "sha512-a/ZeUFGkAr7Ki/a0pQ0SsSODrY3q1ff+qe2E2+I0ORk5FSX71yli56bmlqbsFr/KCTRcITtYRsev4oalL6QzDg==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -40728,17 +40728,17 @@ "integrity": "sha512-xSVH/zMAg4ABeNOWo6mlkF+TDBDQNaWVdMNzi+yvGoSDImhaM6Bqrhr1e/65AS29iajnqQt6dlu7E56o5FZlcg==" }, "@wordpress/widgets": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.5.tgz", - "integrity": "sha512-r4XIpgiVq7ht5KCBrY8lSaZcadAL3OMSFZwO8m4+dkpvY3J/QvbcQE2oUSypqWvwTpQsPN2AO1H4GaouRgtCuw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.6.tgz", + "integrity": "sha512-PPhSX9NuQKpBVdF+bw2Ai134fOBACinUjksN49PWdSbBpTH5uCr5QEOisMsRsKuqr8k6hphMNnKuRxq0qfulBw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.5", + "@wordpress/block-editor": "^13.0.6", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.5", + "@wordpress/core-data": "^7.0.6", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", diff --git a/package.json b/package.json index 8e988f83c9e34..6f3fce17b19f0 100644 --- a/package.json +++ b/package.json @@ -83,17 +83,17 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.7", - "@wordpress/block-editor": "13.0.5", - "@wordpress/block-library": "9.0.6", + "@wordpress/block-directory": "5.0.8", + "@wordpress/block-editor": "13.0.6", + "@wordpress/block-library": "9.0.7", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.5", - "@wordpress/core-data": "7.0.5", - "@wordpress/customize-widgets": "5.0.6", + "@wordpress/core-commands": "1.0.6", + "@wordpress/core-data": "7.0.6", + "@wordpress/customize-widgets": "5.0.7", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", "@wordpress/dataviews": "2.0.4", @@ -101,13 +101,13 @@ "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.7", - "@wordpress/edit-site": "6.0.7", - "@wordpress/edit-widgets": "6.0.6", - "@wordpress/editor": "14.0.6", + "@wordpress/edit-post": "8.0.8", + "@wordpress/edit-site": "6.0.8", + "@wordpress/edit-widgets": "6.0.7", + "@wordpress/editor": "14.0.7", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.5", + "@wordpress/format-library": "5.0.6", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -122,7 +122,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.5", + "@wordpress/patterns": "2.0.6", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -130,7 +130,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.5", + "@wordpress/reusable-blocks": "5.0.6", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -142,7 +142,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.5", + "@wordpress/widgets": "4.0.6", "@wordpress/wordcount": "4.0.1", "backbone": "1.5.0", "clipboard": "2.0.11", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index f57de78799d39..c39418af7632e 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'f9506c5f13cc3995ed19'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'c81574a3c95e631df2a9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '07feee0ca98b13ab617d'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'bf7b57a061aad9bf9020'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '908b9738a38cdf931130'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '8607251058f984a77c8f'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '2bb44334a17254b90b83'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'f989eae66982c6c90d6e'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'c81574a3c95e631df2a9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '07feee0ca98b13ab617d'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'bf7b57a061aad9bf9020'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '908b9738a38cdf931130'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '8607251058f984a77c8f'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '74acf014a3907af88267'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); From 5a30482419f1b0bcc713a7fdee3a14afd67a1bca Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Thu, 18 Jul 2024 18:02:17 +0000 Subject: [PATCH 139/422] General: Provide _is_utf8_charset() in compat.php for early use #61182 introduced is_utf8_charset() as a way of standardizing checks for charset slugs referring to UTF-8. This is called by _mb_strlen() inside of compat.php, but is_utf8_charset() is defined in functions.php, which isn't loaded early on. Code calling mb_strlen() early on before functions.php loads in hosts without the multibyte extension therefore may crash. Props dmsnell, jonsurrell, joemcgill, jorbin. Fixes #61681. git-svn-id: https://develop.svn.wordpress.org/trunk@58763 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/compat.php | 41 +++++++++++++++++++++++++++++++++-- src/wp-includes/functions.php | 18 ++++----------- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php index c50fc69a047e1..900a7994a1eae 100644 --- a/src/wp-includes/compat.php +++ b/src/wp-includes/compat.php @@ -40,6 +40,43 @@ function _wp_can_use_pcre_u( $set = null ) { return $utf8_pcre; } +/** + * Indicates if a given slug for a character set represents the UTF-8 text encoding. + * + * A charset is considered to represent UTF-8 if it is a case-insensitive match + * of "UTF-8" with or without the hyphen. + * + * Example: + * + * true === _is_utf8_charset( 'UTF-8' ); + * true === _is_utf8_charset( 'utf8' ); + * false === _is_utf8_charset( 'latin1' ); + * false === _is_utf8_charset( 'UTF 8' ); + * + * // Only strings match. + * false === _is_utf8_charset( [ 'charset' => 'utf-8' ] ); + * + * `is_utf8_charset` should be used outside of this file. + * + * @ignore + * @since 6.6.1 + * + * @param string $charset_slug Slug representing a text character encoding, or "charset". + * E.g. "UTF-8", "Windows-1252", "ISO-8859-1", "SJIS". + * + * @return bool Whether the slug represents the UTF-8 encoding. + */ +function _is_utf8_charset( $charset_slug ) { + if ( ! is_string( $charset_slug ) ) { + return false; + } + + return ( + 0 === strcasecmp( 'UTF-8', $charset_slug ) || + 0 === strcasecmp( 'UTF8', $charset_slug ) + ); +} + if ( ! function_exists( 'mb_substr' ) ) : /** * Compat function to mimic mb_substr(). @@ -91,7 +128,7 @@ function _mb_substr( $str, $start, $length = null, $encoding = null ) { * The solution below works only for UTF-8, so in case of a different * charset just use built-in substr(). */ - if ( ! is_utf8_charset( $encoding ) ) { + if ( ! _is_utf8_charset( $encoding ) ) { return is_null( $length ) ? substr( $str, $start ) : substr( $str, $start, $length ); } @@ -176,7 +213,7 @@ function _mb_strlen( $str, $encoding = null ) { * The solution below works only for UTF-8, so in case of a different charset * just use built-in strlen(). */ - if ( ! is_utf8_charset( $encoding ) ) { + if ( ! _is_utf8_charset( $encoding ) ) { return strlen( $str ); } diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 94155249fef0d..e821f6f2b08be 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -7496,6 +7496,9 @@ function get_tag_regex( $tag ) { * $is_utf8 = is_utf8_charset(); * * @since 6.6.0 + * @since 6.6.1 A wrapper for _is_utf8_charset + * + * @see _is_utf8_charset * * @param string|null $blog_charset Optional. Slug representing a text character encoding, or "charset". * E.g. "UTF-8", "Windows-1252", "ISO-8859-1", "SJIS". @@ -7503,20 +7506,7 @@ function get_tag_regex( $tag ) { * @return bool Whether the slug represents the UTF-8 encoding. */ function is_utf8_charset( $blog_charset = null ) { - $charset_to_examine = $blog_charset ?? get_option( 'blog_charset' ); - - /* - * Only valid string values count: the absence of a charset - * does not imply any charset, let alone UTF-8. - */ - if ( ! is_string( $charset_to_examine ) ) { - return false; - } - - return ( - 0 === strcasecmp( 'UTF-8', $charset_to_examine ) || - 0 === strcasecmp( 'UTF8', $charset_to_examine ) - ); + return _is_utf8_charset( $blog_charset ?? get_option( 'blog_charset' ) ); } /** From f9d02a215453afcf4c924c22fe3fc97b5a8e0b57 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Fri, 19 Jul 2024 13:13:49 +0000 Subject: [PATCH 140/422] Build/Test Tools: Ensure `TARGET_SHA` is set for older branches. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `workflow_dispatch` event payload does not contain the `before` property containing the previous commit’s SHA value, which causes scheduled runs of the performance testing workflow in older branches to fail. This adds a step specifically for this event type to use native Git commands to retrieve the required SHA value instead. Props joemcgill. Fixes #61699. git-svn-id: https://develop.svn.wordpress.org/trunk@58767 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/reusable-performance.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index 630287dab6f9b..a97aceb7e72a9 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -54,6 +54,7 @@ jobs: # Performs the following steps: # - Configure environment variables. # - Checkout repository. + # - Determine the target SHA value (on `workflow_dispatch` only). # - Set up Node.js. # - Log debug information. # - Install npm dependencies. @@ -109,6 +110,12 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + fetch-depth: ${{ github.event_name == 'workflow_dispatch' && '2' || '1' }} + + # The `workflow_dispatch` event is the only one missing the needed SHA to target. + - name: Retrieve previous commit SHA (if necessary) + if: ${{ github.event_name == 'workflow_dispatch' }} + run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> $GITHUB_ENV - name: Set up Node.js uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 From e407bb078d8a5357977fc3eaab50ec81949e3b41 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 19 Jul 2024 15:54:41 +0000 Subject: [PATCH 141/422] Docs: Correct `@return` value for `_get_block_templates_files()`. The function returns `null` if `$template_type` is not `wp_template` or `wp_template_part`. Follow-up to [52062]. Props dilipbheda, mukesh27. Fixes #61705. git-svn-id: https://develop.svn.wordpress.org/trunk@58768 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-template-utils.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/block-template-utils.php b/src/wp-includes/block-template-utils.php index f7a10ab672904..fe43d89564cc8 100644 --- a/src/wp-includes/block-template-utils.php +++ b/src/wp-includes/block-template-utils.php @@ -355,7 +355,7 @@ function _get_block_template_file( $template_type, $slug ) { * @type string $post_type Post type to get the templates for. * } * - * @return array Template + * @return array|null Template files on success, null if `$template_type` is not matched. */ function _get_block_templates_files( $template_type, $query = array() ) { if ( 'wp_template' !== $template_type && 'wp_template_part' !== $template_type ) { From 0b179899a84f6b78e49ee7d2a92a78cb1f4f1651 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 19 Jul 2024 23:42:14 +0000 Subject: [PATCH 142/422] HTML API: Add PHP type annotations. This patch adds type annotations to internal and private methods of the HTML API and the supporting WP_Token_Map. Annotations have not been added to the public interfaces where it would likely crash a site if called wrong. These annotations should help avoid unnecessary type-related bugs (as have been uncovered in earlier work adding such annotations) and provide additional guidance to developers when interacting with these classes in an IDE. Developed in https://github.com/WordPress/wordpress-develop/pull/6753 Discussed in https://core.trac.wordpress.org/ticket/61399 Props dmsnell, jonsurrell. See #61399. git-svn-id: https://develop.svn.wordpress.org/trunk@58769 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-token-map.php | 29 ++-- ...ass-wp-html-active-formatting-elements.php | 6 +- .../html-api/class-wp-html-decoder.php | 10 +- .../html-api/class-wp-html-open-elements.php | 42 +++--- .../class-wp-html-processor-state.php | 4 +- .../html-api/class-wp-html-processor.php | 127 +++++++++--------- .../html-api/class-wp-html-span.php | 2 +- .../html-api/class-wp-html-stack-event.php | 2 +- .../html-api/class-wp-html-tag-processor.php | 70 +++++----- .../class-wp-html-text-replacement.php | 2 +- .../html-api/class-wp-html-token.php | 10 +- 11 files changed, 151 insertions(+), 153 deletions(-) diff --git a/src/wp-includes/class-wp-token-map.php b/src/wp-includes/class-wp-token-map.php index 524ab57fd4587..09a0b9303b452 100644 --- a/src/wp-includes/class-wp-token-map.php +++ b/src/wp-includes/class-wp-token-map.php @@ -280,7 +280,7 @@ class WP_Token_Map { * * @return WP_Token_Map|null Token map, unless unable to create it. */ - public static function from_array( $mappings, $key_length = 2 ) { + public static function from_array( array $mappings, int $key_length = 2 ): ?WP_Token_Map { $map = new WP_Token_Map(); $map->key_length = $key_length; @@ -328,7 +328,7 @@ public static function from_array( $mappings, $key_length = 2 ) { foreach ( $groups as $group_key => $group ) { usort( $groups[ $group_key ], - static function ( $a, $b ) { + static function ( array $a, array $b ): int { return self::longest_first_then_alphabetical( $a[0], $b[0] ); } ); @@ -385,7 +385,7 @@ static function ( $a, $b ) { * * @return WP_Token_Map Map with precomputed data loaded. */ - public static function from_precomputed_table( $state ) { + public static function from_precomputed_table( $state ): ?WP_Token_Map { $has_necessary_state = isset( $state['storage_version'], $state['key_length'], @@ -439,7 +439,7 @@ public static function from_precomputed_table( $state ) { * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'. * @return bool Whether there's an entry for the given word in the map. */ - public function contains( $word, $case_sensitivity = 'case-sensitive' ) { + public function contains( string $word, string $case_sensitivity = 'case-sensitive' ): bool { $ignore_case = 'ascii-case-insensitive' === $case_sensitivity; if ( $this->key_length >= strlen( $word ) ) { @@ -527,7 +527,7 @@ public function contains( $word, $case_sensitivity = 'case-sensitive' ) { * * @return string|null Mapped value of lookup key if found, otherwise `null`. */ - public function read_token( $text, $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ) { + public function read_token( string $text, int $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ): ?string { $ignore_case = 'ascii-case-insensitive' === $case_sensitivity; $text_length = strlen( $text ); @@ -571,15 +571,16 @@ public function read_token( $text, $offset = 0, &$matched_token_byte_length = nu /** * Finds a match for a short word at the index. * - * @since 6.6.0. + * @since 6.6.0 + * + * @param string $text String in which to search for a lookup key. + * @param int $offset Optional. How many bytes into the string where the lookup key ought to start. Default 0. + * @param int|null &$matched_token_byte_length Optional. Holds byte-length of found lookup key if matched, otherwise not set. Default null. + * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'. * - * @param string $text String in which to search for a lookup key. - * @param int $offset Optional. How many bytes into the string where the lookup key ought to start. Default 0. - * @param ?int &$matched_token_byte_length Optional. Holds byte-length of found lookup key if matched, otherwise not set. Default null. - * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching. Default 'case-sensitive'. * @return string|null Mapped value of lookup key if found, otherwise `null`. */ - private function read_small_token( $text, $offset, &$matched_token_byte_length, $case_sensitivity = 'case-sensitive' ) { + private function read_small_token( string $text, int $offset = 0, &$matched_token_byte_length = null, $case_sensitivity = 'case-sensitive' ): ?string { $ignore_case = 'ascii-case-insensitive' === $case_sensitivity; $small_length = strlen( $this->small_words ); $search_text = substr( $text, $offset, $this->key_length ); @@ -634,7 +635,7 @@ private function read_small_token( $text, $offset, &$matched_token_byte_length, * * @return array The lookup key/substitution values as an associate array. */ - public function to_array() { + public function to_array(): array { $tokens = array(); $at = 0; @@ -696,7 +697,7 @@ public function to_array() { * @param string $indent Optional. Use this string for indentation, or rely on the default horizontal tab character. Default "\t". * @return string Value which can be pasted into a PHP source file for quick loading of table. */ - public function precomputed_php_source_table( $indent = "\t" ) { + public function precomputed_php_source_table( string $indent = "\t" ): string { $i1 = $indent; $i2 = $i1 . $indent; $i3 = $i2 . $indent; @@ -801,7 +802,7 @@ static function ( $match_result ) { * @param string $b Second string to compare. * @return int -1 or lower if `$a` is less than `$b`; 1 or greater if `$a` is greater than `$b`, and 0 if they are equal. */ - private static function longest_first_then_alphabetical( $a, $b ) { + private static function longest_first_then_alphabetical( string $a, string $b ): int { if ( $a === $b ) { return 0; } diff --git a/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php b/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php index 9f7fee9076243..69e34dca498c1 100644 --- a/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php +++ b/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php @@ -51,7 +51,7 @@ class WP_HTML_Active_Formatting_Elements { * @param WP_HTML_Token $token Look for this node in the stack. * @return bool Whether the referenced node is in the stack of active formatting elements. */ - public function contains_node( $token ) { + public function contains_node( WP_HTML_Token $token ) { foreach ( $this->walk_up() as $item ) { if ( $token->bookmark_name === $item->bookmark_name ) { return true; @@ -95,7 +95,7 @@ public function current_node() { * * @param WP_HTML_Token $token Push this node onto the stack. */ - public function push( $token ) { + public function push( WP_HTML_Token $token ) { /* * > If there are already three elements in the list of active formatting elements after the last marker, * > if any, or anywhere in the list if there are no markers, that have the same tag name, namespace, and @@ -119,7 +119,7 @@ public function push( $token ) { * @param WP_HTML_Token $token Remove this node from the stack, if it's there already. * @return bool Whether the node was found and removed from the stack of active formatting elements. */ - public function remove_node( $token ) { + public function remove_node( WP_HTML_Token $token ) { foreach ( $this->walk_up() as $position_from_end => $item ) { if ( $token->bookmark_name !== $item->bookmark_name ) { continue; diff --git a/src/wp-includes/html-api/class-wp-html-decoder.php b/src/wp-includes/html-api/class-wp-html-decoder.php index 42c6424423711..793c7cb2a0137 100644 --- a/src/wp-includes/html-api/class-wp-html-decoder.php +++ b/src/wp-includes/html-api/class-wp-html-decoder.php @@ -31,7 +31,7 @@ class WP_HTML_Decoder { * Default 'case-sensitive'. * @return bool Whether the attribute value starts with the given string. */ - public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ) { + public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ): bool { $search_length = strlen( $search_text ); $loose_case = 'ascii-case-insensitive' === $case_sensitivity; $haystack_end = strlen( $haystack ); @@ -90,7 +90,7 @@ public static function attribute_starts_with( $haystack, $search_text, $case_sen * @param string $text Text containing raw and non-decoded text node to decode. * @return string Decoded UTF-8 value of given text node. */ - public static function decode_text_node( $text ) { + public static function decode_text_node( $text ): string { return static::decode( 'data', $text ); } @@ -110,7 +110,7 @@ public static function decode_text_node( $text ) { * @param string $text Text containing raw and non-decoded attribute value to decode. * @return string Decoded UTF-8 value of given attribute value. */ - public static function decode_attribute( $text ) { + public static function decode_attribute( $text ): string { return static::decode( 'attribute', $text ); } @@ -133,7 +133,7 @@ public static function decode_attribute( $text ) { * @param string $text Text document containing span of text to decode. * @return string Decoded UTF-8 string. */ - public static function decode( $context, $text ) { + public static function decode( $context, $text ): string { $decoded = ''; $end = strlen( $text ); $at = 0; @@ -421,7 +421,7 @@ public static function read_character_reference( $context, $text, $at = 0, &$mat * @param int $code_point Which code point to convert. * @return string Converted code point, or `�` if invalid. */ - public static function code_point_to_utf8_bytes( $code_point ) { + public static function code_point_to_utf8_bytes( $code_point ): string { // Pre-check to ensure a valid code point. if ( $code_point <= 0 || diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index df6ba8158b085..065bbd25c9814 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -58,7 +58,7 @@ class WP_HTML_Open_Elements { * * @since 6.6.0 * - * @var Closure + * @var Closure|null */ private $pop_handler = null; @@ -69,7 +69,7 @@ class WP_HTML_Open_Elements { * * @since 6.6.0 * - * @var Closure + * @var Closure|null */ private $push_handler = null; @@ -83,7 +83,7 @@ class WP_HTML_Open_Elements { * * @param Closure $handler The handler function. */ - public function set_pop_handler( Closure $handler ) { + public function set_pop_handler( Closure $handler ): void { $this->pop_handler = $handler; } @@ -97,7 +97,7 @@ public function set_pop_handler( Closure $handler ) { * * @param Closure $handler The handler function. */ - public function set_push_handler( Closure $handler ) { + public function set_push_handler( Closure $handler ): void { $this->push_handler = $handler; } @@ -109,7 +109,7 @@ public function set_push_handler( Closure $handler ) { * @param WP_HTML_Token $token Look for this node in the stack. * @return bool Whether the referenced node is in the stack of open elements. */ - public function contains_node( $token ) { + public function contains_node( WP_HTML_Token $token ): bool { foreach ( $this->walk_up() as $item ) { if ( $token->bookmark_name === $item->bookmark_name ) { return true; @@ -126,7 +126,7 @@ public function contains_node( $token ) { * * @return int How many node are in the stack of open elements. */ - public function count() { + public function count(): int { return count( $this->stack ); } @@ -138,7 +138,7 @@ public function count() { * * @return WP_HTML_Token|null Last node in the stack of open elements, if one exists, otherwise null. */ - public function current_node() { + public function current_node(): ?WP_HTML_Token { $current_node = end( $this->stack ); return $current_node ? $current_node : null; @@ -197,7 +197,7 @@ public function current_node_is( string $identity ): bool { * @param string[] $termination_list List of elements that terminate the search. * @return bool Whether the element was found in a specific scope. */ - public function has_element_in_specific_scope( $tag_name, $termination_list ) { + public function has_element_in_specific_scope( string $tag_name, $termination_list ): bool { foreach ( $this->walk_up() as $node ) { if ( $node->node_name === $tag_name ) { return true; @@ -233,7 +233,7 @@ public function has_element_in_specific_scope( $tag_name, $termination_list ) { * @param string $tag_name Name of tag to check. * @return bool Whether given element is in scope. */ - public function has_element_in_scope( $tag_name ) { + public function has_element_in_scope( string $tag_name ): bool { return $this->has_element_in_specific_scope( $tag_name, array( @@ -260,7 +260,7 @@ public function has_element_in_scope( $tag_name ) { * @param string $tag_name Name of tag to check. * @return bool Whether given element is in scope. */ - public function has_element_in_list_item_scope( $tag_name ) { + public function has_element_in_list_item_scope( string $tag_name ): bool { return $this->has_element_in_specific_scope( $tag_name, array( @@ -281,7 +281,7 @@ public function has_element_in_list_item_scope( $tag_name ) { * @param string $tag_name Name of tag to check. * @return bool Whether given element is in scope. */ - public function has_element_in_button_scope( $tag_name ) { + public function has_element_in_button_scope( string $tag_name ): bool { return $this->has_element_in_specific_scope( $tag_name, array( 'BUTTON' ) ); } @@ -297,7 +297,7 @@ public function has_element_in_button_scope( $tag_name ) { * @param string $tag_name Name of tag to check. * @return bool Whether given element is in scope. */ - public function has_element_in_table_scope( $tag_name ) { + public function has_element_in_table_scope( string $tag_name ): bool { throw new WP_HTML_Unsupported_Exception( 'Cannot process elements depending on table scope.' ); return false; // The linter requires this unreachable code until the function is implemented and can return. @@ -323,7 +323,7 @@ public function has_element_in_table_scope( $tag_name ) { * @param string $tag_name Name of tag to check. * @return bool Whether the given element is in SELECT scope. */ - public function has_element_in_select_scope( $tag_name ) { + public function has_element_in_select_scope( string $tag_name ): bool { foreach ( $this->walk_up() as $node ) { if ( $node->node_name === $tag_name ) { return true; @@ -349,7 +349,7 @@ public function has_element_in_select_scope( $tag_name ) { * * @return bool Whether a P is in BUTTON scope. */ - public function has_p_in_button_scope() { + public function has_p_in_button_scope(): bool { return $this->has_p_in_button_scope; } @@ -362,7 +362,7 @@ public function has_p_in_button_scope() { * * @return bool Whether a node was popped off of the stack. */ - public function pop() { + public function pop(): bool { $item = array_pop( $this->stack ); if ( null === $item ) { return false; @@ -387,7 +387,7 @@ public function pop() { * @param string $tag_name Name of tag that needs to be popped off of the stack of open elements. * @return bool Whether a tag of the given name was found and popped off of the stack of open elements. */ - public function pop_until( $tag_name ) { + public function pop_until( string $tag_name ): bool { foreach ( $this->walk_up() as $item ) { if ( 'context-node' === $item->bookmark_name ) { return true; @@ -419,7 +419,7 @@ public function pop_until( $tag_name ) { * * @param WP_HTML_Token $stack_item Item to add onto stack. */ - public function push( $stack_item ) { + public function push( WP_HTML_Token $stack_item ): void { $this->stack[] = $stack_item; $this->after_element_push( $stack_item ); } @@ -432,7 +432,7 @@ public function push( $stack_item ) { * @param WP_HTML_Token $token The node to remove from the stack of open elements. * @return bool Whether the node was found and removed from the stack of open elements. */ - public function remove_node( $token ) { + public function remove_node( WP_HTML_Token $token ): bool { if ( 'context-node' === $token->bookmark_name ) { return false; } @@ -502,7 +502,7 @@ public function walk_down() { * @param WP_HTML_Token|null $above_this_node Optional. Start traversing above this node, * if provided and if the node exists. */ - public function walk_up( $above_this_node = null ) { + public function walk_up( ?WP_HTML_Token $above_this_node = null ) { $has_found_node = null === $above_this_node; for ( $i = count( $this->stack ) - 1; $i >= 0; $i-- ) { @@ -534,7 +534,7 @@ public function walk_up( $above_this_node = null ) { * * @param WP_HTML_Token $item Element that was added to the stack of open elements. */ - public function after_element_push( $item ) { + public function after_element_push( WP_HTML_Token $item ): void { /* * When adding support for new elements, expand this switch to trap * cases where the precalculated value needs to change. @@ -567,7 +567,7 @@ public function after_element_push( $item ) { * * @param WP_HTML_Token $item Element that was removed from the stack of open elements. */ - public function after_element_pop( $item ) { + public function after_element_pop( WP_HTML_Token $item ): void { /* * When adding support for new elements, expand this switch to trap * cases where the precalculated value needs to change. diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index ab75041bee3d0..eadfe30d26cf9 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -333,7 +333,7 @@ class WP_HTML_Processor_State { * * @var WP_HTML_Open_Elements */ - public $stack_of_open_elements = null; + public $stack_of_open_elements; /** * Tracks open formatting elements, used to handle mis-nested formatting element tags. @@ -346,7 +346,7 @@ class WP_HTML_Processor_State { * * @var WP_HTML_Active_Formatting_Elements */ - public $active_formatting_elements = null; + public $active_formatting_elements; /** * Refers to the currently-matched tag, if any. diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 679c4a7e50fa5..72f39d3ad7a7a 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -159,7 +159,7 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * * @var WP_HTML_Processor_State */ - private $state = null; + private $state; /** * Used to create unique bookmark names. @@ -208,7 +208,7 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * * @since 6.4.0 * - * @var closure + * @var Closure|null */ private $release_internal_bookmark_on_destruct = null; @@ -368,7 +368,7 @@ public function __construct( $html, $use_the_static_create_methods_instead = nul $this->state = new WP_HTML_Processor_State(); $this->state->stack_of_open_elements->set_push_handler( - function ( WP_HTML_Token $token ) { + function ( WP_HTML_Token $token ): void { $is_virtual = ! isset( $this->state->current_token ) || $this->is_tag_closer(); $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; @@ -377,7 +377,7 @@ function ( WP_HTML_Token $token ) { ); $this->state->stack_of_open_elements->set_pop_handler( - function ( WP_HTML_Token $token ) { + function ( WP_HTML_Token $token ): void { $is_virtual = ! isset( $this->state->current_token ) || ! $this->is_tag_closer(); $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; @@ -390,7 +390,7 @@ function ( WP_HTML_Token $token ) { * a private method into WP_HTML_Token classes without * exposing it to any public API. */ - $this->release_internal_bookmark_on_destruct = function ( $name ) { + $this->release_internal_bookmark_on_destruct = function ( string $name ): void { parent::release_bookmark( $name ); }; } @@ -403,8 +403,6 @@ function ( WP_HTML_Token $token ) { * @since 6.7.0 * * @param string $message Explains support is missing in order to parse the current node. - * - * @return mixed */ private function bail( string $message ) { $here = $this->bookmarks[ $this->state->current_token->bookmark_name ]; @@ -457,7 +455,7 @@ private function bail( string $message ) { * * @return string|null The last error, if one exists, otherwise null. */ - public function get_last_error() { + public function get_last_error(): ?string { return $this->last_error; } @@ -500,7 +498,7 @@ public function get_unsupported_exception() { * } * @return bool Whether a tag was matched. */ - public function next_tag( $query = null ) { + public function next_tag( $query = null ): bool { $visit_closers = isset( $query['tag_closers'] ) && 'visit' === $query['tag_closers']; if ( null === $query ) { @@ -590,7 +588,7 @@ public function next_tag( $query = null ) { * * @return bool */ - public function next_token() { + public function next_token(): bool { $this->current_element = null; if ( isset( $this->last_error ) ) { @@ -643,7 +641,6 @@ public function next_token() { return true; } - /** * Indicates if the current tag token is a tag closer. * @@ -660,7 +657,7 @@ public function next_token() { * * @return bool Whether the current tag is a tag closer. */ - public function is_tag_closer() { + public function is_tag_closer(): bool { return $this->is_virtual() ? ( WP_HTML_Stack_Event::POP === $this->current_element->operation && '#tag' === $this->get_token_type() ) : parent::is_tag_closer(); @@ -674,7 +671,7 @@ public function is_tag_closer() { * * @return bool Whether the current token is virtual. */ - private function is_virtual() { + private function is_virtual(): bool { return ( isset( $this->current_element->provenance ) && 'virtual' === $this->current_element->provenance @@ -706,7 +703,7 @@ private function is_virtual() { * May also contain the wildcard `*` which matches a single element, e.g. `array( 'SECTION', '*' )`. * @return bool Whether the currently-matched tag is found at the given nested structure. */ - public function matches_breadcrumbs( $breadcrumbs ) { + public function matches_breadcrumbs( $breadcrumbs ): bool { // Everything matches when there are zero constraints. if ( 0 === count( $breadcrumbs ) ) { return true; @@ -757,7 +754,7 @@ public function matches_breadcrumbs( $breadcrumbs ) { * @return bool|null Whether to expect a closer for the currently-matched node, * or `null` if not matched on any token. */ - public function expects_closer( $node = null ) { + public function expects_closer( $node = null ): ?bool { $token_name = $node->node_name ?? $this->get_token_name(); if ( ! isset( $token_name ) ) { return null; @@ -788,7 +785,7 @@ public function expects_closer( $node = null ) { * @param string $node_to_process Whether to parse the next node or reprocess the current node. * @return bool Whether a tag was matched. */ - public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { + public function step( $node_to_process = self::PROCESS_NEXT_NODE ): bool { // Refuse to proceed if there was a previous error. if ( null !== $this->last_error ) { return false; @@ -938,7 +935,7 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { * * @return string[]|null Array of tag names representing path to matched node, if matched, otherwise NULL. */ - public function get_breadcrumbs() { + public function get_breadcrumbs(): ?array { return $this->breadcrumbs; } @@ -967,7 +964,7 @@ public function get_breadcrumbs() { * * @return int Nesting-depth of current location in the document. */ - public function get_current_depth() { + public function get_current_depth(): int { return count( $this->breadcrumbs ); } @@ -986,7 +983,7 @@ public function get_current_depth() { * * @return bool Whether an element was found. */ - private function step_initial() { + private function step_initial(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1005,7 +1002,7 @@ private function step_initial() { * * @return bool Whether an element was found. */ - private function step_before_html() { + private function step_before_html(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1024,7 +1021,7 @@ private function step_before_html() { * * @return bool Whether an element was found. */ - private function step_before_head() { + private function step_before_head(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1043,7 +1040,7 @@ private function step_before_head() { * * @return bool Whether an element was found. */ - private function step_in_head() { + private function step_in_head(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1062,7 +1059,7 @@ private function step_in_head() { * * @return bool Whether an element was found. */ - private function step_in_head_noscript() { + private function step_in_head_noscript(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1081,7 +1078,7 @@ private function step_in_head_noscript() { * * @return bool Whether an element was found. */ - private function step_after_head() { + private function step_after_head(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1100,7 +1097,7 @@ private function step_after_head() { * * @return bool Whether an element was found. */ - private function step_in_body() { + private function step_in_body(): bool { $token_name = $this->get_token_name(); $token_type = $this->get_token_type(); $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; @@ -1723,7 +1720,7 @@ private function step_in_body() { * * @return bool Whether an element was found. */ - private function step_in_table() { + private function step_in_table(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1742,7 +1739,7 @@ private function step_in_table() { * * @return bool Whether an element was found. */ - private function step_in_table_text() { + private function step_in_table_text(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1761,7 +1758,7 @@ private function step_in_table_text() { * * @return bool Whether an element was found. */ - private function step_in_caption() { + private function step_in_caption(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1780,7 +1777,7 @@ private function step_in_caption() { * * @return bool Whether an element was found. */ - private function step_in_column_group() { + private function step_in_column_group(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1799,7 +1796,7 @@ private function step_in_column_group() { * * @return bool Whether an element was found. */ - private function step_in_table_body() { + private function step_in_table_body(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1818,7 +1815,7 @@ private function step_in_table_body() { * * @return bool Whether an element was found. */ - private function step_in_row() { + private function step_in_row(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1837,7 +1834,7 @@ private function step_in_row() { * * @return bool Whether an element was found. */ - private function step_in_cell() { + private function step_in_cell(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -1856,7 +1853,7 @@ private function step_in_cell() { * * @return bool Whether an element was found. */ - private function step_in_select() { + private function step_in_select(): bool { $token_name = $this->get_token_name(); $token_type = $this->get_token_type(); $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; @@ -2037,7 +2034,7 @@ private function step_in_select() { * * @return bool Whether an element was found. */ - private function step_in_select_in_table() { + private function step_in_select_in_table(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2056,7 +2053,7 @@ private function step_in_select_in_table() { * * @return bool Whether an element was found. */ - private function step_in_template() { + private function step_in_template(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2075,7 +2072,7 @@ private function step_in_template() { * * @return bool Whether an element was found. */ - private function step_after_body() { + private function step_after_body(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2094,7 +2091,7 @@ private function step_after_body() { * * @return bool Whether an element was found. */ - private function step_in_frameset() { + private function step_in_frameset(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2113,7 +2110,7 @@ private function step_in_frameset() { * * @return bool Whether an element was found. */ - private function step_after_frameset() { + private function step_after_frameset(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2132,7 +2129,7 @@ private function step_after_frameset() { * * @return bool Whether an element was found. */ - private function step_after_after_body() { + private function step_after_after_body(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2151,7 +2148,7 @@ private function step_after_after_body() { * * @return bool Whether an element was found. */ - private function step_after_after_frameset() { + private function step_after_after_frameset(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2170,7 +2167,7 @@ private function step_after_after_frameset() { * * @return bool Whether an element was found. */ - private function step_in_foreign_content() { + private function step_in_foreign_content(): bool { $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); } @@ -2222,7 +2219,7 @@ private function bookmark_token() { * * @return string|null Name of currently matched tag in input HTML, or `null` if none found. */ - public function get_tag() { + public function get_tag(): ?string { if ( null !== $this->last_error ) { return null; } @@ -2263,7 +2260,7 @@ public function get_tag() { * * @return bool Whether the currently matched tag contains the self-closing flag. */ - public function has_self_closing_flag() { + public function has_self_closing_flag(): bool { return $this->is_virtual() ? false : parent::has_self_closing_flag(); } @@ -2287,7 +2284,7 @@ public function has_self_closing_flag() { * * @return string|null Name of the matched token. */ - public function get_token_name() { + public function get_token_name(): ?string { return $this->is_virtual() ? $this->current_element->token->node_name : parent::get_token_name(); @@ -2315,7 +2312,7 @@ public function get_token_name() { * * @return string|null What kind of token is matched, or null. */ - public function get_token_type() { + public function get_token_type(): ?string { if ( $this->is_virtual() ) { /* * This logic comes from the Tag Processor. @@ -2377,7 +2374,7 @@ public function get_attribute( $name ) { * @param string|bool $value The new attribute value. * @return bool Whether an attribute value was set. */ - public function set_attribute( $name, $value ) { + public function set_attribute( $name, $value ): bool { return $this->is_virtual() ? false : parent::set_attribute( $name, $value ); } @@ -2389,7 +2386,7 @@ public function set_attribute( $name, $value ) { * @param string $name The attribute name to remove. * @return bool Whether an attribute was removed. */ - public function remove_attribute( $name ) { + public function remove_attribute( $name ): bool { return $this->is_virtual() ? false : parent::remove_attribute( $name ); } @@ -2419,7 +2416,7 @@ public function remove_attribute( $name ) { * @param string $prefix Prefix of requested attribute names. * @return array|null List of attribute names, or `null` when no tag opener is matched. */ - public function get_attribute_names_with_prefix( $prefix ) { + public function get_attribute_names_with_prefix( $prefix ): ?array { return $this->is_virtual() ? null : parent::get_attribute_names_with_prefix( $prefix ); } @@ -2431,7 +2428,7 @@ public function get_attribute_names_with_prefix( $prefix ) { * @param string $class_name The class name to add. * @return bool Whether the class was set to be added. */ - public function add_class( $class_name ) { + public function add_class( $class_name ): bool { return $this->is_virtual() ? false : parent::add_class( $class_name ); } @@ -2443,7 +2440,7 @@ public function add_class( $class_name ) { * @param string $class_name The class name to remove. * @return bool Whether the class was set to be removed. */ - public function remove_class( $class_name ) { + public function remove_class( $class_name ): bool { return $this->is_virtual() ? false : parent::remove_class( $class_name ); } @@ -2455,7 +2452,7 @@ public function remove_class( $class_name ) { * @param string $wanted_class Look for this CSS class name, ASCII case-insensitive. * @return bool|null Whether the matched tag contains the given class name, or null if not matched. */ - public function has_class( $wanted_class ) { + public function has_class( $wanted_class ): ?bool { return $this->is_virtual() ? null : parent::has_class( $wanted_class ); } @@ -2499,7 +2496,7 @@ public function class_list() { * * @return string */ - public function get_modifiable_text() { + public function get_modifiable_text(): string { return $this->is_virtual() ? '' : parent::get_modifiable_text(); } @@ -2522,7 +2519,7 @@ public function get_modifiable_text() { * * @return string|null */ - public function get_comment_type() { + public function get_comment_type(): ?string { return $this->is_virtual() ? null : parent::get_comment_type(); } @@ -2537,7 +2534,7 @@ public function get_comment_type() { * @param string $bookmark_name Name of the bookmark to remove. * @return bool Whether the bookmark already existed before removal. */ - public function release_bookmark( $bookmark_name ) { + public function release_bookmark( $bookmark_name ): bool { return parent::release_bookmark( "_{$bookmark_name}" ); } @@ -2558,7 +2555,7 @@ public function release_bookmark( $bookmark_name ) { * @param string $bookmark_name Jump to the place in the document identified by this bookmark name. * @return bool Whether the internal cursor was successfully moved to the bookmark's location. */ - public function seek( $bookmark_name ) { + public function seek( $bookmark_name ): bool { // Flush any pending updates to the document before beginning. $this->get_updated_html(); @@ -2729,7 +2726,7 @@ public function seek( $bookmark_name ) { * @param string $bookmark_name Identifies this particular bookmark. * @return bool Whether the bookmark was successfully created. */ - public function set_bookmark( $bookmark_name ) { + public function set_bookmark( $bookmark_name ): bool { return parent::set_bookmark( "_{$bookmark_name}" ); } @@ -2741,7 +2738,7 @@ public function set_bookmark( $bookmark_name ) { * @param string $bookmark_name Name to identify a bookmark that potentially exists. * @return bool Whether that bookmark exists. */ - public function has_bookmark( $bookmark_name ) { + public function has_bookmark( $bookmark_name ): bool { return parent::has_bookmark( "_{$bookmark_name}" ); } @@ -2758,7 +2755,7 @@ public function has_bookmark( $bookmark_name ) { * * @see https://html.spec.whatwg.org/#close-a-p-element */ - private function close_a_p_element() { + private function close_a_p_element(): void { $this->generate_implied_end_tags( 'P' ); $this->state->stack_of_open_elements->pop_until( 'P' ); } @@ -2773,7 +2770,7 @@ private function close_a_p_element() { * * @param string|null $except_for_this_element Perform as if this element doesn't exist in the stack of open elements. */ - private function generate_implied_end_tags( $except_for_this_element = null ) { + private function generate_implied_end_tags( ?string $except_for_this_element = null ): void { $elements_with_implied_end_tags = array( 'DD', 'DT', @@ -2809,7 +2806,7 @@ private function generate_implied_end_tags( $except_for_this_element = null ) { * @see WP_HTML_Processor::generate_implied_end_tags * @see https://html.spec.whatwg.org/#generate-implied-end-tags */ - private function generate_implied_end_tags_thoroughly() { + private function generate_implied_end_tags_thoroughly(): void { $elements_with_implied_end_tags = array( 'CAPTION', 'COLGROUP', @@ -2851,7 +2848,7 @@ private function generate_implied_end_tags_thoroughly() { * * @return bool Whether any formatting elements needed to be reconstructed. */ - private function reconstruct_active_formatting_elements() { + private function reconstruct_active_formatting_elements(): bool { /* * > If there are no entries in the list of active formatting elements, then there is nothing * > to reconstruct; stop this algorithm. @@ -3074,7 +3071,7 @@ public function reset_insertion_mode(): void { * * @see https://html.spec.whatwg.org/#adoption-agency-algorithm */ - private function run_adoption_agency_algorithm() { + private function run_adoption_agency_algorithm(): void { $budget = 1000; $subject = $this->get_tag(); $current_node = $this->state->stack_of_open_elements->current_node(); @@ -3182,7 +3179,7 @@ private function run_adoption_agency_algorithm() { * * @param WP_HTML_Token $token Name of bookmark pointing to element in original input HTML. */ - private function insert_html_element( $token ) { + private function insert_html_element( WP_HTML_Token $token ): void { $this->state->stack_of_open_elements->push( $token ); } @@ -3200,7 +3197,7 @@ private function insert_html_element( $token ) { * @param string $tag_name Name of element to check. * @return bool Whether the element of the given name is in the special category. */ - public static function is_special( $tag_name ) { + public static function is_special( $tag_name ): bool { $tag_name = strtoupper( $tag_name ); return ( @@ -3315,7 +3312,7 @@ public static function is_special( $tag_name ) { * @param string $tag_name Name of HTML tag to check. * @return bool Whether the given tag is an HTML Void Element. */ - public static function is_void( $tag_name ) { + public static function is_void( $tag_name ): bool { $tag_name = strtoupper( $tag_name ); return ( diff --git a/src/wp-includes/html-api/class-wp-html-span.php b/src/wp-includes/html-api/class-wp-html-span.php index b1ab865af3bed..04a1d5258c904 100644 --- a/src/wp-includes/html-api/class-wp-html-span.php +++ b/src/wp-includes/html-api/class-wp-html-span.php @@ -49,7 +49,7 @@ class WP_HTML_Span { * @param int $start Byte offset into document where replacement span begins. * @param int $length Byte length of span. */ - public function __construct( $start, $length ) { + public function __construct( int $start, int $length ) { $this->start = $start; $this->length = $length; } diff --git a/src/wp-includes/html-api/class-wp-html-stack-event.php b/src/wp-includes/html-api/class-wp-html-stack-event.php index aa4763cd399fc..dcb3c79ef1003 100644 --- a/src/wp-includes/html-api/class-wp-html-stack-event.php +++ b/src/wp-includes/html-api/class-wp-html-stack-event.php @@ -74,7 +74,7 @@ class WP_HTML_Stack_Event { * @param string $operation One of self::PUSH or self::POP. * @param string $provenance "virtual" or "real". */ - public function __construct( $token, $operation, $provenance ) { + public function __construct( WP_HTML_Token $token, string $operation, string $provenance ) { $this->token = $token; $this->operation = $operation; $this->provenance = $provenance; diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 46fc192083ec6..77782aa950625 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -784,7 +784,7 @@ public function __construct( $html ) { * } * @return bool Whether a tag was matched. */ - public function next_tag( $query = null ) { + public function next_tag( $query = null ): bool { $this->parse_query( $query ); $already_found = 0; @@ -832,7 +832,7 @@ public function next_tag( $query = null ) { * * @return bool Whether a token was parsed. */ - public function next_token() { + public function next_token(): bool { return $this->base_class_next_token(); } @@ -851,7 +851,7 @@ public function next_token() { * * @return bool Whether a token was parsed. */ - private function base_class_next_token() { + private function base_class_next_token(): bool { $was_at = $this->bytes_already_parsed; $this->after_tag(); @@ -1033,7 +1033,7 @@ private function base_class_next_token() { * * @return bool Whether the parse paused at the start of an incomplete token. */ - public function paused_at_incomplete_token() { + public function paused_at_incomplete_token(): bool { return self::STATE_INCOMPLETE_INPUT === $this->parser_state; } @@ -1112,7 +1112,7 @@ public function class_list() { * @param string $wanted_class Look for this CSS class name, ASCII case-insensitive. * @return bool|null Whether the matched tag contains the given class name, or null if not matched. */ - public function has_class( $wanted_class ) { + public function has_class( $wanted_class ): ?bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { return null; } @@ -1209,7 +1209,7 @@ public function has_class( $wanted_class ) { * @param string $name Identifies this particular bookmark. * @return bool Whether the bookmark was successfully created. */ - public function set_bookmark( $name ) { + public function set_bookmark( $name ): bool { // It only makes sense to set a bookmark if the parser has paused on a concrete token. if ( self::STATE_COMPLETE === $this->parser_state || @@ -1242,7 +1242,7 @@ public function set_bookmark( $name ) { * @param string $name Name of the bookmark to remove. * @return bool Whether the bookmark already existed before removal. */ - public function release_bookmark( $name ) { + public function release_bookmark( $name ): bool { if ( ! array_key_exists( $name, $this->bookmarks ) ) { return false; } @@ -1262,7 +1262,7 @@ public function release_bookmark( $name ) { * @param string $tag_name The uppercase tag name which will close the RAWTEXT region. * @return bool Whether an end to the RAWTEXT region was found before the end of the document. */ - private function skip_rawtext( $tag_name ) { + private function skip_rawtext( string $tag_name ): bool { /* * These two functions distinguish themselves on whether character references are * decoded, and since functionality to read the inner markup isn't supported, it's @@ -1281,7 +1281,7 @@ private function skip_rawtext( $tag_name ) { * @param string $tag_name The uppercase tag name which will close the RCDATA region. * @return bool Whether an end to the RCDATA region was found before the end of the document. */ - private function skip_rcdata( $tag_name ) { + private function skip_rcdata( string $tag_name ): bool { $html = $this->html; $doc_length = strlen( $html ); $tag_length = strlen( $tag_name ); @@ -1369,7 +1369,7 @@ private function skip_rcdata( $tag_name ) { * * @return bool Whether the script tag was closed before the end of the document. */ - private function skip_script_data() { + private function skip_script_data(): bool { $state = 'unescaped'; $html = $this->html; $doc_length = strlen( $html ); @@ -1516,7 +1516,7 @@ private function skip_script_data() { * * @return bool Whether a tag was found before the end of the document. */ - private function parse_next_tag() { + private function parse_next_tag(): bool { $this->after_tag(); $html = $this->html; @@ -1906,7 +1906,7 @@ private function parse_next_tag() { * * @return bool Whether an attribute was found before the end of the document. */ - private function parse_next_attribute() { + private function parse_next_attribute(): bool { $doc_length = strlen( $this->html ); // Skip whitespace and slashes. @@ -2041,7 +2041,7 @@ private function parse_next_attribute() { * * @since 6.2.0 */ - private function skip_whitespace() { + private function skip_whitespace(): void { $this->bytes_already_parsed += strspn( $this->html, " \t\f\r\n", $this->bytes_already_parsed ); } @@ -2050,7 +2050,7 @@ private function skip_whitespace() { * * @since 6.2.0 */ - private function after_tag() { + private function after_tag(): void { /* * There could be lexical updates enqueued for an attribute that * also exists on the next tag. In order to avoid conflating the @@ -2111,7 +2111,7 @@ private function after_tag() { * @see WP_HTML_Tag_Processor::$lexical_updates * @see WP_HTML_Tag_Processor::$classname_updates */ - private function class_name_updates_to_attributes_updates() { + private function class_name_updates_to_attributes_updates(): void { if ( count( $this->classname_updates ) === 0 ) { return; } @@ -2256,7 +2256,7 @@ private function class_name_updates_to_attributes_updates() { * @param int $shift_this_point Accumulate and return shift for this position. * @return int How many bytes the given pointer moved in response to the updates. */ - private function apply_attributes_updates( $shift_this_point ) { + private function apply_attributes_updates( int $shift_this_point ): int { if ( ! count( $this->lexical_updates ) ) { return 0; } @@ -2353,7 +2353,7 @@ private function apply_attributes_updates( $shift_this_point ) { * @param string $bookmark_name Name to identify a bookmark that potentially exists. * @return bool Whether that bookmark exists. */ - public function has_bookmark( $bookmark_name ) { + public function has_bookmark( $bookmark_name ): bool { return array_key_exists( $bookmark_name, $this->bookmarks ); } @@ -2368,7 +2368,7 @@ public function has_bookmark( $bookmark_name ) { * @param string $bookmark_name Jump to the place in the document identified by this bookmark name. * @return bool Whether the internal cursor was successfully moved to the bookmark's location. */ - public function seek( $bookmark_name ) { + public function seek( $bookmark_name ): bool { if ( ! array_key_exists( $bookmark_name, $this->bookmarks ) ) { _doing_it_wrong( __METHOD__, @@ -2405,7 +2405,7 @@ public function seek( $bookmark_name ) { * @param WP_HTML_Text_Replacement $b Second attribute update. * @return int Comparison value for string order. */ - private static function sort_start_ascending( $a, $b ) { + private static function sort_start_ascending( WP_HTML_Text_Replacement $a, WP_HTML_Text_Replacement $b ): int { $by_start = $a->start - $b->start; if ( 0 !== $by_start ) { return $by_start; @@ -2437,7 +2437,7 @@ private static function sort_start_ascending( $a, $b ) { * @param string $comparable_name The attribute name in its comparable form. * @return string|boolean|null Value of enqueued update if present, otherwise false. */ - private function get_enqueued_attribute_value( $comparable_name ) { + private function get_enqueued_attribute_value( string $comparable_name ) { if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { return false; } @@ -2588,7 +2588,7 @@ public function get_attribute( $name ) { * @param string $prefix Prefix of requested attribute names. * @return array|null List of attribute names, or `null` when no tag opener is matched. */ - public function get_attribute_names_with_prefix( $prefix ) { + public function get_attribute_names_with_prefix( $prefix ): ?array { if ( self::STATE_MATCHED_TAG !== $this->parser_state || $this->is_closing_tag @@ -2623,7 +2623,7 @@ public function get_attribute_names_with_prefix( $prefix ) { * * @return string|null Name of currently matched tag in input HTML, or `null` if none found. */ - public function get_tag() { + public function get_tag(): ?string { if ( null === $this->tag_name_starts_at ) { return null; } @@ -2661,7 +2661,7 @@ public function get_tag() { * * @return bool Whether the currently matched tag contains the self-closing flag. */ - public function has_self_closing_flag() { + public function has_self_closing_flag(): bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { return false; } @@ -2693,7 +2693,7 @@ public function has_self_closing_flag() { * * @return bool Whether the current tag is a tag closer. */ - public function is_tag_closer() { + public function is_tag_closer(): bool { return ( self::STATE_MATCHED_TAG === $this->parser_state && $this->is_closing_tag @@ -2722,7 +2722,7 @@ public function is_tag_closer() { * * @return string|null What kind of token is matched, or null. */ - public function get_token_type() { + public function get_token_type(): ?string { switch ( $this->parser_state ) { case self::STATE_MATCHED_TAG: return '#tag'; @@ -2755,7 +2755,7 @@ public function get_token_type() { * * @return string|null Name of the matched token. */ - public function get_token_name() { + public function get_token_name(): ?string { switch ( $this->parser_state ) { case self::STATE_MATCHED_TAG: return $this->get_tag(); @@ -2801,7 +2801,7 @@ public function get_token_name() { * * @return string|null */ - public function get_comment_type() { + public function get_comment_type(): ?string { if ( self::STATE_COMMENT !== $this->parser_state ) { return null; } @@ -2829,7 +2829,7 @@ public function get_comment_type() { * * @return string */ - public function get_modifiable_text() { + public function get_modifiable_text(): string { if ( null === $this->text_starts_at ) { return ''; } @@ -2899,7 +2899,7 @@ public function get_modifiable_text() { * @param string|bool $value The new attribute value. * @return bool Whether an attribute value was set. */ - public function set_attribute( $name, $value ) { + public function set_attribute( $name, $value ): bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state || $this->is_closing_tag @@ -3042,7 +3042,7 @@ public function set_attribute( $name, $value ) { * @param string $name The attribute name to remove. * @return bool Whether an attribute was removed. */ - public function remove_attribute( $name ) { + public function remove_attribute( $name ): bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state || $this->is_closing_tag @@ -3120,7 +3120,7 @@ public function remove_attribute( $name ) { * @param string $class_name The class name to add. * @return bool Whether the class was set to be added. */ - public function add_class( $class_name ) { + public function add_class( $class_name ): bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state || $this->is_closing_tag @@ -3141,7 +3141,7 @@ public function add_class( $class_name ) { * @param string $class_name The class name to remove. * @return bool Whether the class was set to be removed. */ - public function remove_class( $class_name ) { + public function remove_class( $class_name ): bool { if ( self::STATE_MATCHED_TAG !== $this->parser_state || $this->is_closing_tag @@ -3165,7 +3165,7 @@ public function remove_class( $class_name ) { * * @return string The processed HTML. */ - public function __toString() { + public function __toString(): string { return $this->get_updated_html(); } @@ -3178,7 +3178,7 @@ public function __toString() { * * @return string The processed HTML. */ - public function get_updated_html() { + public function get_updated_html(): string { $requires_no_updating = 0 === count( $this->classname_updates ) && 0 === count( $this->lexical_updates ); /* @@ -3300,7 +3300,7 @@ private function parse_query( $query ) { * * @return bool Whether the given tag and its attribute match the search criteria. */ - private function matches() { + private function matches(): bool { if ( $this->is_closing_tag && ! $this->stop_on_tag_closers ) { return false; } diff --git a/src/wp-includes/html-api/class-wp-html-text-replacement.php b/src/wp-includes/html-api/class-wp-html-text-replacement.php index 4b8a6a6aa289d..65e17d48fdb4a 100644 --- a/src/wp-includes/html-api/class-wp-html-text-replacement.php +++ b/src/wp-includes/html-api/class-wp-html-text-replacement.php @@ -56,7 +56,7 @@ class WP_HTML_Text_Replacement { * @param int $length Byte length of span in document being replaced. * @param string $text Span of text to insert in document to replace existing content from start to end. */ - public function __construct( $start, $length, $text ) { + public function __construct( int $start, int $length, string $text ) { $this->start = $start; $this->length = $length; $this->text = $text; diff --git a/src/wp-includes/html-api/class-wp-html-token.php b/src/wp-includes/html-api/class-wp-html-token.php index 86dd7658cfcee..fe8636fb5e164 100644 --- a/src/wp-includes/html-api/class-wp-html-token.php +++ b/src/wp-includes/html-api/class-wp-html-token.php @@ -72,12 +72,12 @@ class WP_HTML_Token { * * @since 6.4.0 * - * @param string $bookmark_name Name of bookmark corresponding to location in HTML where token is found. - * @param string $node_name Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker". - * @param bool $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid. - * @param callable $on_destroy Function to call when destroying token, useful for releasing the bookmark. + * @param string $bookmark_name Name of bookmark corresponding to location in HTML where token is found. + * @param string $node_name Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker". + * @param bool $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid. + * @param callable|null $on_destroy Optional. Function to call when destroying token, useful for releasing the bookmark. */ - public function __construct( $bookmark_name, $node_name, $has_self_closing_flag, $on_destroy = null ) { + public function __construct( string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) { $this->bookmark_name = $bookmark_name; $this->node_name = $node_name; $this->has_self_closing_flag = $has_self_closing_flag; From 60f9f87210a449484ceb925e3a04b032bf3fae90 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 20 Jul 2024 10:06:39 +0000 Subject: [PATCH 143/422] Twenty Twenty-Four: Fixes typos in pattern descriptions. There were a number of typos in the patterns. These came in [58111] with some additions having issues and so this resolves that. Props tobifjellner, sabernhardt, audrasjb. Fixes #61682. git-svn-id: https://develop.svn.wordpress.org/trunk@58770 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentytwentyfour/patterns/page-home-portfolio-gallery.php | 2 +- .../themes/twentytwentyfour/patterns/testimonial-centered.php | 2 +- .../twentytwentyfour/patterns/text-alternating-images.php | 2 +- .../twentytwentyfour/patterns/text-centered-statement-small.php | 2 +- .../twentytwentyfour/patterns/text-centered-statement.php | 2 +- src/wp-content/themes/twentytwentyfour/patterns/text-faq.php | 2 +- .../themes/twentytwentyfour/patterns/text-project-details.php | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/wp-content/themes/twentytwentyfour/patterns/page-home-portfolio-gallery.php b/src/wp-content/themes/twentytwentyfour/patterns/page-home-portfolio-gallery.php index 511a3b8a7467f..6c64adebe8dbd 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/page-home-portfolio-gallery.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/page-home-portfolio-gallery.php @@ -7,7 +7,7 @@ * Block Types: core/post-content * Post Types: page, wp_template * Viewport width: 1400 - * Description: A porfolio home page that features a gallery. + * Description: A portfolio home page that features a gallery. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/testimonial-centered.php b/src/wp-content/themes/twentytwentyfour/patterns/testimonial-centered.php index 7ca82754aa34c..1bac825e9e5d3 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/testimonial-centered.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/testimonial-centered.php @@ -5,7 +5,7 @@ * Keywords: quote, review, about * Categories: testimonials, text * Viewport width: 1300 - * Description: A centered testimonial section with a avatar, name, and job title. + * Description: A centered testimonial section with an avatar, name, and job title. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/text-alternating-images.php b/src/wp-content/themes/twentytwentyfour/patterns/text-alternating-images.php index 105ac2ac00f57..6ee225137dfa5 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/text-alternating-images.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/text-alternating-images.php @@ -4,7 +4,7 @@ * Slug: twentytwentyfour/text-alternating-images * Categories: text, about * Viewport width: 1400 - * Description: A text section, then a two column section with text in one and image in another. + * Description: A text section, then a two-column section with text in one column and an image in the other. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement-small.php b/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement-small.php index 540846336f1c9..c558518823965 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement-small.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement-small.php @@ -5,7 +5,7 @@ * Categories: text, about * Keywords: mission, introduction * Viewport width: 1200 - * Description: A centered itallic text statement with compact padding. + * Description: A centered italic text statement with compact padding. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement.php b/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement.php index f8fbb4ddc604e..ca909ca773c09 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/text-centered-statement.php @@ -5,7 +5,7 @@ * Categories: text, about, featured * Keywords: mission, introduction * Viewport width: 1400 - * Description: A centered text statement with a large paddings. + * Description: A centered text statement with a large amount of padding on all sides. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/text-faq.php b/src/wp-content/themes/twentytwentyfour/patterns/text-faq.php index 000aa61119c97..3e0c3aeecb1e7 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/text-faq.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/text-faq.php @@ -5,7 +5,7 @@ * Categories: text, about, featured * Keywords: faq, about, frequently asked * Viewport width: 1400 - * Description: A FAQ section with a large FAQ heading and list of toggle questions and answers. + * Description: A FAQ section with a large FAQ heading and a group of questions and answers. */ ?> diff --git a/src/wp-content/themes/twentytwentyfour/patterns/text-project-details.php b/src/wp-content/themes/twentytwentyfour/patterns/text-project-details.php index a6a54c1de1c87..9116a974a3466 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/text-project-details.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/text-project-details.php @@ -4,7 +4,7 @@ * Slug: twentytwentyfour/text-project-details * Categories: text, portfolio * Viewport width: 1400 - * Description: A text only section for project details. + * Description: A text-only section for project details. */ ?> From 450de6b6ad44c5cf6b14c88352bec5888ed0abf8 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 20 Jul 2024 10:55:14 +0000 Subject: [PATCH 144/422] Multiple themes Fixes theme screen reader including text inside card. The function twentysixteen_entry_meta included screen reader text inside the span property using the author mf class. This resolves that in both Twenty Sixteen and Twenty Fifteen. It should have the screen reader text inside the byline span but outside the author vcard span. Props dshanske, laurelfulford, sabernhardt, shilu25. Fixes #46233. git-svn-id: https://develop.svn.wordpress.org/trunk@58771 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyfifteen/inc/template-tags.php | 2 +- src/wp-content/themes/twentysixteen/inc/template-tags.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-content/themes/twentyfifteen/inc/template-tags.php b/src/wp-content/themes/twentyfifteen/inc/template-tags.php index 475423dd68960..d2a0180f219e4 100644 --- a/src/wp-content/themes/twentyfifteen/inc/template-tags.php +++ b/src/wp-content/themes/twentyfifteen/inc/template-tags.php @@ -97,7 +97,7 @@ function twentyfifteen_entry_meta() { if ( 'post' === get_post_type() ) { if ( is_singular() || is_multi_author() ) { printf( - '', + '', /* translators: Hidden accessibility text. */ _x( 'Author', 'Used before post author name.', 'twentyfifteen' ), esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), diff --git a/src/wp-content/themes/twentysixteen/inc/template-tags.php b/src/wp-content/themes/twentysixteen/inc/template-tags.php index a55799812faf2..ddd3060d00fec 100644 --- a/src/wp-content/themes/twentysixteen/inc/template-tags.php +++ b/src/wp-content/themes/twentysixteen/inc/template-tags.php @@ -21,7 +21,7 @@ function twentysixteen_entry_meta() { if ( 'post' === get_post_type() ) { $author_avatar_size = apply_filters( 'twentysixteen_author_avatar_size', 49 ); printf( - '', + '', get_avatar( get_the_author_meta( 'user_email' ), $author_avatar_size ), /* translators: Hidden accessibility text. */ _x( 'Author', 'Used before post author name.', 'twentysixteen' ), From ffba41d28f6b3cfd3870ea6b6148efb3371be3c2 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 20 Jul 2024 12:41:52 +0000 Subject: [PATCH 145/422] Twenty Fifteen: Fixes List Block with padding not having background color. The List Block when had padding was not displaying the background color correctly. This only impacts the non-framed editor. Props viralsampat, devtanbir, sabernhardt, deepakvijayan. Fixes #60197. git-svn-id: https://develop.svn.wordpress.org/trunk@58772 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyfifteen/css/editor-blocks.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wp-content/themes/twentyfifteen/css/editor-blocks.css b/src/wp-content/themes/twentyfifteen/css/editor-blocks.css index 8b5012860d6a7..91595e6304985 100644 --- a/src/wp-content/themes/twentyfifteen/css/editor-blocks.css +++ b/src/wp-content/themes/twentyfifteen/css/editor-blocks.css @@ -405,6 +405,10 @@ Description: Used to style blocks in the editor. padding: 0; } +div.editor-styles-wrapper .wp-block-list:where(.has-background) { + padding: 1.25em 2.375em; +} + /* Quote */ .rtl .editor-block-list__block blockquote { From 68b23387d752493e79f0a35190a8d495feb49b67 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 20 Jul 2024 13:30:52 +0000 Subject: [PATCH 146/422] Media: Check if content URL includes a hostname in `wp_calculate_image_srcset()`. This resolves an `Undefined array key "host"` PHP warning if `WP_CONTENT_URL` is set to a relative URL. Follow-up to [58097]. Props mattraines, narenin, pamprn, SergeyBiryukov. Fixes #61690. git-svn-id: https://develop.svn.wordpress.org/trunk@58773 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/media.php | 10 +++++++--- tests/phpunit/tests/media.php | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/media.php b/src/wp-includes/media.php index 0a8621d209815..f79ce679f6770 100644 --- a/src/wp-includes/media.php +++ b/src/wp-includes/media.php @@ -1366,13 +1366,17 @@ function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attac * (which is to say, when they share the domain name of the current request). */ if ( is_ssl() && ! str_starts_with( $image_baseurl, 'https' ) ) { - // Since the `Host:` header might contain a port we should - // compare it against the image URL using the same port. + /* + * Since the `Host:` header might contain a port, it should + * be compared against the image URL using the same port. + */ $parsed = parse_url( $image_baseurl ); - $domain = $parsed['host']; + $domain = isset( $parsed['host'] ) ? $parsed['host'] : ''; + if ( isset( $parsed['port'] ) ) { $domain .= ':' . $parsed['port']; } + if ( $_SERVER['HTTP_HOST'] === $domain ) { $image_baseurl = set_url_scheme( $image_baseurl, 'https' ); } diff --git a/tests/phpunit/tests/media.php b/tests/phpunit/tests/media.php index 22d7d7a441a67..b58fc7353b5fa 100644 --- a/tests/phpunit/tests/media.php +++ b/tests/phpunit/tests/media.php @@ -1833,6 +1833,31 @@ public function test_wp_calculate_image_srcset_with_absolute_path_in_meta() { } } + /** + * @ticket 61690 + * @requires function imagejpeg + */ + public function test_wp_calculate_image_srcset_with_relative_content_url() { + $_SERVER['HTTPS'] = 'on'; + + add_filter( + 'upload_dir', + static function ( $upload_dir ) { + $upload_dir['baseurl'] = '/wp-content/uploads'; + return $upload_dir; + } + ); + + $image_url = wp_get_attachment_image_url( self::$large_id, 'medium' ); + $image_meta = wp_get_attachment_metadata( self::$large_id ); + + $size_array = array( 300, 225 ); + + $srcset = wp_calculate_image_srcset( $size_array, $image_url, $image_meta ); + + $this->assertStringStartsWith( '/wp-content/uploads', $srcset ); + } + /** * @ticket 33641 */ From 308271cd35c3c71548f6bece6746e67fc4aa6d89 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 21 Jul 2024 18:56:45 +0000 Subject: [PATCH 147/422] I18N: Correctly output the `None` translatable strings. Includes updating the context to match the pre-existing block editor translations. Follow-up to [58284]. Props sabernhardt, Marius84. Fixes #61714. git-svn-id: https://develop.svn.wordpress.org/trunk@58774 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/meta-boxes.php | 6 +++--- src/wp-includes/media-template.php | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/wp-admin/includes/meta-boxes.php b/src/wp-admin/includes/meta-boxes.php index dc363716d53cd..f1d6b87a37a55 100644 --- a/src/wp-admin/includes/meta-boxes.php +++ b/src/wp-admin/includes/meta-boxes.php @@ -1354,7 +1354,7 @@ function link_xfn_meta_box( $link ) { />  @@ -1405,7 +1405,7 @@ function link_xfn_meta_box( $link ) { />  @@ -1434,7 +1434,7 @@ function link_xfn_meta_box( $link ) { />  diff --git a/src/wp-includes/media-template.php b/src/wp-includes/media-template.php index e0bd68a8f4653..d0ae16b3fd7b7 100644 --- a/src/wp-includes/media-template.php +++ b/src/wp-includes/media-template.php @@ -840,7 +840,7 @@ function wp_print_media_templates() { @@ -867,7 +867,7 @@ function wp_print_media_templates() { @@ -1096,7 +1096,7 @@ function wp_print_media_templates() { @@ -1113,7 +1113,7 @@ function wp_print_media_templates() { @@ -1160,7 +1160,7 @@ function wp_print_media_templates() { @@ -1236,7 +1236,7 @@ function wp_print_media_templates() { @@ -1356,7 +1356,7 @@ function wp_print_media_templates() { - + @@ -1455,7 +1455,7 @@ function wp_print_media_templates() { - + From f003fd07ba5da8dd0266715d3874250040eab605 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Mon, 22 Jul 2024 10:00:09 +0000 Subject: [PATCH 148/422] Build Tools: Use umd builds provided by React instead of bundling our own builds. We tried moving away from the deprecated React UMD builds previously, the problem we faced is that there's a warning that is triggered on the console because we're not using a separate impact for `createRoot`. This warning has been removed in React 19 along with the removal of the UMD builds, so we should be able to revert this commit when we upgrade to React 19 but for now, we need to restore the usage of the umd builds. Props mamaduka. See #61324. git-svn-id: https://develop.svn.wordpress.org/trunk@58775 602fd350-edb4-49c9-b593-d223f7449a82 --- tools/webpack/packages.js | 4 ++++ tools/webpack/vendors.js | 13 ++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 17913885eb187..de8f9d44ebd76 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -96,6 +96,8 @@ module.exports = function ( 'wp-polyfill-importmap.js': 'es-module-shims/dist/es-module-shims.wasm.js', 'moment.js': 'moment/moment.js', 'regenerator-runtime.js': 'regenerator-runtime/runtime.js', + 'react.js': 'react/umd/react.development.js', + 'react-dom.js': 'react-dom/umd/react-dom.development.js', }; const minifiedVendors = { @@ -109,6 +111,8 @@ module.exports = function ( 'objectFitPolyfill/dist/objectFitPolyfill.min.js', 'wp-polyfill-inert.min.js': 'wicg-inert/dist/inert.min.js', 'moment.min.js': 'moment/min/moment.min.js', + 'react.min.js': 'react/umd/react.production.min.js', + 'react-dom.min.js': 'react-dom/umd/react-dom.production.min.js', }; const minifyVendors = { diff --git a/tools/webpack/vendors.js b/tools/webpack/vendors.js index 4fc5bded7535c..1c1f0a187a176 100644 --- a/tools/webpack/vendors.js +++ b/tools/webpack/vendors.js @@ -4,8 +4,6 @@ const { join } = require( 'path' ); const importedVendors = { - react: { import: 'react', global: 'React' }, - 'react-dom': { import: 'react-dom', global: 'ReactDOM' }, 'react-jsx-runtime': { import: 'react/jsx-runtime', global: 'ReactJSXRuntime', @@ -21,7 +19,7 @@ module.exports = function ( : mode === 'production' ? 'build' : 'src'; - buildTarget = buildTarget + '/wp-includes/js/dist/vendor/'; + buildTarget = buildTarget + '/wp-includes/js/dist/vendor/'; return [ ...Object.entries( importedVendors ).flatMap( ( [ name, config ] ) => { return [ 'production', 'development' ].map( ( currentMode ) => { @@ -45,12 +43,9 @@ module.exports = function ( }, }, - externals: - name === 'react' - ? {} - : { - react: 'React', - }, + externals: { + react: 'React', + }, }; } ); } ), From 9a65808c719609323e2315c9e6f21dc55bc531b6 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 22 Jul 2024 15:34:51 +0000 Subject: [PATCH 149/422] Twenty Twelve: Fixes submenu hiding under slideshow block. Whilst initially this could be thought to be solved in Jetpack due to submenus only having a z-index of 1 a fix is desirable. This brings in the suggested value. Props robertghetau, SergeyBiryukov, sabernhardt, poena, narenin. Fixes #55892. git-svn-id: https://develop.svn.wordpress.org/trunk@58776 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwelve/css/ie.css | 2 +- src/wp-content/themes/twentytwelve/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-content/themes/twentytwelve/css/ie.css b/src/wp-content/themes/twentytwelve/css/ie.css index 706f5103ede61..134647da1287e 100644 --- a/src/wp-content/themes/twentytwelve/css/ie.css +++ b/src/wp-content/themes/twentytwelve/css/ie.css @@ -108,7 +108,7 @@ body.full-width .site-content { padding: 0; position: absolute; top: 100%; - z-index: 1; + z-index: 99999; height: 1px; width: 1px; overflow: hidden; diff --git a/src/wp-content/themes/twentytwelve/style.css b/src/wp-content/themes/twentytwelve/style.css index 1976657a5f978..21b797f2ecf4a 100644 --- a/src/wp-content/themes/twentytwelve/style.css +++ b/src/wp-content/themes/twentytwelve/style.css @@ -1606,7 +1606,7 @@ img#wpstats { padding: 0; position: absolute; top: 100%; - z-index: 1; + z-index: 99999; height: 1px; width: 1px; overflow: hidden; From 011709f47abf364ccd772b74a4aa85003c30f7d1 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 22 Jul 2024 16:28:28 +0000 Subject: [PATCH 150/422] Twenty Sixteen: Fixes Quote block border width changes depending on font size. When the font size is changed the border on the front was changing in width. This fix resolves that to make sure the width does not adjust. Props nidhidhandhukiya, sabernhardt, kamran8176, pitamdey, shailu25. Fixes #60239. git-svn-id: https://develop.svn.wordpress.org/trunk@58777 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentysixteen/css/blocks.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/wp-content/themes/twentysixteen/css/blocks.css b/src/wp-content/themes/twentysixteen/css/blocks.css index f01118d6c087a..c631e9405356b 100644 --- a/src/wp-content/themes/twentysixteen/css/blocks.css +++ b/src/wp-content/themes/twentysixteen/css/blocks.css @@ -74,6 +74,14 @@ p.has-drop-cap:not(:focus)::first-letter { /* Quote */ +.wp-block-quote { + border-width: 0 0 0 4px; +} + +:where(.rtl) .wp-block-quote { + border-width: 0 4px 0 0; +} + .wp-block-quote:not(.is-large):not(.is-style-large).alignleft, .wp-block-quote:not(.is-large):not(.is-style-large).alignright { border-left: none; From 485fdca9589ee816fe3b2df448e204d3f689a30a Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 22 Jul 2024 17:50:53 +0000 Subject: [PATCH 151/422] Twenty Twenty: Fixes Customizer widget edit buttons being obstructed on smaller screens. When the screen is smaller the edit buttons are obscured. This resolves that problem for the smaller screens and only targets the container for footer navigation and widgets. Props sumitsingh, SergeyBiryukov, sabernhardt. Fixes #49008. git-svn-id: https://develop.svn.wordpress.org/trunk@58778 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/style-rtl.css | 9 +++++++++ src/wp-content/themes/twentytwenty/style.css | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index ccaa719a6634e..2b80e059ff490 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -6416,3 +6416,12 @@ a.to-the-top > * { top: 0; } } + +@media ( max-width: 800px ) { + + /* Customizer ---------------------------- */ + + .customize-partial-edit-shortcuts-shown .footer-nav-widgets-wrapper .footer-inner.section-inner { + width: calc(100% - 8rem); + } +} diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index 6bfa93cc35330..75625d39ec729 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -6532,3 +6532,12 @@ a.to-the-top > * { top: 0; } } + +@media ( max-width: 800px ) { + + /* Customizer ---------------------------- */ + + .customize-partial-edit-shortcuts-shown .footer-nav-widgets-wrapper .footer-inner.section-inner { + width: calc(100% - 8rem); + } +} From db30ce9c8c1c6ed0c39a3e16b22a82e7a7307c24 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 22 Jul 2024 22:22:03 +0000 Subject: [PATCH 152/422] HTML API: Add missing tags in IN BODY insertion mode to HTML Processor. As part of work to add more spec support to the HTML API, this patch adds support for the remaining missing tags in the IN BODY insertion mode. Not all of the added tags are supported, because in some cases they reset the insertion mode and are reprocessed where they will be rejected. This patch also improves the support of `get_modifiable_text()`, removing a leading newline inside a LISTING, PRE, or TEXTAREA element. Developed in https://github.com/WordPress/wordpress-develop/pull/6972 Discussed in https://core.trac.wordpress.org/ticket/61576 Props dmsnell, jonsurrell, westonruter. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58779 602fd350-edb4-49c9-b593-d223f7449a82 --- ...ass-wp-html-active-formatting-elements.php | 42 + .../html-api/class-wp-html-open-elements.php | 181 +++- .../class-wp-html-processor-state.php | 67 ++ .../html-api/class-wp-html-processor.php | 776 +++++++++++++----- .../html-api/class-wp-html-tag-processor.php | 129 ++- .../html-api/class-wp-html-token.php | 5 +- .../tests/html-api/wpHtmlProcessor.php | 74 +- .../html-api/wpHtmlProcessorBreadcrumbs.php | 22 +- .../html-api/wpHtmlProcessorHtml5lib.php | 61 +- .../html-api/wpHtmlProcessorSemanticRules.php | 15 +- .../wpHtmlSupportRequiredHtmlProcessor.php | 91 -- .../wpHtmlSupportRequiredOpenElements.php | 93 --- .../wpHtmlTagProcessor-token-scanning.php | 77 ++ .../wpHtmlTagProcessorModifiableText.php | 111 +++ 14 files changed, 1214 insertions(+), 530 deletions(-) create mode 100644 tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php diff --git a/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php b/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php index 69e34dca498c1..2f51482eee052 100644 --- a/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php +++ b/src/wp-includes/html-api/class-wp-html-active-formatting-elements.php @@ -86,6 +86,22 @@ public function current_node() { return $current_node ? $current_node : null; } + /** + * Inserts a "marker" at the end of the list of active formatting elements. + * + * > The markers are inserted when entering applet, object, marquee, + * > template, td, th, and caption elements, and are used to prevent + * > formatting from "leaking" into applet, object, marquee, template, + * > td, th, and caption elements. + * + * @see https://html.spec.whatwg.org/#concept-parser-marker + * + * @since 6.7.0 + */ + public function insert_marker(): void { + $this->push( new WP_HTML_Token( null, 'marker', false ) ); + } + /** * Pushes a node onto the stack of active formatting elements. * @@ -184,4 +200,30 @@ public function walk_up() { yield $this->stack[ $i ]; } } + + /** + * Clears the list of active formatting elements up to the last marker. + * + * > When the steps below require the UA to clear the list of active formatting elements up to + * > the last marker, the UA must perform the following steps: + * > + * > 1. Let entry be the last (most recently added) entry in the list of active + * > formatting elements. + * > 2. Remove entry from the list of active formatting elements. + * > 3. If entry was a marker, then stop the algorithm at this point. + * > The list has been cleared up to the last marker. + * > 4. Go to step 1. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker + * + * @since 6.7.0 + */ + public function clear_up_to_last_marker(): void { + foreach ( $this->walk_up() as $item ) { + array_pop( $this->stack ); + if ( 'marker' === $item->node_name ) { + break; + } + } + } } diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index 065bbd25c9814..d59bd32140582 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -101,6 +101,49 @@ public function set_push_handler( Closure $handler ): void { $this->push_handler = $handler; } + /** + * Returns the name of the node at the nth position on the stack + * of open elements, or `null` if no such position exists. + * + * Note that this uses a 1-based index, which represents the + * "nth item" on the stack, counting from the top, where the + * top-most element is the 1st, the second is the 2nd, etc... + * + * @since 6.7.0 + * + * @param int $nth Retrieve the nth item on the stack, with 1 being + * the top element, 2 being the second, etc... + * @return string|null Name of the node on the stack at the given location, + * or `null` if the location isn't on the stack. + */ + public function at( int $nth ): ?string { + foreach ( $this->walk_down() as $item ) { + if ( 0 === --$nth ) { + return $item->node_name; + } + } + + return null; + } + + /** + * Reports if a node of a given name is in the stack of open elements. + * + * @since 6.7.0 + * + * @param string $node_name Name of node for which to check. + * @return bool Whether a node of the given name is in the stack of open elements. + */ + public function contains( string $node_name ): bool { + foreach ( $this->walk_up() as $item ) { + if ( $node_name === $item->node_name ) { + return true; + } + } + + return false; + } + /** * Reports if a specific node is in the stack of open elements. * @@ -111,7 +154,7 @@ public function set_push_handler( Closure $handler ): void { */ public function contains_node( WP_HTML_Token $token ): bool { foreach ( $this->walk_up() as $item ) { - if ( $token->bookmark_name === $item->bookmark_name ) { + if ( $token === $item ) { return true; } } @@ -210,11 +253,6 @@ public function has_element_in_specific_scope( string $tag_name, $termination_li return true; } - switch ( $node->node_name ) { - case 'HTML': - return false; - } - if ( in_array( $node->node_name, $termination_list, true ) ) { return false; } @@ -226,7 +264,31 @@ public function has_element_in_specific_scope( string $tag_name, $termination_li /** * Returns whether a particular element is in scope. * + * > The stack of open elements is said to have a particular element in + * > scope when it has that element in the specific scope consisting of + * > the following element types: + * > + * > - applet + * > - caption + * > - html + * > - table + * > - td + * > - th + * > - marquee + * > - object + * > - template + * > - MathML mi + * > - MathML mo + * > - MathML mn + * > - MathML ms + * > - MathML mtext + * > - MathML annotation-xml + * > - SVG foreignObject + * > - SVG desc + * > - SVG title + * * @since 6.4.0 + * @since 6.7.0 Supports all required HTML elements. * * @see https://html.spec.whatwg.org/#has-an-element-in-scope * @@ -237,14 +299,16 @@ public function has_element_in_scope( string $tag_name ): bool { return $this->has_element_in_specific_scope( $tag_name, array( - - /* - * Because it's not currently possible to encounter - * one of the termination elements, they don't need - * to be listed here. If they were, they would be - * unreachable and only waste CPU cycles while - * scanning through HTML. - */ + 'APPLET', + 'CAPTION', + 'HTML', + 'TABLE', + 'TD', + 'TH', + 'MARQUEE', + 'OBJECT', + 'TEMPLATE', + // @todo: Support SVG and MathML nodes when support for foreign content is added. ) ); } @@ -252,8 +316,17 @@ public function has_element_in_scope( string $tag_name ): bool { /** * Returns whether a particular element is in list item scope. * + * > The stack of open elements is said to have a particular element + * > in list item scope when it has that element in the specific scope + * > consisting of the following element types: + * > + * > - All the element types listed above for the has an element in scope algorithm. + * > - ol in the HTML namespace + * > - ul in the HTML namespace + * * @since 6.4.0 * @since 6.5.0 Implemented: no longer throws on every invocation. + * @since 6.7.0 Supports all required HTML elements. * * @see https://html.spec.whatwg.org/#has-an-element-in-list-item-scope * @@ -264,9 +337,19 @@ public function has_element_in_list_item_scope( string $tag_name ): bool { return $this->has_element_in_specific_scope( $tag_name, array( - // There are more elements that belong here which aren't currently supported. + 'APPLET', + 'BUTTON', + 'CAPTION', + 'HTML', + 'TABLE', + 'TD', + 'TH', + 'MARQUEE', + 'OBJECT', 'OL', + 'TEMPLATE', 'UL', + // @todo: Support SVG and MathML nodes when support for foreign content is added. ) ); } @@ -274,7 +357,15 @@ public function has_element_in_list_item_scope( string $tag_name ): bool { /** * Returns whether a particular element is in button scope. * + * > The stack of open elements is said to have a particular element + * > in button scope when it has that element in the specific scope + * > consisting of the following element types: + * > + * > - All the element types listed above for the has an element in scope algorithm. + * > - button in the HTML namespace + * * @since 6.4.0 + * @since 6.7.0 Supports all required HTML elements. * * @see https://html.spec.whatwg.org/#has-an-element-in-button-scope * @@ -282,25 +373,52 @@ public function has_element_in_list_item_scope( string $tag_name ): bool { * @return bool Whether given element is in scope. */ public function has_element_in_button_scope( string $tag_name ): bool { - return $this->has_element_in_specific_scope( $tag_name, array( 'BUTTON' ) ); + return $this->has_element_in_specific_scope( + $tag_name, + array( + 'APPLET', + 'BUTTON', + 'CAPTION', + 'HTML', + 'TABLE', + 'TD', + 'TH', + 'MARQUEE', + 'OBJECT', + 'TEMPLATE', + // @todo: Support SVG and MathML nodes when support for foreign content is added. + ) + ); } /** * Returns whether a particular element is in table scope. * + * > The stack of open elements is said to have a particular element + * > in table scope when it has that element in the specific scope + * > consisting of the following element types: + * > + * > - html in the HTML namespace + * > - table in the HTML namespace + * > - template in the HTML namespace + * * @since 6.4.0 + * @since 6.7.0 Full implementation. * * @see https://html.spec.whatwg.org/#has-an-element-in-table-scope * - * @throws WP_HTML_Unsupported_Exception Always until this function is implemented. - * * @param string $tag_name Name of tag to check. * @return bool Whether given element is in scope. */ public function has_element_in_table_scope( string $tag_name ): bool { - throw new WP_HTML_Unsupported_Exception( 'Cannot process elements depending on table scope.' ); - - return false; // The linter requires this unreachable code until the function is implemented and can return. + return $this->has_element_in_specific_scope( + $tag_name, + array( + 'HTML', + 'TABLE', + 'TEMPLATE', + ) + ); } /** @@ -540,7 +658,16 @@ public function after_element_push( WP_HTML_Token $item ): void { * cases where the precalculated value needs to change. */ switch ( $item->node_name ) { + case 'APPLET': case 'BUTTON': + case 'CAPTION': + case 'HTML': + case 'TABLE': + case 'TD': + case 'TH': + case 'MARQUEE': + case 'OBJECT': + case 'TEMPLATE': $this->has_p_in_button_scope = false; break; @@ -573,11 +700,17 @@ public function after_element_pop( WP_HTML_Token $item ): void { * cases where the precalculated value needs to change. */ switch ( $item->node_name ) { + case 'APPLET': case 'BUTTON': - $this->has_p_in_button_scope = $this->has_element_in_button_scope( 'P' ); - break; - + case 'CAPTION': + case 'HTML': case 'P': + case 'TABLE': + case 'TD': + case 'TH': + case 'MARQUEE': + case 'OBJECT': + case 'TEMPLATE': $this->has_p_in_button_scope = $this->has_element_in_button_scope( 'P' ); break; } diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index eadfe30d26cf9..e0469bea020e5 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -311,6 +311,31 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_IN_FOREIGN_CONTENT = 'insertion-mode-in-foreign-content'; + /** + * No-quirks mode document compatability mode. + * + * > In no-quirks mode, the behavior is (hopefully) the desired behavior + * > described by the modern HTML and CSS specifications. + * + * @since 6.7.0 + * + * @var string + */ + const NO_QUIRKS_MODE = 'no-quirks-mode'; + + /** + * Quirks mode document compatability mode. + * + * > In quirks mode, layout emulates behavior in Navigator 4 and Internet + * > Explorer 5. This is essential in order to support websites that were + * > built before the widespread adoption of web standards. + * + * @since 6.7.0 + * + * @var string + */ + const QUIRKS_MODE = 'quirks-mode'; + /** * The stack of template insertion modes. * @@ -368,6 +393,30 @@ class WP_HTML_Processor_State { */ public $insertion_mode = self::INSERTION_MODE_INITIAL; + /** + * Indicates if the document is in quirks mode or no-quirks mode. + * + * Impact on HTML parsing: + * + * - In `NO_QUIRKS_MODE` CSS class and ID selectors match in a byte-for-byte + * manner, otherwise for backwards compatability, class selectors are to + * match in an ASCII case-insensitive manner. + * + * - When not in `QUIRKS_MODE`, a TABLE start tag implicitly closes an open P tag + * if one is in scope and open, otherwise the TABLE becomes a child of the P. + * + * `QUIRKS_MODE` impacts many styling-related aspects of an HTML document, but + * none of the other changes modifies how the HTML is parsed or selected. + * + * @see self::QUIRKS_MODE + * @see self::NO_QUIRKS_MODE + * + * @since 6.7.0 + * + * @var string + */ + public $document_mode = self::NO_QUIRKS_MODE; + /** * Context node initializing fragment parser, if created as a fragment parser. * @@ -390,6 +439,24 @@ class WP_HTML_Processor_State { */ public $head_element = null; + /** + * FORM element pointer. + * + * > points to the last form element that was opened and whose end tag has + * > not yet been seen. It is used to make form controls associate with + * > forms in the face of dramatically bad markup, for historical reasons. + * > It is ignored inside template elements. + * + * @todo This may be invalidated by a seek operation. + * + * @see https://html.spec.whatwg.org/#form-element-pointer + * + * @since 6.7.0 + * + * @var WP_HTML_Token|null + */ + public $form_element = null; + /** * The frameset-ok flag indicates if a `FRAMESET` element is allowed in the current state. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 72f39d3ad7a7a..d614112a767c1 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -97,22 +97,11 @@ * will abort early and stop all processing. This draconian measure ensures * that the HTML Processor won't break any HTML it doesn't fully understand. * - * The following list specifies the HTML tags that _are_ supported: + * The HTML Processor supports all elements other than a specific set: * - * - Containers: ADDRESS, BLOCKQUOTE, DETAILS, DIALOG, DIV, FOOTER, HEADER, MAIN, MENU, SPAN, SUMMARY. - * - Custom elements: All custom elements are supported. :) - * - Form elements: BUTTON, DATALIST, FIELDSET, INPUT, LABEL, LEGEND, METER, OPTGROUP, OPTION, PROGRESS, SEARCH, SELECT. - * - Formatting elements: B, BIG, CODE, EM, FONT, I, PRE, SMALL, STRIKE, STRONG, TT, U, WBR. - * - Heading elements: H1, H2, H3, H4, H5, H6, HGROUP. - * - Links: A. - * - Lists: DD, DL, DT, LI, OL, UL. - * - Media elements: AUDIO, CANVAS, EMBED, FIGCAPTION, FIGURE, IMG, MAP, PICTURE, SOURCE, TRACK, VIDEO. - * - Paragraph: BR, P. - * - Phrasing elements: ABBR, AREA, BDI, BDO, CITE, DATA, DEL, DFN, INS, MARK, OUTPUT, Q, SAMP, SUB, SUP, TIME, VAR. - * - Sectioning elements: ARTICLE, ASIDE, HR, NAV, SECTION. - * - Templating elements: SLOT. - * - Text decoration: RUBY. - * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, KEYGEN, LISTING, MULTICOL, NEXTID, PARAM, SPACER. + * - Any element inside a TABLE. + * - Any element inside foreign content, including SVG and MATH. + * - Any element outside the IN BODY insertion mode, e.g. doctype declarations, meta, links. * * ### Supported markup * @@ -121,15 +110,30 @@ * may in fact belong _before_ the table in the DOM. If the HTML Processor encounters * such a case it will stop processing. * - * The following list specifies HTML markup that _is_ supported: + * The following list illustrates some common examples of unexpected HTML inputs that + * the HTML Processor properly parses and represents: * - * - Markup involving only those tags listed above. - * - Fully-balanced and non-overlapping tags. - * - HTML with unexpected tag closers. - * - Some unbalanced or overlapping tags. - * - P tags after unclosed P tags. - * - BUTTON tags after unclosed BUTTON tags. - * - A tags after unclosed A tags that don't involve any active formatting elements. + * - HTML with optional tags omitted, e.g. `

    one

    two`. + * - HTML with unexpected tag closers, e.g. `

    one more

    `. + * - Non-void tags with self-closing flag, e.g. `
    the DIV is still open.
    `. + * - Heading elements which close open heading elements of another level, e.g. `

    Closed by

    `. + * - Elements containing text that looks like other tags but isn't, e.g. `The <img> is plaintext`. + * - SCRIPT and STYLE tags containing text that looks like HTML but isn't, e.g. ``. + * - SCRIPT content which has been escaped, e.g. ``. + * + * ### Unsupported Features + * + * This parser does not report parse errors. + * + * Normally, when additional HTML or BODY tags are encountered in a document, if there + * are any additional attributes on them that aren't found on the previous elements, + * the existing HTML and BODY elements adopt those missing attribute values. This + * parser does not add those additional attributes. + * + * In certain situations, elements are moved to a different part of the document in + * a process called "adoption" and "fostering." Because the nodes move to a location + * in the document that the parser had already processed, this parser does not support + * these situations and will bail. * * @since 6.4.0 * @@ -1104,15 +1108,7 @@ private function step_in_body(): bool { $op = "{$op_sigil}{$token_name}"; switch ( $op ) { - case '#comment': - case '#funky-comment': - case '#presumptuous-tag': - $this->insert_html_element( $this->state->current_token ); - return true; - case '#text': - $this->reconstruct_active_formatting_elements(); - $current_token = $this->bookmarks[ $this->state->current_token->bookmark_name ]; /* @@ -1133,6 +1129,8 @@ private function step_in_body(): bool { return $this->step(); } + $this->reconstruct_active_formatting_elements(); + /* * Whitespace-only text does not affect the frameset-ok flag. * It is probably inter-element whitespace, but it may also @@ -1146,29 +1144,146 @@ private function step_in_body(): bool { $this->insert_html_element( $this->state->current_token ); return true; + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + * > Parse error. Ignore the token. + */ case 'html': + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + if ( ! $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) ) { + /* + * > Otherwise, for each attribute on the token, check to see if the attribute + * > is already present on the top element of the stack of open elements. If + * > it is not, add the attribute and its corresponding value to that element. + * + * This parser does not currently support this behavior: ignore the token. + */ + } + + // Ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is one of: "base", "basefont", "bgsound", "link", + * > "meta", "noframes", "script", "style", "template", "title" + * > + * > An end tag whose tag name is "template" + */ + case '+BASE': + case '+BASEFONT': + case '+BGSOUND': + case '+LINK': + case '+META': + case '+NOFRAMES': + case '+SCRIPT': + case '+STYLE': + case '+TEMPLATE': + case '+TITLE': + case '-TEMPLATE': + return $this->step_in_head(); + + /* + * > A start tag whose tag name is "body" + * + * This tag in the IN BODY insertion mode is a parse error. + */ + case '+BODY': + if ( + 1 === $this->state->stack_of_open_elements->count() || + 'BODY' !== $this->state->stack_of_open_elements->at( 2 ) || + $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) + ) { + // Ignore the token. + return $this->step(); + } + /* - * > A DOCTYPE token - * > Parse error. Ignore the token. + * > Otherwise, set the frameset-ok flag to "not ok"; then, for each attribute + * > on the token, check to see if the attribute is already present on the body + * > element (the second element) on the stack of open elements, and if it is + * > not, add the attribute and its corresponding value to that element. + * + * This parser does not currently support this behavior: ignore the token. */ + $this->state->frameset_ok = false; return $this->step(); /* - * > A start tag whose tag name is "button" + * > A start tag whose tag name is "frameset" + * + * This tag in the IN BODY insertion mode is a parse error. */ - case '+BUTTON': - if ( $this->state->stack_of_open_elements->has_element_in_scope( 'BUTTON' ) ) { - // @todo Indicate a parse error once it's possible. This error does not impact the logic here. - $this->generate_implied_end_tags(); - $this->state->stack_of_open_elements->pop_until( 'BUTTON' ); + case '+FRAMESET': + if ( + 1 === $this->state->stack_of_open_elements->count() || + 'BODY' !== $this->state->stack_of_open_elements->at( 2 ) || + false === $this->state->frameset_ok + ) { + // Ignore the token. + return $this->step(); } - $this->reconstruct_active_formatting_elements(); - $this->insert_html_element( $this->state->current_token ); - $this->state->frameset_ok = false; + /* + * > Otherwise, run the following steps: + */ + $this->bail( 'Cannot process non-ignored FRAMESET tags.' ); + break; + /* + * > An end tag whose tag name is "body" + */ + case '-BODY': + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( 'BODY' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Otherwise, if there is a node in the stack of open elements that is not either a + * > dd element, a dt element, an li element, an optgroup element, an option element, + * > a p element, an rb element, an rp element, an rt element, an rtc element, a tbody + * > element, a td element, a tfoot element, a th element, a thread element, a tr + * > element, the body element, or the html element, then this is a parse error. + * + * There is nothing to do for this parse error, so don't check for it. + */ + + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_AFTER_BODY; return true; + /* + * > An end tag whose tag name is "html" + */ + case '-HTML': + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( 'BODY' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Otherwise, if there is a node in the stack of open elements that is not either a + * > dd element, a dt element, an li element, an optgroup element, an option element, + * > a p element, an rb element, an rp element, an rt element, an rtc element, a tbody + * > element, a td element, a tfoot element, a th element, a thread element, a tr + * > element, the body element, or the html element, then this is a parse error. + * + * There is nothing to do for this parse error, so don't check for it. + */ + + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_AFTER_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + /* * > A start tag whose tag name is one of: "address", "article", "aside", * > "blockquote", "center", "details", "dialog", "dir", "div", "dl", @@ -1207,52 +1322,6 @@ private function step_in_body(): bool { $this->insert_html_element( $this->state->current_token ); return true; - /* - * > An end tag whose tag name is one of: "address", "article", "aside", "blockquote", - * > "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", - * > "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", - * > "menu", "nav", "ol", "pre", "search", "section", "summary", "ul" - */ - case '-ADDRESS': - case '-ARTICLE': - case '-ASIDE': - case '-BLOCKQUOTE': - case '-BUTTON': - case '-CENTER': - case '-DETAILS': - case '-DIALOG': - case '-DIR': - case '-DIV': - case '-DL': - case '-FIELDSET': - case '-FIGCAPTION': - case '-FIGURE': - case '-FOOTER': - case '-HEADER': - case '-HGROUP': - case '-LISTING': - case '-MAIN': - case '-MENU': - case '-NAV': - case '-OL': - case '-PRE': - case '-SEARCH': - case '-SECTION': - case '-SUMMARY': - case '-UL': - if ( ! $this->state->stack_of_open_elements->has_element_in_scope( $token_name ) ) { - // @todo Report parse error. - // Ignore the token. - return $this->step(); - } - - $this->generate_implied_end_tags(); - if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { - // @todo Record parse error: this error doesn't impact parsing. - } - $this->state->stack_of_open_elements->pop_until( $token_name ); - return true; - /* * > A start tag whose tag name is one of: "h1", "h2", "h3", "h4", "h5", "h6" */ @@ -1288,35 +1357,39 @@ private function step_in_body(): bool { if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { $this->close_a_p_element(); } + + /* + * > If the next token is a U+000A LINE FEED (LF) character token, + * > then ignore that token and move on to the next one. (Newlines + * > at the start of pre blocks are ignored as an authoring convenience.) + * + * This is handled in `get_modifiable_text()`. + */ + $this->insert_html_element( $this->state->current_token ); $this->state->frameset_ok = false; return true; /* - * > An end tag whose tag name is one of: "h1", "h2", "h3", "h4", "h5", "h6" + * > A start tag whose tag name is "form" */ - case '-H1': - case '-H2': - case '-H3': - case '-H4': - case '-H5': - case '-H6': - if ( ! $this->state->stack_of_open_elements->has_element_in_scope( '(internal: H1 through H6 - do not use)' ) ) { - /* - * This is a parse error; ignore the token. - * - * @todo Indicate a parse error once it's possible. - */ + case '+FORM': + $stack_contains_template = $this->state->stack_of_open_elements->contains( 'TEMPLATE' ); + + if ( isset( $this->state->form_element ) && ! $stack_contains_template ) { + // Parse error: ignore the token. return $this->step(); } - $this->generate_implied_end_tags(); + if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->close_a_p_element(); + } - if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { - // @todo Record parse error: this error doesn't impact parsing. + $this->insert_html_element( $this->state->current_token ); + if ( ! $stack_contains_template ) { + $this->state->form_element = $this->state->current_token; } - $this->state->stack_of_open_elements->pop_until( '(internal: H1 through H6 - do not use)' ); return true; /* @@ -1377,6 +1450,150 @@ private function step_in_body(): bool { $this->insert_html_element( $this->state->current_token ); return true; + case '+PLAINTEXT': + if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->close_a_p_element(); + } + + /* + * @todo This may need to be handled in the Tag Processor and turn into + * a single self-contained tag like TEXTAREA, whose modifiable text + * is the rest of the input document as plaintext. + */ + $this->bail( 'Cannot process PLAINTEXT elements.' ); + break; + + /* + * > A start tag whose tag name is "button" + */ + case '+BUTTON': + if ( $this->state->stack_of_open_elements->has_element_in_scope( 'BUTTON' ) ) { + // @todo Indicate a parse error once it's possible. This error does not impact the logic here. + $this->generate_implied_end_tags(); + $this->state->stack_of_open_elements->pop_until( 'BUTTON' ); + } + + $this->reconstruct_active_formatting_elements(); + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + + return true; + + /* + * > An end tag whose tag name is one of: "address", "article", "aside", "blockquote", + * > "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", + * > "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", + * > "menu", "nav", "ol", "pre", "search", "section", "summary", "ul" + * + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + case '-ADDRESS': + case '-ARTICLE': + case '-ASIDE': + case '-BLOCKQUOTE': + case '-BUTTON': + case '-CENTER': + case '-DETAILS': + case '-DIALOG': + case '-DIR': + case '-DIV': + case '-DL': + case '-FIELDSET': + case '-FIGCAPTION': + case '-FIGURE': + case '-FOOTER': + case '-HEADER': + case '-HGROUP': + case '-LISTING': + case '-MAIN': + case '-MENU': + case '-NAV': + case '-OL': + case '-PRE': + case '-SEARCH': + case '-SECTION': + case '-SUMMARY': + case '-UL': + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( $token_name ) ) { + // @todo Report parse error. + // Ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { + // @todo Record parse error: this error doesn't impact parsing. + } + $this->state->stack_of_open_elements->pop_until( $token_name ); + return true; + + /* + * > An end tag whose tag name is "form" + */ + case '-FORM': + if ( ! $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) ) { + $node = $this->state->form_element; + $this->state->form_element = null; + + /* + * > If node is null or if the stack of open elements does not have node + * > in scope, then this is a parse error; return and ignore the token. + * + * @todo It's necessary to check if the form token itself is in scope, not + * simply whether any FORM is in scope. + */ + if ( + null === $node || + ! $this->state->stack_of_open_elements->has_element_in_scope( 'FORM' ) + ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + if ( $node !== $this->state->stack_of_open_elements->current_node() ) { + // @todo Indicate a parse error once it's possible. This error does not impact the logic here. + $this->bail( 'Cannot close a FORM when other elements remain open as this would throw off the breadcrumbs for the following tokens.' ); + } + + $this->state->stack_of_open_elements->remove_node( $node ); + } else { + /* + * > If the stack of open elements does not have a form element in scope, + * > then this is a parse error; return and ignore the token. + * + * Note that unlike in the clause above, this is checking for any FORM in scope. + */ + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( 'FORM' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + + if ( ! $this->state->stack_of_open_elements->current_node_is( 'FORM' ) ) { + // @todo Indicate a parse error once it's possible. This error does not impact the logic here. + } + + $this->state->stack_of_open_elements->pop_until( 'FORM' ); + return true; + } + break; + + /* + * > An end tag whose tag name is "p" + */ + case '-P': + if ( ! $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->insert_html_element( $this->state->current_token ); + } + + $this->close_a_p_element(); + return true; + /* * > An end tag whose tag name is "li" * > An end tag whose tag name is one of: "dd", "dt" @@ -1423,17 +1640,35 @@ private function step_in_body(): bool { return true; /* - * > An end tag whose tag name is "p" + * > An end tag whose tag name is one of: "h1", "h2", "h3", "h4", "h5", "h6" */ - case '-P': - if ( ! $this->state->stack_of_open_elements->has_p_in_button_scope() ) { - $this->insert_html_element( $this->state->current_token ); + case '-H1': + case '-H2': + case '-H3': + case '-H4': + case '-H5': + case '-H6': + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( '(internal: H1 through H6 - do not use)' ) ) { + /* + * This is a parse error; ignore the token. + * + * @todo Indicate a parse error once it's possible. + */ + return $this->step(); } - $this->close_a_p_element(); + $this->generate_implied_end_tags(); + + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { + // @todo Record parse error: this error doesn't impact parsing. + } + + $this->state->stack_of_open_elements->pop_until( '(internal: H1 through H6 - do not use)' ); return true; - // > A start tag whose tag name is "a" + /* + * > A start tag whose tag name is "a" + */ case '+A': foreach ( $this->state->active_formatting_elements->walk_up() as $item ) { switch ( $item->node_name ) { @@ -1474,6 +1709,22 @@ private function step_in_body(): bool { $this->state->active_formatting_elements->push( $this->state->current_token ); return true; + /* + * > A start tag whose tag name is "nobr" + */ + case '+NOBR': + $this->reconstruct_active_formatting_elements(); + + if ( $this->state->stack_of_open_elements->has_element_in_scope( 'NOBR' ) ) { + // Parse error. + $this->run_adoption_agency_algorithm(); + $this->reconstruct_active_formatting_elements(); + } + + $this->insert_html_element( $this->state->current_token ); + $this->state->active_formatting_elements->push( $this->state->current_token ); + return true; + /* * > An end tag whose tag name is one of: "a", "b", "big", "code", "em", "font", "i", * > "nobr", "s", "small", "strike", "strong", "tt", "u" @@ -1494,16 +1745,65 @@ private function step_in_body(): bool { $this->run_adoption_agency_algorithm(); return true; + /* + * > A start tag whose tag name is one of: "applet", "marquee", "object" + */ + case '+APPLET': + case '+MARQUEE': + case '+OBJECT': + $this->reconstruct_active_formatting_elements(); + $this->insert_html_element( $this->state->current_token ); + $this->state->active_formatting_elements->insert_marker(); + $this->state->frameset_ok = false; + return true; + + /* + * > A end tag token whose tag name is one of: "applet", "marquee", "object" + * + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as ``, and a foreign element of + * the same given name. + */ + case '-APPLET': + case '-MARQUEE': + case '-OBJECT': + if ( ! $this->state->stack_of_open_elements->has_element_in_scope( $token_name ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + if ( ! $this->state->stack_of_open_elements->current_node_is( $token_name ) ) { + // This is a parse error. + } + + $this->state->stack_of_open_elements->pop_until( $token_name ); + $this->state->active_formatting_elements->clear_up_to_last_marker(); + return true; + + /* + * > A start tag whose tag name is "table" + */ + case '+TABLE': + if ( + WP_HTML_Processor_State::QUIRKS_MODE !== $this->state->document_mode && + $this->state->stack_of_open_elements->has_p_in_button_scope() + ) { + $this->close_a_p_element(); + } + + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return true; + /* * > An end tag whose tag name is "br" - * > Parse error. Drop the attributes from the token, and act as described in the next - * > entry; i.e. act as if this was a "br" start tag token with no attributes, rather - * > than the end tag token that it actually is. + * + * This is prevented from happening because the Tag Processor + * reports all closing BR tags as if they were opening tags. */ - case '-BR': - $this->bail( 'Closing BR tags require unimplemented special handling.' ); - // This return required because PHPCS can't determine that the call to bail() throws. - return false; /* * > A start tag whose tag name is one of: "area", "br", "embed", "img", "keygen", "wbr" @@ -1525,15 +1825,26 @@ private function step_in_body(): bool { case '+INPUT': $this->reconstruct_active_formatting_elements(); $this->insert_html_element( $this->state->current_token ); - $type_attribute = $this->get_attribute( 'type' ); + /* * > If the token does not have an attribute with the name "type", or if it does, * > but that attribute's value is not an ASCII case-insensitive match for the * > string "hidden", then: set the frameset-ok flag to "not ok". */ + $type_attribute = $this->get_attribute( 'type' ); if ( ! is_string( $type_attribute ) || 'hidden' !== strtolower( $type_attribute ) ) { $this->state->frameset_ok = false; } + + return true; + + /* + * > A start tag whose tag name is one of: "param", "source", "track" + */ + case '+PARAM': + case '+SOURCE': + case '+TRACK': + $this->insert_html_element( $this->state->current_token ); return true; /* @@ -1548,11 +1859,80 @@ private function step_in_body(): bool { return true; /* - * > A start tag whose tag name is one of: "param", "source", "track" + * > A start tag whose tag name is "image" */ - case '+PARAM': - case '+SOURCE': - case '+TRACK': + case '+IMAGE': + /* + * > Parse error. Change the token's tag name to "img" and reprocess it. (Don't ask.) + * + * Note that this is handled elsewhere, so it should not be possible to reach this code. + */ + $this->bail( "Cannot process an IMAGE tag. (Don't ask.)" ); + break; + + /* + * > A start tag whose tag name is "textarea" + */ + case '+TEXTAREA': + $this->insert_html_element( $this->state->current_token ); + + /* + * > If the next token is a U+000A LINE FEED (LF) character token, then ignore + * > that token and move on to the next one. (Newlines at the start of + * > textarea elements are ignored as an authoring convenience.) + * + * This is handled in `get_modifiable_text()`. + */ + + $this->state->frameset_ok = false; + + /* + * > Switch the insertion mode to "text". + * + * As a self-contained node, this behavior is handled in the Tag Processor. + */ + return true; + + /* + * > A start tag whose tag name is "xmp" + */ + case '+XMP': + if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->close_a_p_element(); + } + + $this->reconstruct_active_formatting_elements(); + $this->state->frameset_ok = false; + + /* + * > Follow the generic raw text element parsing algorithm. + * + * As a self-contained node, this behavior is handled in the Tag Processor. + */ + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * A start tag whose tag name is "iframe" + */ + case '+IFRAME': + $this->state->frameset_ok = false; + + /* + * > Follow the generic raw text element parsing algorithm. + * + * As a self-contained node, this behavior is handled in the Tag Processor. + */ + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "noembed" + * > A start tag whose tag name is "noscript", if the scripting flag is enabled + * + * The scripting flag is never enabled in this parser. + */ + case '+NOEMBED': $this->insert_html_element( $this->state->current_token ); return true; @@ -1597,69 +1977,89 @@ private function step_in_body(): bool { $this->reconstruct_active_formatting_elements(); $this->insert_html_element( $this->state->current_token ); return true; - } - /* - * These tags require special handling in the 'in body' insertion mode - * but that handling hasn't yet been implemented. - * - * As the rules for each tag are implemented, the corresponding tag - * name should be removed from this list. An accompanying test should - * help ensure this list is maintained. - * - * @see Tests_HtmlApi_WpHtmlProcessor::test_step_in_body_fails_on_unsupported_tags - * - * Since this switch structure throws a WP_HTML_Unsupported_Exception, it's - * possible to handle "any other start tag" and "any other end tag" below, - * as that guarantees execution doesn't proceed for the unimplemented tags. - * - * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inbody - */ - switch ( $token_name ) { - case 'APPLET': - case 'BASE': - case 'BASEFONT': - case 'BGSOUND': - case 'BODY': - case 'CAPTION': - case 'COL': - case 'COLGROUP': - case 'FORM': - case 'FRAME': - case 'FRAMESET': - case 'HEAD': - case 'HTML': - case 'IFRAME': - case 'LINK': - case 'MARQUEE': - case 'MATH': - case 'META': - case 'NOBR': - case 'NOEMBED': - case 'NOFRAMES': - case 'NOSCRIPT': - case 'OBJECT': - case 'PLAINTEXT': - case 'RB': - case 'RP': - case 'RT': - case 'RTC': - case 'SARCASM': - case 'SCRIPT': - case 'STYLE': - case 'SVG': - case 'TABLE': - case 'TBODY': - case 'TD': - case 'TEMPLATE': - case 'TEXTAREA': - case 'TFOOT': - case 'TH': - case 'THEAD': - case 'TITLE': - case 'TR': - case 'XMP': - $this->bail( "Cannot process {$token_name} element." ); + /* + * > A start tag whose tag name is one of: "rb", "rtc" + */ + case '+RB': + case '+RTC': + if ( $this->state->stack_of_open_elements->has_element_in_scope( 'RUBY' ) ) { + $this->generate_implied_end_tags(); + + if ( $this->state->stack_of_open_elements->current_node_is( 'RUBY' ) ) { + // @todo Indicate a parse error once it's possible. + } + } + + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is one of: "rp", "rt" + */ + case '+RP': + case '+RT': + if ( $this->state->stack_of_open_elements->has_element_in_scope( 'RUBY' ) ) { + $this->generate_implied_end_tags( 'RTC' ); + + $current_node_name = $this->state->stack_of_open_elements->current_node()->node_name; + if ( 'RTC' === $current_node_name || 'RUBY' === $current_node_name ) { + // @todo Indicate a parse error once it's possible. + } + } + + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "math" + */ + case '+MATH': + $this->reconstruct_active_formatting_elements(); + + /* + * @todo Adjust MathML attributes for the token. (This fixes the case of MathML attributes that are not all lowercase.) + * @todo Adjust foreign attributes for the token. (This fixes the use of namespaced attributes, in particular XLink.) + * + * These ought to be handled in the attribute methods. + */ + + $this->bail( 'Cannot process MATH element, opening foreign content.' ); + break; + + /* + * > A start tag whose tag name is "svg" + */ + case '+SVG': + $this->reconstruct_active_formatting_elements(); + + /* + * @todo Adjust SVG attributes for the token. (This fixes the case of SVG attributes that are not all lowercase.) + * @todo Adjust foreign attributes for the token. (This fixes the use of namespaced attributes, in particular XLink in SVG.) + * + * These ought to be handled in the attribute methods. + */ + + $this->bail( 'Cannot process SVG element, opening foreign content.' ); + break; + + /* + * > A start tag whose tag name is one of: "caption", "col", "colgroup", + * > "frame", "head", "tbody", "td", "tfoot", "th", "thead", "tr" + */ + case '+CAPTION': + case '+COL': + case '+COLGROUP': + case '+FRAME': + case '+HEAD': + case '+TBODY': + case '+TD': + case '+TFOOT': + case '+TH': + case '+THEAD': + case '+TR': + // Parse error. Ignore the token. + return $this->step(); } if ( ! parent::is_tag_closer() ) { @@ -1681,6 +2081,12 @@ private function step_in_body(): bool { * close anything beyond its containing `P` or `DIV` element. */ foreach ( $this->state->stack_of_open_elements->walk_up() as $node ) { + /* + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as ``, and a foreign element of + * the same given name. + */ if ( $token_name === $node->node_name ) { break; } diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 77782aa950625..7d04fd31d80d2 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -129,7 +129,7 @@ * $processor = new WP_HTML_Tag_Processor( '
    ' ); * true === $processor->next_tag( 'DIV' ); * - * #### Special elements + * #### Special self-contained elements * * Some HTML elements are handled in a special way; their start and end tags * act like a void tag. These are special because their contents can't contain @@ -755,6 +755,20 @@ class WP_HTML_Tag_Processor { */ protected $seek_count = 0; + /** + * Whether the parser should skip over an immediately-following linefeed + * character, as is the case with LISTING, PRE, and TEXTAREA. + * + * > If the next token is a U+000A LINE FEED (LF) character token, then + * > ignore that token and move on to the next one. (Newlines at the start + * > of [these] elements are ignored as an authoring convenience.) + * + * @since 6.7.0 + * + * @var int|null + */ + private $skip_newline_at = null; + /** * Constructor. * @@ -926,20 +940,23 @@ private function base_class_next_token(): bool { $this->token_length = $this->bytes_already_parsed - $this->token_starts_at; /* - * For non-DATA sections which might contain text that looks like HTML tags but - * isn't, scan with the appropriate alternative mode. Looking at the first letter - * of the tag name as a pre-check avoids a string allocation when it's not needed. + * Certain tags require additional processing. The first-letter pre-check + * avoids unnecessary string allocation when comparing the tag names. + * + * - IFRAME + * - LISTING (deprecated) + * - NOEMBED (deprecated) + * - NOFRAMES (deprecated) + * - PRE + * - SCRIPT + * - STYLE + * - TEXTAREA + * - TITLE + * - XMP (deprecated) */ - $t = $this->html[ $this->tag_name_starts_at ]; if ( $this->is_closing_tag || - ! ( - 'i' === $t || 'I' === $t || - 'n' === $t || 'N' === $t || - 's' === $t || 'S' === $t || - 't' === $t || 'T' === $t || - 'x' === $t || 'X' === $t - ) + 1 !== strspn( $this->html, 'iIlLnNpPsStTxX', $this->tag_name_starts_at, 1 ) ) { return true; } @@ -947,6 +964,26 @@ private function base_class_next_token(): bool { $tag_name = $this->get_tag(); /* + * For LISTING, PRE, and TEXTAREA, the first linefeed of an immediately-following + * text node is ignored as an authoring convenience. + * + * @see static::skip_newline_at + */ + if ( 'LISTING' === $tag_name || 'PRE' === $tag_name ) { + $this->skip_newline_at = $this->bytes_already_parsed; + return true; + } + + /* + * There are certain elements whose children are not DATA but are instead + * RCDATA or RAWTEXT. These cannot contain other elements, and the contents + * are parsed as plaintext, with character references decoded in RCDATA but + * not in RAWTEXT. + * + * These elements are described here as "self-contained" or special atomic + * elements whose end tag is consumed with the opening tag, and they will + * contain modifiable text inside of them. + * * Preserve the opening tag pointers, as these will be overwritten * when finding the closing tag. They will be reset after finding * the closing to tag to point to the opening of the special atomic @@ -2690,13 +2727,23 @@ public function has_self_closing_flag(): bool { * $p->is_tag_closer() === true; * * @since 6.2.0 + * @since 6.7.0 Reports all BR tags as opening tags. * * @return bool Whether the current tag is a tag closer. */ public function is_tag_closer(): bool { return ( self::STATE_MATCHED_TAG === $this->parser_state && - $this->is_closing_tag + $this->is_closing_tag && + + /* + * The BR tag can only exist as an opening tag. If something like `
    ` + * appears then the HTML parser will treat it as an opening tag with no + * attributes. The BR tag is unique in this way. + * + * @see https://html.spec.whatwg.org/#parsing-main-inbody + */ + 'BR' !== $this->get_tag() ); } @@ -2825,17 +2872,38 @@ public function get_comment_type(): ?string { * that a token has modifiable text, and a token with modifiable text may * have an empty string (e.g. a comment with no contents). * + * Limitations: + * + * - This function will not strip the leading newline appropriately + * after seeking into a LISTING or PRE element. To ensure that the + * newline is treated properly, seek to the LISTING or PRE opening + * tag instead of to the first text node inside the element. + * * @since 6.5.0 + * @since 6.7.0 Replaces NULL bytes (U+0000) and newlines appropriately. * * @return string */ public function get_modifiable_text(): string { - if ( null === $this->text_starts_at ) { + if ( null === $this->text_starts_at || 0 === $this->text_length ) { return ''; } $text = substr( $this->html, $this->text_starts_at, $this->text_length ); + /* + * Pre-processing the input stream would normally happen before + * any parsing is done, but deferring it means it's possible to + * skip in most cases. When getting the modifiable text, however + * it's important to apply the pre-processing steps, which is + * normalizing newlines. + * + * @see https://html.spec.whatwg.org/#preprocessing-the-input-stream + * @see https://infra.spec.whatwg.org/#normalize-newlines + */ + $text = str_replace( "\r\n", "\n", $text ); + $text = str_replace( "\r", "\n", $text ); + // Comment data is not decoded. if ( self::STATE_CDATA_NODE === $this->parser_state || @@ -2843,10 +2911,10 @@ public function get_modifiable_text(): string { self::STATE_DOCTYPE === $this->parser_state || self::STATE_FUNKY_COMMENT === $this->parser_state ) { - return $text; + return str_replace( "\x00", "\u{FFFD}", $text ); } - $tag_name = $this->get_tag(); + $tag_name = $this->get_token_name(); if ( // Script data is not decoded. 'SCRIPT' === $tag_name || @@ -2858,29 +2926,34 @@ public function get_modifiable_text(): string { 'STYLE' === $tag_name || 'XMP' === $tag_name ) { - return $text; + return str_replace( "\x00", "\u{FFFD}", $text ); } $decoded = WP_HTML_Decoder::decode_text_node( $text ); /* - * TEXTAREA skips a leading newline, but this newline may appear not only as the - * literal character `\n`, but also as a character reference, such as in the - * following markup: ``. + * Skip the first line feed after LISTING, PRE, and TEXTAREA opening tags. * - * For these cases it's important to first decode the text content before checking - * for a leading newline and removing it. + * Note that this first newline may come in the form of a character + * reference, such as ` `, and so it's important to perform + * this transformation only after decoding the raw text content. */ if ( - self::STATE_MATCHED_TAG === $this->parser_state && - 'TEXTAREA' === $tag_name && - strlen( $decoded ) > 0 && - "\n" === $decoded[0] + ( "\n" === ( $decoded[0] ?? '' ) ) && + ( ( $this->skip_newline_at === $this->token_starts_at && '#text' === $tag_name ) || 'TEXTAREA' === $tag_name ) ) { - return substr( $decoded, 1 ); + $decoded = substr( $decoded, 1 ); } - return $decoded; + /* + * Only in normative text nodes does the NULL byte (U+0000) get removed. + * In all other contexts it's replaced by the replacement character (U+FFFD) + * for security reasons (to avoid joining together strings that were safe + * when separated, but not when joined). + */ + return '#text' === $tag_name + ? str_replace( "\x00", '', $decoded ) + : str_replace( "\x00", "\u{FFFD}", $decoded ); } /** diff --git a/src/wp-includes/html-api/class-wp-html-token.php b/src/wp-includes/html-api/class-wp-html-token.php index fe8636fb5e164..948fe343dfbaa 100644 --- a/src/wp-includes/html-api/class-wp-html-token.php +++ b/src/wp-includes/html-api/class-wp-html-token.php @@ -72,12 +72,13 @@ class WP_HTML_Token { * * @since 6.4.0 * - * @param string $bookmark_name Name of bookmark corresponding to location in HTML where token is found. + * @param string|null $bookmark_name Name of bookmark corresponding to location in HTML where token is found, + * or `null` for markers and nodes without a bookmark. * @param string $node_name Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker". * @param bool $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid. * @param callable|null $on_destroy Optional. Function to call when destroying token, useful for releasing the bookmark. */ - public function __construct( string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) { + public function __construct( ?string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) { $this->bookmark_name = $bookmark_name; $this->node_name = $node_name; $this->has_self_closing_flag = $has_self_closing_flag; diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index b842703a7a135..12f36ca742989 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -134,7 +134,7 @@ public function test_fails_to_reconstruct_formatting_elements() { * @covers WP_HTML_Processor::step_in_body * @covers WP_HTML_Processor::is_void * - * @dataProvider data_void_tags + * @dataProvider data_void_tags_not_ignored_in_body * * @param string $tag_name Name of void tag under test. */ @@ -250,7 +250,7 @@ public static function data_self_contained_node_tokens() { 'Text node' => array( 'Trombone' ), ); - foreach ( self::data_void_tags() as $tag_name => $_name ) { + foreach ( self::data_void_tags_not_ignored_in_body() as $tag_name => $_name ) { $self_contained_nodes[ "Void elements ({$tag_name})" ] = array( "<{$tag_name}>" ); } @@ -284,7 +284,7 @@ public static function data_special_tags() { * * @ticket 60382 * - * @dataProvider data_void_tags + * @dataProvider data_void_tags_not_ignored_in_body * * @param string $tag_name Name of void tag under test. */ @@ -319,17 +319,6 @@ public function test_cannot_nest_void_tags_next_token( $tag_name ) { $processor->get_breadcrumbs(), 'Found incorrect nesting of first element.' ); - - $this->assertTrue( - $processor->next_token(), - 'Should have found the DIV as the second tag.' - ); - - $this->assertSame( - array( 'HTML', 'BODY', 'DIV' ), - $processor->get_breadcrumbs(), - "DIV should have been a sibling of the {$tag_name}." - ); } /** @@ -357,6 +346,18 @@ public static function data_void_tags() { ); } + /** + * Data provider. + * + * @return array[] + */ + public static function data_void_tags_not_ignored_in_body() { + $all_void_tags = self::data_void_tags(); + unset( $all_void_tags['COL'] ); + + return $all_void_tags; + } + /** * Ensures that special handling of unsupported tags is cleaned up * as handling is implemented. Otherwise there's risk of leaving special @@ -383,49 +384,8 @@ public function test_step_in_body_fails_on_unsupported_tags( $tag_name ) { */ public static function data_unsupported_special_in_body_tags() { return array( - 'APPLET' => array( 'APPLET' ), - 'BASE' => array( 'BASE' ), - 'BASEFONT' => array( 'BASEFONT' ), - 'BGSOUND' => array( 'BGSOUND' ), - 'BODY' => array( 'BODY' ), - 'CAPTION' => array( 'CAPTION' ), - 'COL' => array( 'COL' ), - 'COLGROUP' => array( 'COLGROUP' ), - 'FORM' => array( 'FORM' ), - 'FRAME' => array( 'FRAME' ), - 'FRAMESET' => array( 'FRAMESET' ), - 'HEAD' => array( 'HEAD' ), - 'HTML' => array( 'HTML' ), - 'IFRAME' => array( 'IFRAME' ), - 'LINK' => array( 'LINK' ), - 'MARQUEE' => array( 'MARQUEE' ), - 'MATH' => array( 'MATH' ), - 'META' => array( 'META' ), - 'NOBR' => array( 'NOBR' ), - 'NOEMBED' => array( 'NOEMBED' ), - 'NOFRAMES' => array( 'NOFRAMES' ), - 'NOSCRIPT' => array( 'NOSCRIPT' ), - 'OBJECT' => array( 'OBJECT' ), - 'PLAINTEXT' => array( 'PLAINTEXT' ), - 'RB' => array( 'RB' ), - 'RP' => array( 'RP' ), - 'RT' => array( 'RT' ), - 'RTC' => array( 'RTC' ), - 'SARCASM' => array( 'SARCASM' ), - 'SCRIPT' => array( 'SCRIPT' ), - 'STYLE' => array( 'STYLE' ), - 'SVG' => array( 'SVG' ), - 'TABLE' => array( 'TABLE' ), - 'TBODY' => array( 'TBODY' ), - 'TD' => array( 'TD' ), - 'TEMPLATE' => array( 'TEMPLATE' ), - 'TEXTAREA' => array( 'TEXTAREA' ), - 'TFOOT' => array( 'TFOOT' ), - 'TH' => array( 'TH' ), - 'THEAD' => array( 'THEAD' ), - 'TITLE' => array( 'TITLE' ), - 'TR' => array( 'TR' ), - 'XMP' => array( 'XMP' ), + 'MATH' => array( 'MATH' ), + 'SVG' => array( 'SVG' ), ); } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index c3d02ba7db4fd..e9c7362c179a2 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -40,6 +40,7 @@ public static function data_single_tag_of_supported_elements() { 'ABBR', 'ACRONYM', // Neutralized. 'ADDRESS', + 'APPLET', // Deprecated. 'AREA', 'ARTICLE', 'ASIDE', @@ -72,6 +73,7 @@ public static function data_single_tag_of_supported_elements() { 'FIGCAPTION', 'FIGURE', 'FONT', + 'FORM', 'FOOTER', 'H1', 'H2', @@ -95,17 +97,25 @@ public static function data_single_tag_of_supported_elements() { 'MAIN', 'MAP', 'MARK', + 'MARQUEE', // Deprecated. 'MENU', 'METER', 'MULTICOL', // Deprecated. 'NAV', 'NEXTID', // Deprecated. + 'NOBR', // Neutralized. + 'NOSCRIPT', + 'OBJECT', 'OL', 'OUTPUT', 'P', 'PICTURE', 'PROGRESS', 'Q', + 'RB', // Neutralized. + 'RP', + 'RT', + 'RTC', // Neutralized. 'RUBY', 'SAMP', 'SEARCH', @@ -119,6 +129,7 @@ public static function data_single_tag_of_supported_elements() { 'SUB', 'SUMMARY', 'SUP', + 'TABLE', 'TIME', 'TT', 'U', @@ -167,37 +178,26 @@ public function test_fails_when_encountering_unsupported_tag( $html ) { */ public static function data_unsupported_elements() { $unsupported_elements = array( - 'APPLET', // Deprecated. 'BASE', 'BGSOUND', // Deprecated; self-closing if self-closing flag provided, otherwise normal. 'BODY', 'CAPTION', 'COL', 'COLGROUP', - 'FORM', 'FRAME', 'FRAMESET', 'HEAD', 'HTML', 'IFRAME', 'LINK', - 'MARQUEE', // Deprecated. 'MATH', 'META', - 'NOBR', // Neutralized. 'NOEMBED', // Neutralized. 'NOFRAMES', // Neutralized. - 'NOSCRIPT', - 'OBJECT', 'PLAINTEXT', // Neutralized. - 'RB', // Neutralized. - 'RP', - 'RT', - 'RTC', // Neutralized. 'SCRIPT', 'STYLE', 'SVG', - 'TABLE', 'TBODY', 'TD', 'TEMPLATE', diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index f8f1b666c2233..8487df26c99dc 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -31,25 +31,28 @@ class Tests_HtmlApi_Html5lib extends WP_UnitTestCase { * Skip specific tests that may not be supported or have known issues. */ const SKIP_TESTS = array( - 'adoption01/line0046' => 'Unimplemented: Reconstruction of active formatting elements.', - 'adoption01/line0159' => 'Unimplemented: Reconstruction of active formatting elements.', - 'adoption01/line0318' => 'Unimplemented: Reconstruction of active formatting elements.', - 'inbody01/line0001' => 'Bug.', - 'inbody01/line0014' => 'Bug.', - 'inbody01/line0029' => 'Bug.', - 'menuitem-element/line0012' => 'Bug.', - 'tests1/line0342' => "Closing P tag implicitly creates opener, which we don't visit.", - 'tests1/line0720' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests15/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests15/line0022' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests2/line0650' => 'Whitespace only test never enters "in body" parsing mode.', - 'tests20/line0497' => "Closing P tag implicitly creates opener, which we don't visit.", - 'tests23/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests23/line0041' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests23/line0069' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests23/line0101' => 'Unimplemented: Reconstruction of active formatting elements.', - 'tests25/line0169' => 'Bug.', - 'tests26/line0263' => 'Bug: An active formatting element should be created for a trailing text node.', + 'adoption01/line0046' => 'Unimplemented: Reconstruction of active formatting elements.', + 'adoption01/line0159' => 'Unimplemented: Reconstruction of active formatting elements.', + 'adoption01/line0318' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests1/line0720' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests15/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests15/line0022' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests15/line0068' => 'Unimplemented: no support outside of IN BODY yet.', + 'tests2/line0650' => 'Whitespace only test never enters "in body" parsing mode.', + 'tests19/line0965' => 'Unimplemented: no support outside of IN BODY yet.', + 'tests23/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests23/line0041' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests23/line0069' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests23/line0101' => 'Unimplemented: Reconstruction of active formatting elements.', + 'tests26/line0263' => 'Bug: An active formatting element should be created for a trailing text node.', + 'webkit01/line0231' => 'Unimplemented: This parser does not add missing attributes to existing HTML or BODY tags.', + 'webkit02/line0013' => "Asserting behavior with scripting flag enabled, which this parser doesn't support.", + 'webkit01/line0300' => 'Unimplemented: no support outside of IN BODY yet.', + 'webkit01/line0310' => 'Unimplemented: no support outside of IN BODY yet.', + 'webkit01/line0336' => 'Unimplemented: no support outside of IN BODY yet.', + 'webkit01/line0349' => 'Unimplemented: no support outside of IN BODY yet.', + 'webkit01/line0362' => 'Unimplemented: no support outside of IN BODY yet.', + 'webkit01/line0375' => 'Unimplemented: no support outside of IN BODY yet.', ); /** @@ -198,17 +201,16 @@ private static function build_tree_representation( ?string $fragment_context, st } $output .= str_repeat( $indent, $tag_indent + 1 ) . "{$attribute_name}=\"{$val}\"\n"; } + } - // Self-contained tags contain their inner contents as modifiable text. - $modifiable_text = $processor->get_modifiable_text(); - if ( '' !== $modifiable_text ) { - $was_text = true; - if ( '' === $text_node ) { - $text_node = str_repeat( $indent, $indent_level ) . '"'; - } - $text_node .= $modifiable_text; - --$indent_level; - } + // Self-contained tags contain their inner contents as modifiable text. + $modifiable_text = $processor->get_modifiable_text(); + if ( '' !== $modifiable_text ) { + $output .= str_repeat( $indent, $indent_level ) . "\"{$modifiable_text}\"\n"; + } + + if ( ! $processor->is_void( $tag_name ) && ! $processor->expects_closer() ) { + --$indent_level; } break; @@ -225,6 +227,7 @@ private static function build_tree_representation( ?string $fragment_context, st switch ( $processor->get_comment_type() ) { case WP_HTML_Processor::COMMENT_AS_ABRUPTLY_CLOSED_COMMENT: case WP_HTML_Processor::COMMENT_AS_HTML_COMMENT: + case WP_HTML_Processor::COMMENT_AS_INVALID_HTML: $comment_text_content = $processor->get_modifiable_text(); break; diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php index adce614506429..a64872bed2f1d 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php @@ -406,27 +406,22 @@ public function test_in_body_any_other_end_tag_with_unclosed_non_special_element } /** - * Ensures that support isn't accidentally partially added for the closing BR tag `
    `. - * - * This tag closer has special rules and support shouldn't be added without implementing full support. + * Ensures that closing `
    ` tags are appropriately treated as opening tags with no attributes. * * > An end tag whose tag name is "br" * > Parse error. Drop the attributes from the token, and act as described in the next entry; * > i.e. act as if this was a "br" start tag token with no attributes, rather than the end * > tag token that it actually is. * - * When this handling is implemented, this test should be removed. It's not incorporated - * into the existing unsupported tag behavior test because the opening tag is supported; - * only the closing tag isn't. - * * @covers WP_HTML_Processor::step_in_body * * @ticket 60283 */ public function test_br_end_tag_unsupported() { - $processor = WP_HTML_Processor::create_fragment( '
    ' ); + $processor = WP_HTML_Processor::create_fragment( '
    ' ); - $this->assertFalse( $processor->next_tag(), 'Found a BR tag that should not be handled.' ); - $this->assertSame( WP_HTML_Processor::ERROR_UNSUPPORTED, $processor->get_last_error() ); + $this->assertTrue( $processor->next_tag(), 'Failed to find the expected opening BR tag.' ); + $this->assertFalse( $processor->is_tag_closer(), 'Should have treated the tag as an opening tag.' ); + $this->assertNull( $processor->get_attribute_names_with_prefix( '' ), 'Should have ignored any attributes on the tag.' ); } } diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php index 07943cd62a2f4..e69de29bb2d1d 100644 --- a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php @@ -1,91 +0,0 @@ -" ); - - $this->assertFalse( $processor->step(), "Must support terminating elements in specific scope check before adding support for the {$tag_name} element." ); - } - - /** - * Generating implied end tags walks up the stack of open elements - * as long as any of the following missing elements is the current node. - * - * @since 6.4.0 - * - * @ticket 58907 - * - * @covers WP_HTML_Processor::generate_implied_end_tags - */ - public function test_generate_implied_end_tags_needs_support() { - $this->ensure_support_is_added_everywhere( 'RB' ); - $this->ensure_support_is_added_everywhere( 'RP' ); - $this->ensure_support_is_added_everywhere( 'RT' ); - $this->ensure_support_is_added_everywhere( 'RTC' ); - } - - /** - * Generating implied end tags thoroughly walks up the stack of open elements - * as long as any of the following missing elements is the current node. - * - * @since 6.4.0 - * - * @ticket 58907 - * - * @covers WP_HTML_Processor::generate_implied_end_tags_thoroughly - */ - public function test_generate_implied_end_tags_thoroughly_needs_support() { - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'COLGROUP' ); - $this->ensure_support_is_added_everywhere( 'RB' ); - $this->ensure_support_is_added_everywhere( 'RP' ); - $this->ensure_support_is_added_everywhere( 'RT' ); - $this->ensure_support_is_added_everywhere( 'RTC' ); - $this->ensure_support_is_added_everywhere( 'TBODY' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TFOOT' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'HEAD' ); - $this->ensure_support_is_added_everywhere( 'TR' ); - } -} diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php index 48255190ad50c..d2b24cd8bbcbc 100644 --- a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php +++ b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php @@ -61,17 +61,6 @@ private function ensure_support_is_added_everywhere( $tag_name ) { * @ticket 58517 */ public function test_has_element_in_scope_needs_support() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -99,17 +88,6 @@ public function test_has_element_in_scope_needs_support() { * @covers WP_HTML_Open_Elements::has_element_in_list_item_scope */ public function test_has_element_in_list_item_scope_needs_support() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -133,17 +111,6 @@ public function test_has_element_in_list_item_scope_needs_support() { * @covers WP_HTML_Open_Elements::has_element_in_button_scope */ public function test_has_element_in_button_scope_needs_support() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -168,17 +135,6 @@ public function test_has_element_in_button_scope_needs_support() { * @covers WP_HTML_Open_Elements::after_element_pop */ public function test_after_element_pop_must_maintain_p_in_button_scope_flag() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -203,17 +159,6 @@ public function test_after_element_pop_must_maintain_p_in_button_scope_flag() { * @covers WP_HTML_Open_Elements::after_element_push */ public function test_after_element_push_must_maintain_p_in_button_scope_flag() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -237,17 +182,6 @@ public function test_after_element_push_must_maintain_p_in_button_scope_flag() { * @covers WP_HTML_Open_Elements::has_element_in_table_scope */ public function test_has_element_in_table_scope_needs_support() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); @@ -258,22 +192,6 @@ public function test_has_element_in_table_scope_needs_support() { * FOREIGNOBJECT, DESC, TITLE. */ $this->ensure_support_is_added_everywhere( 'SVG' ); - - // These elements are specific to TABLE scope. - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - - // These elements depend on table scope. - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'COL' ); - $this->ensure_support_is_added_everywhere( 'COLGROUP' ); - $this->ensure_support_is_added_everywhere( 'TBODY' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TFOOT' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'THEAD' ); - $this->ensure_support_is_added_everywhere( 'TR' ); } /** @@ -287,17 +205,6 @@ public function test_has_element_in_table_scope_needs_support() { * @covers WP_HTML_Open_Elements::has_element_in_select_scope */ public function test_has_element_in_select_scope_needs_support() { - // These elements impact all scopes. - $this->ensure_support_is_added_everywhere( 'APPLET' ); - $this->ensure_support_is_added_everywhere( 'CAPTION' ); - $this->ensure_support_is_added_everywhere( 'HTML' ); - $this->ensure_support_is_added_everywhere( 'TABLE' ); - $this->ensure_support_is_added_everywhere( 'TD' ); - $this->ensure_support_is_added_everywhere( 'TH' ); - $this->ensure_support_is_added_everywhere( 'MARQUEE' ); - $this->ensure_support_is_added_everywhere( 'OBJECT' ); - $this->ensure_support_is_added_everywhere( 'TEMPLATE' ); - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. $this->ensure_support_is_added_everywhere( 'MATH' ); diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php index ac6e116a4ec0a..fbb2521233679 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php @@ -56,6 +56,83 @@ public function test_basic_assertion_text_node() { ); } + /** + * Ensures that `get_modifiable_text()` properly transforms text content. + * + * The newline and NULL byte (U+0000) behaviors can be complicated since they depend + * on where the bytes were found and whether they were raw bytes in the input stream + * or decoded from character references. + * + * @ticket 61576 + * + * @dataProvider data_modifiable_text_needing_transformation + * + * @param string $html_with_target_node HTML with node containing `target` or `target-next` attribute. + * @param string $expected_modifiable_text Expected modifiable text from target node or following node. + */ + public function test_modifiable_text_proper_transforms( string $html_with_target_node, string $expected_modifiable_text ) { + $processor = new WP_HTML_Tag_Processor( $html_with_target_node ); + + // Find the expected target node. + while ( $processor->next_token() ) { + $target = $processor->get_attribute( 'target' ); + if ( true === $target ) { + break; + } + + if ( is_numeric( $target ) ) { + for ( $i = (int) $target; $i > 0; $i-- ) { + $processor->next_token(); + } + break; + } + } + + $this->assertSame( + $expected_modifiable_text, + $processor->get_modifiable_text(), + "Should have properly decoded and transformed modifiable text, but didn't." + ); + } + + /** + * Data provider. + * + * @return array[]. + */ + public static function data_modifiable_text_needing_transformation() { + return array( + 'Text node + NULL byte' => array( "NULL byte in \x00 text nodes disappears.", 'NULL byte in text nodes disappears.' ), + 'LISTING + newline' => array( "\nNo newline", 'No newline' ), + 'LISTING + CR + LF' => array( "\r\nNo newline", 'No newline' ), + 'LISTING + Encoded LF' => array( 'No newline', 'No newline' ), + 'LISTING + Encoded CR' => array( ' Newline', "\rNewline" ), + 'LISTING + Encoded CR + LF' => array( ' Newline', "\r\nNewline" ), + 'PRE + newline' => array( "
    \nNo newline
    ", 'No newline' ), + 'PRE + CR + LF' => array( "
    \r\nNo newline
    ", 'No newline' ), + 'PRE + Encoded LF' => array( '
    No newline
    ', 'No newline' ), + 'PRE + Encoded CR' => array( '
    
Newline
    ', "\rNewline" ), + 'PRE + Encoded CR + LF' => array( '
    
    Newline
    ', "\r\nNewline" ), + 'TEXTAREA + newline' => array( "", 'No newline' ), + 'TEXTAREA + CR + LF' => array( "", 'No newline' ), + 'TEXTAREA + Encoded LF' => array( '', 'No newline' ), + 'TEXTAREA + Encoded CR' => array( '', "\rNewline" ), + 'TEXTAREA + Encoded CR + LF' => array( '', "\r\nNewline" ), + 'TEXTAREA + Comment-like' => array( "", "\nNo newline" ), + 'PRE + Comment' => array( "
    \nNo newline
    ", "\nNo newline" ), + 'PRE + CDATA-like' => array( "
    \nNo newline
    ", "\nNo newline" ), + 'LISTING + NULL byte' => array( "\x00 is missing", ' is missing' ), + 'PRE + NULL byte' => array( "
    \x00 is missing
    ", ' is missing' ), + 'TEXTAREA + NULL byte' => array( "", "\u{FFFD} is U+FFFD" ), + 'SCRIPT + NULL byte' => array( "", "\u{FFFD} is U+FFFD" ), + 'esc(SCRIPT) + NULL byte' => array( "", " is U+FFFD" ), + 'STYLE + NULL byte' => array( "", "\u{FFFD} is U+FFFD" ), + 'XMP + NULL byte' => array( "\x00 is U+FFFD", "\u{FFFD} is U+FFFD" ), + 'CDATA-like + NULL byte' => array( "", "just a \u{FFFD}comment" ), + 'Funky comment + NULL byte' => array( "", "%just a \u{FFFD}comment" ), + ); + } + /** * Ensures that normative Elements are properly parsed. * diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php new file mode 100644 index 0000000000000..2c8c07e410b74 --- /dev/null +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php @@ -0,0 +1,111 @@ +\nFirst newline ignored." ); + + // Find the text node in the middle. + while ( '#text' !== $processor->get_token_name() && $processor->next_token() ) { + continue; + } + + $this->assertSame( + '#text', + $processor->get_token_name(), + 'Failed to find text node under test: check test setup.' + ); + + // The count of 5 isn't important; but calling this multiple times is. + for ( $i = 0; $i < 5; $i++ ) { + $this->assertSame( + 'First newline ignored.', + $processor->get_modifiable_text(), + 'Should have returned the same modifiable text regardless of how many times it was called.' + ); + } + } + + /** + * Ensures that when ignoring a newline after LISTING and PRE tags, that this + * happens appropriately after seeking. + */ + public function test_get_modifiable_text_ignores_newlines_after_seeking() { + $processor = new WP_HTML_Tag_Processor( + <<\nhere +\ngone +
    reset last known ignore-point
    +
    \nhere
    +HTML + ); + + $processor->next_tag( 'SPAN' ); + $processor->next_token(); + $processor->set_bookmark( 'span' ); + + $this->assertSame( + "\nhere", + $processor->get_modifiable_text(), + 'Should not have removed the leading newline from the first SPAN.' + ); + + $processor->next_tag( 'LISTING' ); + $processor->next_token(); + $processor->set_bookmark( 'listing' ); + + $this->assertSame( + 'gone', + $processor->get_modifiable_text(), + 'Should have stripped the leading newline from the LISTING element on first traversal.' + ); + + $processor->next_tag( 'DIV' ); + $processor->next_token(); + $processor->set_bookmark( 'div' ); + + $this->assertSame( + "\nhere", + $processor->get_modifiable_text(), + 'Should not have removed the leading newline from the last DIV.' + ); + + $processor->seek( 'span' ); + $this->assertSame( + "\nhere", + $processor->get_modifiable_text(), + 'Should not have removed the leading newline from the first SPAN on its second traversal.' + ); + + $processor->seek( 'listing' ); + if ( "\ngone" === $processor->get_modifiable_text() ) { + $this->markTestSkipped( "There's no support currently for handling the leading newline after seeking." ); + } + + $this->assertSame( + 'gone', + $processor->get_modifiable_text(), + 'Should have remembered to remote leading newline from LISTING element after seeking around it.' + ); + + $processor->seek( 'div' ); + $this->assertSame( + "\nhere", + $processor->get_modifiable_text(), + 'Should not have removed the leading newline from the last DIV on its second traversal.' + ); + } +} From 7c6c0d7ee503e78f6a4bdd18988552b06f3cabe8 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 22 Jul 2024 22:49:52 +0000 Subject: [PATCH 153/422] HTML API: Remove empty test file after adding support for missing elements. When support was added for the remaining tags in the IN BODY insertion mode, a test file indicating that support was necessary for certain parts of the parser was removed, but it wasn't removed from SVN when sending over the patch from `git`. This patch removes that empty file so that the WPCS workflows pass. Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58779]. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58780 602fd350-edb4-49c9-b593-d223f7449a82 --- .../phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredHtmlProcessor.php deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 954d561216c2f4f256b35f515d70a16247d1cee7 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 22 Jul 2024 23:19:20 +0000 Subject: [PATCH 154/422] HTML API: Fix unsupported insertion mode messages. Insertion modes in an HTML parser may include instructions like "process the token in the IN HEAD insertion mode." The rules do not change the insertion mode of the parser, but the errors are triggered outside of the rules for the current insertion mode. These will be misleading when bailing on these instructions, because it will point someone to the wrong place in the code to find the source of the error. In this patch all of the bail-points due to lacking insertion mode support are hard-coded to better orient someone to the section of the code lacking support for handling the input HTML. Developed in https://github.com/wordpress/wordpress-develop/pull/7043 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58679]. Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58781 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index d614112a767c1..f9073492d86ac 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -988,7 +988,7 @@ public function get_current_depth(): int { * @return bool Whether an element was found. */ private function step_initial(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_INITIAL . ' state.' ); } /** @@ -1007,7 +1007,7 @@ private function step_initial(): bool { * @return bool Whether an element was found. */ private function step_before_html(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML . ' state.' ); } /** @@ -1026,7 +1026,7 @@ private function step_before_html(): bool { * @return bool Whether an element was found. */ private function step_before_head(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD . ' state.' ); } /** @@ -1045,7 +1045,7 @@ private function step_before_head(): bool { * @return bool Whether an element was found. */ private function step_in_head(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD . ' state.' ); } /** @@ -1064,7 +1064,7 @@ private function step_in_head(): bool { * @return bool Whether an element was found. */ private function step_in_head_noscript(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD_NOSCRIPT . ' state.' ); } /** @@ -1083,7 +1083,7 @@ private function step_in_head_noscript(): bool { * @return bool Whether an element was found. */ private function step_after_head(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD . ' state.' ); } /** @@ -2127,7 +2127,7 @@ private function step_in_body(): bool { * @return bool Whether an element was found. */ private function step_in_table(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE . ' state.' ); } /** @@ -2146,7 +2146,7 @@ private function step_in_table(): bool { * @return bool Whether an element was found. */ private function step_in_table_text(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_TEXT . ' state.' ); } /** @@ -2165,7 +2165,7 @@ private function step_in_table_text(): bool { * @return bool Whether an element was found. */ private function step_in_caption(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION . ' state.' ); } /** @@ -2184,7 +2184,7 @@ private function step_in_caption(): bool { * @return bool Whether an element was found. */ private function step_in_column_group(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP . ' state.' ); } /** @@ -2203,7 +2203,7 @@ private function step_in_column_group(): bool { * @return bool Whether an element was found. */ private function step_in_table_body(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY . ' state.' ); } /** @@ -2222,7 +2222,7 @@ private function step_in_table_body(): bool { * @return bool Whether an element was found. */ private function step_in_row(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_ROW . ' state.' ); } /** @@ -2241,7 +2241,7 @@ private function step_in_row(): bool { * @return bool Whether an element was found. */ private function step_in_cell(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_CELL . ' state.' ); } /** @@ -2441,7 +2441,7 @@ private function step_in_select(): bool { * @return bool Whether an element was found. */ private function step_in_select_in_table(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE . ' state.' ); } /** @@ -2460,7 +2460,7 @@ private function step_in_select_in_table(): bool { * @return bool Whether an element was found. */ private function step_in_template(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE . ' state.' ); } /** @@ -2479,7 +2479,7 @@ private function step_in_template(): bool { * @return bool Whether an element was found. */ private function step_after_body(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_BODY . ' state.' ); } /** @@ -2498,7 +2498,7 @@ private function step_after_body(): bool { * @return bool Whether an element was found. */ private function step_in_frameset(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_FRAMESET . ' state.' ); } /** @@ -2517,7 +2517,7 @@ private function step_in_frameset(): bool { * @return bool Whether an element was found. */ private function step_after_frameset(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_FRAMESET . ' state.' ); } /** @@ -2536,7 +2536,7 @@ private function step_after_frameset(): bool { * @return bool Whether an element was found. */ private function step_after_after_body(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_BODY . ' state.' ); } /** @@ -2555,7 +2555,7 @@ private function step_after_after_body(): bool { * @return bool Whether an element was found. */ private function step_after_after_frameset(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_FRAMESET . ' state.' ); } /** @@ -2574,7 +2574,7 @@ private function step_after_after_frameset(): bool { * @return bool Whether an element was found. */ private function step_in_foreign_content(): bool { - $this->bail( "No support for parsing in the '{$this->state->insertion_mode}' state." ); + $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_FOREIGN_CONTENT . ' state.' ); } /* From fc33ab699972a6ff1893707f852abd4e15f4dc65 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Tue, 23 Jul 2024 00:25:19 +0000 Subject: [PATCH 155/422] Options, Meta APIs: Prime `notoptions` cache when deleting options. Prime the `notoptions` cache within `delete_option` and `delete_network_option` to avoid the need for a database query if `get_option` or `get_network_option` is subsequently called. Adds some associated tests to ensure that an option is cleared from the notoptions cache when an option is added either via `add_option`, `update_option` or their network option equivalent. Props pbearne, mukesh27. Fixes #61484. git-svn-id: https://develop.svn.wordpress.org/trunk@58782 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/option.php | 18 +++++ tests/phpunit/tests/option/networkOption.php | 74 ++++++++++++++++++++ tests/phpunit/tests/option/option.php | 68 ++++++++++++++++++ 3 files changed, 160 insertions(+) diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php index 4dee6ce1188e9..125f25d40d157 100644 --- a/src/wp-includes/option.php +++ b/src/wp-includes/option.php @@ -1217,6 +1217,15 @@ function delete_option( $option ) { } else { wp_cache_delete( $option, 'options' ); } + + $notoptions = wp_cache_get( 'notoptions', 'options' ); + + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option ] = true; + + wp_cache_set( 'notoptions', $notoptions, 'options' ); } if ( $result ) { @@ -2284,6 +2293,15 @@ function delete_network_option( $network_id, $option ) { */ do_action( 'delete_site_option', $option, $network_id ); + $notoptions_key = "$network_id:notoptions"; + $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); + + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option ] = true; + wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); + return true; } diff --git a/tests/phpunit/tests/option/networkOption.php b/tests/phpunit/tests/option/networkOption.php index bfce484a8d38a..3c89d5d0b408a 100644 --- a/tests/phpunit/tests/option/networkOption.php +++ b/tests/phpunit/tests/option/networkOption.php @@ -56,6 +56,30 @@ public function test_delete_network_option_on_only_one_network() { $this->assertSame( $value, get_network_option( $id, $option, false ) ); } + /** + * Tests that calling delete_network_option() updates nooptions when option deleted. + * + * @ticket 61484 + * + * @covers ::delete_network_option + */ + public function test_check_delete_network_option_updates_notoptions() { + add_network_option( 1, 'foo', 'value1' ); + + delete_network_option( 1, 'foo' ); + $cache_key = is_multisite() ? '1:notoptions' : 'notoptions'; + $cache_group = is_multisite() ? 'site-options' : 'options'; + $notoptions = wp_cache_get( $cache_key, $cache_group ); + $this->assertIsArray( $notoptions, 'The notoptions cache is expected to be an array.' ); + $this->assertTrue( $notoptions['foo'], 'The deleted options is expected to be in notoptions.' ); + + $before = get_num_queries(); + get_network_option( 1, 'foo' ); + $queries = get_num_queries() - $before; + + $this->assertSame( 0, $queries, 'get_network_option should not make any database queries.' ); + } + /** * @ticket 22846 * @group ms-excluded @@ -228,4 +252,54 @@ public function test_update_network_option_array_with_object() { // Check that no new database queries were performed. $this->assertSame( $num_queries_pre_update, get_num_queries() ); } + + /** + * Tests that calling update_network_option() clears the notoptions cache. + * + * @ticket 61484 + * + * @covers ::update_network_option + */ + public function test_update_network_option_clears_the_notoptions_cache() { + $option_name = 'ticket_61484_option_to_be_created'; + $cache_key = is_multisite() ? '1:notoptions' : 'notoptions'; + $cache_group = is_multisite() ? 'site-options' : 'options'; + $notoptions = wp_cache_get( $cache_key, $cache_group ); + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option_name ] = true; + wp_cache_set( $cache_key, $notoptions, $cache_group ); + $this->assertArrayHasKey( $option_name, wp_cache_get( $cache_key, $cache_group ), 'The "foobar" option should be in the notoptions cache.' ); + + update_network_option( 1, $option_name, 'baz' ); + + $updated_notoptions = wp_cache_get( $cache_key, $cache_group ); + $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after updating it.' ); + } + + /** + * Tests that calling add_network_option() clears the notoptions cache. + * + * @ticket 61484 + * + * @covers ::add_network_option + */ + public function test_add_network_option_clears_the_notoptions_cache() { + $option_name = 'ticket_61484_option_to_be_created'; + $cache_key = is_multisite() ? '1:notoptions' : 'notoptions'; + $cache_group = is_multisite() ? 'site-options' : 'options'; + $notoptions = wp_cache_get( $cache_key, $cache_group ); + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option_name ] = true; + wp_cache_set( $cache_key, $notoptions, $cache_group ); + $this->assertArrayHasKey( $option_name, wp_cache_get( $cache_key, $cache_group ), 'The "foobar" option should be in the notoptions cache.' ); + + add_network_option( 1, $option_name, 'baz' ); + + $updated_notoptions = wp_cache_get( $cache_key, $cache_group ); + $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after updating it.' ); + } } diff --git a/tests/phpunit/tests/option/option.php b/tests/phpunit/tests/option/option.php index db9f35dd69d38..a9db23df19bf2 100644 --- a/tests/phpunit/tests/option/option.php +++ b/tests/phpunit/tests/option/option.php @@ -478,4 +478,72 @@ public function test_update_option_with_autoload_change_yes_to_no() { delete_option( 'foo' ); $this->assertFalse( get_option( 'foo' ) ); } + + /** + * Tests that calling delete_option() updates notoptions when option deleted. + * + * @ticket 61484 + * + * @covers ::delete_option + */ + public function test_check_delete_option_updates_notoptions() { + add_option( 'foo', 'value1' ); + + delete_option( 'foo' ); + $notoptions = wp_cache_get( 'notoptions', 'options' ); + $this->assertIsArray( $notoptions, 'The notoptions cache is expected to be an array.' ); + $this->assertTrue( $notoptions['foo'], 'The deleted options is expected to be in notoptions.' ); + + $before = get_num_queries(); + get_option( 'foo' ); + $queries = get_num_queries() - $before; + + $this->assertSame( 0, $queries, 'get_option should not make any database queries.' ); + } + + /** + * Tests that calling update_option() clears the notoptions cache. + * + * @ticket 61484 + * + * @covers ::update_option + */ + public function test_update_option_clears_the_notoptions_cache() { + $option_name = 'ticket_61484_option_to_be_created'; + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option_name ] = true; + wp_cache_set( 'notoptions', $notoptions, 'options' ); + $this->assertArrayHasKey( $option_name, wp_cache_get( 'notoptions', 'options' ), 'The "foobar" option should be in the notoptions cache.' ); + + update_option( $option_name, 'baz' ); + + $updated_notoptions = wp_cache_get( 'notoptions', 'options' ); + $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after updating it.' ); + } + + /** + * Tests that calling add_option() clears the notoptions cache. + * + * @ticket 61484 + * + * @covers ::add_option + */ + public function test_add_option_clears_the_notoptions_cache() { + $option_name = 'ticket_61484_option_to_be_created'; + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option_name ] = true; + wp_cache_set( 'notoptions', $notoptions, 'options' ); + $this->assertArrayHasKey( $option_name, wp_cache_get( 'notoptions', 'options' ), 'The "foobar" option should be in the notoptions cache.' ); + + add_option( $option_name, 'baz' ); + + $updated_notoptions = wp_cache_get( 'notoptions', 'options' ); + $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after adding it.' ); + } } From edfc2b0d89eeff4c5ffdea2fea0946cd00b66bac Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 23 Jul 2024 07:49:54 +0000 Subject: [PATCH 156/422] REST API: Remove post status prefix from REST API responses. When using the /posts or /pages endpoints, for private posts or pages, you get the following title property: { raw: "Some title", rendered: "Private: Some title" } this commit removes the prefix from rendered private posts titles (just like what we do for protected posts) Props youknowriad, swissspidy, timothyblynjacobs, sergeybiryukov, ramonopoly. Fixes #61639. git-svn-id: https://develop.svn.wordpress.org/trunk@58783 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-global-styles-controller.php | 2 ++ .../class-wp-rest-menu-items-controller.php | 2 ++ .../endpoints/class-wp-rest-posts-controller.php | 12 +++++++----- .../search/class-wp-rest-post-search-handler.php | 12 +++++++----- .../includes/testcase-rest-post-type-controller.php | 2 ++ .../tests/rest-api/wpRestMenuItemsController.php | 2 ++ 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php index 0cb54c91ed3de..e3057e75d86b8 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php @@ -327,10 +327,12 @@ public function prepare_item_for_response( $post, $request ) { } if ( rest_is_field_included( 'title.rendered', $fields ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); $data['title']['rendered'] = get_the_title( $post->ID ); remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); } if ( rest_is_field_included( 'settings', $fields ) ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php index 4119b6530e91e..9fbaa95371b54 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php @@ -510,6 +510,7 @@ public function prepare_item_for_response( $item, $request ) { if ( rest_is_field_included( 'title.rendered', $fields ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); /** This filter is documented in wp-includes/post-template.php */ $title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID ); @@ -517,6 +518,7 @@ public function prepare_item_for_response( $item, $request ) { $data['title']['rendered'] = $title; remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); } if ( rest_is_field_included( 'status', $fields ) ) { diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index e5420c74fb3ea..d6afdef470af2 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -1844,10 +1844,12 @@ public function prepare_item_for_response( $item, $request ) { } if ( rest_is_field_included( 'title.rendered', $fields ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); $data['title']['rendered'] = get_the_title( $post->ID ); remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); } $has_password_filter = false; @@ -2047,15 +2049,15 @@ public function prepare_item_for_response( $item, $request ) { } /** - * Overwrites the default protected title format. + * Overwrites the default protected and private title format. * - * By default, WordPress will show password protected posts with a title of - * "Protected: %s", as the REST API communicates the protected status of a post - * in a machine-readable format, we remove the "Protected: " prefix. + * By default, WordPress will show password protected or private posts with a title of + * "Protected: %s" or "Private: %s", as the REST API communicates the status of a post + * in a machine-readable format, we remove the prefix. * * @since 4.7.0 * - * @return string Protected title format. + * @return string Title format. */ public function protected_title_format() { return '%s'; diff --git a/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php index 58b36506e7d9f..fff921f749e07 100644 --- a/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php +++ b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php @@ -132,8 +132,10 @@ public function prepare_item( $id, array $fields ) { if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) { if ( post_type_supports( $post->post_type, 'title' ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); $data[ WP_REST_Search_Controller::PROP_TITLE ] = get_the_title( $post->ID ); remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); } else { $data[ WP_REST_Search_Controller::PROP_TITLE ] = ''; } @@ -183,15 +185,15 @@ public function prepare_item_links( $id ) { } /** - * Overwrites the default protected title format. + * Overwrites the default protected and private title format. * - * By default, WordPress will show password protected posts with a title of - * "Protected: %s". As the REST API communicates the protected status of a post - * in a machine-readable format, we remove the "Protected: " prefix. + * By default, WordPress will show password protected or private posts with a title of + * "Protected: %s" or "Private: %s", as the REST API communicates the status of a post + * in a machine-readable format, we remove the prefix. * * @since 5.0.0 * - * @return string Protected title format. + * @return string Title format. */ public function protected_title_format() { return '%s'; diff --git a/tests/phpunit/includes/testcase-rest-post-type-controller.php b/tests/phpunit/includes/testcase-rest-post-type-controller.php index 9b1d366315bc4..75326284e6e5d 100644 --- a/tests/phpunit/includes/testcase-rest-post-type-controller.php +++ b/tests/phpunit/includes/testcase-rest-post-type-controller.php @@ -107,8 +107,10 @@ protected function check_post_data( $post, $data, $context, $links ) { // Check filtered values. if ( post_type_supports( $post->post_type, 'title' ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); $this->assertSame( get_the_title( $post->ID ), $data['title']['rendered'] ); remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); if ( 'edit' === $context ) { $this->assertSame( $post->post_title, $data['title']['raw'] ); } else { diff --git a/tests/phpunit/tests/rest-api/wpRestMenuItemsController.php b/tests/phpunit/tests/rest-api/wpRestMenuItemsController.php index 53d52350b6b1c..5508123deac19 100644 --- a/tests/phpunit/tests/rest-api/wpRestMenuItemsController.php +++ b/tests/phpunit/tests/rest-api/wpRestMenuItemsController.php @@ -862,8 +862,10 @@ protected function check_menu_item_data( $post, $data, $context, $links ) { // Check filtered values. if ( post_type_supports( self::POST_TYPE, 'title' ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + add_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); $this->assertSame( $post->title, $data['title']['rendered'] ); remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) ); if ( 'edit' === $context ) { $this->assertSame( $post->title, $data['title']['raw'] ); } else { From d6d1437f1ccb6f3cf225e712e3c18703e584cfbc Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Tue, 23 Jul 2024 09:57:09 +0000 Subject: [PATCH 157/422] Twenty Twenty: Fixes incorrect colour in editor for seperator block. This resolves the seperator block color settings ordering. They were displaying incorrectly due to ruleset problems. This edits the order for the front end also. Props bhaveshdesai13, aniketpatel, miguelaxcar, nidhidhandhukiya, poena, pavanpatil1, sabernhardr. Fixes #57544. git-svn-id: https://develop.svn.wordpress.org/trunk@58784 602fd350-edb4-49c9-b593-d223f7449a82 --- .../assets/css/editor-style-block-rtl.css | 40 +++++++++---------- .../assets/css/editor-style-block.css | 40 +++++++++---------- .../themes/twentytwenty/style-rtl.css | 40 +++++++++---------- src/wp-content/themes/twentytwenty/style.css | 40 +++++++++---------- 4 files changed, 80 insertions(+), 80 deletions(-) diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css index c9bffdafd00f9..f228e5d0ccf25 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css @@ -140,51 +140,51 @@ /* CUSTOM COLORS */ -:root .has-accent-color { - color: #cd2653; -} - :root .has-accent-background-color { background-color: #cd2653; color: #fff; } -:root .has-primary-color { - color: #000; -} - :root .has-primary-background-color { background-color: #000; color: #f5efe0; } -:root .has-secondary-color { - color: #6d6d6d; -} - :root .has-secondary-background-color { background-color: #6d6d6d; color: #fff; } -:root .has-subtle-background-color { - color: #dcd7ca; -} - :root .has-subtle-background-background-color { background-color: #dcd7ca; color: #000; } -:root .has-background-color { - color: #f5efe0; -} - :root .has-background-background-color { background-color: #f5efe0; color: #000; } +:root .has-accent-color { + color: #cd2653; +} + +:root .has-primary-color { + color: #000; +} + +:root .has-secondary-color { + color: #6d6d6d; +} + +:root .has-subtle-background-color { + color: #dcd7ca; +} + +:root .has-background-color { + color: #f5efe0; +} + /* GENERAL COLORS */ .has-black-background-color { diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css index 37782c7a8bfee..5287a99d11794 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css @@ -140,51 +140,51 @@ /* CUSTOM COLORS */ -:root .has-accent-color { - color: #cd2653; -} - :root .has-accent-background-color { background-color: #cd2653; color: #fff; } -:root .has-primary-color { - color: #000; -} - :root .has-primary-background-color { background-color: #000; color: #f5efe0; } -:root .has-secondary-color { - color: #6d6d6d; -} - :root .has-secondary-background-color { background-color: #6d6d6d; color: #fff; } -:root .has-subtle-background-color { - color: #dcd7ca; -} - :root .has-subtle-background-background-color { background-color: #dcd7ca; color: #000; } -:root .has-background-color { - color: #f5efe0; -} - :root .has-background-background-color { background-color: #f5efe0; color: #000; } +:root .has-accent-color { + color: #cd2653; +} + +:root .has-primary-color { + color: #000; +} + +:root .has-secondary-color { + color: #6d6d6d; +} + +:root .has-subtle-background-color { + color: #dcd7ca; +} + +:root .has-background-color { + color: #f5efe0; +} + /* GENERAL COLORS */ .has-black-background-color { diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index 2b80e059ff490..4f4c86e76d0db 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -2734,51 +2734,51 @@ h2.entry-title { /* CUSTOM COLORS */ -:root .has-accent-color { - color: #cd2653; -} - :root .has-accent-background-color { background-color: #cd2653; color: #fff; } -:root .has-primary-color { - color: #000; -} - :root .has-primary-background-color { background-color: #000; color: #f5efe0; } -:root .has-secondary-color { - color: #6d6d6d; -} - :root .has-secondary-background-color { background-color: #6d6d6d; color: #fff; } -:root .has-subtle-background-color { - color: #dcd7ca; -} - :root .has-subtle-background-background-color { background-color: #dcd7ca; color: #000; } -:root .has-background-color { - color: #f5efe0; -} - :root .has-background-background-color { background-color: #f5efe0; color: #000; } +:root .has-accent-color { + color: #cd2653; +} + +:root .has-primary-color { + color: #000; +} + +:root .has-secondary-color { + color: #6d6d6d; +} + +:root .has-subtle-background-color { + color: #dcd7ca; +} + +:root .has-background-color { + color: #f5efe0; +} + /* Block Typography Classes ------------------ */ diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index 75625d39ec729..babe5a090ac7c 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -2750,51 +2750,51 @@ h2.entry-title { /* CUSTOM COLORS */ -:root .has-accent-color { - color: #cd2653; -} - :root .has-accent-background-color { background-color: #cd2653; color: #fff; } -:root .has-primary-color { - color: #000; -} - :root .has-primary-background-color { background-color: #000; color: #f5efe0; } -:root .has-secondary-color { - color: #6d6d6d; -} - :root .has-secondary-background-color { background-color: #6d6d6d; color: #fff; } -:root .has-subtle-background-color { - color: #dcd7ca; -} - :root .has-subtle-background-background-color { background-color: #dcd7ca; color: #000; } -:root .has-background-color { - color: #f5efe0; -} - :root .has-background-background-color { background-color: #f5efe0; color: #000; } +:root .has-accent-color { + color: #cd2653; +} + +:root .has-primary-color { + color: #000; +} + +:root .has-secondary-color { + color: #6d6d6d; +} + +:root .has-subtle-background-color { + color: #dcd7ca; +} + +:root .has-background-color { + color: #f5efe0; +} + /* Block Typography Classes ------------------ */ From ddd78e3851ebcac3bfdbeac0fbf22b051403e610 Mon Sep 17 00:00:00 2001 From: bernhard-reiter Date: Tue, 23 Jul 2024 13:41:15 +0000 Subject: [PATCH 158/422] Block Hooks: Don't erase post content if it isn't changed by client. The `inject_ignored_hooked_blocks_metadata_attributes` filter that is attached to both the `rest_pre_insert_wp_template` and `rest_pre_insert_wp_template_part` hooks receives a `stdClass` object from the Templates REST API controller that contains all fields that the client would like to modify when making a `POST` request (plus the `id` to identify the relevant template or template part, respectively). There are cases when the `post_content` field is not set, e.g. when the client would like to rename an existing template (in which case it would only set the `title` field). Prior to this changeset, the filter would erroneously apply the Block Hooks algorithm to the non-existent `post_content` field regardless, which would result in it being set to the empty string `''`. As a consequence, renaming a template would have the unwanted side effect of wiping its contents. This changeset fixes the issue by returning early from the filter if the `post_content` field is not set. Props alshakero, bernhard-reiter. Fixes #61550. git-svn-id: https://develop.svn.wordpress.org/trunk@58785 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-template-utils.php | 4 ++ ...tIgnoredHookedBlocksMetadataAttributes.php | 55 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/wp-includes/block-template-utils.php b/src/wp-includes/block-template-utils.php index fe43d89564cc8..3c6850bd3292a 100644 --- a/src/wp-includes/block-template-utils.php +++ b/src/wp-includes/block-template-utils.php @@ -1602,6 +1602,10 @@ function inject_ignored_hooked_blocks_metadata_attributes( $changes, $deprecated _deprecated_argument( __FUNCTION__, '6.5.3' ); } + if ( ! isset( $changes->post_content ) ) { + return $changes; + } + $hooked_blocks = get_hooked_blocks(); if ( empty( $hooked_blocks ) && ! has_filter( 'hooked_block_types' ) ) { return $changes; diff --git a/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php b/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php index 1f8a66ee8546f..e9c03e00d9daf 100644 --- a/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php +++ b/tests/phpunit/tests/block-templates/injectIgnoredHookedBlocksMetadataAttributes.php @@ -621,4 +621,59 @@ public function test_inject_ignored_hooked_blocks_metadata_attributes_into_templ 'The template part\'s post content was modified.' ); } + + /** + * @ticket 61550 + */ + public function test_inject_ignored_hooked_blocks_metadata_attributes_into_template_with_no_changes_to_post_content() { + register_block_type( + 'tests/hooked-block', + array( + 'block_hooks' => array( + 'core/heading' => 'after', + ), + ) + ); + + $id = self::TEST_THEME . '//' . 'my_template'; + $template = get_block_template( $id, 'wp_template' ); + + $changes = new stdClass(); + $changes->ID = $template->wp_id; + + // Note that we're not setting `$changes->post_content`! + + $post = inject_ignored_hooked_blocks_metadata_attributes( $changes ); + $this->assertFalse( + isset( $post->post_content ), + "post_content shouldn't have been set." + ); + } + + /** + * @ticket 61550 + */ + public function test_inject_ignored_hooked_blocks_metadata_attributes_into_template_part_with_no_changes_to_post_content() { + register_block_type( + 'tests/hooked-block', + array( + 'block_hooks' => array( + 'core/heading' => 'after', + ), + ) + ); + + $id = self::TEST_THEME . '//' . 'my_template_part'; + $template = get_block_template( $id, 'wp_template_part' ); + + $changes = new stdClass(); + $changes->ID = $template->wp_id; + // Note that we're not setting `$changes->post_content`! + + $post = inject_ignored_hooked_blocks_metadata_attributes( $changes ); + $this->assertFalse( + isset( $post->post_content ), + "post_content shouldn't have been set." + ); + } } From d713251cf3b2f4d5314366f92dd9ce3919a8ecfa Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Tue, 23 Jul 2024 18:37:03 +0000 Subject: [PATCH 159/422] Build/Test Tools: Update third-party GitHub Actions. The following third-party actions have been updated to their latest versions. - `shivammathur/setup-php` from `2.30.0` to `2.31.1`. - `actions/setup-node` from `4.0.2` to `4.0.3`. - `actions/cache` from `4.0.1` to `4.0.2`. - `actions/upload-artifact` from `4.3.1` to `4.3.4`. - `slackapi/slack-github-action` from `1.25.0` to `1.26.0`. - `codecov/codecov-action` from `4.1.0` to `4.5.0`. See #61564. git-svn-id: https://develop.svn.wordpress.org/trunk@58789 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/install-testing.yml | 2 +- .../reusable-coding-standards-javascript.yml | 2 +- .github/workflows/reusable-coding-standards-php.yml | 4 ++-- .github/workflows/reusable-end-to-end-tests.yml | 4 ++-- .github/workflows/reusable-javascript-tests.yml | 2 +- .github/workflows/reusable-performance.yml | 4 ++-- .github/workflows/reusable-php-compatibility.yml | 4 ++-- .github/workflows/reusable-phpunit-tests-v1.yml | 2 +- .github/workflows/reusable-phpunit-tests-v2.yml | 2 +- .github/workflows/reusable-phpunit-tests-v3.yml | 4 ++-- .../workflows/reusable-test-core-build-process.yml | 6 +++--- .../reusable-test-gutenberg-build-process.yml | 2 +- .github/workflows/reusable-upgrade-testing.yml | 2 +- .github/workflows/slack-notifications.yml | 8 ++++---- .github/workflows/test-and-zip-default-themes.yml | 4 ++-- .github/workflows/test-coverage.yml | 12 ++++++------ 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index f820c214df16d..d35b25c08bd8b 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -141,7 +141,7 @@ jobs: steps: - name: Set up PHP ${{ matrix.php }} - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: '${{ matrix.php }}' coverage: none diff --git a/.github/workflows/reusable-coding-standards-javascript.yml b/.github/workflows/reusable-coding-standards-javascript.yml index a424f80630887..e36e2f592081c 100644 --- a/.github/workflows/reusable-coding-standards-javascript.yml +++ b/.github/workflows/reusable-coding-standards-javascript.yml @@ -35,7 +35,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-coding-standards-php.yml b/.github/workflows/reusable-coding-standards-php.yml index 296b61bcbd499..5aea737c5eb83 100644 --- a/.github/workflows/reusable-coding-standards-php.yml +++ b/.github/workflows/reusable-coding-standards-php.yml @@ -47,7 +47,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up PHP - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: ${{ inputs.php-version }} coverage: none @@ -60,7 +60,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT - name: Cache PHPCS scan cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: | .cache/phpcs-src.json diff --git a/.github/workflows/reusable-end-to-end-tests.yml b/.github/workflows/reusable-end-to-end-tests.yml index 768f31ef97d00..1d980551b48c6 100644 --- a/.github/workflows/reusable-end-to-end-tests.yml +++ b/.github/workflows/reusable-end-to-end-tests.yml @@ -68,7 +68,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -125,7 +125,7 @@ jobs: run: npm run test:e2e - name: Archive debug artifacts (screenshots, HTML snapshots) - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 if: always() with: name: failures-artifacts${{ inputs.LOCAL_SCRIPT_DEBUG && '-SCRIPT_DEBUG' || '' }}-${{ github.run_id }} diff --git a/.github/workflows/reusable-javascript-tests.yml b/.github/workflows/reusable-javascript-tests.yml index 0d7b674fb932a..7adee1161c840 100644 --- a/.github/workflows/reusable-javascript-tests.yml +++ b/.github/workflows/reusable-javascript-tests.yml @@ -30,7 +30,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index a97aceb7e72a9..bf6b31fc17a90 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -118,7 +118,7 @@ jobs: run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> $GITHUB_ENV - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -281,7 +281,7 @@ jobs: run: npm run test:performance - name: Archive artifacts - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 if: always() with: name: performance-artifacts${{ inputs.memcached && '-memcached' || '' }}-${{ github.run_id }} diff --git a/.github/workflows/reusable-php-compatibility.yml b/.github/workflows/reusable-php-compatibility.yml index 1a6a6b128747b..6171c3467e8e4 100644 --- a/.github/workflows/reusable-php-compatibility.yml +++ b/.github/workflows/reusable-php-compatibility.yml @@ -41,7 +41,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up PHP - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: ${{ inputs.php-version }} coverage: none @@ -58,7 +58,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT - name: Cache PHP compatibility scan cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: .cache/phpcompat.json key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-php-${{ inputs.php-version }}-phpcompat-cache-${{ hashFiles('**/composer.json', 'phpcompat.xml.dist') }} diff --git a/.github/workflows/reusable-phpunit-tests-v1.yml b/.github/workflows/reusable-phpunit-tests-v1.yml index 8331d863f8258..621e9eb045b74 100644 --- a/.github/workflows/reusable-phpunit-tests-v1.yml +++ b/.github/workflows/reusable-phpunit-tests-v1.yml @@ -95,7 +95,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-phpunit-tests-v2.yml b/.github/workflows/reusable-phpunit-tests-v2.yml index e9539d377ea03..a9cb221664c14 100644 --- a/.github/workflows/reusable-phpunit-tests-v2.yml +++ b/.github/workflows/reusable-phpunit-tests-v2.yml @@ -98,7 +98,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Install Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index ed0e8f7b13cba..c9387d06a8451 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -103,7 +103,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -116,7 +116,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: '${{ inputs.php }}' coverage: none diff --git a/.github/workflows/reusable-test-core-build-process.yml b/.github/workflows/reusable-test-core-build-process.yml index 0df177b7d786f..6d1c39ce37584 100644 --- a/.github/workflows/reusable-test-core-build-process.yml +++ b/.github/workflows/reusable-test-core-build-process.yml @@ -63,7 +63,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -101,7 +101,7 @@ jobs: run: git diff --exit-code - name: Upload ZIP as a GitHub Actions artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 if: ${{ inputs.save-build || inputs.prepare-playground }} with: name: wordpress-build-${{ github.event_name == 'pull_request' && github.event.number || github.sha }} @@ -117,7 +117,7 @@ jobs: # Uploads the PR number as an artifact for the Pull Request Commenting workflow to download and then # leave a comment detailing how to test the PR within WordPress Playground. - name: Upload PR number as artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 if: ${{ inputs.prepare-playground && github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request' }} with: name: pr-number diff --git a/.github/workflows/reusable-test-gutenberg-build-process.yml b/.github/workflows/reusable-test-gutenberg-build-process.yml index a72e616bc9446..7765453f6157e 100644 --- a/.github/workflows/reusable-test-gutenberg-build-process.yml +++ b/.github/workflows/reusable-test-gutenberg-build-process.yml @@ -55,7 +55,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-upgrade-testing.yml b/.github/workflows/reusable-upgrade-testing.yml index 8e467c20ccbc9..6b285d190c6a3 100644 --- a/.github/workflows/reusable-upgrade-testing.yml +++ b/.github/workflows/reusable-upgrade-testing.yml @@ -62,7 +62,7 @@ jobs: steps: - name: Set up PHP ${{ inputs.php }} - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: '${{ inputs.php }}' coverage: none diff --git a/.github/workflows/slack-notifications.yml b/.github/workflows/slack-notifications.yml index aab3a85147bc0..4ae4e52df569d 100644 --- a/.github/workflows/slack-notifications.yml +++ b/.github/workflows/slack-notifications.yml @@ -167,7 +167,7 @@ jobs: steps: - name: Post failure notifications to Slack - uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 + uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 with: payload: ${{ needs.prepare.outputs.payload }} env: @@ -183,7 +183,7 @@ jobs: steps: - name: Post failure notifications to Slack - uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 + uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 with: payload: ${{ needs.prepare.outputs.payload }} env: @@ -199,7 +199,7 @@ jobs: steps: - name: Post success notifications to Slack - uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 + uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 with: payload: ${{ needs.prepare.outputs.payload }} env: @@ -215,7 +215,7 @@ jobs: steps: - name: Post cancelled notifications to Slack - uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 + uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 with: payload: ${{ needs.prepare.outputs.payload }} env: diff --git a/.github/workflows/test-and-zip-default-themes.yml b/.github/workflows/test-and-zip-default-themes.yml index 31e4800cfa44d..74800a4ace8bf 100644 --- a/.github/workflows/test-and-zip-default-themes.yml +++ b/.github/workflows/test-and-zip-default-themes.yml @@ -131,7 +131,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -187,7 +187,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Upload theme ZIP as an artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: if-no-files-found: error name: ${{ matrix.theme }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 042ab8d6065df..8c8655b9a9fc1 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -81,7 +81,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version-file: '.nvmrc' cache: npm @@ -94,7 +94,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2.30.0 + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 with: php-version: '7.4' coverage: none @@ -151,7 +151,7 @@ jobs: - name: Upload single site report to Codecov if: ${{ ! matrix.multisite && matrix.format == 'clover' && github.event_name != 'pull_request' }} - uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0 + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 with: token: ${{ secrets.CODECOV_TOKEN }} file: wp-code-coverage-single-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} @@ -160,7 +160,7 @@ jobs: - name: Upload single site HTML report as artifact if: ${{ ! matrix.multisite && matrix.format == 'html' }} - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: wp-code-coverage-single-${{ github.sha }} path: wp-code-coverage-single-${{ github.sha }} @@ -175,7 +175,7 @@ jobs: - name: Upload multisite report to Codecov if: ${{ matrix.multisite && matrix.format == 'clover' && github.event_name != 'pull_request' }} - uses: codecov/codecov-action@54bcd8715eee62d40e33596ef5e8f0f48dbbccab # v4.1.0 + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0 with: token: ${{ secrets.CODECOV_TOKEN }} file: wp-code-coverage-multisite-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} @@ -184,7 +184,7 @@ jobs: - name: Upload multisite HTML report as artifact if: ${{ matrix.multisite && matrix.format == 'html' }} - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 with: name: wp-code-coverage-multisite-${{ github.sha }} path: wp-code-coverage-multisite-${{ github.sha }} From 15c34f5490f0bad3ca7e1469e7520a6120be3492 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Tue, 23 Jul 2024 21:50:23 +0000 Subject: [PATCH 160/422] Twenty Twenty: Fixes Quote block border not reflecting alignment. This resolves the border not also aligning with the quote block. When this theme was built the editor used style attributes for text alignment. This patch updates existing rules for center and right aligned quote blocks. Props viralsampat, poena, sabernhardt. Fixes #61132. git-svn-id: https://develop.svn.wordpress.org/trunk@58796 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/style-rtl.css | 2 ++ src/wp-content/themes/twentytwenty/style.css | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index 4f4c86e76d0db..2fc1a9bfbc7e2 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -3393,11 +3393,13 @@ figure.wp-block-table.is-style-stripes { color: inherit; } +.wp-block-quote.has-text-align-center, .wp-block-quote[style="text-align:center"] { border-width: 0; padding: 0; } +.wp-block-quote.has-text-align-right, .wp-block-quote[style="text-align:right"] { border-width: 0 0.2rem 0 0; padding: 0 2rem 0 0; diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index babe5a090ac7c..1a802509a4785 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -3413,11 +3413,13 @@ figure.wp-block-table.is-style-stripes { color: inherit; } +.wp-block-quote.has-text-align-center, .wp-block-quote[style="text-align:center"] { border-width: 0; padding: 0; } +.wp-block-quote.has-text-align-right, .wp-block-quote[style="text-align:right"] { /*rtl:begin:ignore*/ From a8915f8893e4a945355491fd68273d88dbaa76fd Mon Sep 17 00:00:00 2001 From: Robert Anderson Date: Wed, 24 Jul 2024 00:24:31 +0000 Subject: [PATCH 161/422] Block themes: Enable block-level background image styles Allows defining background images for blocks in theme.json. Syncs PHP changes from https://github.com/WordPress/gutenberg/pull/60100. Props ramonopoly, aaronrobertshaw. Fixes #61588. git-svn-id: https://develop.svn.wordpress.org/trunk@58797 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/background.php | 11 ++-- .../class-wp-theme-json-resolver.php | 35 +++++++++-- src/wp-includes/class-wp-theme-json.php | 8 +-- .../global-styles-and-settings.php | 2 + tests/phpunit/tests/theme/wpThemeJson.php | 61 +++++++++++++++++- .../tests/theme/wpThemeJsonResolver.php | 62 +++++++++++++++++++ 6 files changed, 164 insertions(+), 15 deletions(-) diff --git a/src/wp-includes/block-supports/background.php b/src/wp-includes/block-supports/background.php index ff50be3206837..b7b501a44aca1 100644 --- a/src/wp-includes/block-supports/background.php +++ b/src/wp-includes/block-supports/background.php @@ -62,13 +62,14 @@ function wp_render_background_support( $block_content, $block ) { return $block_content; } - $background_styles = array(); - $background_styles['backgroundImage'] = isset( $block_attributes['style']['background']['backgroundImage'] ) ? $block_attributes['style']['background']['backgroundImage'] : array(); + $background_styles = array(); + $background_styles['backgroundImage'] = $block_attributes['style']['background']['backgroundImage'] ?? null; + $background_styles['backgroundSize'] = $block_attributes['style']['background']['backgroundSize'] ?? null; + $background_styles['backgroundPosition'] = $block_attributes['style']['background']['backgroundPosition'] ?? null; + $background_styles['backgroundRepeat'] = $block_attributes['style']['background']['backgroundRepeat'] ?? null; if ( ! empty( $background_styles['backgroundImage'] ) ) { - $background_styles['backgroundSize'] = isset( $block_attributes['style']['background']['backgroundSize'] ) ? $block_attributes['style']['background']['backgroundSize'] : 'cover'; - $background_styles['backgroundPosition'] = isset( $block_attributes['style']['background']['backgroundPosition'] ) ? $block_attributes['style']['background']['backgroundPosition'] : null; - $background_styles['backgroundRepeat'] = isset( $block_attributes['style']['background']['backgroundRepeat'] ) ? $block_attributes['style']['background']['backgroundRepeat'] : null; + $background_styles['backgroundSize'] = $background_styles['backgroundSize'] ?? 'cover'; // If the background size is set to `contain` and no position is set, set the position to `center`. if ( 'contain' === $background_styles['backgroundSize'] && ! $background_styles['backgroundPosition'] ) { diff --git a/src/wp-includes/class-wp-theme-json-resolver.php b/src/wp-includes/class-wp-theme-json-resolver.php index 5caaf0bb7e1c4..d63a84353cd46 100644 --- a/src/wp-includes/class-wp-theme-json-resolver.php +++ b/src/wp-includes/class-wp-theme-json-resolver.php @@ -848,6 +848,7 @@ public static function get_style_variations( $scope = 'theme' ) { * as the value of `_link` object in REST API responses. * * @since 6.6.0 + * @since 6.7.0 Resolve relative paths in block styles. * * @param WP_Theme_JSON $theme_json A theme json instance. * @return array An array of resolved paths. @@ -860,15 +861,14 @@ public static function get_resolved_theme_uris( $theme_json ) { } $theme_json_data = $theme_json->get_raw_data(); - - // Top level styles. - $background_image_url = isset( $theme_json_data['styles']['background']['backgroundImage']['url'] ) ? $theme_json_data['styles']['background']['backgroundImage']['url'] : null; - /* * The same file convention when registering web fonts. * See: WP_Font_Face_Resolver::to_theme_file_uri. */ $placeholder = 'file:./'; + + // Top level styles. + $background_image_url = $theme_json_data['styles']['background']['backgroundImage']['url'] ?? null; if ( isset( $background_image_url ) && is_string( $background_image_url ) && @@ -888,6 +888,33 @@ public static function get_resolved_theme_uris( $theme_json ) { $resolved_theme_uris[] = $resolved_theme_uri; } + // Block styles. + if ( ! empty( $theme_json_data['styles']['blocks'] ) ) { + foreach ( $theme_json_data['styles']['blocks'] as $block_name => $block_styles ) { + if ( ! isset( $block_styles['background']['backgroundImage']['url'] ) ) { + continue; + } + $background_image_url = $block_styles['background']['backgroundImage']['url']; + if ( + is_string( $background_image_url ) && + // Skip if the src doesn't start with the placeholder, as there's nothing to replace. + str_starts_with( $background_image_url, $placeholder ) + ) { + $file_type = wp_check_filetype( $background_image_url ); + $src_url = str_replace( $placeholder, '', $background_image_url ); + $resolved_theme_uri = array( + 'name' => $background_image_url, + 'href' => sanitize_url( get_theme_file_uri( $src_url ) ), + 'target' => "styles.blocks.{$block_name}.background.backgroundImage.url", + ); + if ( isset( $file_type['type'] ) ) { + $resolved_theme_uri['type'] = $file_type['type']; + } + $resolved_theme_uris[] = $resolved_theme_uri; + } + } + } + return $resolved_theme_uris; } diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 512df0fbf8c0f..631dd1f703e67 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -520,10 +520,10 @@ class WP_Theme_JSON { */ const VALID_STYLES = array( 'background' => array( - 'backgroundImage' => 'top', - 'backgroundPosition' => 'top', - 'backgroundRepeat' => 'top', - 'backgroundSize' => 'top', + 'backgroundImage' => null, + 'backgroundPosition' => null, + 'backgroundRepeat' => null, + 'backgroundSize' => null, ), 'border' => array( 'color' => null, diff --git a/src/wp-includes/global-styles-and-settings.php b/src/wp-includes/global-styles-and-settings.php index b79eac58450e2..f40d4a5e9863e 100644 --- a/src/wp-includes/global-styles-and-settings.php +++ b/src/wp-includes/global-styles-and-settings.php @@ -247,6 +247,7 @@ function wp_get_global_stylesheet( $types = array() ) { * Adds global style rules to the inline style for each block. * * @since 6.1.0 + * @since 6.7.0 Resolve relative paths in block styles. * * @global WP_Styles $wp_styles */ @@ -254,6 +255,7 @@ function wp_add_global_styles_for_blocks() { global $wp_styles; $tree = WP_Theme_JSON_Resolver::get_merged_data(); + $tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( $tree ); $block_nodes = $tree->get_styles_block_nodes(); foreach ( $block_nodes as $metadata ) { $block_css = $tree->get_styles_for_block( $metadata ); diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 68b5cd9aaf7d9..bc8ef8121ddd0 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -5021,7 +5021,7 @@ public function test_get_top_level_background_image_styles() { ); $expected_styles = "html{min-height: calc(100% - var(--wp-admin--admin-bar--height, 0px));}:root :where(body){background-image: url('http://example.org/image.png');background-position: center center;background-repeat: no-repeat;background-size: contain;}"; - $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background styles type does not match expectations' ); + $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background styles type do not match expectations' ); $theme_json = new WP_Theme_JSON( array( @@ -5038,7 +5038,64 @@ public function test_get_top_level_background_image_styles() { ); $expected_styles = "html{min-height: calc(100% - var(--wp-admin--admin-bar--height, 0px));}:root :where(body){background-image: url('http://example.org/image.png');background-position: center center;background-repeat: no-repeat;background-size: contain;}"; - $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background image as string type does not match expectations' ); + $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background image as string type do not match expectations' ); + } + + /** + * @ticket 61588 + */ + public function test_get_block_background_image_styles() { + $theme_json = new WP_Theme_JSON( + array( + 'version' => WP_Theme_JSON::LATEST_SCHEMA, + 'styles' => array( + 'blocks' => array( + 'core/group' => array( + 'background' => array( + 'backgroundImage' => "url('http://example.org/group.png')", + 'backgroundSize' => 'cover', + 'backgroundRepeat' => 'no-repeat', + 'backgroundPosition' => 'center center', + ), + ), + 'core/quote' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'http://example.org/quote.png', + ), + 'backgroundSize' => 'cover', + 'backgroundRepeat' => 'no-repeat', + 'backgroundPosition' => 'center center', + ), + ), + ), + ), + ) + ); + + $quote_node = array( + 'name' => 'core/quote', + 'path' => array( 'styles', 'blocks', 'core/quote' ), + 'selector' => '.wp-block-quote', + 'selectors' => array( + 'root' => '.wp-block-quote', + ), + ); + + $quote_styles = ":root :where(.wp-block-quote){background-image: url('http://example.org/quote.png');background-position: center center;background-repeat: no-repeat;background-size: cover;}"; + $this->assertSame( $quote_styles, $theme_json->get_styles_for_block( $quote_node ), 'Styles returned from "::get_styles_for_block()" with block-level background styles do not match expectations' ); + + $group_node = array( + 'name' => 'core/group', + 'path' => array( 'styles', 'blocks', 'core/group' ), + 'selector' => '.wp-block-group', + 'selectors' => array( + 'root' => '.wp-block-group', + ), + ); + + $group_styles = ":root :where(.wp-block-group){background-image: url('http://example.org/group.png');background-position: center center;background-repeat: no-repeat;background-size: cover;}"; + $this->assertSame( $group_styles, $theme_json->get_styles_for_block( $group_node ), 'Styles returned from "::get_styles_for_block()" with block-level background styles as string type do not match expectations' ); } /** diff --git a/tests/phpunit/tests/theme/wpThemeJsonResolver.php b/tests/phpunit/tests/theme/wpThemeJsonResolver.php index 5ad65e8862218..4fb3784f1a41b 100644 --- a/tests/phpunit/tests/theme/wpThemeJsonResolver.php +++ b/tests/phpunit/tests/theme/wpThemeJsonResolver.php @@ -1257,6 +1257,7 @@ public function test_shadow_default_presets_value_for_block_and_classic_themes() * * @covers WP_Theme_JSON_Resolver::resolve_theme_file_uris * @ticket 61273 + * @ticket 61588 */ public function test_resolve_theme_file_uris() { $theme_json = new WP_Theme_JSON( @@ -1268,6 +1269,22 @@ public function test_resolve_theme_file_uris() { 'url' => 'file:./assets/image.png', ), ), + 'blocks' => array( + 'core/quote' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'file:./assets/quote.png', + ), + ), + ), + 'core/verse' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'file:./assets/verse.png', + ), + ), + ), + ), ), ) ); @@ -1280,6 +1297,22 @@ public function test_resolve_theme_file_uris() { 'url' => 'https://example.org/wp-content/themes/example-theme/assets/image.png', ), ), + 'blocks' => array( + 'core/quote' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'https://example.org/wp-content/themes/example-theme/assets/quote.png', + ), + ), + ), + 'core/verse' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'https://example.org/wp-content/themes/example-theme/assets/verse.png', + ), + ), + ), + ), ), ); @@ -1293,6 +1326,7 @@ public function test_resolve_theme_file_uris() { * * @covers WP_Theme_JSON_Resolver::get_resolved_theme_uris * @ticket 61273 + * @ticket 61588 */ public function test_get_resolved_theme_uris() { $theme_json = new WP_Theme_JSON( @@ -1304,6 +1338,22 @@ public function test_get_resolved_theme_uris() { 'url' => 'file:./assets/image.png', ), ), + 'blocks' => array( + 'core/quote' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'file:./assets/quote.jpg', + ), + ), + ), + 'core/verse' => array( + 'background' => array( + 'backgroundImage' => array( + 'url' => 'file:./assets/verse.gif', + ), + ), + ), + ), ), ) ); @@ -1315,6 +1365,18 @@ public function test_get_resolved_theme_uris() { 'target' => 'styles.background.backgroundImage.url', 'type' => 'image/png', ), + array( + 'name' => 'file:./assets/quote.jpg', + 'href' => 'https://example.org/wp-content/themes/example-theme/assets/quote.jpg', + 'target' => 'styles.blocks.core/quote.background.backgroundImage.url', + 'type' => 'image/jpeg', + ), + array( + 'name' => 'file:./assets/verse.gif', + 'href' => 'https://example.org/wp-content/themes/example-theme/assets/verse.gif', + 'target' => 'styles.blocks.core/verse.background.backgroundImage.url', + 'type' => 'image/gif', + ), ); $actual = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $theme_json ); From e0ed30f1c802cda3c709b621746b420e300ecede Mon Sep 17 00:00:00 2001 From: Carlos Bravo Date: Wed, 24 Jul 2024 10:57:27 +0000 Subject: [PATCH 162/422] Block Bindings: Adds sources in the editor settings to consume them in the client Adds a new property `blockBindingsSources` to the editor settings to expose the block bindings sources registered in the server. Props santosguillamot, cbravobernal, gziolo, artemiosans. Fixes #61641. git-svn-id: https://develop.svn.wordpress.org/trunk@58798 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-editor.php | 17 ++++++++++ .../wpBlockBindingsRegistry.php | 5 +++ tests/phpunit/tests/blocks/editor.php | 34 +++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/wp-includes/block-editor.php b/src/wp-includes/block-editor.php index 00633d4d7edd9..e8900d1ccdc1a 100644 --- a/src/wp-includes/block-editor.php +++ b/src/wp-includes/block-editor.php @@ -648,6 +648,23 @@ function get_block_editor_settings( array $custom_settings, $block_editor_contex $editor_settings['postContentAttributes'] = $post_content_block_attributes; } + // Expose block bindings sources in the editor settings. + $registered_block_bindings_sources = get_all_registered_block_bindings_sources(); + if ( ! empty( $registered_block_bindings_sources ) ) { + // Initialize array. + $editor_settings['blockBindingsSources'] = array(); + foreach ( $registered_block_bindings_sources as $source_name => $source_properties ) { + // Add source with the label to editor settings. + $editor_settings['blockBindingsSources'][ $source_name ] = array( + 'label' => $source_properties->label, + ); + // Add `usesContext` property if exists. + if ( ! empty( $source_properties->uses_context ) ) { + $editor_settings['blockBindingsSources'][ $source_name ]['usesContext'] = $source_properties->uses_context; + } + } + } + /** * Filters the settings to pass to the block editor for all editor type. * diff --git a/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php b/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php index fc5b91a9d702a..1d5c4b1947467 100644 --- a/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php +++ b/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php @@ -311,6 +311,9 @@ public function test_get_registered() { $expected = new WP_Block_Bindings_Source( $source_two_name, $source_two_properties ); $result = $this->registry->get_registered( 'test/source-two' ); + $this->registry->unregister( 'test/source-one' ); + $this->registry->unregister( 'test/source-two' ); + $this->registry->unregister( 'test/source-three' ); $this->assertEquals( $expected, @@ -380,6 +383,8 @@ public function test_merging_uses_context_from_multiple_sources() { ); $new_uses_context = $block_registry->get_registered( 'core/paragraph' )->uses_context; + unregister_block_bindings_source( 'test/source-one' ); + unregister_block_bindings_source( 'test/source-two' ); // Checks that the resulting `uses_context` contains the values from both sources. $this->assertContains( 'commonContext', $new_uses_context ); $this->assertContains( 'sourceOneContext', $new_uses_context ); diff --git a/tests/phpunit/tests/blocks/editor.php b/tests/phpunit/tests/blocks/editor.php index 0682839605da9..b10dbb93dae01 100644 --- a/tests/phpunit/tests/blocks/editor.php +++ b/tests/phpunit/tests/blocks/editor.php @@ -720,4 +720,38 @@ public function data_block_editor_rest_api_preload_adds_missing_leading_slash() ), ); } + + /** + * @ticket 61641 + */ + public function test_get_block_editor_settings_block_bindings_sources() { + $block_editor_context = new WP_Block_Editor_Context(); + register_block_bindings_source( + 'test/source-one', + array( + 'label' => 'Source One', + 'get_value_callback' => function () {}, + 'uses_context' => array( 'postId' ), + ) + ); + register_block_bindings_source( + 'test/source-two', + array( + 'label' => 'Source Two', + 'get_value_callback' => function () {}, + ) + ); + $settings = get_block_editor_settings( array(), $block_editor_context ); + $exposed_sources = $settings['blockBindingsSources']; + unregister_block_bindings_source( 'test/source-one' ); + unregister_block_bindings_source( 'test/source-two' ); + // It is expected to have 4 sources: the 2 registered sources in the test, and the 2 core sources. + $this->assertCount( 4, $exposed_sources ); + $source_one = $exposed_sources['test/source-one']; + $this->assertSame( 'Source One', $source_one['label'] ); + $this->assertSameSets( array( 'postId' ), $source_one['usesContext'] ); + $source_two = $exposed_sources['test/source-two']; + $this->assertSame( 'Source Two', $source_two['label'] ); + $this->assertArrayNotHasKey( 'usesContext', $source_two ); + } } From ef71a9ed3917d11cf0daec94bc8f3201959af1b8 Mon Sep 17 00:00:00 2001 From: Michal Czaplinski Date: Wed, 24 Jul 2024 11:29:58 +0000 Subject: [PATCH 163/422] Tests: Removes the obsolete Block Binding unregistration Follow-up to [58798]. Props santosguillamot, cbravobernal, gziolo. See #61641. git-svn-id: https://develop.svn.wordpress.org/trunk@58799 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php b/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php index 1d5c4b1947467..e4aa415e9af96 100644 --- a/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php +++ b/tests/phpunit/tests/block-bindings/wpBlockBindingsRegistry.php @@ -311,9 +311,6 @@ public function test_get_registered() { $expected = new WP_Block_Bindings_Source( $source_two_name, $source_two_properties ); $result = $this->registry->get_registered( 'test/source-two' ); - $this->registry->unregister( 'test/source-one' ); - $this->registry->unregister( 'test/source-two' ); - $this->registry->unregister( 'test/source-three' ); $this->assertEquals( $expected, From caa38c4faa7942836385c0655504816258330005 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Wed, 24 Jul 2024 14:05:18 +0000 Subject: [PATCH 164/422] External Libraries: Update the `regenerator-runtime` library. This updates the `regenerator-runtime` library to version `0.14.1`. This library has not been used by Core itself in quite a while and only maintained as a courtesy. Any projects relying on `regenerator-runtime` should reevaluate their usage. Props manooweb. Fixes #60515. git-svn-id: https://develop.svn.wordpress.org/trunk@58800 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 14 +++++++------- package.json | 2 +- src/wp-includes/script-loader.php | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17e20b756c8c2..4906648085f9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,7 +96,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-is": "18.3.1", - "regenerator-runtime": "0.14.0", + "regenerator-runtime": "0.14.1", "underscore": "1.13.6", "whatwg-fetch": "3.6.17", "wicg-inert": "3.1.2" @@ -28768,9 +28768,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.1", @@ -55632,9 +55632,9 @@ } }, "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regenerator-transform": { "version": "0.15.1", diff --git a/package.json b/package.json index 6f3fce17b19f0..06fcc6829a8eb 100644 --- a/package.json +++ b/package.json @@ -165,7 +165,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-is": "18.3.1", - "regenerator-runtime": "0.14.0", + "regenerator-runtime": "0.14.1", "underscore": "1.13.6", "whatwg-fetch": "3.6.17", "wicg-inert": "3.1.2" diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index b7da065ad1796..b73f12b9cc37b 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -111,7 +111,7 @@ function wp_default_packages_vendor( $scripts ) { 'react' => '18.3.1', 'react-dom' => '18.3.1', 'react-jsx-runtime' => '18.3.1', - 'regenerator-runtime' => '0.14.0', + 'regenerator-runtime' => '0.14.1', 'moment' => '2.29.4', 'lodash' => '4.17.21', 'wp-polyfill-fetch' => '3.6.17', From 5a76260c3cd22d4688b91620ad7a00a42300c707 Mon Sep 17 00:00:00 2001 From: bernhard-reiter Date: Wed, 24 Jul 2024 14:09:58 +0000 Subject: [PATCH 165/422] block.json: Allow passing PHP filename as `variations` field. Previously, the `variations` field in a block.json file could be used to provide a static list of the block's variations (i.e., an array). Alternatively, the block's `variation_callback` could be set during server-side block registration to point to a PHP function to generate those variations. This changeset makes it so that the block.json `variations` field can be alternatively set to a string, which will be interpreted as the filename of a PHP file that generates the variations. It is loosely modeled after [54132], which introduced the `render` field for `block.json`, as a way to point to a PHP file instead of providing a `render_callback`. Props bernhard-reiter, gziolo. Fixes #61280. git-svn-id: https://develop.svn.wordpress.org/trunk@58801 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 29 +++++++++++++++++ .../phpunit/data/blocks/notice/variations.php | 10 ++++++ tests/phpunit/tests/blocks/register.php | 31 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 tests/phpunit/data/blocks/notice/variations.php diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 3b1fc25d48824..9b24b989d4024 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -385,6 +385,7 @@ function get_block_metadata_i18n_schema() { * @since 6.3.0 Added `selectors` field. * @since 6.4.0 Added support for `blockHooks` field. * @since 6.5.0 Added support for `allowedBlocks`, `viewScriptModule`, and `viewStyle` fields. + * @since 6.7.0 Allow PHP filename as `variations` argument. * * @param string $file_or_folder Path to the JSON file with metadata definition for * the block or path to the folder where the `block.json` file is located. @@ -522,6 +523,34 @@ function register_block_type_from_metadata( $file_or_folder, $args = array() ) { } } + // If `variations` is a string, it's the name of a PHP file that + // generates the variations. + if ( ! empty( $metadata['variations'] ) && is_string( $metadata['variations'] ) ) { + $variations_path = wp_normalize_path( + realpath( + dirname( $metadata['file'] ) . '/' . + remove_block_asset_path_prefix( $metadata['variations'] ) + ) + ); + if ( $variations_path ) { + /** + * Generates the list of block variations. + * + * @since 6.7.0 + * + * @return string Returns the list of block variations. + */ + $settings['variation_callback'] = static function () use ( $variations_path ) { + $variations = require $variations_path; + return $variations; + }; + // The block instance's `variations` field is only allowed to be an array + // (of known block variations). We unset it so that the block instance will + // provide a getter that returns the result of the `variation_callback` instead. + unset( $settings['variations'] ); + } + } + $settings = array_merge( $settings, $args ); $script_fields = array( diff --git a/tests/phpunit/data/blocks/notice/variations.php b/tests/phpunit/data/blocks/notice/variations.php new file mode 100644 index 0000000000000..bed66d9544176 --- /dev/null +++ b/tests/phpunit/data/blocks/notice/variations.php @@ -0,0 +1,10 @@ + 'warning', + 'title' => 'warning', + 'description' => 'Shows warning.', + 'keywords' => array( 'warning' ), + ), +); diff --git a/tests/phpunit/tests/blocks/register.php b/tests/phpunit/tests/blocks/register.php index 1dbc688bb16cf..7e0c391e1f226 100644 --- a/tests/phpunit/tests/blocks/register.php +++ b/tests/phpunit/tests/blocks/register.php @@ -957,6 +957,37 @@ public function data_register_block_registers_with_args_override_returns_false_w ); } + /** + * Tests registering a block with variations from a PHP file. + * + * @ticket 61280 + * + * @covers ::register_block_type_from_metadata + */ + public function test_register_block_type_from_metadata_with_variations_php_file() { + $filter_metadata_registration = static function ( $metadata ) { + $metadata['variations'] = 'file:./variations.php'; + return $metadata; + }; + + add_filter( 'block_type_metadata', $filter_metadata_registration, 10, 2 ); + $result = register_block_type_from_metadata( + DIR_TESTDATA . '/blocks/notice' + ); + remove_filter( 'block_type_metadata', $filter_metadata_registration ); + + $this->assertInstanceOf( 'WP_Block_Type', $result, 'The block was not registered' ); + + $this->assertIsCallable( $result->variation_callback, 'The variation callback hasn\'t been set' ); + $expected_variations = require DIR_TESTDATA . '/blocks/notice/variations.php'; + $this->assertSame( + $expected_variations, + call_user_func( $result->variation_callback ), + 'The variation callback hasn\'t been set correctly' + ); + $this->assertSame( $expected_variations, $result->variations, 'The block variations are incorrect' ); + } + /** * Tests that the function returns the registered block when the `block.json` * is found in the fixtures directory. From edcd7d285f89c4633b6c20fd09b709c0a649f4d5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 24 Jul 2024 15:08:08 +0000 Subject: [PATCH 166/422] Tests: Use more specific assertions in `get_comment_author()` tests. Follow-up to [58335]. See #61530. git-svn-id: https://develop.svn.wordpress.org/trunk@58803 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/comment/getCommentAuthor.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/comment/getCommentAuthor.php b/tests/phpunit/tests/comment/getCommentAuthor.php index 93570b51d16dd..61e8c213b54b9 100644 --- a/tests/phpunit/tests/comment/getCommentAuthor.php +++ b/tests/phpunit/tests/comment/getCommentAuthor.php @@ -22,7 +22,7 @@ public static function set_up_before_class() { public function get_comment_author_filter( $comment_author, $comment_id, $comment ) { $this->assertSame( $comment_id, self::$comment->comment_ID, 'Comment IDs do not match.' ); - $this->assertTrue( is_string( $comment_id ), '$comment_id parameter is not a string.' ); + $this->assertIsString( $comment_id, '$comment_id parameter is not a string.' ); return $comment_author; } @@ -41,7 +41,7 @@ public function test_comment_author_passes_correct_comment_id_for_int() { public function get_comment_author_filter_non_existent_id( $comment_author, $comment_id, $comment ) { $this->assertSame( $comment_id, (string) self::$non_existent_comment_id, 'Comment IDs do not match.' ); - $this->assertTrue( is_string( $comment_id ), '$comment_id parameter is not a string.' ); + $this->assertIsString( $comment_id, '$comment_id parameter is not a string.' ); return $comment_author; } @@ -71,7 +71,9 @@ public function test_should_return_author_when_given_object_without_comment_id( $user = self::factory()->user->create_and_get( $user_data ); $comment_props->user_id = $user->ID; } + $comment = new WP_Comment( $comment_props ); + $this->assertSame( $expected, get_comment_author( $comment ) ); } From 881ac87847e69baa63bbc62668837b4d66580d20 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Wed, 24 Jul 2024 16:21:59 +0000 Subject: [PATCH 167/422] Customize: Sanitize autofocus URL parameter as an array. [58069] introduced calling `sanitize_text_field()` with `$_REQUEST['autofocus']` (which is an array) and setting its default to a `string`. This fix restores the `array` data type for `autofocus`. The fix also relocates the unsplash for `url`, `return`, and `autofocus` before sanitizing. Follow-up to [58069], [34269], [29026], [21028]. Props jamesros161, swissspidy, dlh, audrasjb, hellofromTonya, ironprogrammer. Fixes #61561. git-svn-id: https://develop.svn.wordpress.org/trunk@58804 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/customize.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/wp-admin/customize.php b/src/wp-admin/customize.php index 2a53480feec9c..40857031a7ef8 100644 --- a/src/wp-admin/customize.php +++ b/src/wp-admin/customize.php @@ -84,18 +84,20 @@ } } -$url = ! empty( $_REQUEST['url'] ) ? sanitize_text_field( $_REQUEST['url'] ) : ''; -$return = ! empty( $_REQUEST['return'] ) ? sanitize_text_field( $_REQUEST['return'] ) : ''; -$autofocus = ! empty( $_REQUEST['autofocus'] ) ? sanitize_text_field( $_REQUEST['autofocus'] ) : ''; +$url = ! empty( $_REQUEST['url'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['url'] ) ) : ''; +$return = ! empty( $_REQUEST['return'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['return'] ) ) : ''; +$autofocus = ! empty( $_REQUEST['autofocus'] ) && is_array( $_REQUEST['autofocus'] ) + ? array_map( 'sanitize_text_field', wp_unslash( $_REQUEST['autofocus'] ) ) + : array(); if ( ! empty( $url ) ) { - $wp_customize->set_preview_url( wp_unslash( $url ) ); + $wp_customize->set_preview_url( $url ); } if ( ! empty( $return ) ) { - $wp_customize->set_return_url( wp_unslash( $return ) ); + $wp_customize->set_return_url( $return ); } -if ( ! empty( $autofocus ) && is_array( $autofocus ) ) { - $wp_customize->set_autofocus( wp_unslash( $autofocus ) ); +if ( ! empty( $autofocus ) ) { + $wp_customize->set_autofocus( $autofocus ); } $registered = $wp_scripts->registered; From 5351cd20f3d5eb890cb7b53270d01b626ce02f7d Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 24 Jul 2024 18:39:46 +0000 Subject: [PATCH 168/422] HTML API: Add TABLE support in HTML Processor. As part of work to add more spec support to the HTML API, this patch adds support for various table-related insertion modes. This includes support for tables, table rows, table cells, table column groups, etc... Developed in https://github.com/wordpress/wordpress-develop/pull/6040 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58806 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 74 +++ .../html-api/class-wp-html-processor.php | 587 +++++++++++++++++- .../html-api/wpHtmlProcessorBreadcrumbs.php | 9 - .../html-api/wpHtmlProcessorSemanticRules.php | 24 + 4 files changed, 677 insertions(+), 17 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index d59bd32140582..1162a267f9c9b 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -720,6 +720,80 @@ public function after_element_pop( WP_HTML_Token $item ): void { } } + /** + * Clear the stack back to a table context. + * + * > When the steps above require the UA to clear the stack back to a table context, it means + * > that the UA must, while the current node is not a table, template, or html element, pop + * > elements from the stack of open elements. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-stack-back-to-a-table-context + * + * @since 6.7.0 + */ + public function clear_to_table_context(): void { + foreach ( $this->walk_up() as $item ) { + if ( + 'TABLE' === $item->node_name || + 'TEMPLATE' === $item->node_name || + 'HTML' === $item->node_name + ) { + break; + } + $this->pop(); + } + } + + /** + * Clear the stack back to a table body context. + * + * > When the steps above require the UA to clear the stack back to a table body context, it + * > means that the UA must, while the current node is not a tbody, tfoot, thead, template, or + * > html element, pop elements from the stack of open elements. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-stack-back-to-a-table-body-context + * + * @since 6.7.0 + */ + public function clear_to_table_body_context(): void { + foreach ( $this->walk_up() as $item ) { + if ( + 'TBODY' === $item->node_name || + 'TFOOT' === $item->node_name || + 'THEAD' === $item->node_name || + 'TEMPLATE' === $item->node_name || + 'HTML' === $item->node_name + ) { + break; + } + $this->pop(); + } + } + + /** + * Clear the stack back to a table row context. + * + * > When the steps above require the UA to clear the stack back to a table row context, it + * > means that the UA must, while the current node is not a tr, template, or html element, pop + * > elements from the stack of open elements. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-stack-back-to-a-table-row-context + * + * @since 6.7.0 + */ + public function clear_to_table_row_context(): void { + foreach ( $this->walk_up() as $item ) { + if ( + 'TR' === $item->node_name || + 'TEMPLATE' === $item->node_name || + 'HTML' === $item->node_name + ) { + break; + } + $this->pop(); + } + } + /** * Wakeup magic method. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index f9073492d86ac..975f21a0f0d77 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -1786,6 +1786,10 @@ private function step_in_body(): bool { * > A start tag whose tag name is "table" */ case '+TABLE': + /* + * > If the Document is not set to quirks mode, and the stack of open elements + * > has a p element in button scope, then close a p element. + */ if ( WP_HTML_Processor_State::QUIRKS_MODE !== $this->state->document_mode && $this->state->stack_of_open_elements->has_p_in_button_scope() @@ -2117,7 +2121,7 @@ private function step_in_body(): bool { * This internal function performs the 'in table' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -2127,7 +2131,245 @@ private function step_in_body(): bool { * @return bool Whether an element was found. */ private function step_in_table(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token, if the current node is table, + * > tbody, template, tfoot, thead, or tr element + */ + case '#text': + $current_node = $this->state->stack_of_open_elements->current_node(); + $current_node_name = $current_node ? $current_node->node_name : null; + if ( + $current_node_name && ( + 'TABLE' === $current_node_name || + 'TBODY' === $current_node_name || + 'TEMPLATE' === $current_node_name || + 'TFOOT' === $current_node_name || + 'THEAD' === $current_node_name || + 'TR' === $current_node_name + ) + ) { + $text = $this->get_modifiable_text(); + /* + * If the text is empty after processing HTML entities and stripping + * U+0000 NULL bytes then ignore the token. + */ + if ( '' === $text ) { + return $this->step(); + } + + /* + * This follows the rules for "in table text" insertion mode. + * + * Whitespace-only text nodes are inserted in-place. Otherwise + * foster parenting is enabled and the nodes would be + * inserted out-of-place. + * + * > If any of the tokens in the pending table character tokens + * > list are character tokens that are not ASCII whitespace, + * > then this is a parse error: reprocess the character tokens + * > in the pending table character tokens list using the rules + * > given in the "anything else" entry in the "in table" + * > insertion mode. + * > + * > Otherwise, insert the characters given by the pending table + * > character tokens list. + * + * @see https://html.spec.whatwg.org/#parsing-main-intabletext + */ + if ( strlen( $text ) === strspn( $text, " \t\f\r\n" ) ) { + $this->insert_html_element( $this->state->current_token ); + return true; + } + + // Non-whitespace would trigger fostering, unsupported at this time. + $this->bail( 'Foster parenting is not supported.' ); + break; + } + break; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "caption" + */ + case '+CAPTION': + $this->state->stack_of_open_elements->clear_to_table_context(); + $this->state->active_formatting_elements->insert_marker(); + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION; + return true; + + /* + * > A start tag whose tag name is "colgroup" + */ + case '+COLGROUP': + $this->state->stack_of_open_elements->clear_to_table_context(); + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP; + return true; + + /* + * > A start tag whose tag name is "col" + */ + case '+COL': + $this->state->stack_of_open_elements->clear_to_table_context(); + + /* + * > Insert an HTML element for a "colgroup" start tag token with no attributes, + * > then switch the insertion mode to "in column group". + */ + $this->insert_virtual_node( 'COLGROUP' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is one of: "tbody", "tfoot", "thead" + */ + case '+TBODY': + case '+TFOOT': + case '+THEAD': + $this->state->stack_of_open_elements->clear_to_table_context(); + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return true; + + /* + * > A start tag whose tag name is one of: "td", "th", "tr" + */ + case '+TD': + case '+TH': + case '+TR': + $this->state->stack_of_open_elements->clear_to_table_context(); + /* + * > Insert an HTML element for a "tbody" start tag token with no attributes, + * > then switch the insertion mode to "in table body". + */ + $this->insert_virtual_node( 'TBODY' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is "table" + * + * This tag in the IN TABLE insertion mode is a parse error. + */ + case '+TABLE': + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TABLE' ) ) { + return $this->step(); + } + + $this->state->stack_of_open_elements->pop_until( 'TABLE' ); + $this->reset_insertion_mode(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is "table" + */ + case '-TABLE': + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TABLE' ) ) { + // @todo Indicate a parse error once it's possible. + return $this->step(); + } + + $this->state->stack_of_open_elements->pop_until( 'TABLE' ); + $this->reset_insertion_mode(); + return true; + + /* + * > An end tag whose tag name is one of: "body", "caption", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" + */ + case '-BODY': + case '-CAPTION': + case '-COL': + case '-COLGROUP': + case '-HTML': + case '-TBODY': + case '-TD': + case '-TFOOT': + case '-TH': + case '-THEAD': + case '-TR': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is one of: "style", "script", "template" + * > An end tag whose tag name is "template" + */ + case '+STYLE': + case '+SCRIPT': + case '+TEMPLATE': + case '-TEMPLATE': + /* + * > Process the token using the rules for the "in head" insertion mode. + */ + return $this->step_in_head(); + + /* + * > A start tag whose tag name is "input" + * + * > If the token does not have an attribute with the name "type", or if it does, but + * > that attribute's value is not an ASCII case-insensitive match for the string + * > "hidden", then: act as described in the "anything else" entry below. + */ + case '+INPUT': + $type_attribute = $this->get_attribute( 'type' ); + if ( ! is_string( $type_attribute ) || 'hidden' !== strtolower( $type_attribute ) ) { + goto anything_else; + } + // @todo Indicate a parse error once it's possible. + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "form" + * + * This tag in the IN TABLE insertion mode is a parse error. + */ + case '+FORM': + if ( + $this->state->stack_of_open_elements->has_element_in_scope( 'TEMPLATE' ) || + isset( $this->state->form_element ) + ) { + return $this->step(); + } + + // This FORM is special because it immediately closes and cannot have other children. + $this->insert_html_element( $this->state->current_token ); + $this->state->form_element = $this->state->current_token; + $this->state->stack_of_open_elements->pop(); + return true; + } + + /* + * > Anything else + * > Parse error. Enable foster parenting, process the token using the rules for the + * > "in body" insertion mode, and then disable foster parenting. + * + * @todo Indicate a parse error once it's possible. + */ + anything_else: + $this->bail( 'Foster parenting is not supported.' ); } /** @@ -2193,7 +2435,7 @@ private function step_in_column_group(): bool { * This internal function performs the 'in table body' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -2203,7 +2445,97 @@ private function step_in_column_group(): bool { * @return bool Whether an element was found. */ private function step_in_table_body(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY . ' state.' ); + $tag_name = $this->get_tag(); + $op_sigil = $this->is_tag_closer() ? '-' : '+'; + $op = "{$op_sigil}{$tag_name}"; + + switch ( $op ) { + /* + * > A start tag whose tag name is "tr" + */ + case '+TR': + $this->state->stack_of_open_elements->clear_to_table_body_context(); + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + return true; + + /* + * > A start tag whose tag name is one of: "th", "td" + */ + case '+TH': + case '+TD': + // @todo Indicate a parse error once it's possible. + $this->state->stack_of_open_elements->clear_to_table_body_context(); + $this->insert_virtual_node( 'TR' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "tbody", "tfoot", "thead" + */ + case '-TBODY': + case '-TFOOT': + case '-THEAD': + /* + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->state->stack_of_open_elements->clear_to_table_body_context(); + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return true; + + /* + * > A start tag whose tag name is one of: "caption", "col", "colgroup", "tbody", "tfoot", "thead" + * > An end tag whose tag name is "table" + */ + case '+CAPTION': + case '+COL': + case '+COLGROUP': + case '+TBODY': + case '+TFOOT': + case '+THEAD': + case '-TABLE': + if ( + ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TBODY' ) && + ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'THEAD' ) && + ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TFOOT' ) + ) { + // Parse error: ignore the token. + return $this->step(); + } + $this->state->stack_of_open_elements->clear_to_table_body_context(); + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "body", "caption", "col", "colgroup", "html", "td", "th", "tr" + */ + case '-BODY': + case '-CAPTION': + case '-COL': + case '-COLGROUP': + case '-HTML': + case '-TD': + case '-TH': + case '-TR': + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + * > Process the token using the rules for the "in table" insertion mode. + */ + return $this->step_in_table(); } /** @@ -2212,7 +2544,7 @@ private function step_in_table_body(): bool { * This internal function performs the 'in row' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -2222,7 +2554,104 @@ private function step_in_table_body(): bool { * @return bool Whether an element was found. */ private function step_in_row(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_ROW . ' state.' ); + $tag_name = $this->get_tag(); + $op_sigil = $this->is_tag_closer() ? '-' : '+'; + $op = "{$op_sigil}{$tag_name}"; + + switch ( $op ) { + /* + * > A start tag whose tag name is one of: "th", "td" + */ + case '+TH': + case '+TD': + $this->state->stack_of_open_elements->clear_to_table_row_context(); + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_CELL; + $this->state->active_formatting_elements->insert_marker(); + return true; + + /* + * > An end tag whose tag name is "tr" + */ + case '-TR': + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TR' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->state->stack_of_open_elements->clear_to_table_row_context(); + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return true; + + /* + * > A start tag whose tag name is one of: "caption", "col", "colgroup", "tbody", "tfoot", "thead", "tr" + * > An end tag whose tag name is "table" + */ + case '+CAPTION': + case '+COL': + case '+COLGROUP': + case '+TBODY': + case '+TFOOT': + case '+THEAD': + case '+TR': + case '-TABLE': + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TR' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->state->stack_of_open_elements->clear_to_table_row_context(); + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "tbody", "tfoot", "thead" + */ + case '-TBODY': + case '-TFOOT': + case '-THEAD': + /* + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'TR' ) ) { + // Ignore the token. + return $this->step(); + } + + $this->state->stack_of_open_elements->clear_to_table_row_context(); + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "body", "caption", "col", "colgroup", "html", "td", "th" + */ + case '-BODY': + case '-CAPTION': + case '-COL': + case '-COLGROUP': + case '-HTML': + case '-TD': + case '-TH': + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + * > Process the token using the rules for the "in table" insertion mode. + */ + return $this->step_in_table(); } /** @@ -2231,7 +2660,7 @@ private function step_in_row(): bool { * This internal function performs the 'in cell' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -2241,7 +2670,104 @@ private function step_in_row(): bool { * @return bool Whether an element was found. */ private function step_in_cell(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_CELL . ' state.' ); + $tag_name = $this->get_tag(); + $op_sigil = $this->is_tag_closer() ? '-' : '+'; + $op = "{$op_sigil}{$tag_name}"; + + switch ( $op ) { + /* + * > An end tag whose tag name is one of: "td", "th" + */ + case '-TD': + case '-TH': + /* + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + + /* + * @todo This needs to check if the current node is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + if ( ! $this->state->stack_of_open_elements->current_node_is( $tag_name ) ) { + // @todo Indicate a parse error once it's possible. + } + + $this->state->stack_of_open_elements->pop_until( $tag_name ); + $this->state->active_formatting_elements->clear_up_to_last_marker(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + return true; + + /* + * > A start tag whose tag name is one of: "caption", "col", "colgroup", "tbody", "td", + * > "tfoot", "th", "thead", "tr" + */ + case '+CAPTION': + case '+COL': + case '+COLGROUP': + case '+TBODY': + case '+TD': + case '+TFOOT': + case '+TH': + case '+THEAD': + case '+TR': + /* + * > Assert: The stack of open elements has a td or th element in table scope. + * + * Nothing to do here, except to verify in tests that this never appears. + */ + + $this->close_cell(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "body", "caption", "col", "colgroup", "html" + */ + case '-BODY': + case '-CAPTION': + case '-COL': + case '-COLGROUP': + case '-HTML': + // Parse error: ignore the token. + return $this->step(); + + /* + * > An end tag whose tag name is one of: "table", "tbody", "tfoot", "thead", "tr" + */ + case '-TABLE': + case '-TBODY': + case '-TFOOT': + case '-THEAD': + case '-TR': + /* + * @todo This needs to check if the element in scope is an HTML element, meaning that + * when SVG and MathML support is added, this needs to differentiate between an + * HTML element of the given name, such as `
    `, and a foreign element of + * the same given name. + */ + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { + // Parse error: ignore the token. + return $this->step(); + } + $this->close_cell(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + } + + /* + * > Anything else + * > Process the token using the rules for the "in body" insertion mode. + */ + return $this->step_in_body(); } /** @@ -3576,6 +4102,33 @@ private function run_adoption_agency_algorithm(): void { $this->bail( 'Cannot run adoption agency when looping required.' ); } + /** + * Runs the "close the cell" algorithm. + * + * > Where the steps above say to close the cell, they mean to run the following algorithm: + * > 1. Generate implied end tags. + * > 2. If the current node is not now a td element or a th element, then this is a parse error. + * > 3. Pop elements from the stack of open elements stack until a td element or a th element has been popped from the stack. + * > 4. Clear the list of active formatting elements up to the last marker. + * > 5. Switch the insertion mode to "in row". + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#close-the-cell + * + * @since 6.7.0 + */ + private function close_cell(): void { + $this->generate_implied_end_tags(); + // @todo Parse error if the current node is a "td" or "th" element. + foreach ( $this->state->stack_of_open_elements->walk_up() as $element ) { + $this->state->stack_of_open_elements->pop(); + if ( 'TD' === $element->node_name || 'TH' === $element->node_name ) { + break; + } + } + $this->state->active_formatting_elements->clear_up_to_last_marker(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + } + /** * Inserts an HTML element on the stack of open elements. * @@ -3589,6 +4142,24 @@ private function insert_html_element( WP_HTML_Token $token ): void { $this->state->stack_of_open_elements->push( $token ); } + /** + * Inserts a virtual element on the stack of open elements. + * + * @since 6.7.0 + * + * @param string $token_name Name of token to create and insert into the stack of open elements. + * @param string|null $bookmark_name Optional. Name to give bookmark for created virtual node. + * Defaults to auto-creating a bookmark name. + */ + private function insert_virtual_node( $token_name, $bookmark_name = null ): void { + $here = $this->bookmarks[ $this->state->current_token->bookmark_name ]; + $name = $bookmark_name ?? $this->bookmark_token(); + + $this->bookmarks[ $name ] = new WP_HTML_Span( $here->start, 0 ); + + $this->insert_html_element( new WP_HTML_Token( $name, $token_name, false ) ); + } + /* * HTML Specification Helpers */ diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index e9c7362c179a2..7dd94747fd8e8 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -181,9 +181,6 @@ public static function data_unsupported_elements() { 'BASE', 'BGSOUND', // Deprecated; self-closing if self-closing flag provided, otherwise normal. 'BODY', - 'CAPTION', - 'COL', - 'COLGROUP', 'FRAME', 'FRAMESET', 'HEAD', @@ -198,15 +195,9 @@ public static function data_unsupported_elements() { 'SCRIPT', 'STYLE', 'SVG', - 'TBODY', - 'TD', 'TEMPLATE', 'TEXTAREA', - 'TFOOT', - 'TH', - 'THEAD', 'TITLE', - 'TR', 'XMP', // Deprecated, use PRE instead. ); diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php index a64872bed2f1d..ffc99ad58fd8e 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php @@ -424,4 +424,28 @@ public function test_br_end_tag_unsupported() { $this->assertFalse( $processor->is_tag_closer(), 'Should have treated the tag as an opening tag.' ); $this->assertNull( $processor->get_attribute_names_with_prefix( '' ), 'Should have ignored any attributes on the tag.' ); } + + /******************************************************************* + * RULES FOR "IN TABLE" MODE + *******************************************************************/ + + /** + * Ensure that form elements in tables (but not cells) are immediately popped off the stack. + * + * @ticket 61576 + */ + public function test_table_form_element_immediately_popped() { + $processor = WP_HTML_Processor::create_fragment( '' ); + + // There should be a FORM opener and a (virtual) FORM closer. + $this->assertTrue( $processor->next_tag( 'FORM' ) ); + $this->assertTrue( $processor->next_token() ); + $this->assertSame( 'FORM', $processor->get_token_name() ); + $this->assertTrue( $processor->is_tag_closer() ); + + // Followed by the comment token. + $this->assertTrue( $processor->next_token() ); + $this->assertSame( '#comment', $processor->get_token_name() ); + $this->assertsame( array( 'HTML', 'BODY', 'TABLE', '#comment' ), $processor->get_breadcrumbs() ); + } } From 4acefacbf6f7c956f1cf30e406d3c9c04bc855f9 Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Wed, 24 Jul 2024 21:40:59 +0000 Subject: [PATCH 169/422] Taxonomy: Ensure `get_edit_term_link()` produces the correct result when called without taxonomy. This fixes an oversight missed in [36646]. Props debarghyabanerjee. Fixes #61726. See #35922. git-svn-id: https://develop.svn.wordpress.org/trunk@58807 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/link-template.php | 2 +- tests/phpunit/tests/link/getEditTermLink.php | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php index dde12c16168be..37e8684bf0d8e 100644 --- a/src/wp-includes/link-template.php +++ b/src/wp-includes/link-template.php @@ -1092,7 +1092,7 @@ function get_edit_term_link( $term, $taxonomy = '', $object_type = '' ) { } $args = array( - 'taxonomy' => $taxonomy, + 'taxonomy' => $tax->name, 'tag_ID' => $term_id, ); diff --git a/tests/phpunit/tests/link/getEditTermLink.php b/tests/phpunit/tests/link/getEditTermLink.php index d0303f1b1a403..e86cd78449f3d 100644 --- a/tests/phpunit/tests/link/getEditTermLink.php +++ b/tests/phpunit/tests/link/getEditTermLink.php @@ -236,4 +236,17 @@ public function data_get_edit_term_link() { ), ); } + + /** + * Checks that `get_edit_term_link()` produces the correct URL when called without taxonomy. + * + * @ticket 61726 + */ + public function test_get_edit_term_link_without_taxonomy() { + $term = $this->get_term( 'wptests_tax', true ); + + $actual = get_edit_term_link( $term ); + $expected = sprintf( admin_url( 'term.php?taxonomy=wptests_tax&tag_ID=%d&post_type=post' ), $term ); + $this->assertSame( $expected, $actual ); + } } From 5ea8ba0bf041e3148548dc9d2dc1a1d16eb3674a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 25 Jul 2024 22:36:13 +0000 Subject: [PATCH 170/422] Comments: Only type cast a scalar `$comment_id` in `get_comment_author_link()`. This aims to resolve a fatal error when the incoming `$comment_id` is an instance of `WP_Comment` (or any object) without a `comment_ID` property defined, or if it's empty: {{{ Object of class WP_Comment could not be converted to string }}} This commit mirrors the changes previously made for a similar code fragment in `get_comment_author()`. Includes: * Unit tests to demonstrate the fatal error and validate the fix. * Changing the default value for a non-existent comment ID in `get_comment_author()` from an empty string to zero as a numeric string, for consistency with `get_comment_ID()`. Follow-up to [52818], [55289], [58335], [58755]. Props narenin, mukesh27, iflairwebtechnologies, umeshsinghin, SergeyBiryukov. Fixes #61715. git-svn-id: https://develop.svn.wordpress.org/trunk@58809 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment-template.php | 10 +- .../tests/comment/getCommentAuthorLink.php | 116 ++++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tests/phpunit/tests/comment/getCommentAuthorLink.php diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php index fed6568af33d5..ccc57ed8ee085 100644 --- a/src/wp-includes/comment-template.php +++ b/src/wp-includes/comment-template.php @@ -29,7 +29,7 @@ function get_comment_author( $comment_id = 0 ) { } elseif ( is_scalar( $comment_id ) ) { $comment_id = (string) $comment_id; } else { - $comment_id = ''; + $comment_id = '0'; } if ( empty( $comment->comment_author ) ) { @@ -233,7 +233,13 @@ function get_comment_author_email_link( $link_text = '', $before = '', $after = function get_comment_author_link( $comment_id = 0 ) { $comment = get_comment( $comment_id ); - $comment_id = ! empty( $comment->comment_ID ) ? $comment->comment_ID : (string) $comment_id; + if ( ! empty( $comment->comment_ID ) ) { + $comment_id = $comment->comment_ID; + } elseif ( is_scalar( $comment_id ) ) { + $comment_id = (string) $comment_id; + } else { + $comment_id = '0'; + } $comment_author_url = get_comment_author_url( $comment ); $comment_author = get_comment_author( $comment ); diff --git a/tests/phpunit/tests/comment/getCommentAuthorLink.php b/tests/phpunit/tests/comment/getCommentAuthorLink.php new file mode 100644 index 0000000000000..c3d1033d837b5 --- /dev/null +++ b/tests/phpunit/tests/comment/getCommentAuthorLink.php @@ -0,0 +1,116 @@ +comment->create_and_get( + array( + 'comment_post_ID' => 0, + ) + ); + } + + public function get_comment_author_link_filter( $comment_author_link, $comment_author, $comment_id ) { + $this->assertSame( $comment_id, self::$comment->comment_ID, 'Comment IDs do not match.' ); + $this->assertIsString( $comment_id, '$comment_id parameter is not a string.' ); + + return $comment_author_link; + } + + public function test_comment_author_link_passes_correct_comment_id_for_comment_object() { + add_filter( 'get_comment_author_link', array( $this, 'get_comment_author_link_filter' ), 99, 3 ); + + get_comment_author_link( self::$comment ); + } + + public function test_comment_author_link_passes_correct_comment_id_for_int() { + add_filter( 'get_comment_author_link', array( $this, 'get_comment_author_link_filter' ), 99, 3 ); + + get_comment_author_link( (int) self::$comment->comment_ID ); + } + + public function get_comment_author_link_filter_non_existent_id( $comment_author_link, $comment_author, $comment_id ) { + $this->assertSame( $comment_id, (string) self::$non_existent_comment_id, 'Comment IDs do not match.' ); + $this->assertIsString( $comment_id, '$comment_id parameter is not a string.' ); + + return $comment_author_link; + } + + /** + * @ticket 60475 + */ + public function test_comment_author_link_passes_correct_comment_id_for_non_existent_comment() { + add_filter( 'get_comment_author_link', array( $this, 'get_comment_author_link_filter_non_existent_id' ), 99, 3 ); + + self::$non_existent_comment_id = self::$comment->comment_ID + 1; + + get_comment_author_link( self::$non_existent_comment_id ); // Non-existent comment ID. + } + + /** + * @ticket 61681 + * @ticket 61715 + * + * @dataProvider data_should_return_author_when_given_object_without_comment_id + * + * @param stdClass $comment_props Comment properties test data. + * @param string $expected The expected result. + * @param array $user_data Optional. User data for creating an author. Default empty array. + */ + public function test_should_return_author_when_given_object_without_comment_id( $comment_props, $expected, $user_data = array() ) { + if ( ! empty( $comment_props->user_id ) ) { + $user = self::factory()->user->create_and_get( $user_data ); + $comment_props->user_id = $user->ID; + } + + $comment = new WP_Comment( $comment_props ); + + $this->assertSame( $expected, get_comment_author_link( $comment ) ); + } + + /** + * Data provider. + * + * @return array + */ + public function data_should_return_author_when_given_object_without_comment_id() { + return array( + 'with no author' => array( + 'comment_props' => new stdClass(), + 'expected' => 'Anonymous', + ), + 'with author name' => array( + 'comment_props' => (object) array( + 'comment_author' => 'tester1', + ), + 'expected' => 'tester1', + ), + 'with author name, empty ID' => array( + 'comment_props' => (object) array( + 'comment_author' => 'tester2', + 'comment_ID' => '', + ), + 'expected' => 'tester2', + ), + 'with author ID' => array( + 'comment_props' => (object) array( + 'user_id' => 1, // Populates in the test with an actual user ID. + ), + 'expected' => 'Tester3', + 'user_data' => array( + 'display_name' => 'Tester3', + ), + ), + ); + } +} From 4de5282f235f02605ffd86356c23d19c0a6b5ee7 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Thu, 25 Jul 2024 22:38:01 +0000 Subject: [PATCH 171/422] General: Update English Gravatar links. Replace links to en.gravatar.com with links to gravatar.com as the english site now uses the base domain. This avoids an unnecessary redirect for english language sites. The links remain translatable for non-english versions of WordPress. Props narenin, knutsp. Fixes #61424. git-svn-id: https://develop.svn.wordpress.org/trunk@58810 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/upgrade.php | 3 ++- src/wp-admin/user-edit.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php index 715f5e2bdbc70..a7f29b294aa92 100644 --- a/src/wp-admin/includes/upgrade.php +++ b/src/wp-admin/includes/upgrade.php @@ -278,7 +278,8 @@ function wp_install_defaults( $user_id ) { To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard. Commenter avatars come from Gravatar.' ), - esc_url( __( 'https://en.gravatar.com/' ) ) + /* translators: The localized Gravatar URL. */ + esc_url( __( 'https://gravatar.com/' ) ) ); $wpdb->insert( $wpdb->comments, diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php index f66a54d85fbb6..07810adc7a841 100644 --- a/src/wp-admin/user-edit.php +++ b/src/wp-admin/user-edit.php @@ -628,7 +628,8 @@ $description = sprintf( /* translators: %s: Gravatar URL. */ __( 'You can change your profile picture on Gravatar.' ), - __( 'https://en.gravatar.com/' ) + /* translators: The localized Gravatar URL. */ + __( 'https://gravatar.com/' ) ); } else { $description = ''; From b38541de39c5e3ccb75ff76b49ab930846c878b6 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Thu, 25 Jul 2024 23:02:47 +0000 Subject: [PATCH 172/422] Options, Meta APIs: Prevent Single Site installs using network notoptions cache. Modifies the caching of `notoptions` in `delete_network_option()` to ensure that the network cache is bypassed on single site installs. On single site installs the incorrect caching was causing the `notoptions` cache to remain populated once a deleted option was subsequently added or updated. Follow up to [58782]. Props bjorsch, pbearne. Fixes #61730. See #61484. git-svn-id: https://develop.svn.wordpress.org/trunk@58811 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/option.php | 20 ++-- tests/phpunit/tests/option/networkOption.php | 110 +++++++++++++++++++ 2 files changed, 121 insertions(+), 9 deletions(-) diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php index 125f25d40d157..537f7aafd0aba 100644 --- a/src/wp-includes/option.php +++ b/src/wp-includes/option.php @@ -2264,6 +2264,17 @@ function delete_network_option( $network_id, $option ) { 'site_id' => $network_id, ) ); + + if ( $result ) { + $notoptions_key = "$network_id:notoptions"; + $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); + + if ( ! is_array( $notoptions ) ) { + $notoptions = array(); + } + $notoptions[ $option ] = true; + wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); + } } if ( $result ) { @@ -2293,15 +2304,6 @@ function delete_network_option( $network_id, $option ) { */ do_action( 'delete_site_option', $option, $network_id ); - $notoptions_key = "$network_id:notoptions"; - $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); - - if ( ! is_array( $notoptions ) ) { - $notoptions = array(); - } - $notoptions[ $option ] = true; - wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); - return true; } diff --git a/tests/phpunit/tests/option/networkOption.php b/tests/phpunit/tests/option/networkOption.php index 3c89d5d0b408a..a4247d4926cec 100644 --- a/tests/phpunit/tests/option/networkOption.php +++ b/tests/phpunit/tests/option/networkOption.php @@ -60,6 +60,7 @@ public function test_delete_network_option_on_only_one_network() { * Tests that calling delete_network_option() updates nooptions when option deleted. * * @ticket 61484 + * @ticket 61730 * * @covers ::delete_network_option */ @@ -73,6 +74,11 @@ public function test_check_delete_network_option_updates_notoptions() { $this->assertIsArray( $notoptions, 'The notoptions cache is expected to be an array.' ); $this->assertTrue( $notoptions['foo'], 'The deleted options is expected to be in notoptions.' ); + if ( ! is_multisite() ) { + $network_notoptions = wp_cache_get( '1:notoptions', 'site-options' ); + $this->assertTrue( empty( $network_notoptions['foo'] ), 'The deleted option is not expected to be in network notoptions on a non-multisite.' ); + } + $before = get_num_queries(); get_network_option( 1, 'foo' ); $queries = get_num_queries() - $before; @@ -302,4 +308,108 @@ public function test_add_network_option_clears_the_notoptions_cache() { $updated_notoptions = wp_cache_get( $cache_key, $cache_group ); $this->assertArrayNotHasKey( $option_name, $updated_notoptions, 'The "foobar" option should not be in the notoptions cache after updating it.' ); } + + /** + * Test adding a previously known notoption returns the correct value. + * + * @ticket 61730 + * + * @covers ::add_network_option + * @covers ::delete_network_option + */ + public function test_adding_previous_notoption_returns_correct_value() { + $option_name = 'ticket_61730_option_to_be_created'; + + add_network_option( 1, $option_name, 'baz' ); + delete_network_option( 1, $option_name ); + + $this->assertFalse( get_network_option( 1, $option_name ), 'The option should not be found.' ); + + add_network_option( 1, $option_name, 'foo' ); + $this->assertSame( 'foo', get_network_option( 1, $option_name ), 'The option should return the newly set value.' ); + } + + /** + * Test `get_network_option()` does not use network notoptions cache for single sites. + * + * @ticket 61730 + * + * @group ms-excluded + * + * @covers ::get_network_option + */ + public function test_get_network_option_does_not_use_network_notoptions_cache_for_single_sites() { + get_network_option( 1, 'ticket_61730_notoption' ); + + $network_notoptions_cache = wp_cache_get( '1:notoptions', 'site-options' ); + $single_site_notoptions_cache = wp_cache_get( 'notoptions', 'options' ); + + $this->assertEmpty( $network_notoptions_cache, 'Network notoptions cache should not be set for single site installs.' ); + $this->assertIsArray( $single_site_notoptions_cache, 'Single site notoptions cache should be set.' ); + $this->assertArrayHasKey( 'ticket_61730_notoption', $single_site_notoptions_cache, 'The option should be in the notoptions cache.' ); + } + + /** + * Test `delete_network_option()` does not use network notoptions cache for single sites. + * + * @ticket 61730 + * @ticket 61484 + * + * @group ms-excluded + * + * @covers ::delete_network_option + */ + public function test_delete_network_option_does_not_use_network_notoptions_cache_for_single_sites() { + add_network_option( 1, 'ticket_61730_notoption', 'value' ); + delete_network_option( 1, 'ticket_61730_notoption' ); + + $network_notoptions_cache = wp_cache_get( '1:notoptions', 'site-options' ); + $single_site_notoptions_cache = wp_cache_get( 'notoptions', 'options' ); + + $this->assertEmpty( $network_notoptions_cache, 'Network notoptions cache should not be set for single site installs.' ); + $this->assertIsArray( $single_site_notoptions_cache, 'Single site notoptions cache should be set.' ); + $this->assertArrayHasKey( 'ticket_61730_notoption', $single_site_notoptions_cache, 'The option should be in the notoptions cache.' ); + } + + /** + * Test `get_network_option()` does not use single site notoptions cache for networks. + * + * @ticket 61730 + * + * @group ms-required + * + * @covers ::get_network_option + */ + public function test_get_network_option_does_not_use_single_site_notoptions_cache_for_networks() { + get_network_option( 1, 'ticket_61730_notoption' ); + + $network_notoptions_cache = wp_cache_get( '1:notoptions', 'site-options' ); + $single_site_notoptions_cache = wp_cache_get( 'notoptions', 'options' ); + + $this->assertEmpty( $single_site_notoptions_cache, 'Single site notoptions cache should not be set for multisite installs.' ); + $this->assertIsArray( $network_notoptions_cache, 'Multisite notoptions cache should be set.' ); + $this->assertArrayHasKey( 'ticket_61730_notoption', $network_notoptions_cache, 'The option should be in the notoptions cache.' ); + } + + /** + * Test `delete_network_option()` does not use single site notoptions cache for networks. + * + * @ticket 61730 + * @ticket 61484 + * + * @group ms-required + * + * @covers ::delete_network_option + */ + public function test_delete_network_option_does_not_use_single_site_notoptions_cache_for_networks() { + add_network_option( 1, 'ticket_61730_notoption', 'value' ); + delete_network_option( 1, 'ticket_61730_notoption' ); + + $network_notoptions_cache = wp_cache_get( '1:notoptions', 'site-options' ); + $single_site_notoptions_cache = wp_cache_get( 'notoptions', 'options' ); + + $this->assertEmpty( $single_site_notoptions_cache, 'Single site notoptions cache should not be set for multisite installs.' ); + $this->assertIsArray( $network_notoptions_cache, 'Multisite notoptions cache should be set.' ); + $this->assertArrayHasKey( 'ticket_61730_notoption', $network_notoptions_cache, 'The option should be in the notoptions cache.' ); + } } From ed59f778ba7e275c7f34f3f8dd5795abcb07ca91 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 26 Jul 2024 07:54:26 +0000 Subject: [PATCH 173/422] General: Cast `$max_depth` and `$depth` to an integer in the `Walker` class. This ensures that the arguments are correctly interpreted when passed as a query string, i.e. when `wp_parse_args()` is involved. For example, `wp_list_pages( 'depth=0' )` should display a list of all pages to the maximum depth. Follow-up to [57848]. Props freibergergarcia, peterwilsoncc, ahortin. Fixes #61749. git-svn-id: https://develop.svn.wordpress.org/trunk@58812 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-walker.php | 13 +++++++-- tests/phpunit/tests/post/wpListPages.php | 36 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/class-wp-walker.php b/src/wp-includes/class-wp-walker.php index ff5eac2f50040..df67921c2746c 100644 --- a/src/wp-includes/class-wp-walker.php +++ b/src/wp-includes/class-wp-walker.php @@ -135,6 +135,9 @@ public function display_element( $element, &$children_elements, $max_depth, $dep return; } + $max_depth = (int) $max_depth; + $depth = (int) $depth; + $id_field = $this->db_fields['id']; $id = $element->$id_field; @@ -191,6 +194,8 @@ public function display_element( $element, &$children_elements, $max_depth, $dep public function walk( $elements, $max_depth, ...$args ) { $output = ''; + $max_depth = (int) $max_depth; + // Invalid parameter or nothing to walk. if ( $max_depth < -1 || empty( $elements ) ) { return $output; @@ -285,12 +290,14 @@ public function walk( $elements, $max_depth, ...$args ) { * @return string XHTML of the specified page of elements. */ public function paged_walk( $elements, $max_depth, $page_num, $per_page, ...$args ) { + $output = ''; + + $max_depth = (int) $max_depth; + if ( empty( $elements ) || $max_depth < -1 ) { - return ''; + return $output; } - $output = ''; - $parent_field = $this->db_fields['parent']; $count = -1; diff --git a/tests/phpunit/tests/post/wpListPages.php b/tests/phpunit/tests/post/wpListPages.php index 38ba729cee20b..f059591219b1a 100644 --- a/tests/phpunit/tests/post/wpListPages.php +++ b/tests/phpunit/tests/post/wpListPages.php @@ -160,6 +160,42 @@ public function test_wp_list_pages_depth() { $this->assertSameIgnoreEOL( $expected, wp_list_pages( $args ) ); } + /** + * @ticket 61749 + */ + public function test_wp_list_pages_depth_equals_zero() { + $expected = ''; + + // Execute wp_list_pages() with a string to force calling wp_parse_args(). + ob_start(); + wp_list_pages( 'depth=0' ); + $output = ob_get_clean(); + + // If depth equals 0, all levels should be displayed. + $this->assertSameIgnoreEOL( $expected, $output ); + } + public function test_wp_list_pages_show_date() { $args = array( 'echo' => false, From c41304d73c32c968056abd2b1ffa19e83e9833a9 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Sat, 27 Jul 2024 00:25:44 +0000 Subject: [PATCH 174/422] General: Introduce `wp_get_wp_version()` to get unmodified version. Introduces `wp_get_wp_version()` to get an unmodified value of `$wp_version` from `wp-includes/version.php`. Some plugins modify the global in an attempt to improve security through obscurity. This practice can cause errors in WordPress so the ability to get an unmodified version is needed. Replaces instances within the code base in which `version.php` was required in order to get an unmodified value. `script-loader.php` is intentionally excluded from the replacements as the function is not always available to the file. Props debarghyabanerjee, afragen, costdev. See #61627. git-svn-id: https://develop.svn.wordpress.org/trunk@58813 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/credits.php | 5 +-- src/wp-admin/includes/dashboard.php | 5 +-- src/wp-admin/includes/import.php | 9 ++--- src/wp-admin/includes/plugin-install.php | 7 ++-- src/wp-admin/includes/theme.php | 7 ++-- src/wp-admin/includes/translation-install.php | 10 ++---- src/wp-admin/includes/update.php | 9 ++--- src/wp-includes/functions.php | 18 ++++++++++ ...s-wp-rest-pattern-directory-controller.php | 9 +---- src/wp-includes/script-loader.php | 16 +++++++-- src/wp-includes/update.php | 27 +++++---------- .../tests/functions/wpGetWpVersion.php | 34 +++++++++++++++++++ 12 files changed, 88 insertions(+), 68 deletions(-) create mode 100644 tests/phpunit/tests/functions/wpGetWpVersion.php diff --git a/src/wp-admin/includes/credits.php b/src/wp-admin/includes/credits.php index 907ee93c0bae3..1ad2a37c2bb7e 100644 --- a/src/wp-admin/includes/credits.php +++ b/src/wp-admin/includes/credits.php @@ -19,10 +19,7 @@ */ function wp_credits( $version = '', $locale = '' ) { if ( ! $version ) { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - - $version = $wp_version; + $version = wp_get_wp_version(); } if ( ! $locale ) { diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 2aeaa24e461b4..022a00174c8a0 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -1819,13 +1819,10 @@ function wp_check_browser_version() { $response = get_site_transient( 'browser_' . $key ); if ( false === $response ) { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - $url = 'http://api.wordpress.org/core/browse-happy/1.1/'; $options = array( 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), ); if ( wp_http_supports( array( 'ssl' ) ) ) { diff --git a/src/wp-admin/includes/import.php b/src/wp-admin/includes/import.php index 87ee00e5f7573..530045894c745 100644 --- a/src/wp-admin/includes/import.php +++ b/src/wp-admin/includes/import.php @@ -136,22 +136,19 @@ function wp_import_handle_upload() { * @return array Importers with metadata for each. */ function wp_get_popular_importers() { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - $locale = get_user_locale(); - $cache_key = 'popular_importers_' . md5( $locale . $wp_version ); + $cache_key = 'popular_importers_' . md5( $locale . wp_get_wp_version() ); $popular_importers = get_site_transient( $cache_key ); if ( ! $popular_importers ) { $url = add_query_arg( array( 'locale' => $locale, - 'version' => $wp_version, + 'version' => wp_get_wp_version(), ), 'http://api.wordpress.org/core/importers/1.1/' ); - $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ) ); + $options = array( 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ) ); if ( wp_http_supports( array( 'ssl' ) ) ) { $url = set_url_scheme( $url, 'https' ); diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php index 59537e21df962..38c4b50e7d049 100644 --- a/src/wp-admin/includes/plugin-install.php +++ b/src/wp-admin/includes/plugin-install.php @@ -100,9 +100,6 @@ * for more information on the make-up of possible return values depending on the value of `$action`. */ function plugins_api( $action, $args = array() ) { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - if ( is_array( $args ) ) { $args = (object) $args; } @@ -118,7 +115,7 @@ function plugins_api( $action, $args = array() ) { } if ( ! isset( $args->wp_version ) ) { - $args->wp_version = substr( $wp_version, 0, 3 ); // x.y + $args->wp_version = substr( wp_get_wp_version(), 0, 3 ); // x.y } /** @@ -168,7 +165,7 @@ function plugins_api( $action, $args = array() ) { $http_args = array( 'timeout' => 15, - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), ); $request = wp_remote_get( $url, $http_args ); diff --git a/src/wp-admin/includes/theme.php b/src/wp-admin/includes/theme.php index 64ef380fc45fe..8fc9c00f149db 100644 --- a/src/wp-admin/includes/theme.php +++ b/src/wp-admin/includes/theme.php @@ -493,9 +493,6 @@ function get_theme_feature_list( $api = true ) { * for more information on the make-up of possible return objects depending on the value of `$action`. */ function themes_api( $action, $args = array() ) { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - if ( is_array( $args ) ) { $args = (object) $args; } @@ -511,7 +508,7 @@ function themes_api( $action, $args = array() ) { } if ( ! isset( $args->wp_version ) ) { - $args->wp_version = substr( $wp_version, 0, 3 ); // x.y + $args->wp_version = substr( wp_get_wp_version(), 0, 3 ); // x.y } /** @@ -562,7 +559,7 @@ function themes_api( $action, $args = array() ) { $http_args = array( 'timeout' => 15, - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), ); $request = wp_remote_get( $url, $http_args ); diff --git a/src/wp-admin/includes/translation-install.php b/src/wp-admin/includes/translation-install.php index ef9fcc6065d09..f18bbecd9cd26 100644 --- a/src/wp-admin/includes/translation-install.php +++ b/src/wp-admin/includes/translation-install.php @@ -17,9 +17,6 @@ * @return array|WP_Error On success an associative array of translations, WP_Error on failure. */ function translations_api( $type, $args = null ) { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - if ( ! in_array( $type, array( 'plugins', 'themes', 'core' ), true ) ) { return new WP_Error( 'invalid_type', __( 'Invalid translation type.' ) ); } @@ -46,7 +43,7 @@ function translations_api( $type, $args = null ) { $options = array( 'timeout' => 3, 'body' => array( - 'wp_version' => $wp_version, + 'wp_version' => wp_get_wp_version(), 'locale' => get_locale(), 'version' => $args['version'], // Version of plugin, theme or core. ), @@ -128,10 +125,7 @@ function wp_get_available_translations() { } } - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - - $api = translations_api( 'core', array( 'version' => $wp_version ) ); + $api = translations_api( 'core', array( 'version' => wp_get_wp_version() ) ); if ( is_wp_error( $api ) || empty( $api['translations'] ) ) { return array(); diff --git a/src/wp-admin/includes/update.php b/src/wp-admin/includes/update.php index 312289f78e008..629c1be1cc639 100644 --- a/src/wp-admin/includes/update.php +++ b/src/wp-admin/includes/update.php @@ -264,10 +264,7 @@ function core_update_footer( $msg = '' ) { $cur->response = ''; } - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - - $is_development_version = preg_match( '/alpha|beta|RC/', $wp_version ); + $is_development_version = preg_match( '/alpha|beta|RC/', wp_get_wp_version() ); if ( $is_development_version ) { return sprintf( @@ -854,8 +851,6 @@ function wp_theme_update_row( $theme_key, $theme ) { * @return void|false */ function maintenance_nag() { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; global $upgrading; $nag = isset( $upgrading ); @@ -873,7 +868,7 @@ function maintenance_nag() { * This flag is cleared whenever a successful update occurs using Core_Upgrader. */ $comparison = ! empty( $failed['critical'] ) ? '>=' : '>'; - if ( isset( $failed['attempted'] ) && version_compare( $failed['attempted'], $wp_version, $comparison ) ) { + if ( isset( $failed['attempted'] ) && version_compare( $failed['attempted'], wp_get_wp_version(), $comparison ) ) { $nag = true; } } diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index e821f6f2b08be..91afbecf963e1 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -9006,3 +9006,21 @@ function wp_admin_notice( $message, $args = array() ) { echo wp_kses_post( wp_get_admin_notice( $message, $args ) ); } + +/** + * Returns the current WordPress Version. + * + * Returns an unmodified version of `$wp_version`. Some plugins modify the + * global in an attempt to improve security through obscurity. This + * practice can cause errors in WordPress so the ability to get an + * unmodified version is needed. + * + * @since 6.7.0 + * + * @return string The current WordPress Version. + */ +function wp_get_wp_version() { + require ABSPATH . WPINC . '/version.php'; + + return $wp_version; +} diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php index 41f37c9f1db8d..3345ea0aa18a7 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php @@ -87,13 +87,6 @@ public function get_items_permissions_check( $request ) { * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { - /* - * Include an unmodified `$wp_version`, so the API can craft a response that's tailored to - * it. Some plugins modify the version in a misguided attempt to improve security by - * obscuring the version, which can cause invalid requests. - */ - require ABSPATH . WPINC . '/version.php'; - $valid_query_args = array( 'offset' => true, 'order' => true, @@ -106,7 +99,7 @@ public function get_items( $request ) { $query_args = array_intersect_key( $request->get_params(), $valid_query_args ); $query_args['locale'] = get_user_locale(); - $query_args['wp-version'] = $wp_version; + $query_args['wp-version'] = wp_get_wp_version(); $query_args['pattern-categories'] = isset( $request['category'] ) ? $request['category'] : false; $query_args['pattern-keywords'] = isset( $request['keyword'] ) ? $request['keyword'] : false; diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index b73f12b9cc37b..121adc646e0ad 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -684,7 +684,13 @@ function wp_scripts_get_suffix( $type = '' ) { static $suffixes; if ( null === $suffixes ) { - // Include an unmodified $wp_version. + /* + * Include an unmodified $wp_version. + * + * Note: wp_get_wp_version() is not used here, as this file can be included + * via wp-admin/load-scripts.php or wp-admin/load-styles.php, in which case + * wp-includes/functions.php is not loaded. + */ require ABSPATH . WPINC . '/version.php'; /* @@ -1522,7 +1528,13 @@ function wp_default_scripts( $scripts ) { function wp_default_styles( $styles ) { global $editor_styles; - // Include an unmodified $wp_version. + /* + * Include an unmodified $wp_version. + * + * Note: wp_get_wp_version() is not used here, as this file can be included + * via wp-admin/load-scripts.php or wp-admin/load-styles.php, in which case + * wp-includes/functions.php is not loaded. + */ require ABSPATH . WPINC . '/version.php'; if ( ! defined( 'SCRIPT_DEBUG' ) ) { diff --git a/src/wp-includes/update.php b/src/wp-includes/update.php index d521913bb93e4..f8aa27bd8d7bf 100644 --- a/src/wp-includes/update.php +++ b/src/wp-includes/update.php @@ -31,22 +31,20 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { return; } - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; $php_version = PHP_VERSION; $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes. - if ( is_object( $current ) && $wp_version !== $current->version_checked ) { + if ( is_object( $current ) && wp_get_wp_version() !== $current->version_checked ) { $current = false; } if ( ! is_object( $current ) ) { $current = new stdClass(); $current->updates = array(); - $current->version_checked = $wp_version; + $current->version_checked = wp_get_wp_version(); } if ( ! empty( $extra_stats ) ) { @@ -95,7 +93,7 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { $extensions = get_loaded_extensions(); sort( $extensions, SORT_STRING | SORT_FLAG_CASE ); $query = array( - 'version' => $wp_version, + 'version' => wp_get_wp_version(), 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, @@ -191,7 +189,7 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { $options = array( 'timeout' => $doing_cron ? 30 : 3, - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ), @@ -266,7 +264,7 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) { $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); - $updates->version_checked = $wp_version; + $updates->version_checked = wp_get_wp_version(); if ( isset( $body['translations'] ) ) { $updates->translations = $body['translations']; @@ -315,9 +313,6 @@ function wp_update_plugins( $extra_stats = array() ) { return; } - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - // If running blog-side, bail unless we've not checked in the last 12 hours. if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; @@ -423,7 +418,7 @@ function wp_update_plugins( $extra_stats = array() ) { 'locale' => wp_json_encode( $locales ), 'all' => wp_json_encode( true ), ), - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), ); if ( $extra_stats ) { @@ -590,9 +585,6 @@ function wp_update_themes( $extra_stats = array() ) { return; } - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); @@ -705,7 +697,7 @@ function wp_update_themes( $extra_stats = array() ) { 'translations' => wp_json_encode( $translations ), 'locale' => wp_json_encode( $locales ), ), - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), + 'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ), ); if ( $extra_stats ) { @@ -989,14 +981,11 @@ function wp_get_update_data() { * @global string $wp_version The WordPress version string. */ function _maybe_update_core() { - // Include an unmodified $wp_version. - require ABSPATH . WPINC . '/version.php'; - $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked, $current->version_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) - && $current->version_checked === $wp_version + && wp_get_wp_version() === $current->version_checked ) { return; } diff --git a/tests/phpunit/tests/functions/wpGetWpVersion.php b/tests/phpunit/tests/functions/wpGetWpVersion.php new file mode 100644 index 0000000000000..d10d946e3baea --- /dev/null +++ b/tests/phpunit/tests/functions/wpGetWpVersion.php @@ -0,0 +1,34 @@ +assertSame( $GLOBALS['wp_version'], wp_get_wp_version() ); + } + + /** + * Tests that changes to the `$wp_version` global are ignored. + * + * @ticket 61627 + */ + public function test_should_ignore_changes_to_wp_version_global() { + $original_wp_version = $GLOBALS['wp_version']; + $GLOBALS['wp_version'] = 'modified_wp_version'; + $actual = wp_get_wp_version(); + $GLOBALS['wp_version'] = $original_wp_version; + + $this->assertSame( $original_wp_version, $actual ); + } +} From d497e92424a70cd999f8ca5956aa70ccb32ed976 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 27 Jul 2024 07:50:32 +0000 Subject: [PATCH 175/422] Docs: Clarify the description for `wp_strip_all_tags()`. Follow-up to [11929], [27042]. Props coffee2code, krupalpanchal, mukesh27. Fixes #61759. git-svn-id: https://develop.svn.wordpress.org/trunk@58814 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/formatting.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index cd1ee2689489e..d170728e015b5 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -5499,11 +5499,11 @@ function normalize_whitespace( $str ) { } /** - * Properly strips all HTML tags including script and style + * Properly strips all HTML tags including 'script' and 'style'. * * This differs from strip_tags() because it removes the contents of * the `' )` - * will return 'something'. wp_strip_all_tags will return '' + * will return 'something'. wp_strip_all_tags() will return an empty string. * * @since 2.9.0 * From 916a9925306c4f315a22a499c3624fb923d227fd Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 27 Jul 2024 09:22:35 +0000 Subject: [PATCH 176/422] Twenty Thirteen: Fixes Code block not adjusting to font size changes. This resolves the Code block not changing when the font sizes are switched. This theme uses a 14 px size for both and this uses inherit when nested inside pre tag. Props viralsampat, sabernhardt. Fixes #61697. git-svn-id: https://develop.svn.wordpress.org/trunk@58815 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentythirteen/css/editor-style.css | 4 ++++ src/wp-content/themes/twentythirteen/style.css | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/wp-content/themes/twentythirteen/css/editor-style.css b/src/wp-content/themes/twentythirteen/css/editor-style.css index 24297fd5b88b4..5da64436b3983 100644 --- a/src/wp-content/themes/twentythirteen/css/editor-style.css +++ b/src/wp-content/themes/twentythirteen/css/editor-style.css @@ -174,6 +174,10 @@ pre { word-wrap: break-word; } +pre code { + font-size: inherit; +} + blockquote, q { quotes: none; diff --git a/src/wp-content/themes/twentythirteen/style.css b/src/wp-content/themes/twentythirteen/style.css index 058f7caf1abc1..2a5b83fb30ce1 100644 --- a/src/wp-content/themes/twentythirteen/style.css +++ b/src/wp-content/themes/twentythirteen/style.css @@ -231,6 +231,10 @@ pre { word-wrap: break-word; } +pre code { + font-size: inherit; +} + blockquote, q { -webkit-hyphens: none; From a3e07a2ec026aebc520385dc781cb10936e93d97 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 27 Jul 2024 09:35:19 +0000 Subject: [PATCH 177/422] Multiple themes: Fixes Code block not adjusting to font size changes. This resolves the Code block not changing when the font sizes are switched in Twenty Eleven and Twenty Twelve. The solution is the same as used for other code block adjustments for font sizes. Props viralsampat, sabernhardt. Fixes #61753. git-svn-id: https://develop.svn.wordpress.org/trunk@58816 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyeleven/editor-style.css | 3 +++ src/wp-content/themes/twentyeleven/style.css | 3 +++ src/wp-content/themes/twentytwelve/editor-style.css | 3 +++ src/wp-content/themes/twentytwelve/style.css | 1 + 4 files changed, 10 insertions(+) diff --git a/src/wp-content/themes/twentyeleven/editor-style.css b/src/wp-content/themes/twentyeleven/editor-style.css index 77342bf691c8e..b9717cd002a90 100644 --- a/src/wp-content/themes/twentyeleven/editor-style.css +++ b/src/wp-content/themes/twentyeleven/editor-style.css @@ -119,6 +119,9 @@ pre { code, kbd, samp, var { font: 13px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; } +pre code { + font-size: inherit; +} abbr, acronym, dfn { border-bottom: 1px dotted #666; cursor: help; diff --git a/src/wp-content/themes/twentyeleven/style.css b/src/wp-content/themes/twentyeleven/style.css index fb10237ba77f8..dca83cfe9a4af 100644 --- a/src/wp-content/themes/twentyeleven/style.css +++ b/src/wp-content/themes/twentyeleven/style.css @@ -408,6 +408,9 @@ pre { code, kbd, samp, var { font: 13px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; } +pre code { + font-size: inherit; +} abbr, acronym, dfn { border-bottom: 1px dotted #666; cursor: help; diff --git a/src/wp-content/themes/twentytwelve/editor-style.css b/src/wp-content/themes/twentytwelve/editor-style.css index d3934a9151dfa..9d3b015485309 100644 --- a/src/wp-content/themes/twentytwelve/editor-style.css +++ b/src/wp-content/themes/twentytwelve/editor-style.css @@ -157,6 +157,9 @@ var { font-size: 0.857142857rem; line-height: 2; } +pre code { + font-size: inherit; +} abbr, acronym, dfn { diff --git a/src/wp-content/themes/twentytwelve/style.css b/src/wp-content/themes/twentytwelve/style.css index 21b797f2ecf4a..0ad16374804e3 100644 --- a/src/wp-content/themes/twentytwelve/style.css +++ b/src/wp-content/themes/twentytwelve/style.css @@ -903,6 +903,7 @@ article.sticky .featured-post { .entry-content pre code, .comment-content pre code { display: block; + font-size: inherit; } .entry-content abbr, .comment-content abbr, From 5159e54b10503da0562c1f4e2ffa3611b28bebf8 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 27 Jul 2024 10:12:31 +0000 Subject: [PATCH 178/422] Twenty Twenty: Adds Plain Style into Quote block. Plan style was missing for the Quote block. This brings it in as should have been originally. Props kajalgohel, devtanbir, costdev, sabernhardt. Fixes #56011. git-svn-id: https://develop.svn.wordpress.org/trunk@58817 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentytwenty/assets/css/editor-style-block-rtl.css | 5 +++++ .../themes/twentytwenty/assets/css/editor-style-block.css | 5 +++++ src/wp-content/themes/twentytwenty/style-rtl.css | 7 +++++++ src/wp-content/themes/twentytwenty/style.css | 7 +++++++ 4 files changed, 24 insertions(+) diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css index f228e5d0ccf25..3b94567345077 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css @@ -683,6 +683,11 @@ hr.wp-block-separator.is-style-dots::before { letter-spacing: inherit; } +.editor-styles-wrapper .wp-block-quote.is-style-plain { + border-width: 0; + padding: 5px 20px; +} + .editor-styles-wrapper .wp-block-quote.is-style-large { border: none; padding: 0; diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css index 5287a99d11794..2957482e044e6 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css @@ -687,6 +687,11 @@ hr.wp-block-separator.is-style-dots::before { letter-spacing: inherit; } +.editor-styles-wrapper .wp-block-quote.is-style-plain { + border-width: 0; + padding: 5px 20px; +} + .editor-styles-wrapper .wp-block-quote.is-style-large { border: none; padding: 0; diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index 2fc1a9bfbc7e2..210e858f0d6bc 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -3405,6 +3405,13 @@ figure.wp-block-table.is-style-stripes { padding: 0 2rem 0 0; } +/* STYLE: PLAIN */ + +.wp-block-quote.is-style-plain { + border-width: 0; + padding: 0.5rem 2rem; +} + /* STYLE: LARGE */ .wp-block-quote.is-large, diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index 1a802509a4785..4113ace6efc6e 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -3429,6 +3429,13 @@ figure.wp-block-table.is-style-stripes { /*rtl:end:ignore*/ } +/* STYLE: PLAIN */ + +.wp-block-quote.is-style-plain { + border-width: 0; + padding: 0.5rem 2rem; +} + /* STYLE: LARGE */ .wp-block-quote.is-large, From 859263db0657a7f536fdeefe60a1225ceb6fd4f7 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 27 Jul 2024 12:32:21 +0000 Subject: [PATCH 179/422] Twenty Twenty-Three: Fixes unnecessary borders for links images in Whisper variation. This fixes the Whisper variation having borders for links images. Other styles did not have this. Props colorful-tones, sabernhardt. Fixes #57368. git-svn-id: https://develop.svn.wordpress.org/trunk@58818 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentytwentythree/styles/whisper.json | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/wp-content/themes/twentytwentythree/styles/whisper.json b/src/wp-content/themes/twentytwentythree/styles/whisper.json index 3fd195eaac4c7..d1e677be4ec21 100644 --- a/src/wp-content/themes/twentytwentythree/styles/whisper.json +++ b/src/wp-content/themes/twentytwentythree/styles/whisper.json @@ -83,6 +83,20 @@ }, "styles": { "blocks": { + "core/image": { + "elements": { + "link": { + "border": { + "width": "0" + }, + ":hover": { + "color": { + "background": "transparent" + } + } + } + } + }, "core/navigation": { "color": { "text": "var(--wp--preset--color--contrast)" @@ -169,6 +183,20 @@ } } }, + "core/post-featured-image": { + "elements": { + "link": { + "border": { + "width": "0" + }, + ":hover": { + "color": { + "background": "transparent" + } + } + } + } + }, "core/post-title": { "elements": { "link": { @@ -251,6 +279,15 @@ "width": "6px 0 0 0" } }, + "core/site-logo": { + "elements": { + "link": { + "border": { + "width": "0" + } + } + } + }, "core/site-title": { "elements": { "link": { From defe4b0ec5395ecc2e56ba02b802f5b8e47223c2 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sat, 27 Jul 2024 16:41:08 +0000 Subject: [PATCH 180/422] Twenty Twenty: Calendar and Table blocks do not apply custom font size. This fixes adding a custom font size to a Calendar and Table block. This was only an issue for custom font size entering. Props nidhidhandhukiya, yurajsinj2211, ankit-k-gupta, anveshika, sabernhardt, darshitrajyaguru97, shailu25, umesh84, SergeyBiryukov. Fixes #59996, #56157. git-svn-id: https://develop.svn.wordpress.org/trunk@58819 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/style-rtl.css | 9 +++++++++ src/wp-content/themes/twentytwenty/style.css | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index 210e858f0d6bc..e346329449895 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -3041,6 +3041,15 @@ ol.wp-block-latest-comments { letter-spacing: inherit; } +/* Block: Calendar --------------------------- */ + +.wp-block-calendar[class*="-font-size"] table, +.wp-block-calendar[style*="font-size"] table, +.wp-block-calendar[class*="-font-size"] .wp-calendar-nav, +.wp-block-calendar[style*="font-size"] .wp-calendar-nav { + font-size: inherit; +} + /* Block: Columns ---------------------------- */ .wp-block-columns.alignfull, diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index 4113ace6efc6e..305dc375e1fa4 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -3061,6 +3061,15 @@ ol.wp-block-latest-comments { letter-spacing: inherit; } +/* Block: Calendar --------------------------- */ + +.wp-block-calendar[class*="-font-size"] table, +.wp-block-calendar[style*="font-size"] table, +.wp-block-calendar[class*="-font-size"] .wp-calendar-nav, +.wp-block-calendar[style*="font-size"] .wp-calendar-nav { + font-size: inherit; +} + /* Block: Columns ---------------------------- */ .wp-block-columns.alignfull, From b59bc83af44b5895b9e2d790c8ead43a1b91a281 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Sat, 27 Jul 2024 23:04:51 +0000 Subject: [PATCH 181/422] Application Passwords: Open documentation link in same window. Removes the `target` to to documentation for [https://developer.wordpress.org/apis/wp-config-php/#wp-environment-type setting the environment type] for applications passwords so the tabs open in the same window. This follows [58137] which added a confirmation prompt for users navigating away from the profile edit screen if they have changed data without saving it. Props sabernhardt, joedolson. Fixes #60100. git-svn-id: https://develop.svn.wordpress.org/trunk@58820 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/user-edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php index 07810adc7a841..860a0a6e07340 100644 --- a/src/wp-admin/user-edit.php +++ b/src/wp-admin/user-edit.php @@ -859,7 +859,7 @@ set the environment type accordingly to enable application passwords.' ), + __( 'If this is a development website, you can set the environment type accordingly to enable application passwords.' ), __( 'https://developer.wordpress.org/apis/wp-config-php/#wp-environment-type' ) ); ?> From a3173b65060a2dd6c4c2cdcbc6dd81ed693f4c41 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 28 Jul 2024 18:25:13 +0000 Subject: [PATCH 182/422] Feeds: Introduce `feed_links_args` and `feed_links_extra_args` filters. This allows for more flexibility in modifying how feed links are displayed by the `feed_links()` and `feed_links_extra()` functions, including, for example, a way to change the `»` separator to something else. Follow-up to [10377], [33838], [33839], [53125], [54161]. Props topdownjimmy, tw2113, williampatton. Fixes #43225. git-svn-id: https://develop.svn.wordpress.org/trunk@58821 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/general-template.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index bf70defd38701..f199000b5cd53 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -3120,6 +3120,15 @@ function feed_links( $args = array() ) { $args = wp_parse_args( $args, $defaults ); + /** + * Filters the feed links arguments. + * + * @since 6.7.0 + * + * @param array $args An array of feed links arguments. + */ + $args = apply_filters( 'feed_links_args', $args ); + /** * Filters whether to display the posts feed link. * @@ -3182,6 +3191,15 @@ function feed_links_extra( $args = array() ) { $args = wp_parse_args( $args, $defaults ); + /** + * Filters the extra feed links arguments. + * + * @since 6.7.0 + * + * @param array $args An array of extra feed links arguments. + */ + $args = apply_filters( 'feed_links_extra_args', $args ); + if ( is_singular() ) { $id = 0; $post = get_post( $id ); From c1ffe3309abbda7abecdd292ad43309f3ea59495 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Mon, 29 Jul 2024 01:57:11 +0000 Subject: [PATCH 183/422] Users: Always use HTTPS URLs for Gravatar links. Modifies gravatar image URLs to always use the HTTPS version from secure.gravatar.com. Gravatar now redirects HTTP image requests to their HTTPS equivalent, resulting in redirects for sites running over an HTTP connection (`is_ssl() === false`). Since the introduction of HTTP/2 the use of sub-domains for different hashes ([1-3].gravatar.com) now represents a performance hinderance rather than improvement. The scheme passed to `get_avatar_data()` is now ignored for the generation of Gravatar URLs but the setting retained to avoid introducing bugs for sites using either local avatars or third party providers. Props neoxx, SergeyBiryukov, sippis, peterwilsoncc, mukesh27, costdev, dd32. Fixes #37454. git-svn-id: https://develop.svn.wordpress.org/trunk@58822 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/link-template.php | 21 ++++++----- tests/phpunit/tests/avatar.php | 20 ++++++++--- .../tests/rest-api/rest-schema-setup.php | 6 ++-- tests/qunit/fixtures/wp-api-generated.js | 36 +++++++++---------- 4 files changed, 48 insertions(+), 35 deletions(-) diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php index 37e8684bf0d8e..426da57c392fa 100644 --- a/src/wp-includes/link-template.php +++ b/src/wp-includes/link-template.php @@ -4328,6 +4328,7 @@ function is_avatar_comment_type( $comment_type ) { * Retrieves default data about the avatar. * * @since 4.2.0 + * @since 6.7.0 Gravatar URLs always use HTTPS. * * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash, * user email, WP_User object, WP_Post object, or WP_Comment object. @@ -4358,6 +4359,9 @@ function is_avatar_comment_type( $comment_type ) { * - 'X' (even more mature than above) * Default is the value of the 'avatar_rating' option. * @type string $scheme URL scheme to use. See set_url_scheme() for accepted values. + * For Gravatars this setting is ignored and HTTPS is used to avoid + * unnecessary redirects. The setting is retained for systems using + * the {@see 'pre_get_avatar_data'} filter to customize avatars. * Default null. * @type array $processed_args When the function returns, the value will be the processed/sanitized $args * plus a "found_avatar" guess. Pass as a reference. Default null. @@ -4508,9 +4512,6 @@ function get_avatar_data( $id_or_email, $args = null ) { if ( $email_hash ) { $args['found_avatar'] = true; - $gravatar_server = hexdec( $email_hash[0] ) % 3; - } else { - $gravatar_server = rand( 0, 2 ); } $url_args = array( @@ -4520,15 +4521,17 @@ function get_avatar_data( $id_or_email, $args = null ) { 'r' => $args['rating'], ); - if ( is_ssl() ) { - $url = 'https://secure.gravatar.com/avatar/' . $email_hash; - } else { - $url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash ); - } + /* + * Gravatars are always served over HTTPS. + * + * The Gravatar website redirects HTTP requests to HTTPS URLs so always + * use the HTTPS scheme to avoid unnecessary redirects. + */ + $url = 'https://secure.gravatar.com/avatar/' . $email_hash; $url = add_query_arg( rawurlencode_deep( array_filter( $url_args ) ), - set_url_scheme( $url, $args['scheme'] ) + $url ); /** diff --git a/tests/phpunit/tests/avatar.php b/tests/phpunit/tests/avatar.php index 32ff9ac648f8d..97f24841e372b 100644 --- a/tests/phpunit/tests/avatar.php +++ b/tests/phpunit/tests/avatar.php @@ -11,7 +11,7 @@ class Tests_Avatar extends WP_UnitTestCase { */ public function test_get_avatar_url_gravatar_url() { $url = get_avatar_url( 1 ); - $this->assertSame( preg_match( '|^http?://[0-9]+.gravatar.com/avatar/[0-9a-f]{32}\?|', $url ), 1 ); + $this->assertSame( preg_match( '|^https?://secure.gravatar.com/avatar/[0-9a-f]{32}\?|', $url ), 1 ); } /** @@ -56,19 +56,29 @@ public function test_get_avatar_url_rating() { } /** + * Ensures the get_avatar_url always returns an HTTPS scheme for gravatars. + * * @ticket 21195 + * @ticket 37454 + * + * @covers ::get_avatar_url */ public function test_get_avatar_url_scheme() { $url = get_avatar_url( 1 ); - $this->assertSame( preg_match( '|^http://|', $url ), 1 ); + $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Avatars should default to the HTTPS scheme' ); $args = array( 'scheme' => 'https' ); $url = get_avatar_url( 1, $args ); - $this->assertSame( preg_match( '|^https://|', $url ), 1 ); + $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Requesting the HTTPS scheme should be respected' ); + + $args = array( 'scheme' => 'http' ); + $url = get_avatar_url( 1, $args ); + $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Requesting the HTTP scheme should return an HTTPS URL to avoid redirects' ); $args = array( 'scheme' => 'lolcat' ); $url = get_avatar_url( 1, $args ); - $this->assertSame( preg_match( '|^lolcat://|', $url ), 0 ); + $this->assertSame( preg_match( '|^lolcat://|', $url ), 0, 'Unrecognized schemes should be ignored' ); + $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Unrecognized schemes should return an HTTPS URL' ); } /** @@ -257,7 +267,7 @@ public function test_get_avatar_data_should_return_gravatar_url_when_input_avata $actual_data = get_avatar_data( $comment ); $this->assertTrue( is_avatar_comment_type( $comment_type ) ); - $this->assertMatchesRegularExpression( '|^http?://[0-9]+.gravatar.com/avatar/[0-9a-f]{32}\?|', $actual_data['url'] ); + $this->assertMatchesRegularExpression( '|^https?://secure.gravatar.com/avatar/[0-9a-f]{32}\?|', $actual_data['url'] ); } /** diff --git a/tests/phpunit/tests/rest-api/rest-schema-setup.php b/tests/phpunit/tests/rest-api/rest-schema-setup.php index 3c5b8a1966b7f..4d5c269357a68 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-setup.php +++ b/tests/phpunit/tests/rest-api/rest-schema-setup.php @@ -729,9 +729,9 @@ public function test_build_wp_api_client_fixtures() { 'TagModel.meta.test_multi' => array(), 'TagModel.meta.test_tag_meta' => '', 'UsersCollection.0.link' => 'http://example.org/?author=1', - 'UsersCollection.0.avatar_urls.24' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g', - 'UsersCollection.0.avatar_urls.48' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g', - 'UsersCollection.0.avatar_urls.96' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g', + 'UsersCollection.0.avatar_urls.24' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g', + 'UsersCollection.0.avatar_urls.48' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g', + 'UsersCollection.0.avatar_urls.96' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g', 'UsersCollection.0._links.self.0.href' => 'http://example.org/index.php?rest_route=/wp/v2/users/1', 'UsersCollection.0._links.collection.0.href' => 'http://example.org/index.php?rest_route=/wp/v2/users', 'UsersCollection.1.id' => 2, diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index a5a2d3622eb0f..7e97f19b18588 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -13748,9 +13748,9 @@ mockedApiResponse.UsersCollection = [ "link": "http://example.org/?author=1", "slug": "admin", "avatar_urls": { - "24": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g", - "48": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g", - "96": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g" }, "meta": { "meta_key": "meta_value" @@ -13776,9 +13776,9 @@ mockedApiResponse.UsersCollection = [ "link": "http://example.org/?author=2", "slug": "restapiclientfixtureuser", "avatar_urls": { - "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", - "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", - "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" }, "meta": { "meta_key": "" @@ -13806,9 +13806,9 @@ mockedApiResponse.UserModel = { "link": "http://example.org/?author=2", "slug": "restapiclientfixtureuser", "avatar_urls": { - "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", - "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", - "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" }, "meta": { "meta_key": "" @@ -13823,9 +13823,9 @@ mockedApiResponse.me = { "link": "http://example.org/?author=2", "slug": "restapiclientfixtureuser", "avatar_urls": { - "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", - "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", - "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g" }, "meta": { "meta_key": "" @@ -13849,9 +13849,9 @@ mockedApiResponse.CommentsCollection = [ "status": "approved", "type": "comment", "author_avatar_urls": { - "24": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g", - "48": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g", - "96": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g" }, "meta": { "meta_key": "meta_value" @@ -13894,9 +13894,9 @@ mockedApiResponse.CommentModel = { "status": "approved", "type": "comment", "author_avatar_urls": { - "24": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g", - "48": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g", - "96": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g" + "24": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g", + "48": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g", + "96": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g" }, "meta": { "meta_key": "meta_value" From bc87db7201e690d85c48e08409a38fc20f78fcea Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 29 Jul 2024 09:30:34 +0000 Subject: [PATCH 184/422] Twenty Seventeen: Fixes floated images having an extra space when the first image. The first image when floated in content had extra spacing. This was only for the first image in testing so the solution focuses on that. Props kjellr, sabernhardt, hmbashar, shailu25. Fixes #46785. git-svn-id: https://develop.svn.wordpress.org/trunk@58823 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyseventeen/assets/css/blocks.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css index 65efb8378a16c..46ecf2ca15ffe 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css @@ -53,10 +53,12 @@ p.has-drop-cap:not(:focus)::first-letter { } .wp-block-image figure.alignleft { + margin-top: 0; margin-right: 1.5em; } .wp-block-image figure.alignright { + margin-top: 0; margin-left: 1.5em; } @@ -70,6 +72,11 @@ p.has-drop-cap:not(:focus)::first-letter { box-shadow: none; } +.entry-content > .wp-block-image:first-child figure.alignleft, +.entry-content > .wp-block-image:first-child figure.alignright { + margin-top: 1.5em; +} + /* Gallery */ .wp-block-gallery { From 907412bf9867dd20265f27721baad3241ab39699 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 29 Jul 2024 10:08:22 +0000 Subject: [PATCH 185/422] Twenty Twenty: Fixes Table font size when custom showing on front. The Table block was not reflecting the custom font size on the front. This solution now brings custom font sizes in for front the same as back in the editor. Props umesh84, SergeyBiryukov, sabernhardt, shailu25. Fixes #56157. git-svn-id: https://develop.svn.wordpress.org/trunk@58824 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/style-rtl.css | 5 +++++ src/wp-content/themes/twentytwenty/style.css | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/wp-content/themes/twentytwenty/style-rtl.css b/src/wp-content/themes/twentytwenty/style-rtl.css index e346329449895..dc17ce27df54c 100644 --- a/src/wp-content/themes/twentytwenty/style-rtl.css +++ b/src/wp-content/themes/twentytwenty/style-rtl.css @@ -3389,6 +3389,11 @@ figure.wp-block-table.is-style-stripes { border-collapse: inherit; } +.wp-block-table[class*="-font-size"] table, +.wp-block-table[style*="font-size"] table { + font-size: inherit; +} + /* Block: Quote ------------------------------ */ .wp-block-quote p, diff --git a/src/wp-content/themes/twentytwenty/style.css b/src/wp-content/themes/twentytwenty/style.css index 305dc375e1fa4..3ee6dbc431f3a 100644 --- a/src/wp-content/themes/twentytwenty/style.css +++ b/src/wp-content/themes/twentytwenty/style.css @@ -3409,6 +3409,11 @@ figure.wp-block-table.is-style-stripes { border-collapse: inherit; } +.wp-block-table[class*="-font-size"] table, +.wp-block-table[style*="font-size"] table { + font-size: inherit; +} + /* Block: Quote ------------------------------ */ .wp-block-quote p, From 679cc0c4a261a77bd8fdb140cd9b0b2ff80ebf37 Mon Sep 17 00:00:00 2001 From: luisherranz Date: Mon, 29 Jul 2024 11:08:18 +0000 Subject: [PATCH 186/422] Interactivity API: Allow server derived state to appear in non-final position In some cases, derived state returns an associative array. Directives may wish to continue to access properties of the associative array, when using the syntax `state.arrayReturnedByClosure.property`. This patch continues evaluating the path after the associative array has been returned by the Closure. Props jonsurrell, luisherranz. Fixes #61741. git-svn-id: https://develop.svn.wordpress.org/trunk@58825 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-interactivity-api.php | 51 ++++++++++--------- .../interactivity-api/wpInteractivityAPI.php | 24 ++++++++- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/wp-includes/interactivity-api/class-wp-interactivity-api.php b/src/wp-includes/interactivity-api/class-wp-interactivity-api.php index 50fb4d6ac216f..b552d07938e07 100644 --- a/src/wp-includes/interactivity-api/class-wp-interactivity-api.php +++ b/src/wp-includes/interactivity-api/class-wp-interactivity-api.php @@ -494,6 +494,7 @@ private function _process_directives( string $html ) { * @since 6.5.0 * @since 6.6.0 The function now adds a warning when the namespace is null, falsy, or the directive value is empty. * @since 6.6.0 Removed `default_namespace` and `context` arguments. + * @since 6.6.0 Add support for derived state. * * @param string|true $directive_value The directive attribute value string or `true` when it's a boolean attribute. * @return mixed|null The result of the evaluation. Null if the reference path doesn't exist or the namespace is falsy. @@ -530,32 +531,32 @@ private function evaluate( $directive_value ) { } else { return null; } - } - if ( $current instanceof Closure ) { - /* - * This state getter's namespace is added to the stack so that - * `state()` or `get_config()` read that namespace when called - * without specifying one. - */ - array_push( $this->namespace_stack, $ns ); - try { - $current = $current(); - } catch ( Throwable $e ) { - _doing_it_wrong( - __METHOD__, - sprintf( - /* translators: 1: Path pointing to an Interactivity API state property, 2: Namespace for an Interactivity API store. */ - __( 'Uncaught error executing a derived state callback with path "%1$s" and namespace "%2$s".' ), - $path, - $ns - ), - '6.6.0' - ); - return null; - } finally { - // Remove the property's namespace from the stack. - array_pop( $this->namespace_stack ); + if ( $current instanceof Closure ) { + /* + * This state getter's namespace is added to the stack so that + * `state()` or `get_config()` read that namespace when called + * without specifying one. + */ + array_push( $this->namespace_stack, $ns ); + try { + $current = $current(); + } catch ( Throwable $e ) { + _doing_it_wrong( + __METHOD__, + sprintf( + /* translators: 1: Path pointing to an Interactivity API state property, 2: Namespace for an Interactivity API store. */ + __( 'Uncaught error executing a derived state callback with path "%1$s" and namespace "%2$s".' ), + $path, + $ns + ), + '6.6.0' + ); + return null; + } finally { + // Remove the property's namespace from the stack. + array_pop( $this->namespace_stack ); + } } } diff --git a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php index b9cc2c0b83fac..e9349190ebdb2 100644 --- a/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php +++ b/tests/phpunit/tests/interactivity-api/wpInteractivityAPI.php @@ -1297,7 +1297,6 @@ public function test_evaluate_derived_state_defined_in_different_namespace() { $this->assertSame( "Derived state: otherPlugin-state\nDerived context: otherPlugin-context", $result ); } - /** * Tests the `evaluate` method for derived state functions that throw. * @@ -1322,6 +1321,29 @@ public function test_evaluate_derived_state_that_throws() { $this->assertNull( $result ); } + /** + * Tests the `evaluate` method for derived state intermediate values. + * + * @ticket 61741 + * + * @covers ::evaluate + */ + public function test_evaluate_derived_state_intermediate() { + $this->interactivity->state( + 'myPlugin', + array( + 'derivedState' => function () { + return array( 'property' => 'value' ); + }, + ) + ); + $this->set_internal_context_stack(); + $this->set_internal_namespace_stack( 'myPlugin' ); + + $result = $this->evaluate( 'state.derivedState.property' ); + $this->assertSame( 'value', $result ); + } + /** * Tests the `kebab_to_camel_case` method. * From 3977e6281df1c1c60fa4fce2496f31408f29fb04 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 29 Jul 2024 14:50:44 +0000 Subject: [PATCH 187/422] General: Move `wp_get_wp_version()` to a more appropriate place. This places the function in a more predictable location, next to the `is_wp_version_compatible()` and `is_php_version_compatible()` functions. Follow-up to [58813]. See #61627. git-svn-id: https://develop.svn.wordpress.org/trunk@58826 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 91afbecf963e1..a8843038935c2 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -8807,6 +8807,23 @@ function clean_dirsize_cache( $path ) { set_transient( 'dirsize_cache', $directory_cache, $expiration ); } +/** + * Returns the current WordPress version. + * + * Returns an unmodified value of `$wp_version`. Some plugins modify the global + * in an attempt to improve security through obscurity. This practice can cause + * errors in WordPress, so the ability to get an unmodified version is needed. + * + * @since 6.7.0 + * + * @return string The current WordPress version. + */ +function wp_get_wp_version() { + require ABSPATH . WPINC . '/version.php'; + + return $wp_version; +} + /** * Checks compatibility with the current WordPress version. * @@ -9006,21 +9023,3 @@ function wp_admin_notice( $message, $args = array() ) { echo wp_kses_post( wp_get_admin_notice( $message, $args ) ); } - -/** - * Returns the current WordPress Version. - * - * Returns an unmodified version of `$wp_version`. Some plugins modify the - * global in an attempt to improve security through obscurity. This - * practice can cause errors in WordPress so the ability to get an - * unmodified version is needed. - * - * @since 6.7.0 - * - * @return string The current WordPress Version. - */ -function wp_get_wp_version() { - require ABSPATH . WPINC . '/version.php'; - - return $wp_version; -} From 883d9b673185e9f0b40ac9929a59f4725af379d9 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 29 Jul 2024 15:00:44 +0000 Subject: [PATCH 188/422] General: Memoize the return value in `wp_get_wp_version()`. This aims to optimize performance by saving the return value to a static variable, so that the `version.php` file is not unnecessarily required on each function call. Follow-up to [58813]. Props Cybr, debarghyabanerjee, mukesh27. Fixes #61782. See #61627. git-svn-id: https://develop.svn.wordpress.org/trunk@58827 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index a8843038935c2..136012dd07284 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -8819,7 +8819,11 @@ function clean_dirsize_cache( $path ) { * @return string The current WordPress version. */ function wp_get_wp_version() { - require ABSPATH . WPINC . '/version.php'; + static $wp_version; + + if ( ! isset( $wp_version ) ) { + require ABSPATH . WPINC . '/version.php'; + } return $wp_version; } From c73d8a441521d3fe792c3f1ea4cff048fc358dcd Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 29 Jul 2024 17:37:48 +0000 Subject: [PATCH 189/422] HTML API: Close all elements at the end of a document. When the model of breadcrumb generation in the HTML Processor and node traversal was simplified, the change introduced a bug whereby unclosed nodes at the end of a document would remain unvisited and unclosed. In this patch, a fix is applied to ensure that all open elements close while traversing a document. A couple of minor documentation typos are fixed in the patch as well. Developed in https://github.com/wordpress/wordpress-develop/pull/7085 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58713]. Props: dmsnell, gziolo, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58828 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 17 +++++--- .../tests/html-api/wpHtmlProcessor.php | 41 +++++++++++++++++++ 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 975f21a0f0d77..f8653022454b6 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -609,25 +609,30 @@ public function next_token(): bool { * until there are events or until there are no more * tokens works in the meantime and isn't obviously wrong. */ - while ( empty( $this->element_queue ) && $this->step() ) { - continue; + if ( empty( $this->element_queue ) && $this->step() ) { + return $this->next_token(); } // Process the next event on the queue. $this->current_element = array_shift( $this->element_queue ); if ( ! isset( $this->current_element ) ) { - return false; + // There are no tokens left, so close all remaining open elements. + while ( $this->state->stack_of_open_elements->pop() ) { + continue; + } + + return empty( $this->element_queue ) ? false : $this->next_token(); } $is_pop = WP_HTML_Stack_Event::POP === $this->current_element->operation; /* * The root node only exists in the fragment parser, and closing it - * indicates that the parse is complete. Stop before popping if from + * indicates that the parse is complete. Stop before popping it from * the breadcrumbs. */ if ( 'root-node' === $this->current_element->token->bookmark_name ) { - return ! $is_pop && $this->next_token(); + return $this->next_token(); } // Adjust the breadcrumbs for this event. @@ -638,7 +643,7 @@ public function next_token(): bool { } // Avoid sending close events for elements which don't expect a closing. - if ( $is_pop && ! static::expects_closer( $this->current_element->token ) ) { + if ( $is_pop && ! $this->expects_closer( $this->current_element->token ) ) { return $this->next_token(); } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 12f36ca742989..01e0f4f02c0b5 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -475,6 +475,47 @@ public static function data_html_with_target_element_and_depth_of_next_node_in_b ); } + /** + * Ensures that elements which are unopened at the end of a document are implicitly closed. + * + * @ticket 61576 + */ + public function test_closes_unclosed_elements() { + $processor = WP_HTML_Processor::create_fragment( '

    ' ); + + $this->assertTrue( + $processor->next_tag( 'SPAN' ), + 'Could not find SPAN element: check test setup.' + ); + + // This is the end of the document, but there should be three closing events. + $processor->next_token(); + $this->assertSame( + 'SPAN', + $processor->get_tag(), + 'Should have found implicit SPAN closing tag.' + ); + + $processor->next_token(); + $this->assertSame( + 'P', + $processor->get_tag(), + 'Should have found implicit P closing tag.' + ); + + $processor->next_token(); + $this->assertSame( + 'DIV', + $processor->get_tag(), + 'Should have found implicit DIV closing tag.' + ); + + $this->assertFalse( + $processor->next_token(), + "Should have failed to find any more tokens but found a '{$processor->get_token_name()}'" + ); + } + /** * Ensures that subclasses can be created from ::create_fragment method. * From c6aaf0a7db6e0555ac61b96cecb699b850fb3187 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 29 Jul 2024 17:57:12 +0000 Subject: [PATCH 190/422] HTML API: Add set_modifiable_text() for replacing text nodes. This patch introduces a new method, `set_modifiable_text()` to the Tag Processor, which makes it possible and safe to replace text nodes within an HTML document, performing the appropriate escaping. This method can be used in conjunction with other code to modify the text content of a document, and can be used for transforming HTML in a streaming fashion. Developed in https://github.com/wordpress/wordpress-develop/pull/7007 Discussed in https://core.trac.wordpress.org/ticket/61617 Props: dmsnell, gziolo, zieladam. Fixes #61617. git-svn-id: https://develop.svn.wordpress.org/trunk@58829 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 155 +++++++++++- .../wpHtmlTagProcessorModifiableText.php | 235 ++++++++++++++++++ 2 files changed, 389 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 7d04fd31d80d2..c619806525732 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2889,7 +2889,9 @@ public function get_modifiable_text(): string { return ''; } - $text = substr( $this->html, $this->text_starts_at, $this->text_length ); + $text = isset( $this->lexical_updates['modifiable text'] ) + ? $this->lexical_updates['modifiable text']->text + : substr( $this->html, $this->text_starts_at, $this->text_length ); /* * Pre-processing the input stream would normally happen before @@ -2956,6 +2958,157 @@ public function get_modifiable_text(): string { : str_replace( "\x00", "\u{FFFD}", $decoded ); } + /** + * Sets the modifiable text for the matched token, if matched. + * + * Modifiable text is text content that may be read and changed without + * changing the HTML structure of the document around it. This includes + * the contents of `#text` nodes in the HTML as well as the inner + * contents of HTML comments, Processing Instructions, and others, even + * though these nodes aren't part of a parsed DOM tree. They also contain + * the contents of SCRIPT and STYLE tags, of TEXTAREA tags, and of any + * other section in an HTML document which cannot contain HTML markup (DATA). + * + * Not all modifiable text may be set by this method, and not all content + * may be set as modifiable text. In the case that this fails it will return + * `false` indicating as much. For instance, it will not allow inserting the + * string `next_tag( 'STYLE' ) ) { + * $style = $processor->get_modifiable_text(); + * $processor->set_modifiable_text( "// Made with love on the World Wide Web\n{$style}" ); + * } + * + * // Replace smiley text with Emoji smilies. + * while ( $processor->next_token() ) { + * if ( '#text' !== $processor->get_token_name() ) { + * continue; + * } + * + * $chunk = $processor->get_modifiable_text(); + * if ( ! str_contains( $chunk, ':)' ) ) { + * continue; + * } + * + * $processor->set_modifiable_text( str_replace( ':)', '🙂', $chunk ) ); + * } + * + * @since 6.7.0 + * + * @param string $plaintext_content New text content to represent in the matched token. + * + * @return bool Whether the text was able to update. + */ + public function set_modifiable_text( string $plaintext_content ): bool { + if ( self::STATE_TEXT_NODE === $this->parser_state ) { + $this->lexical_updates['modifiable text'] = new WP_HTML_Text_Replacement( + $this->text_starts_at, + $this->text_length, + htmlspecialchars( $plaintext_content, ENT_QUOTES | ENT_HTML5 ) + ); + + return true; + } + + // Comment data is not encoded. + if ( + self::STATE_COMMENT === $this->parser_state && + self::COMMENT_AS_HTML_COMMENT === $this->comment_type + ) { + // Check if the text could close the comment. + if ( 1 === preg_match( '/--!?>/', $plaintext_content ) ) { + return false; + } + + $this->lexical_updates['modifiable text'] = new WP_HTML_Text_Replacement( + $this->text_starts_at, + $this->text_length, + $plaintext_content + ); + + return true; + } + + if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { + return false; + } + + switch ( $this->get_tag() ) { + case 'SCRIPT': + /* + * This is over-protective, but ensures the update doesn't break + * out of the SCRIPT element. A more thorough check would need to + * ensure that the script closing tag doesn't exist, and isn't + * also "hidden" inside the script double-escaped state. + * + * It may seem like replacing `lexical_updates['modifiable text'] = new WP_HTML_Text_Replacement( + $this->text_starts_at, + $this->text_length, + $plaintext_content + ); + + return true; + + case 'STYLE': + $plaintext_content = preg_replace_callback( + '~style)~i', + static function ( $tag_match ) { + return "\\3c\\2f{$tag_match['TAG_NAME']}"; + }, + $plaintext_content + ); + + $this->lexical_updates['modifiable text'] = new WP_HTML_Text_Replacement( + $this->text_starts_at, + $this->text_length, + $plaintext_content + ); + + return true; + + case 'TEXTAREA': + case 'TITLE': + $plaintext_content = preg_replace_callback( + "~{$this->get_tag()})~i", + static function ( $tag_match ) { + return "</{$tag_match['TAG_NAME']}"; + }, + $plaintext_content + ); + + /* + * These don't _need_ to be escaped, but since they are decoded it's + * safe to leave them escaped and this can prevent other code from + * naively detecting tags within the contents. + * + * @todo It would be useful to prefix a multiline replacement text + * with a newline, but not necessary. This is for aesthetics. + */ + $this->lexical_updates['modifiable text'] = new WP_HTML_Text_Replacement( + $this->text_starts_at, + $this->text_length, + $plaintext_content + ); + + return true; + } + + return false; + } + /** * Updates or creates a new attribute on the currently matched tag with the passed value. * diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php index 2c8c07e410b74..717d061016a2d 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessorModifiableText.php @@ -39,6 +39,90 @@ public function test_get_modifiable_text_is_idempotent() { } } + /** + * Ensures that updates to modifiable text that are shorter than the + * original text do not cause the parser to lose its orientation. + * + * @ticket 61617 + */ + public function test_setting_shorter_modifiable_text() { + $processor = new WP_HTML_Tag_Processor( '

    ' ); + + // Find the test node in the middle. + while ( 'TEXTAREA' !== $processor->get_token_name() && $processor->next_token() ) { + continue; + } + + $this->assertSame( + 'TEXTAREA', + $processor->get_token_name(), + 'Failed to find the test TEXTAREA node; check the test setup.' + ); + + $processor->set_modifiable_text( 'short' ); + $processor->get_updated_html(); + $this->assertSame( + 'short', + $processor->get_modifiable_text(), + 'Should have updated modifiable text to something shorter than the original.' + ); + + $this->assertTrue( + $processor->next_token(), + 'Should have advanced to the last token in the input.' + ); + + $this->assertSame( + 'DIV', + $processor->get_token_name(), + 'Should have recognized the final DIV in the input.' + ); + + $this->assertSame( + 'not a ', + $processor->get_attribute( 'id' ), + 'Should have read in the id from the last DIV as "not a "' + ); + } + + /** + * Ensures that reads to modifiable text after setting it reads the updated + * enqueued values, and not the original value. + * + * @ticket 61617 + */ + public function test_modifiable_text_reads_updates_after_setting() { + $processor = new WP_HTML_Tag_Processor( 'This is text' ); + + $processor->next_token(); + $this->assertSame( + '#text', + $processor->get_token_name(), + 'Failed to find first text node: check test setup.' + ); + + $update = 'This is new text'; + $processor->set_modifiable_text( $update ); + $this->assertSame( + $update, + $processor->get_modifiable_text(), + 'Failed to read updated enqueued value of text node.' + ); + + $processor->next_token(); + $this->assertSame( + '#comment', + $processor->get_token_name(), + 'Failed to advance to comment: check test setup.' + ); + + $this->assertSame( + ' this is not ', + $processor->get_modifiable_text(), + 'Failed to read modifiable text for next token; did it read the old enqueued value from the previous token?' + ); + } + /** * Ensures that when ignoring a newline after LISTING and PRE tags, that this * happens appropriately after seeking. @@ -108,4 +192,155 @@ public function test_get_modifiable_text_ignores_newlines_after_seeking() { 'Should not have removed the leading newline from the last DIV on its second traversal.' ); } + + /** + * Ensures that modifiable text updates are not applied where they aren't supported. + * + * @ticket 61617 + * + * @dataProvider data_tokens_not_supporting_modifiable_text_updates + * + * @param string $html Contains HTML with a token not supporting modifiable text updates. + * @param int $advance_n_tokens Count of times to run `next_token()` before reaching target node. + */ + public function test_rejects_updates_on_unsupported_match_locations( string $html, int $advance_n_tokens ) { + $processor = new WP_HTML_Tag_Processor( $html ); + while ( --$advance_n_tokens >= 0 ) { + $processor->next_token(); + } + + $this->assertFalse( + $processor->set_modifiable_text( 'Bazinga!' ), + 'Should have prevented modifying the text at the target node.' + ); + + $this->assertSame( + $html, + $processor->get_updated_html(), + 'Should not have modified the input document in any way.' + ); + } + + /** + * Data provider. + * + * @return array[] + */ + public static function data_tokens_not_supporting_modifiable_text_updates() { + return array( + 'Before parsing' => array( 'nothing to see here', 0 ), + 'After parsing' => array( 'nothing here either', 2 ), + 'Incomplete document' => array( ' array( 'Text', 1, 'Blubber', 'Blubber' ), + 'Text node (middle)' => array( 'Bold move', 2, 'yo', 'yo' ), + 'Text node (end)' => array( 'of a dog', 2, 'of a cat', 'of a cat' ), + 'Encoded text node' => array( '
    birds and dogs
    ', 2, ' & ', '
    <birds> & <dogs>
    ' ), + 'SCRIPT tag' => array( 'beforeafter', 2, 'const img = " &
    ";', 'beforeafter' ), + 'STYLE tag' => array( '', 1, 'p::before { content: " & "; }', '' ), + 'TEXTAREA tag' => array( 'ab', 2, "so it ", "ab" ), + 'TEXTAREA (escape)' => array( 'ab', 2, 'but it does for ', 'ab' ), + 'TEXTAREA (escape+attrs)' => array( 'ab', 2, 'but it does for ', 'ab' ), + 'TITLE tag' => array( 'ahas no need to escapeb', 2, "so it ", "aso it <doesn't>b" ), + 'TITLE (escape)' => array( 'ahas no need to escapeb', 2, 'but it does for ', 'abut it does for </title>b' ), + 'TITLE (escape+attrs)' => array( 'ahas no need to escapeb', 2, 'but it does for ', 'abut it does for </title not an="attribute">b' ), + ); + } + + /** + * Ensures that updates with potentially-compromising values aren't accepted. + * + * For example, a modifiable text update should be allowed which would break + * the structure of the containing element, such as in a script or comment. + * + * @ticket 61617 + * + * @dataProvider data_unallowed_modifiable_text_updates + * + * @param string $html_with_nonempty_modifiable_text Will be used to find the test element. + * @param string $invalid_update Update containing possibly-compromising text. + */ + public function test_rejects_updates_with_unallowed_substrings( string $html_with_nonempty_modifiable_text, string $invalid_update ) { + $processor = new WP_HTML_Tag_Processor( $html_with_nonempty_modifiable_text ); + + while ( '' === $processor->get_modifiable_text() && $processor->next_token() ) { + continue; + } + + $original_text = $processor->get_modifiable_text(); + $this->assertNotEmpty( $original_text, 'Should have found non-empty text: check test setup.' ); + + $this->assertFalse( + $processor->set_modifiable_text( $invalid_update ), + 'Should have reject possibly-compromising modifiable text update.' + ); + + // Flush updates. + $processor->get_updated_html(); + + $this->assertSame( + $original_text, + $processor->get_modifiable_text(), + 'Should have preserved the original modifiable text before the rejected update.' + ); + } + + /** + * Data provider. + * + * @return array[] + */ + public static function data_unallowed_modifiable_text_updates() { + return array( + 'Comment with -->' => array( '', 'Comments end in -->' ), + 'Comment with --!>' => array( '', 'Invalid but legitimate comments end in --!>' ), + 'SCRIPT with ' => array( '', 'Just a ' ), + 'SCRIPT with ' => array( '', 'beforeafter' ), + ); + } } From 345699c0711d00dc15a1f3090694c2c8a114a29b Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 29 Jul 2024 18:20:11 +0000 Subject: [PATCH 191/422] WP_Debug_Data: Extract `wp-filesystem` data into separate method. This is the first part in a larger modularization of the data in `WP_Debug_Data`. Previously this was a single massive method drawing in debug data from various groups of related data, where the groups were independent from each other. This patch separates the first of twelve groups, the `wp-filesystem` info, into a separate method focused on that data. This work precedes changes to make the `WP_Debug_Data` class more extensible for better use by plugin and theme code. Developed in https://github.com/wordpress/wordpress-develop/pull/7065 Discussed in https://core.trac.wordpress.org/ticket/61648 Props: afragen, apermo, costdev, dmsnell. See #61648. git-svn-id: https://develop.svn.wordpress.org/trunk@58830 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-debug-data.php | 122 ++++++++++-------- 1 file changed, 68 insertions(+), 54 deletions(-) diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php index 109e38b0635d6..49214ff8ec91b 100644 --- a/src/wp-admin/includes/class-wp-debug-data.php +++ b/src/wp-admin/includes/class-wp-debug-data.php @@ -342,50 +342,6 @@ public static function debug_data() { ), ); - $is_writable_abspath = wp_is_writable( ABSPATH ); - $is_writable_wp_content_dir = wp_is_writable( WP_CONTENT_DIR ); - $is_writable_upload_dir = wp_is_writable( $upload_dir['basedir'] ); - $is_writable_wp_plugin_dir = wp_is_writable( WP_PLUGIN_DIR ); - $is_writable_template_directory = wp_is_writable( get_theme_root( get_template() ) ); - $is_writable_fonts_dir = wp_is_writable( wp_get_font_dir()['basedir'] ); - - $info['wp-filesystem'] = array( - 'label' => __( 'Filesystem Permissions' ), - 'description' => __( 'Shows whether WordPress is able to write to the directories it needs access to.' ), - 'fields' => array( - 'wordpress' => array( - 'label' => __( 'The main WordPress directory' ), - 'value' => ( $is_writable_abspath ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_abspath ? 'writable' : 'not writable' ), - ), - 'wp-content' => array( - 'label' => __( 'The wp-content directory' ), - 'value' => ( $is_writable_wp_content_dir ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_wp_content_dir ? 'writable' : 'not writable' ), - ), - 'uploads' => array( - 'label' => __( 'The uploads directory' ), - 'value' => ( $is_writable_upload_dir ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_upload_dir ? 'writable' : 'not writable' ), - ), - 'plugins' => array( - 'label' => __( 'The plugins directory' ), - 'value' => ( $is_writable_wp_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_wp_plugin_dir ? 'writable' : 'not writable' ), - ), - 'themes' => array( - 'label' => __( 'The themes directory' ), - 'value' => ( $is_writable_template_directory ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_template_directory ? 'writable' : 'not writable' ), - ), - 'fonts' => array( - 'label' => __( 'The fonts directory' ), - 'value' => ( $is_writable_fonts_dir ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_fonts_dir ? 'writable' : 'not writable' ), - ), - ), - ); - // Conditionally add debug information for multisite setups. if ( is_multisite() ) { $site_id = get_current_blog_id(); @@ -1413,16 +1369,7 @@ public static function debug_data() { ); } - // Add more filesystem checks. - if ( defined( 'WPMU_PLUGIN_DIR' ) && is_dir( WPMU_PLUGIN_DIR ) ) { - $is_writable_wpmu_plugin_dir = wp_is_writable( WPMU_PLUGIN_DIR ); - - $info['wp-filesystem']['fields']['mu-plugins'] = array( - 'label' => __( 'The must use plugins directory' ), - 'value' => ( $is_writable_wpmu_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), - 'debug' => ( $is_writable_wpmu_plugin_dir ? 'writable' : 'not writable' ), - ); - } + $info['wp-filesystem'] = self::get_wp_filesystem(); /** * Filters the debug information shown on the Tools -> Site Health -> Info screen. @@ -1489,6 +1436,73 @@ public static function debug_data() { return $info; } + /** + * Gets the file system section of the debug data. + * + * @since 6.7.0 + * + * @return array + */ + private static function get_wp_filesystem(): array { + $upload_dir = wp_upload_dir(); + $is_writable_abspath = wp_is_writable( ABSPATH ); + $is_writable_wp_content_dir = wp_is_writable( WP_CONTENT_DIR ); + $is_writable_upload_dir = wp_is_writable( $upload_dir['basedir'] ); + $is_writable_wp_plugin_dir = wp_is_writable( WP_PLUGIN_DIR ); + $is_writable_template_directory = wp_is_writable( get_theme_root( get_template() ) ); + $is_writable_fonts_dir = wp_is_writable( wp_get_font_dir()['basedir'] ); + + $fields = array( + 'wordpress' => array( + 'label' => __( 'The main WordPress directory' ), + 'value' => ( $is_writable_abspath ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_abspath ? 'writable' : 'not writable' ), + ), + 'wp-content' => array( + 'label' => __( 'The wp-content directory' ), + 'value' => ( $is_writable_wp_content_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wp_content_dir ? 'writable' : 'not writable' ), + ), + 'uploads' => array( + 'label' => __( 'The uploads directory' ), + 'value' => ( $is_writable_upload_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_upload_dir ? 'writable' : 'not writable' ), + ), + 'plugins' => array( + 'label' => __( 'The plugins directory' ), + 'value' => ( $is_writable_wp_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wp_plugin_dir ? 'writable' : 'not writable' ), + ), + 'themes' => array( + 'label' => __( 'The themes directory' ), + 'value' => ( $is_writable_template_directory ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_template_directory ? 'writable' : 'not writable' ), + ), + 'fonts' => array( + 'label' => __( 'The fonts directory' ), + 'value' => ( $is_writable_fonts_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_fonts_dir ? 'writable' : 'not writable' ), + ), + ); + + // Add more filesystem checks. + if ( defined( 'WPMU_PLUGIN_DIR' ) && is_dir( WPMU_PLUGIN_DIR ) ) { + $is_writable_wpmu_plugin_dir = wp_is_writable( WPMU_PLUGIN_DIR ); + + $fields['mu-plugins'] = array( + 'label' => __( 'The must use plugins directory' ), + 'value' => ( $is_writable_wpmu_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ), + 'debug' => ( $is_writable_wpmu_plugin_dir ? 'writable' : 'not writable' ), + ); + } + + return array( + 'label' => __( 'Filesystem Permissions' ), + 'description' => __( 'Shows whether WordPress is able to write to the directories it needs access to.' ), + 'fields' => $fields, + ); + } + /** * Returns the value of a MySQL system variable. * From 9ed3553da6a61a38a1d4c5585e5ac3c9d13d351a Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Mon, 29 Jul 2024 18:47:21 +0000 Subject: [PATCH 192/422] REST API, Meta: Store updates in database when they are equal to the defaults. This patch fixes an oversight from when default metadata values were introduced in #43941 in WordPress 5.5: metadata updates should persist in the database even if they match the registered default value (because the default values can change over time). Previously, the REST API code was comparing updated values against the value returned by the default-aware `get_metadata()` method. This meant that if no value existed in the database, and the default value was supplied to the update, WordPress would think that the updated value was already persisted and skip the database call. Now, the `get_metadata_raw()` method is called for comparing whether or not a database update is required, fixing the bug. In this patch both issues are resolved. Developed in https://github.com/wordpress/wordpress-develop/pull/6782 Discussed in https://core.trac.wordpress.org/ticket/55600 Follow-up to [48402]. Props: dmsnell, kraftner, ramon-fincken. Fixes #55600. git-svn-id: https://develop.svn.wordpress.org/trunk@58831 602fd350-edb4-49c9-b593-d223f7449a82 --- .../fields/class-wp-rest-meta-fields.php | 6 +- .../tests/rest-api/rest-post-meta-fields.php | 475 ++++++++++++++++++ 2 files changed, 479 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php index 7b46905a7aa4f..5f3b55843e23a 100644 --- a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php +++ b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php @@ -268,6 +268,7 @@ protected function delete_meta_value( $object_id, $meta_key, $name ) { * Alters the list of values in the database to match the list of provided values. * * @since 4.7.0 + * @since 6.7.0 Stores values into DB even if provided registered default value. * * @param int $object_id Object ID to update. * @param string $meta_key Key for the custom field. @@ -290,7 +291,7 @@ protected function update_multi_meta_value( $object_id, $meta_key, $name, $value ); } - $current_values = get_metadata( $meta_type, $object_id, $meta_key, false ); + $current_values = get_metadata_raw( $meta_type, $object_id, $meta_key, false ); $subtype = get_object_subtype( $meta_type, $object_id ); if ( ! is_array( $current_values ) ) { @@ -367,6 +368,7 @@ function ( $stored_value ) use ( $meta_key, $subtype, $value ) { * Updates a meta value for an object. * * @since 4.7.0 + * @since 6.7.0 Stores values into DB even if provided registered default value. * * @param int $object_id Object ID to update. * @param string $meta_key Key for the custom field. @@ -378,7 +380,7 @@ protected function update_meta_value( $object_id, $meta_key, $name, $value ) { $meta_type = $this->get_meta_type(); // Do the exact same check for a duplicate value as in update_metadata() to avoid update_metadata() returning false. - $old_value = get_metadata( $meta_type, $object_id, $meta_key ); + $old_value = get_metadata_raw( $meta_type, $object_id, $meta_key ); $subtype = get_object_subtype( $meta_type, $object_id ); if ( is_array( $old_value ) && 1 === count( $old_value ) diff --git a/tests/phpunit/tests/rest-api/rest-post-meta-fields.php b/tests/phpunit/tests/rest-api/rest-post-meta-fields.php index 1418db19dbce2..786396df2e215 100644 --- a/tests/phpunit/tests/rest-api/rest-post-meta-fields.php +++ b/tests/phpunit/tests/rest-api/rest-post-meta-fields.php @@ -3095,6 +3095,464 @@ public function test_default_is_added_to_schema() { $this->assertSame( 'Goodnight Moon', $schema['default'] ); } + /** + * Ensures that REST API calls with post meta containing the default value for the + * registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Ignored in this test. + */ + public function test_scalar_singular_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_single = "with_{$type}_default"; + + register_post_meta( + 'post', + $meta_key_single, + array( + 'type' => $type, + 'single' => true, + 'show_in_rest' => true, + 'default' => $default_value, + ) + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_single => $default_value, + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( (string) $default_value ), + get_metadata_raw( 'post', self::$post_id, $meta_key_single, false ), + 'Should have stored a single meta value with string-cast version of default value.' + ); + } + + /** + * Ensures that REST API calls with multi post meta values (containing the default) + * for the registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * Further, the total count of stored values may be wrong if the default value + * is culled from the results of a "multi" read. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Appropriate value for given type that doesn't match the default value. + */ + public function test_scalar_multi_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_multiple = "with_multi_{$type}_default"; + + // Register non-singular post meta for type. + register_post_meta( + 'post', + $meta_key_multiple, + array( + 'type' => $type, + 'single' => false, + 'show_in_rest' => true, + 'default' => $default_value, + ) + ); + + // Write the default value as the sole value. + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( $default_value ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( (string) $default_value ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored a single meta value with string-cast version of default value.' + ); + + // Write multiple values, including the default, to ensure it remains. + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( + $default_value, + $alternative_value, + ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( (string) $default_value, (string) $alternative_value ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored both the default and non-default string-cast values.' + ); + } + + /** + * Ensures that REST API calls with post meta containing an object as the default + * value for the registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Ignored in this test. + */ + public function test_object_singular_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_single = "with_{$type}_default"; + + // Register singular post meta for type. + register_post_meta( + 'post', + $meta_key_single, + array( + 'type' => 'object', + 'single' => true, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'object', + 'properties' => array( + $type => array( 'type' => $type ), + ), + ), + ), + 'default' => (object) array( $type => $default_value ), + ) + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_single => (object) array( $type => $default_value ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + // Objects stored into the database are read back as arrays. + $this->assertSame( + array( array( $type => $default_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_single, false ), + 'Should have stored a single meta value with an object representing the default value.' + ); + } + + /** + * Ensures that REST API calls with multi post meta values (containing an object as + * the default) for the registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * Further, the total count of stored values may be wrong if the default value + * is culled from the results of a "multi" read. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Appropriate value for given type that doesn't match the default value. + */ + public function test_object_multi_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_multiple = "with_multi_{$type}_default"; + + // Register non-singular post meta for type. + register_post_meta( + 'post', + $meta_key_multiple, + array( + 'type' => 'object', + 'single' => false, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'object', + 'properties' => array( + $type => array( 'type' => $type ), + ), + ), + ), + 'default' => (object) array( $type => $default_value ), + ) + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( (object) array( $type => $default_value ) ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + // Objects stored into the database are read back as arrays. + $this->assertSame( + array( array( $type => $default_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored a single meta value with an object representing the default value.' + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( + (object) array( $type => $default_value ), + (object) array( $type => $alternative_value ), + ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + // Objects stored into the database are read back as arrays. + $this->assertSame( + array( array( $type => $default_value ), array( $type => $alternative_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored a single meta value with an object representing the default value.' + ); + } + + /** + * Ensures that REST API calls with post meta containing a list array as the default + * value for the registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Ignored in this test. + */ + public function test_array_singular_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_single = "with_{$type}_default"; + + // Register singular post meta for type. + register_post_meta( + 'post', + $meta_key_single, + array( + 'type' => 'array', + 'single' => true, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'array', + 'items' => array( + 'type' => $type, + ), + ), + ), + 'default' => $default_value, + ) + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_single => array( $default_value ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( array( $default_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_single, false ), + 'Should have stored a single meta value with an array containing only the default value.' + ); + } + + /** + * Ensures that REST API calls with multi post meta values (containing a list array as + * the default) for the registered meta field stores the default value into the database. + * + * When the default value isn't persisted in the database, a read of the post meta + * at some point in the future might return a different value if the code setting the + * default changed. This ensures that once a value is intentionally saved into the + * database that it will remain durably in future reads. + * + * Further, the total count of stored values may be wrong if the default value + * is culled from the results of a "multi" read. + * + * @ticket 55600 + * + * @dataProvider data_scalar_default_values + * + * @param string $type Scalar type of default value: one of `boolean`, `integer`, `number`, or `string`. + * @param mixed $default_value Appropriate default value for given type. + * @param mixed $alternative_value Appropriate value for given type that doesn't match the default value. + */ + public function test_array_multi_default_is_saved_to_db( $type, $default_value, $alternative_value ) { + $this->grant_write_permission(); + + $meta_key_multiple = "with_multi_{$type}_default"; + + // Register non-singular post meta for type. + register_post_meta( + 'post', + $meta_key_multiple, + array( + 'type' => 'array', + 'single' => false, + 'show_in_rest' => array( + 'schema' => array( + 'type' => 'array', + 'items' => array( + 'type' => $type, + ), + ), + ), + 'default' => $default_value, + ) + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( array( $default_value ) ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( array( $default_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored a single meta value with an object representing the default value.' + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( + array( + 'meta' => array( + $meta_key_multiple => array( + array( $default_value ), + array( $alternative_value ), + ), + ), + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertSame( + 200, + $response->get_status(), + "API call should have returned successfully but didn't: check test setup." + ); + + $this->assertSame( + array( array( $default_value ), array( $alternative_value ) ), + get_metadata_raw( 'post', self::$post_id, $meta_key_multiple, false ), + 'Should have stored a single meta value with an object representing the default value.' + ); + } + /** * @ticket 48823 */ @@ -3516,4 +3974,21 @@ public function data_revisioned_single_post_meta_with_posts_endpoint_page_and_cp ), ); } + + /** + * Data provider. + * + * Provides example default values of scalar types; + * in contrast to arrays, objects, etc... + * + * @return array[] + */ + public static function data_scalar_default_values() { + return array( + 'boolean default' => array( 'boolean', true, false ), + 'integer default' => array( 'integer', 42, 43 ), + 'number default' => array( 'number', 42.99, 43.99 ), + 'string default' => array( 'string', 'string', 'string2' ), + ); + } } From a16d9eea5445126582476b608ace91f8efd58eb8 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 30 Jul 2024 12:23:06 +0000 Subject: [PATCH 193/422] Site Health: Improve the wording for PHP version check. This aims to make the message more accurate by referring to the version of PHP currently recommended by WordPress, not the current version of PHP. Follow-up to [44986], [46267], [47254]. Props swb1192, psykro, swissspidy, joemcgill, mukesh27, aristath. See #61623. git-svn-id: https://develop.svn.wordpress.org/trunk@58832 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-site-health.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/includes/class-wp-site-health.php b/src/wp-admin/includes/class-wp-site-health.php index 12ca7f7a9adb8..cd6fb0d7db680 100644 --- a/src/wp-admin/includes/class-wp-site-health.php +++ b/src/wp-admin/includes/class-wp-site-health.php @@ -728,8 +728,8 @@ public function get_test_php_version() { $result = array( 'label' => sprintf( - /* translators: %s: The current PHP version. */ - __( 'Your site is running the current version of PHP (%s)' ), + /* translators: %s: The recommended PHP version. */ + __( 'Your site is running a recommended version of PHP (%s)' ), PHP_VERSION ), 'status' => 'good', From dfd1de09afbb5b3c4c7a959b20a1f5fa7011aa46 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 30 Jul 2024 18:44:45 +0000 Subject: [PATCH 194/422] HTML API: Add TEMPLATE and related support in HTML Processor. As part of work to add more spec support to the HTML API, this patch adds support for the IN TEMPLATE and IN HEAD insertion modes. These changes are primarily about adding support for TEMPLATE elements in the HTML Processor, but include support for other tags commonly found in the document head, such as LINK, META, SCRIPT, STYLE, and TITLE. Developed in https://github.com/wordpress/wordpress-develop/pull/7046 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell, westonruter. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58833 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 45 ++- .../html-api/class-wp-html-processor.php | 320 +++++++++++++++++- .../html-api/wpHtmlProcessorBreadcrumbs.php | 9 +- .../html-api/wpHtmlProcessorHtml5lib.php | 27 +- 4 files changed, 384 insertions(+), 17 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index 1162a267f9c9b..c760009ce0c28 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -308,7 +308,20 @@ public function has_element_in_scope( string $tag_name ): bool { 'MARQUEE', 'OBJECT', 'TEMPLATE', - // @todo: Support SVG and MathML nodes when support for foreign content is added. + + /* + * @todo Support SVG and MathML nodes when support for foreign content is added. + * + * - MathML mi + * - MathML mo + * - MathML mn + * - MathML ms + * - MathML mtext + * - MathML annotation-xml + * - SVG foreignObject + * - SVG desc + * - SVG title + */ ) ); } @@ -349,7 +362,20 @@ public function has_element_in_list_item_scope( string $tag_name ): bool { 'OL', 'TEMPLATE', 'UL', - // @todo: Support SVG and MathML nodes when support for foreign content is added. + + /* + * @todo Support SVG and MathML nodes when support for foreign content is added. + * + * - MathML mi + * - MathML mo + * - MathML mn + * - MathML ms + * - MathML mtext + * - MathML annotation-xml + * - SVG foreignObject + * - SVG desc + * - SVG title + */ ) ); } @@ -386,7 +412,20 @@ public function has_element_in_button_scope( string $tag_name ): bool { 'MARQUEE', 'OBJECT', 'TEMPLATE', - // @todo: Support SVG and MathML nodes when support for foreign content is added. + + /* + * @todo Support SVG and MathML nodes when support for foreign content is added. + * + * - MathML mi + * - MathML mo + * - MathML mn + * - MathML ms + * - MathML mtext + * - MathML annotation-xml + * - SVG foreignObject + * - SVG desc + * - SVG title + */ ) ); } diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index f8653022454b6..9f2662c9e4c48 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -1040,7 +1040,7 @@ private function step_before_head(): bool { * This internal function performs the 'in head' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -1050,7 +1050,211 @@ private function step_before_head(): bool { * @return bool Whether an element was found. */ private function step_in_head(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = parent::is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + */ + if ( '#text' === $op ) { + $text = $this->get_modifiable_text(); + if ( '' === $text ) { + /* + * If the text is empty after processing HTML entities and stripping + * U+0000 NULL bytes then ignore the token. + */ + return $this->step(); + } + + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + // Insert the character. + $this->insert_html_element( $this->state->current_token ); + return true; + } + } + + switch ( $op ) { + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is one of: "base", "basefont", "bgsound", "link" + */ + case '+BASE': + case '+BASEFONT': + case '+BGSOUND': + case '+LINK': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "meta" + */ + case '+META': + $this->insert_html_element( $this->state->current_token ); + + /* + * > If the active speculative HTML parser is null, then: + * > - If the element has a charset attribute, and getting an encoding from + * > its value results in an encoding, and the confidence is currently + * > tentative, then change the encoding to the resulting encoding. + */ + $charset = $this->get_attribute( 'charset' ); + if ( is_string( $charset ) ) { + $this->bail( 'Cannot yet process META tags with charset to determine encoding.' ); + } + + /* + * > - Otherwise, if the element has an http-equiv attribute whose value is + * > an ASCII case-insensitive match for the string "Content-Type", and + * > the element has a content attribute, and applying the algorithm for + * > extracting a character encoding from a meta element to that attribute's + * > value returns an encoding, and the confidence is currently tentative, + * > then change the encoding to the extracted encoding. + */ + $http_equiv = $this->get_attribute( 'http-equiv' ); + $content = $this->get_attribute( 'content' ); + if ( + is_string( $http_equiv ) && + is_string( $content ) && + 0 === strcasecmp( $http_equiv, 'Content-Type' ) + ) { + $this->bail( 'Cannot yet process META tags with http-equiv Content-Type to determine encoding.' ); + } + + return true; + + /* + * > A start tag whose tag name is "title" + */ + case '+TITLE': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "noscript", if the scripting flag is enabled + * > A start tag whose tag name is one of: "noframes", "style" + * + * The scripting flag is never enabled in this parser. + */ + case '+NOFRAMES': + case '+STYLE': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A start tag whose tag name is "noscript", if the scripting flag is disabled + */ + case '+NOSCRIPT': + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD_NOSCRIPT; + return true; + + /* + * > A start tag whose tag name is "script" + * + * @todo Could the adjusted insertion location be anything other than the current location? + */ + case '+SCRIPT': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > An end tag whose tag name is "head" + */ + case '-HEAD': + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD; + return true; + + /* + * > An end tag whose tag name is one of: "body", "html", "br" + */ + case '-BODY': + case '-HTML': + case '-BR': + /* + * > Act as described in the "anything else" entry below. + */ + goto in_head_anything_else; + break; + + /* + * > A start tag whose tag name is "template" + * + * @todo Could the adjusted insertion location be anything other than the current location? + */ + case '+TEMPLATE': + $this->state->active_formatting_elements->insert_marker(); + $this->state->frameset_ok = false; + + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE; + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE; + + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > An end tag whose tag name is "template" + */ + case '-TEMPLATE': + if ( ! $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) ) { + // @todo Indicate a parse error once it's possible. + return $this->step(); + } + + $this->generate_implied_end_tags_thoroughly(); + if ( ! $this->state->stack_of_open_elements->current_node_is( 'TEMPLATE' ) ) { + // @todo Indicate a parse error once it's possible. + } + + $this->state->stack_of_open_elements->pop_until( 'TEMPLATE' ); + $this->state->active_formatting_elements->clear_up_to_last_marker(); + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->reset_insertion_mode(); + return true; + } + + /* + * > A start tag whose tag name is "head" + * > Any other end tag + */ + if ( '+HEAD' === $op || $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + */ + in_head_anything_else: + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -2991,7 +3195,117 @@ private function step_in_select_in_table(): bool { * @return bool Whether an element was found. */ private function step_in_template(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = $this->is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token + * > A comment token + * > A DOCTYPE token + */ + case '#text': + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + case 'html': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is one of: "base", "basefont", "bgsound", "link", + * > "meta", "noframes", "script", "style", "template", "title" + * > An end tag whose tag name is "template" + */ + case '+BASE': + case '+BASEFONT': + case '+BGSOUND': + case '+LINK': + case '+META': + case '+NOFRAMES': + case '+SCRIPT': + case '+STYLE': + case '+TEMPLATE': + case '+TITLE': + case '-TEMPLATE': + return $this->step_in_head(); + + /* + * > A start tag whose tag name is one of: "caption", "colgroup", "tbody", "tfoot", "thead" + */ + case '+CAPTION': + case '+COLGROUP': + case '+TBODY': + case '+TFOOT': + case '+THEAD': + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is "col" + */ + case '+COL': + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is "tr" + */ + case '+TR': + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > A start tag whose tag name is one of: "td", "th" + */ + case '+TD': + case '+TH': + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_ROW; + return $this->step( self::REPROCESS_CURRENT_NODE ); + } + + /* + * > Any other start tag + */ + if ( ! $is_closer ) { + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->state->stack_of_template_insertion_modes[] = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); + } + + /* + * > Any other end tag + */ + if ( $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > An end-of-file token + */ + if ( ! $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) ) { + // Stop parsing. + return false; + } + + // @todo Indicate a parse error once it's possible. + $this->state->stack_of_open_elements->pop_until( 'TEMPLATE' ); + $this->state->active_formatting_elements->clear_up_to_last_marker(); + array_pop( $this->state->stack_of_template_insertion_modes ); + $this->reset_insertion_mode(); + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 7dd94747fd8e8..0dbd45cfa0ead 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -46,8 +46,10 @@ public static function data_single_tag_of_supported_elements() { 'ASIDE', 'AUDIO', 'B', + 'BASE', 'BDI', 'BDO', + 'BGSOUND', // Deprectated. 'BIG', 'BLINK', // Deprecated. 'BR', @@ -93,12 +95,14 @@ public static function data_single_tag_of_supported_elements() { 'KEYGEN', // Deprecated. 'LABEL', 'LEGEND', + 'LINK', 'LISTING', // Deprecated. 'MAIN', 'MAP', 'MARK', 'MARQUEE', // Deprecated. 'MENU', + 'META', 'METER', 'MULTICOL', // Deprecated. 'NAV', @@ -178,24 +182,19 @@ public function test_fails_when_encountering_unsupported_tag( $html ) { */ public static function data_unsupported_elements() { $unsupported_elements = array( - 'BASE', - 'BGSOUND', // Deprecated; self-closing if self-closing flag provided, otherwise normal. 'BODY', 'FRAME', 'FRAMESET', 'HEAD', 'HTML', 'IFRAME', - 'LINK', 'MATH', - 'META', 'NOEMBED', // Neutralized. 'NOFRAMES', // Neutralized. 'PLAINTEXT', // Neutralized. 'SCRIPT', 'STYLE', 'SVG', - 'TEMPLATE', 'TEXTAREA', 'TITLE', 'XMP', // Deprecated, use PRE instead. diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index 8487df26c99dc..69329f51321ba 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -34,6 +34,7 @@ class Tests_HtmlApi_Html5lib extends WP_UnitTestCase { 'adoption01/line0046' => 'Unimplemented: Reconstruction of active formatting elements.', 'adoption01/line0159' => 'Unimplemented: Reconstruction of active formatting elements.', 'adoption01/line0318' => 'Unimplemented: Reconstruction of active formatting elements.', + 'template/line0885' => 'Unimplemented: no parsing of attributes on context node.', 'tests1/line0720' => 'Unimplemented: Reconstruction of active formatting elements.', 'tests15/line0001' => 'Unimplemented: Reconstruction of active formatting elements.', 'tests15/line0022' => 'Unimplemented: Reconstruction of active formatting elements.', @@ -163,25 +164,34 @@ private static function build_tree_representation( ?string $fragment_context, st return null; } - if ( $was_text && '#text' !== $processor->get_token_name() ) { + $token_name = $processor->get_token_name(); + $token_type = $processor->get_token_type(); + $is_closer = $processor->is_tag_closer(); + + if ( $was_text && '#text' !== $token_name ) { $output .= "{$text_node}\"\n"; $was_text = false; $text_node = ''; } - switch ( $processor->get_token_type() ) { + switch ( $token_type ) { case '#tag': - $tag_name = strtolower( $processor->get_tag() ); + $tag_name = strtolower( $token_name ); - if ( $processor->is_tag_closer() ) { + if ( $is_closer ) { --$indent_level; + + if ( 'TEMPLATE' === $token_name ) { + --$indent_level; + } + break; } - $tag_indent = count( $processor->get_breadcrumbs() ) - 1; + $tag_indent = $indent_level; if ( ! WP_HTML_Processor::is_void( $tag_name ) ) { - $indent_level = $tag_indent + 1; + ++$indent_level; } $output .= str_repeat( $indent, $tag_indent ) . "<{$tag_name}>\n"; @@ -209,6 +219,11 @@ private static function build_tree_representation( ?string $fragment_context, st $output .= str_repeat( $indent, $indent_level ) . "\"{$modifiable_text}\"\n"; } + if ( 'TEMPLATE' === $token_name ) { + $output .= str_repeat( $indent, $indent_level ) . "content\n"; + ++$indent_level; + } + if ( ! $processor->is_void( $tag_name ) && ! $processor->expects_closer() ) { --$indent_level; } From c3e1d3a8b8c2393ce8d6d50cededbea479516b8e Mon Sep 17 00:00:00 2001 From: ramonopoly Date: Wed, 31 Jul 2024 02:39:46 +0000 Subject: [PATCH 195/422] Background: add background attachment support to theme.json styles Introduces the ability to specify a value for `background.backgroundAttachment` in theme.json styles. The theme.json value determines the CSS value for the `background-attachment` property. This feature was introduced into the Gutenberg plugin in version 18.9. Props andrewserong, mukesh27, noisysocks, ramonopoly. Fixes #61720 git-svn-id: https://develop.svn.wordpress.org/trunk@58834 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/background.php | 12 ++++--- src/wp-includes/class-wp-theme-json.php | 11 +++--- .../style-engine/class-wp-style-engine.php | 14 +++++--- .../wpRenderBackgroundSupport.php | 12 ++++--- .../tests/style-engine/styleEngine.php | 21 +++++++----- tests/phpunit/tests/theme/wpThemeJson.php | 34 +++++++++++-------- 6 files changed, 62 insertions(+), 42 deletions(-) diff --git a/src/wp-includes/block-supports/background.php b/src/wp-includes/block-supports/background.php index b7b501a44aca1..4e7995f53f92f 100644 --- a/src/wp-includes/block-supports/background.php +++ b/src/wp-includes/block-supports/background.php @@ -42,6 +42,7 @@ function wp_register_background_support( $block_type ) { * @since 6.4.0 * @since 6.5.0 Added support for `backgroundPosition` and `backgroundRepeat` output. * @since 6.6.0 Removed requirement for `backgroundImage.source`. A file/url is the default. + * @since 6.7.0 Added support for `backgroundAttachment` output. * * @access private * @@ -62,11 +63,12 @@ function wp_render_background_support( $block_content, $block ) { return $block_content; } - $background_styles = array(); - $background_styles['backgroundImage'] = $block_attributes['style']['background']['backgroundImage'] ?? null; - $background_styles['backgroundSize'] = $block_attributes['style']['background']['backgroundSize'] ?? null; - $background_styles['backgroundPosition'] = $block_attributes['style']['background']['backgroundPosition'] ?? null; - $background_styles['backgroundRepeat'] = $block_attributes['style']['background']['backgroundRepeat'] ?? null; + $background_styles = array(); + $background_styles['backgroundImage'] = $block_attributes['style']['background']['backgroundImage'] ?? null; + $background_styles['backgroundSize'] = $block_attributes['style']['background']['backgroundSize'] ?? null; + $background_styles['backgroundPosition'] = $block_attributes['style']['background']['backgroundPosition'] ?? null; + $background_styles['backgroundRepeat'] = $block_attributes['style']['background']['backgroundRepeat'] ?? null; + $background_styles['backgroundAttachment'] = $block_attributes['style']['background']['backgroundAttachment'] ?? null; if ( ! empty( $background_styles['backgroundImage'] ) ) { $background_styles['backgroundSize'] = $background_styles['backgroundSize'] ?? 'cover'; diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 631dd1f703e67..e6ca23bff310d 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -226,6 +226,7 @@ class WP_Theme_JSON { * @since 6.4.0 Added `writing-mode` property. * @since 6.5.0 Added `aspect-ratio` property. * @since 6.6.0 Added `background-[image|position|repeat|size]` properties. + * @since 6.7.0 Added `background-attachment` property. * * @var array */ @@ -237,6 +238,7 @@ class WP_Theme_JSON { 'background-position' => array( 'background', 'backgroundPosition' ), 'background-repeat' => array( 'background', 'backgroundRepeat' ), 'background-size' => array( 'background', 'backgroundSize' ), + 'background-attachment' => array( 'background', 'backgroundAttachment' ), 'border-radius' => array( 'border', 'radius' ), 'border-top-left-radius' => array( 'border', 'radius', 'topLeft' ), 'border-top-right-radius' => array( 'border', 'radius', 'topRight' ), @@ -520,10 +522,11 @@ class WP_Theme_JSON { */ const VALID_STYLES = array( 'background' => array( - 'backgroundImage' => null, - 'backgroundPosition' => null, - 'backgroundRepeat' => null, - 'backgroundSize' => null, + 'backgroundImage' => null, + 'backgroundPosition' => null, + 'backgroundRepeat' => null, + 'backgroundSize' => null, + 'backgroundAttachment' => null, ), 'border' => array( 'color' => null, diff --git a/src/wp-includes/style-engine/class-wp-style-engine.php b/src/wp-includes/style-engine/class-wp-style-engine.php index 1ba813ed65b14..3012ca3eefd30 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine.php +++ b/src/wp-includes/style-engine/class-wp-style-engine.php @@ -50,31 +50,37 @@ final class WP_Style_Engine { */ const BLOCK_STYLE_DEFINITIONS_METADATA = array( 'background' => array( - 'backgroundImage' => array( + 'backgroundImage' => array( 'property_keys' => array( 'default' => 'background-image', ), 'value_func' => array( self::class, 'get_url_or_value_css_declaration' ), 'path' => array( 'background', 'backgroundImage' ), ), - 'backgroundPosition' => array( + 'backgroundPosition' => array( 'property_keys' => array( 'default' => 'background-position', ), 'path' => array( 'background', 'backgroundPosition' ), ), - 'backgroundRepeat' => array( + 'backgroundRepeat' => array( 'property_keys' => array( 'default' => 'background-repeat', ), 'path' => array( 'background', 'backgroundRepeat' ), ), - 'backgroundSize' => array( + 'backgroundSize' => array( 'property_keys' => array( 'default' => 'background-size', ), 'path' => array( 'background', 'backgroundSize' ), ), + 'backgroundAttachment' => array( + 'property_keys' => array( + 'default' => 'background-attachment', + ), + 'path' => array( 'background', 'backgroundAttachment' ), + ), ), 'color' => array( 'text' => array( diff --git a/tests/phpunit/tests/block-supports/wpRenderBackgroundSupport.php b/tests/phpunit/tests/block-supports/wpRenderBackgroundSupport.php index 3fa7da28908a3..1f965cdc3f323 100644 --- a/tests/phpunit/tests/block-supports/wpRenderBackgroundSupport.php +++ b/tests/phpunit/tests/block-supports/wpRenderBackgroundSupport.php @@ -69,6 +69,7 @@ public function filter_set_theme_root() { * @ticket 59357 * @ticket 60175 * @ticket 61123 + * @ticket 61720 * * @covers ::wp_render_background_support * @@ -139,20 +140,21 @@ public function data_background_block_support() { 'expected_wrapper' => '
    Content
    ', 'wrapper' => '
    Content
    ', ), - 'background image style with contain, position, and repeat is applied' => array( + 'background image style with contain, position, attachment, and repeat is applied' => array( 'theme_name' => 'block-theme-child-with-fluid-typography', 'block_name' => 'test/background-rules-are-output', 'background_settings' => array( 'backgroundImage' => true, ), 'background_style' => array( - 'backgroundImage' => array( + 'backgroundImage' => array( 'url' => 'https://example.com/image.jpg', ), - 'backgroundRepeat' => 'no-repeat', - 'backgroundSize' => 'contain', + 'backgroundRepeat' => 'no-repeat', + 'backgroundSize' => 'contain', + 'backgroundAttachment' => 'fixed', ), - 'expected_wrapper' => '
    Content
    ', + 'expected_wrapper' => '
    Content
    ', 'wrapper' => '
    Content
    ', ), 'background image style is appended if a style attribute already exists' => array( diff --git a/tests/phpunit/tests/style-engine/styleEngine.php b/tests/phpunit/tests/style-engine/styleEngine.php index 9092ce5b6df03..686865c6803ab 100644 --- a/tests/phpunit/tests/style-engine/styleEngine.php +++ b/tests/phpunit/tests/style-engine/styleEngine.php @@ -28,6 +28,7 @@ public function tear_down() { * @ticket 58549 * @ticket 58590 * @ticket 60175 + * @ticket 61720 * * @covers ::wp_style_engine_get_styles * @@ -539,22 +540,24 @@ public function data_wp_style_engine_get_styles() { 'inline_background_image_url_with_background_size' => array( 'block_styles' => array( 'background' => array( - 'backgroundImage' => array( + 'backgroundImage' => array( 'url' => 'https://example.com/image.jpg', ), - 'backgroundPosition' => 'center', - 'backgroundRepeat' => 'no-repeat', - 'backgroundSize' => 'cover', + 'backgroundPosition' => 'center', + 'backgroundRepeat' => 'no-repeat', + 'backgroundSize' => 'cover', + 'backgroundAttachment' => 'fixed', ), ), 'options' => array(), 'expected_output' => array( - 'css' => "background-image:url('https://example.com/image.jpg');background-position:center;background-repeat:no-repeat;background-size:cover;", + 'css' => "background-image:url('https://example.com/image.jpg');background-position:center;background-repeat:no-repeat;background-size:cover;background-attachment:fixed;", 'declarations' => array( - 'background-image' => "url('https://example.com/image.jpg')", - 'background-position' => 'center', - 'background-repeat' => 'no-repeat', - 'background-size' => 'cover', + 'background-image' => "url('https://example.com/image.jpg')", + 'background-position' => 'center', + 'background-repeat' => 'no-repeat', + 'background-size' => 'cover', + 'background-attachment' => 'fixed', ), ), ), diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index bc8ef8121ddd0..57d25ab8e6f03 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -4997,6 +4997,7 @@ public function test_get_shadow_styles_for_blocks() { * * @ticket 61123 * @ticket 61165 + * @ticket 61720 */ public function test_get_top_level_background_image_styles() { $theme_json = new WP_Theme_JSON( @@ -5004,12 +5005,13 @@ public function test_get_top_level_background_image_styles() { 'version' => WP_Theme_JSON::LATEST_SCHEMA, 'styles' => array( 'background' => array( - 'backgroundImage' => array( + 'backgroundImage' => array( 'url' => 'http://example.org/image.png', ), - 'backgroundSize' => 'contain', - 'backgroundRepeat' => 'no-repeat', - 'backgroundPosition' => 'center center', + 'backgroundSize' => 'contain', + 'backgroundRepeat' => 'no-repeat', + 'backgroundPosition' => 'center center', + 'backgroundAttachment' => 'fixed', ), ), ) @@ -5020,7 +5022,7 @@ public function test_get_top_level_background_image_styles() { 'selector' => 'body', ); - $expected_styles = "html{min-height: calc(100% - var(--wp-admin--admin-bar--height, 0px));}:root :where(body){background-image: url('http://example.org/image.png');background-position: center center;background-repeat: no-repeat;background-size: contain;}"; + $expected_styles = "html{min-height: calc(100% - var(--wp-admin--admin-bar--height, 0px));}:root :where(body){background-image: url('http://example.org/image.png');background-position: center center;background-repeat: no-repeat;background-size: contain;background-attachment: fixed;}"; $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background styles type do not match expectations' ); $theme_json = new WP_Theme_JSON( @@ -5028,21 +5030,22 @@ public function test_get_top_level_background_image_styles() { 'version' => WP_Theme_JSON::LATEST_SCHEMA, 'styles' => array( 'background' => array( - 'backgroundImage' => "url('http://example.org/image.png')", - 'backgroundSize' => 'contain', - 'backgroundRepeat' => 'no-repeat', - 'backgroundPosition' => 'center center', + 'backgroundImage' => "url('http://example.org/image.png')", + 'backgroundSize' => 'contain', + 'backgroundRepeat' => 'no-repeat', + 'backgroundPosition' => 'center center', + 'backgroundAttachment' => 'fixed', ), ), ) ); - $expected_styles = "html{min-height: calc(100% - var(--wp-admin--admin-bar--height, 0px));}:root :where(body){background-image: url('http://example.org/image.png');background-position: center center;background-repeat: no-repeat;background-size: contain;}"; $this->assertSame( $expected_styles, $theme_json->get_styles_for_block( $body_node ), 'Styles returned from "::get_stylesheet()" with top-level background image as string type do not match expectations' ); } /** * @ticket 61588 + * @ticket 61720 */ public function test_get_block_background_image_styles() { $theme_json = new WP_Theme_JSON( @@ -5052,10 +5055,11 @@ public function test_get_block_background_image_styles() { 'blocks' => array( 'core/group' => array( 'background' => array( - 'backgroundImage' => "url('http://example.org/group.png')", - 'backgroundSize' => 'cover', - 'backgroundRepeat' => 'no-repeat', - 'backgroundPosition' => 'center center', + 'backgroundImage' => "url('http://example.org/group.png')", + 'backgroundSize' => 'cover', + 'backgroundRepeat' => 'no-repeat', + 'backgroundPosition' => 'center center', + 'backgroundAttachment' => 'fixed', ), ), 'core/quote' => array( @@ -5094,7 +5098,7 @@ public function test_get_block_background_image_styles() { ), ); - $group_styles = ":root :where(.wp-block-group){background-image: url('http://example.org/group.png');background-position: center center;background-repeat: no-repeat;background-size: cover;}"; + $group_styles = ":root :where(.wp-block-group){background-image: url('http://example.org/group.png');background-position: center center;background-repeat: no-repeat;background-size: cover;background-attachment: fixed;}"; $this->assertSame( $group_styles, $theme_json->get_styles_for_block( $group_node ), 'Styles returned from "::get_styles_for_block()" with block-level background styles as string type do not match expectations' ); } From 489b840cfd40ce310ba53fdc5d957d6f69bd4408 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 31 Jul 2024 14:03:24 +0000 Subject: [PATCH 196/422] Bundled Themes: Update schema version in style variation files. This ensures that settings and styles are properly handled by code editors that support schema. Reference: [https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-v2/#json-schema Theme.json Version 2 Reference: JSON Schema]. Follow-up to [58403]. Props poena, umeshsinghin. Fixes #61789. git-svn-id: https://develop.svn.wordpress.org/trunk@58835 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwentyfour/styles/ember.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/fossil.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/ice.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/maelstrom.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/mint.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/onyx.json | 2 +- src/wp-content/themes/twentytwentyfour/styles/rust.json | 2 +- src/wp-content/themes/twentytwentythree/styles/aubergine.json | 2 +- src/wp-content/themes/twentytwentythree/styles/block-out.json | 2 +- src/wp-content/themes/twentytwentythree/styles/canary.json | 2 +- src/wp-content/themes/twentytwentythree/styles/electric.json | 2 +- src/wp-content/themes/twentytwentythree/styles/grapes.json | 2 +- src/wp-content/themes/twentytwentythree/styles/marigold.json | 2 +- src/wp-content/themes/twentytwentythree/styles/pilgrimage.json | 2 +- src/wp-content/themes/twentytwentythree/styles/pitch.json | 2 +- src/wp-content/themes/twentytwentythree/styles/sherbet.json | 2 +- src/wp-content/themes/twentytwentythree/styles/whisper.json | 2 +- src/wp-content/themes/twentytwentytwo/styles/blue.json | 1 + src/wp-content/themes/twentytwentytwo/styles/pink.json | 1 + src/wp-content/themes/twentytwentytwo/styles/swiss.json | 1 + 20 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/wp-content/themes/twentytwentyfour/styles/ember.json b/src/wp-content/themes/twentytwentyfour/styles/ember.json index f4e612ca62ba4..3c8f08d4582b0 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/ember.json +++ b/src/wp-content/themes/twentytwentyfour/styles/ember.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Ember", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/fossil.json b/src/wp-content/themes/twentytwentyfour/styles/fossil.json index 44e24fca1e073..ffd8f99c17a53 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/fossil.json +++ b/src/wp-content/themes/twentytwentyfour/styles/fossil.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Fossil", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/ice.json b/src/wp-content/themes/twentytwentyfour/styles/ice.json index e7896bcb24cd0..7f56a7bc10b5e 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/ice.json +++ b/src/wp-content/themes/twentytwentyfour/styles/ice.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Ice", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/maelstrom.json b/src/wp-content/themes/twentytwentyfour/styles/maelstrom.json index 1f99cf5b0e27b..fe92140544fb0 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/maelstrom.json +++ b/src/wp-content/themes/twentytwentyfour/styles/maelstrom.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Maelstrom", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/mint.json b/src/wp-content/themes/twentytwentyfour/styles/mint.json index 9d306e508a8e8..645d732310626 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/mint.json +++ b/src/wp-content/themes/twentytwentyfour/styles/mint.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Mint", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/onyx.json b/src/wp-content/themes/twentytwentyfour/styles/onyx.json index 41afbd8ce7d26..2b23fd759d902 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/onyx.json +++ b/src/wp-content/themes/twentytwentyfour/styles/onyx.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Onyx", "settings": { diff --git a/src/wp-content/themes/twentytwentyfour/styles/rust.json b/src/wp-content/themes/twentytwentyfour/styles/rust.json index e3410b6b63927..d90a49742b260 100644 --- a/src/wp-content/themes/twentytwentyfour/styles/rust.json +++ b/src/wp-content/themes/twentytwentyfour/styles/rust.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Rust", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/aubergine.json b/src/wp-content/themes/twentytwentythree/styles/aubergine.json index 485eaf5fac80d..9e741ee028ad4 100644 --- a/src/wp-content/themes/twentytwentythree/styles/aubergine.json +++ b/src/wp-content/themes/twentytwentythree/styles/aubergine.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Aubergine", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/block-out.json b/src/wp-content/themes/twentytwentythree/styles/block-out.json index 4b09b8eed480f..cdeaab759c2cf 100644 --- a/src/wp-content/themes/twentytwentythree/styles/block-out.json +++ b/src/wp-content/themes/twentytwentythree/styles/block-out.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Block out", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/canary.json b/src/wp-content/themes/twentytwentythree/styles/canary.json index f8d8f807f69cf..b58af0a59f9a7 100644 --- a/src/wp-content/themes/twentytwentythree/styles/canary.json +++ b/src/wp-content/themes/twentytwentythree/styles/canary.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Canary", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/electric.json b/src/wp-content/themes/twentytwentythree/styles/electric.json index 077ca0920fcb0..9bd275a683b03 100644 --- a/src/wp-content/themes/twentytwentythree/styles/electric.json +++ b/src/wp-content/themes/twentytwentythree/styles/electric.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Electric", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/grapes.json b/src/wp-content/themes/twentytwentythree/styles/grapes.json index cf0c4b4a1f317..dd3c2b20b033b 100644 --- a/src/wp-content/themes/twentytwentythree/styles/grapes.json +++ b/src/wp-content/themes/twentytwentythree/styles/grapes.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Grapes", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/marigold.json b/src/wp-content/themes/twentytwentythree/styles/marigold.json index 4ad7ef40ad579..4271d9626d34d 100644 --- a/src/wp-content/themes/twentytwentythree/styles/marigold.json +++ b/src/wp-content/themes/twentytwentythree/styles/marigold.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Marigold", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/pilgrimage.json b/src/wp-content/themes/twentytwentythree/styles/pilgrimage.json index be16addf29cb3..bfcfcb4086c40 100644 --- a/src/wp-content/themes/twentytwentythree/styles/pilgrimage.json +++ b/src/wp-content/themes/twentytwentythree/styles/pilgrimage.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Pilgrimage", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/pitch.json b/src/wp-content/themes/twentytwentythree/styles/pitch.json index 583e28e98fe5f..b8283d7816488 100644 --- a/src/wp-content/themes/twentytwentythree/styles/pitch.json +++ b/src/wp-content/themes/twentytwentythree/styles/pitch.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Pitch", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/sherbet.json b/src/wp-content/themes/twentytwentythree/styles/sherbet.json index d6e20390c6f79..6e500ee9e409e 100644 --- a/src/wp-content/themes/twentytwentythree/styles/sherbet.json +++ b/src/wp-content/themes/twentytwentythree/styles/sherbet.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Sherbet", "settings": { diff --git a/src/wp-content/themes/twentytwentythree/styles/whisper.json b/src/wp-content/themes/twentytwentythree/styles/whisper.json index d1e677be4ec21..c92cce3be0a13 100644 --- a/src/wp-content/themes/twentytwentythree/styles/whisper.json +++ b/src/wp-content/themes/twentytwentythree/styles/whisper.json @@ -1,5 +1,5 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Whisper", "settings": { diff --git a/src/wp-content/themes/twentytwentytwo/styles/blue.json b/src/wp-content/themes/twentytwentytwo/styles/blue.json index 8ebedef019453..29338c5a1ace1 100644 --- a/src/wp-content/themes/twentytwentytwo/styles/blue.json +++ b/src/wp-content/themes/twentytwentytwo/styles/blue.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Blue", "settings": { diff --git a/src/wp-content/themes/twentytwentytwo/styles/pink.json b/src/wp-content/themes/twentytwentytwo/styles/pink.json index 5c9be91a4e3c6..8646dcc6beb34 100644 --- a/src/wp-content/themes/twentytwentytwo/styles/pink.json +++ b/src/wp-content/themes/twentytwentytwo/styles/pink.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Pink", "settings": { diff --git a/src/wp-content/themes/twentytwentytwo/styles/swiss.json b/src/wp-content/themes/twentytwentytwo/styles/swiss.json index 483467ccc0b83..226df86b4dc84 100644 --- a/src/wp-content/themes/twentytwentytwo/styles/swiss.json +++ b/src/wp-content/themes/twentytwentytwo/styles/swiss.json @@ -1,4 +1,5 @@ { + "$schema": "https://schemas.wp.org/wp/6.5/theme.json", "version": 2, "title": "Swiss", "settings": { From 883146e8a5b79f3accf6a171a6c53a4716a2b61c Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 31 Jul 2024 16:54:23 +0000 Subject: [PATCH 197/422] HTML API: Introduce full parsing mode in HTML Processor. The HTML Processor has only supported a specific kind of parsing mode called _the fragment parsing mode_, where it behaves in the same way that `node.innerHTML = html` does in the DOM. This mode assumes a context node and doesn't support parsing an entire document. As part of work to add more spec support to the HTML API, this patch introduces a full parsing mode, which can parse a full HTML document from start to end, including the doctype declaration and head tags. Developed in https://github.com/wordpress/wordpress-develop/pull/6977 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58836 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-html-processor-state.php | 32 + .../html-api/class-wp-html-processor.php | 589 ++++++++++++++++-- .../html-api/wpHtmlProcessorBreadcrumbs.php | 29 +- 3 files changed, 587 insertions(+), 63 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index e0469bea020e5..97f6da95a0012 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -428,6 +428,38 @@ class WP_HTML_Processor_State { */ public $context_node = null; + /** + * The recognized encoding of the input byte stream. + * + * > The stream of code points that comprises the input to the tokenization + * > stage will be initially seen by the user agent as a stream of bytes + * > (typically coming over the network or from the local file system). + * > The bytes encode the actual characters according to a particular character + * > encoding, which the user agent uses to decode the bytes into characters. + * + * @since 6.7.0 + * + * @var string|null + */ + public $encoding = null; + + /** + * The parser's confidence in the input encoding. + * + * > When the HTML parser is decoding an input byte stream, it uses a character + * > encoding and a confidence. The confidence is either tentative, certain, or + * > irrelevant. The encoding used, and whether the confidence in that encoding + * > is tentative or certain, is used during the parsing to determine whether to + * > change the encoding. If no encoding is necessary, e.g. because the parser is + * > operating on a Unicode stream and doesn't have to use a character encoding + * > at all, then the confidence is irrelevant. + * + * @since 6.7.0 + * + * @var string + */ + public $encoding_confidence = 'tentative'; + /** * HEAD element pointer. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 9f2662c9e4c48..51802ac558a60 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -256,21 +256,6 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { */ private $context_node = null; - /** - * Whether the parser has yet processed the context node, - * if created as a fragment parser. - * - * The context node will be initially pushed onto the stack of open elements, - * but when created as a fragment parser, this context element (and the implicit - * HTML document node above it) should not be exposed as a matched token or node. - * - * This boolean indicates whether the processor should skip over the current - * node in its initial search for the first node created from the input HTML. - * - * @var bool - */ - private $has_seen_context_node = false; - /* * Public Interface Functions */ @@ -312,9 +297,11 @@ public static function create_fragment( $html, $context = '', $encoding = return null; } - $processor = new static( $html, self::CONSTRUCTOR_UNLOCK_CODE ); - $processor->state->context_node = array( 'BODY', array() ); - $processor->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + $processor = new static( $html, self::CONSTRUCTOR_UNLOCK_CODE ); + $processor->state->context_node = array( 'BODY', array() ); + $processor->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + $processor->state->encoding = $encoding; + $processor->state->encoding_confidence = 'certain'; // @todo Create "fake" bookmarks for non-existent but implied nodes. $processor->bookmarks['root-node'] = new WP_HTML_Span( 0, 0 ); @@ -340,6 +327,34 @@ public static function create_fragment( $html, $context = '', $encoding = return $processor; } + /** + * Creates an HTML processor in the full parsing mode. + * + * It's likely that a fragment parser is more appropriate, unless sending an + * entire HTML document from start to finish. Consider a fragment parser with + * a context node of ``. + * + * Since UTF-8 is the only currently-accepted charset, if working with a + * document that isn't UTF-8, it's important to convert the document before + * creating the processor: pass in the converted HTML. + * + * @param string $html Input HTML document to process. + * @param string|null $known_definite_encoding Optional. If provided, specifies the charset used + * in the input byte stream. Currently must be UTF-8. + * @return static|null The created processor if successful, otherwise null. + */ + public static function create_full_parser( $html, $known_definite_encoding = 'UTF-8' ) { + if ( 'UTF-8' !== $known_definite_encoding ) { + return null; + } + + $processor = new static( $html, self::CONSTRUCTOR_UNLOCK_CODE ); + $processor->state->encoding = $known_definite_encoding; + $processor->state->encoding_confidence = 'certain'; + + return $processor; + } + /** * Constructor. * @@ -993,7 +1008,62 @@ public function get_current_depth(): int { * @return bool Whether an element was found. */ private function step_initial(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_INITIAL . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + * + * Parse error: ignore the token. + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + return $this->step(); + } + goto initial_anything_else; + break; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + $contents = $this->get_modifiable_text(); + if ( ' html' !== $contents ) { + /* + * @todo When the HTML Tag Processor fully parses the DOCTYPE declaration, + * this code should examine the contents to set the compatability mode. + */ + $this->bail( 'Cannot process any DOCTYPE other than a normative HTML5 doctype.' ); + } + + /* + * > Then, switch the insertion mode to "before html". + */ + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML; + return true; + } + + /* + * > Anything else + */ + initial_anything_else: + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -1002,7 +1072,7 @@ private function step_initial(): bool { * This internal function performs the 'before html' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -1012,7 +1082,86 @@ private function step_initial(): bool { * @return bool Whether an element was found. */ private function step_before_html(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = parent::is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + * + * Parse error: ignore the token. + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + return $this->step(); + } + goto before_html_anything_else; + break; + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD; + return true; + + /* + * > An end tag whose tag name is one of: "head", "body", "html", "br" + * + * Closing BR tags are always reported by the Tag Processor as opening tags. + */ + case '-HEAD': + case '-BODY': + case '-HTML': + /* + * > Act as described in the "anything else" entry below. + */ + goto before_html_anything_else; + break; + } + + /* + * > Any other end tag + */ + if ( $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else. + * + * > Create an html element whose node document is the Document object. + * > Append it to the Document object. Put this element in the stack of open elements. + * > Switch the insertion mode to "before head", then reprocess the token. + */ + before_html_anything_else: + $this->insert_virtual_node( 'HTML' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -1031,7 +1180,86 @@ private function step_before_html(): bool { * @return bool Whether an element was found. */ private function step_before_head(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = parent::is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + * + * Parse error: ignore the token. + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + return $this->step(); + } + goto before_head_anything_else; + break; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is "head" + */ + case '+HEAD': + $this->insert_html_element( $this->state->current_token ); + $this->state->head_element = $this->state->current_token; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD; + return true; + + /* + * > An end tag whose tag name is one of: "head", "body", "html", "br" + * > Act as described in the "anything else" entry below. + * + * Closing BR tags are always reported by the Tag Processor as opening tags. + */ + case '-HEAD': + case '-BODY': + case '-HTML': + goto before_head_anything_else; + break; + } + + if ( $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + * + * > Insert an HTML element for a "head" start tag token with no attributes. + */ + before_head_anything_else: + $this->state->head_element = $this->insert_virtual_node( 'HEAD' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -1056,29 +1284,31 @@ private function step_in_head(): bool { $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; $op = "{$op_sigil}{$token_name}"; - /* - * > A character token that is one of U+0009 CHARACTER TABULATION, - * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), - * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE - */ - if ( '#text' === $op ) { - $text = $this->get_modifiable_text(); - if ( '' === $text ) { + switch ( $op ) { + case '#text': /* - * If the text is empty after processing HTML entities and stripping - * U+0000 NULL bytes then ignore the token. + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */ - return $this->step(); - } + $text = $this->get_modifiable_text(); + if ( '' === $text ) { + /* + * If the text is empty after processing HTML entities and stripping + * U+0000 NULL bytes then ignore the token. + */ + return $this->step(); + } - if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { - // Insert the character. - $this->insert_html_element( $this->state->current_token ); - return true; - } - } + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + // Insert the character. + $this->insert_html_element( $this->state->current_token ); + return true; + } + + goto in_head_anything_else; + break; - switch ( $op ) { /* * > A comment token */ @@ -1124,7 +1354,7 @@ private function step_in_head(): bool { * > tentative, then change the encoding to the resulting encoding. */ $charset = $this->get_attribute( 'charset' ); - if ( is_string( $charset ) ) { + if ( is_string( $charset ) && 'tentative' === $this->state->encoding_confidence ) { $this->bail( 'Cannot yet process META tags with charset to determine encoding.' ); } @@ -1141,7 +1371,8 @@ private function step_in_head(): bool { if ( is_string( $http_equiv ) && is_string( $content ) && - 0 === strcasecmp( $http_equiv, 'Content-Type' ) + 0 === strcasecmp( $http_equiv, 'Content-Type' ) && + 'tentative' === $this->state->encoding_confidence ) { $this->bail( 'Cannot yet process META tags with http-equiv Content-Type to determine encoding.' ); } @@ -1193,10 +1424,11 @@ private function step_in_head(): bool { /* * > An end tag whose tag name is one of: "body", "html", "br" + * + * BR tags are always reported by the Tag Processor as opening tags. */ case '-BODY': case '-HTML': - case '-BR': /* * > Act as described in the "anything else" entry below. */ @@ -1273,7 +1505,92 @@ private function step_in_head(): bool { * @return bool Whether an element was found. */ private function step_in_head_noscript(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD_NOSCRIPT . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = parent::is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + * + * Parse error: ignore the token. + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + return $this->step_in_head(); + } + + goto in_head_noscript_anything_else; + break; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > An end tag whose tag name is "noscript" + */ + case '-NOSCRIPT': + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD; + return true; + + /* + * > A comment token + * > + * > A start tag whose tag name is one of: "basefont", "bgsound", + * > "link", "meta", "noframes", "style" + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + case '+BASEFONT': + case '+BGSOUND': + case '+LINK': + case '+META': + case '+NOFRAMES': + case '+STYLE': + return $this->step_in_head(); + + /* + * > An end tag whose tag name is "br" + * + * This should never happen, as the Tag Processor prevents showing a BR closing tag. + */ + } + + /* + * > A start tag whose tag name is one of: "head", "noscript" + * > Any other end tag + */ + if ( '+HEAD' === $op || '+NOSCRIPT' === $op || $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + * + * Anything here is a parse error. + */ + in_head_noscript_anything_else: + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -1292,7 +1609,133 @@ private function step_in_head_noscript(): bool { * @return bool Whether an element was found. */ private function step_after_head(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $is_closer = parent::is_tag_closer(); + $op_sigil = '#tag' === $token_type ? ( $is_closer ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, + * > U+000A LINE FEED (LF), U+000C FORM FEED (FF), + * > U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + // Insert the character. + $this->insert_html_element( $this->state->current_token ); + return true; + } + goto after_head_anything_else; + break; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is "body" + */ + case '+BODY': + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + return true; + + /* + * > A start tag whose tag name is "frameset" + */ + case '+FRAMESET': + $this->insert_html_element( $this->state->current_token ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_FRAMESET; + return true; + + /* + * > A start tag whose tag name is one of: "base", "basefont", "bgsound", + * > "link", "meta", "noframes", "script", "style", "template", "title" + * + * Anything here is a parse error. + */ + case '+BASE': + case '+BASEFONT': + case '+BGSOUND': + case '+LINK': + case '+META': + case '+NOFRAMES': + case '+SCRIPT': + case '+STYLE': + case '+TEMPLATE': + case '+TITLE': + /* + * > Push the node pointed to by the head element pointer onto the stack of open elements. + * > Process the token using the rules for the "in head" insertion mode. + * > Remove the node pointed to by the head element pointer from the stack of open elements. (It might not be the current node at this point.) + */ + $this->bail( 'Cannot process elements after HEAD which reopen the HEAD element.' ); + /* + * Do not leave this break in when adding support; it's here to prevent + * WPCS from getting confused at the switch structure without a return, + * because it doesn't know that `bail()` always throws. + */ + break; + + /* + * > An end tag whose tag name is "template" + */ + case '-TEMPLATE': + return $this->step_in_head(); + + /* + * > An end tag whose tag name is one of: "body", "html", "br" + * + * Closing BR tags are always reported by the Tag Processor as opening tags. + */ + case '-BODY': + case '-HTML': + /* + * > Act as described in the "anything else" entry below. + */ + goto after_head_anything_else; + break; + } + + /* + * > A start tag whose tag name is "head" + * > Any other end tag + */ + if ( '+HEAD' === $op || $is_closer ) { + // Parse error: ignore the token. + return $this->step(); + } + + /* + * > Anything else + * > Insert an HTML element for a "body" start tag token with no attributes. + */ + after_head_anything_else: + $this->insert_virtual_node( 'BODY' ); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_BODY; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** @@ -4469,14 +4912,17 @@ private function insert_html_element( WP_HTML_Token $token ): void { * @param string $token_name Name of token to create and insert into the stack of open elements. * @param string|null $bookmark_name Optional. Name to give bookmark for created virtual node. * Defaults to auto-creating a bookmark name. + * @return WP_HTML_Token Newly-created virtual token. */ - private function insert_virtual_node( $token_name, $bookmark_name = null ): void { + private function insert_virtual_node( $token_name, $bookmark_name = null ): WP_HTML_Token { $here = $this->bookmarks[ $this->state->current_token->bookmark_name ]; $name = $bookmark_name ?? $this->bookmark_token(); $this->bookmarks[ $name ] = new WP_HTML_Span( $here->start, 0 ); - $this->insert_html_element( new WP_HTML_Token( $name, $token_name, false ) ); + $token = new WP_HTML_Token( $name, $token_name, false ); + $this->insert_html_element( $token ); + return $token; } /* @@ -4633,6 +5079,53 @@ public static function is_void( $tag_name ): bool { ); } + /** + * Gets an encoding from a given string. + * + * This is an algorithm defined in the WHAT-WG specification. + * + * Example: + * + * 'UTF-8' === self::get_encoding( 'utf8' ); + * 'UTF-8' === self::get_encoding( " \tUTF-8 " ); + * null === self::get_encoding( 'UTF-7' ); + * null === self::get_encoding( 'utf8; charset=' ); + * + * @see https://encoding.spec.whatwg.org/#concept-encoding-get + * + * @todo As this parser only supports UTF-8, only the UTF-8 + * encodings are detected. Add more as desired, but the + * parser will bail on non-UTF-8 encodings. + * + * @since 6.7.0 + * + * @param string $label A string which may specify a known encoding. + * @return string|null Known encoding if matched, otherwise null. + */ + protected static function get_encoding( string $label ): ?string { + /* + * > Remove any leading and trailing ASCII whitespace from label. + */ + $label = trim( $label, " \t\f\r\n" ); + + /* + * > If label is an ASCII case-insensitive match for any of the labels listed in the + * > table below, then return the corresponding encoding; otherwise return failure. + */ + switch ( strtolower( $label ) ) { + case 'unicode-1-1-utf-8': + case 'unicode11utf8': + case 'unicode20utf8': + case 'utf-8': + case 'utf8': + case 'x-unicode20utf8': + return 'UTF-8'; + + default: + return null; + } + } + /* * Constants that would pollute the top of the class if they were found there. */ diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 0dbd45cfa0ead..1486769533e96 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -25,7 +25,7 @@ class Tests_HtmlApi_WpHtmlProcessorBreadcrumbs extends WP_UnitTestCase { public function test_navigates_into_normative_html_for_supported_elements( $html, $tag_name ) { $processor = WP_HTML_Processor::create_fragment( $html ); - $this->assertTrue( $processor->step(), "Failed to step into supported {$tag_name} element." ); + $this->assertTrue( $processor->next_token(), "Failed to step into supported {$tag_name} element." ); $this->assertSame( $tag_name, $processor->get_tag(), "Misread {$tag_name} as a {$processor->get_tag()} element." ); } @@ -90,6 +90,7 @@ public static function data_single_tag_of_supported_elements() { 'IMG', 'INS', 'LI', + 'LINK', 'ISINDEX', // Deprecated. 'KBD', 'KEYGEN', // Deprecated. @@ -108,6 +109,8 @@ public static function data_single_tag_of_supported_elements() { 'NAV', 'NEXTID', // Deprecated. 'NOBR', // Neutralized. + 'NOEMBED', // Neutralized. + 'NOFRAMES', // Neutralized. 'NOSCRIPT', 'OBJECT', 'OL', @@ -122,6 +125,7 @@ public static function data_single_tag_of_supported_elements() { 'RTC', // Neutralized. 'RUBY', 'SAMP', + 'SCRIPT', 'SEARCH', 'SECTION', 'SLOT', @@ -130,21 +134,29 @@ public static function data_single_tag_of_supported_elements() { 'SPAN', 'STRIKE', 'STRONG', + 'STYLE', 'SUB', 'SUMMARY', 'SUP', 'TABLE', + 'TEXTAREA', 'TIME', + 'TITLE', 'TT', 'U', 'UL', 'VAR', 'VIDEO', + 'XMP', // Deprecated, use PRE instead. ); $data = array(); foreach ( $supported_elements as $tag_name ) { - $data[ $tag_name ] = array( "<{$tag_name}>", $tag_name ); + $closer = in_array( $tag_name, array( 'NOEMBED', 'NOFRAMES', 'SCRIPT', 'STYLE', 'TEXTAREA', 'TITLE', 'XMP' ), true ) + ? "" + : ''; + + $data[ $tag_name ] = array( "<{$tag_name}>{$closer}", $tag_name ); } $data['IMAGE (treated as an IMG)'] = array( '', 'IMG' ); @@ -182,22 +194,9 @@ public function test_fails_when_encountering_unsupported_tag( $html ) { */ public static function data_unsupported_elements() { $unsupported_elements = array( - 'BODY', - 'FRAME', - 'FRAMESET', - 'HEAD', - 'HTML', - 'IFRAME', 'MATH', - 'NOEMBED', // Neutralized. - 'NOFRAMES', // Neutralized. 'PLAINTEXT', // Neutralized. - 'SCRIPT', - 'STYLE', 'SVG', - 'TEXTAREA', - 'TITLE', - 'XMP', // Deprecated, use PRE instead. ); $data = array(); From 74e03e3cbef2f2565028f446c76acb2dabf749bd Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Wed, 31 Jul 2024 22:56:32 +0000 Subject: [PATCH 198/422] Options, Meta APIs: Prime salts when stored in database. For salts generated and stored in the database, use `wp_prime_site_option_caches()` within `wp_salt()` to prime the options in a single database query, down from up to nine database queries. The options are primed when the corresponding constant is either undefined or uses the default string `put your unique phrase here`. Props joemcgill, spacedmonkey, peterwilsoncc. Fixes #59871. git-svn-id: https://develop.svn.wordpress.org/trunk@58837 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index 0e9e0d4579c19..ae5355f9c6903 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2468,6 +2468,41 @@ function wp_salt( $scheme = 'auth' ) { } } + /* + * Determine which options to prime. + * + * If the salt keys are undefined, use a duplicate value or the + * default `put your unique phrase here` value the salt will be + * generated via `wp_generate_password()` and stored as a site + * option. These options will be primed to avoid repeated + * database requests for undefined salts. + */ + $options_to_prime = array(); + foreach ( array( 'auth', 'secure_auth', 'logged_in', 'nonce' ) as $key ) { + foreach ( array( 'key', 'salt' ) as $second ) { + $const = strtoupper( "{$key}_{$second}" ); + if ( ! defined( $const ) || true === $duplicated_keys[ constant( $const ) ] ) { + $options_to_prime[] = "{$key}_{$second}"; + } + } + } + + if ( ! empty( $options_to_prime ) ) { + /* + * Also prime `secret_key` used for undefined salting schemes. + * + * If the scheme is unknown the default value for `secret_key` will be + * used to for the salt. This should rarely happen so the option is only + * primed if other salts are undefined. + * + * At this point of execution is is known that a database call will be made + * to prime salts so the `secret_key` option can be primed regardless of the + * constants status. + */ + $options_to_prime[] = 'secret_key'; + wp_prime_site_option_caches( $options_to_prime ); + } + $values = array( 'key' => '', 'salt' => '', From d0566719b39b1ccc88eac525e936b1e29fef5860 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 1 Aug 2024 20:30:48 +0000 Subject: [PATCH 199/422] Docs: Correct some typos in a comment in `wp_salt()`. Follow-up to [58837]. Props kebbet. Fixes #59871. git-svn-id: https://develop.svn.wordpress.org/trunk@58838 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pluggable.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index ae5355f9c6903..8380a597249ba 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -2491,12 +2491,12 @@ function wp_salt( $scheme = 'auth' ) { /* * Also prime `secret_key` used for undefined salting schemes. * - * If the scheme is unknown the default value for `secret_key` will be - * used to for the salt. This should rarely happen so the option is only + * If the scheme is unknown, the default value for `secret_key` will be + * used too for the salt. This should rarely happen, so the option is only * primed if other salts are undefined. * - * At this point of execution is is known that a database call will be made - * to prime salts so the `secret_key` option can be primed regardless of the + * At this point of execution it is known that a database call will be made + * to prime salts, so the `secret_key` option can be primed regardless of the * constants status. */ $options_to_prime[] = 'secret_key'; From 5b8e0ec00bde2ca14d2d06fa6a411b3871cd191a Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 1 Aug 2024 22:04:44 +0000 Subject: [PATCH 200/422] HTML API: Add support for IN COLUMN GROUP parsing. As part of work to add more spec support to the HTML API, this patch adds support for the IN COLUMN GROUP insertion mode. This small section of the spec handles rules for the `
    ` element. Developed in https://github.com/wordpress/wordpress-develop/pull/7042 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58839 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 101 +++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 51802ac558a60..5ff2aa87ffdd6 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -3068,7 +3068,7 @@ private function step_in_caption(): bool { * This internal function performs the 'in column group' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -3078,7 +3078,104 @@ private function step_in_caption(): bool { * @return bool Whether an element was found. */ private function step_in_column_group(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A character token that is one of U+0009 CHARACTER TABULATION, U+000A LINE FEED (LF), + * > U+000C FORM FEED (FF), U+000D CARRIAGE RETURN (CR), or U+0020 SPACE + */ + case '#text': + $text = $this->get_modifiable_text(); + if ( '' === $text ) { + /* + * If the text is empty after processing HTML entities and stripping + * U+0000 NULL bytes then ignore the token. + */ + return $this->step(); + } + + if ( strlen( $text ) === strspn( $text, " \t\n\f\r" ) ) { + // Insert the character. + $this->insert_html_element( $this->state->current_token ); + return true; + } + + goto in_column_group_anything_else; + break; + + /* + * > A comment token + */ + case '#comment': + case '#funky-comment': + case '#presumptuous-tag': + $this->insert_html_element( $this->state->current_token ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // @todo Indicate a parse error once it's possible. + return $this->step(); + + /* + * > A start tag whose tag name is "html" + */ + case '+HTML': + return $this->step_in_body(); + + /* + * > A start tag whose tag name is "col" + */ + case '+COL': + $this->insert_html_element( $this->state->current_token ); + $this->state->stack_of_open_elements->pop(); + return true; + + /* + * > An end tag whose tag name is "colgroup" + */ + case '-COLGROUP': + if ( ! $this->state->stack_of_open_elements->current_node_is( 'COLGROUP' ) ) { + // @todo Indicate a parse error once it's possible. + return $this->step(); + } + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return true; + + /* + * > An end tag whose tag name is "col" + */ + case '-COL': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "template" + * > An end tag whose tag name is "template" + */ + case '+TEMPLATE': + case '-TEMPLATE': + return $this->step_in_head(); + } + + in_column_group_anything_else: + /* + * > Anything else + */ + if ( ! $this->state->stack_of_open_elements->current_node_is( 'COLGROUP' ) ) { + // @todo Indicate a parse error once it's possible. + return $this->step(); + } + $this->state->stack_of_open_elements->pop(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + return $this->step( self::REPROCESS_CURRENT_NODE ); } /** From 6afe6bc178e729459ddbda4720fbcced3299f375 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 1 Aug 2024 22:34:29 +0000 Subject: [PATCH 201/422] HTML API: Add support for IN CAPTION parsing. As part of work to add more spec support to the HTML API, this patch adds support for the IN CAPTION insertion mode. This small section of the spec handles rules for the `
    ` element. Developed in https://github.com/wordpress/wordpress-develop/pull/7041 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58840 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 5ff2aa87ffdd6..19ac3731f6c3f 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -3049,7 +3049,7 @@ private function step_in_table_text(): bool { * This internal function performs the 'in caption' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -3059,7 +3059,72 @@ private function step_in_table_text(): bool { * @return bool Whether an element was found. */ private function step_in_caption(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION . ' state.' ); + $tag_name = $this->get_tag(); + $op_sigil = $this->is_tag_closer() ? '-' : '+'; + $op = "{$op_sigil}{$tag_name}"; + + switch ( $op ) { + /* + * > An end tag whose tag name is "caption" + * > A start tag whose tag name is one of: "caption", "col", "colgroup", "tbody", "td", "tfoot", "th", "thead", "tr" + * > An end tag whose tag name is "table" + * + * These tag handling rules are identical except for the final instruction. + * Handle them in a single block. + */ + case '-CAPTION': + case '+CAPTION': + case '+COL': + case '+COLGROUP': + case '+TBODY': + case '+TD': + case '+TFOOT': + case '+TH': + case '+THEAD': + case '+TR': + case '-TABLE': + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( 'CAPTION' ) ) { + // Parse error: ignore the token. + return $this->step(); + } + + $this->generate_implied_end_tags(); + if ( ! $this->state->stack_of_open_elements->current_node_is( 'CAPTION' ) ) { + // @todo Indicate a parse error once it's possible. + } + + $this->state->stack_of_open_elements->pop_until( 'CAPTION' ); + $this->state->active_formatting_elements->clear_up_to_last_marker(); + $this->state->insertion_mode = WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE; + + // If this is not a CAPTION end tag, the token should be reprocessed. + if ( '-CAPTION' === $op ) { + return true; + } + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /** + * > An end tag whose tag name is one of: "body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" + */ + case '-BODY': + case '-COL': + case '-COLGROUP': + case '-HTML': + case '-TBODY': + case '-TD': + case '-TFOOT': + case '-TH': + case '-THEAD': + case '-TR': + // Parse error: ignore the token. + return $this->step(); + } + + /** + * > Anything else + * > Process the token using the rules for the "in body" insertion mode. + */ + return $this->step_in_body(); } /** From a799101e46ef0a042814c189a6331c23a52a100c Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 1 Aug 2024 22:51:11 +0000 Subject: [PATCH 202/422] HTML API: Add support for IN SELECT IN TABLE parsing. As part of work to add more spec support to the HTML API, this patch adds support for the IN SELECT IN TABLE insertion mode. This small section of the spec handles rules for the ``. Developed in https://github.com/wordpress/wordpress-develop/pull/7044 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58841 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 19ac3731f6c3f..39ba43e467d5c 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -3771,7 +3771,7 @@ private function step_in_select(): bool { * This internal function performs the 'in select in table' insertion mode * logic for the generalized WP_HTML_Processor::step() function. * - * @since 6.7.0 Stub implementation. + * @since 6.7.0 * * @throws WP_HTML_Unsupported_Exception When encountering unsupported HTML input. * @@ -3781,7 +3781,52 @@ private function step_in_select(): bool { * @return bool Whether an element was found. */ private function step_in_select_in_table(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE . ' state.' ); + $token_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( parent::is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$token_name}"; + + switch ( $op ) { + /* + * > A start tag whose tag name is one of: "caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th" + */ + case '+CAPTION': + case '+TABLE': + case '+TBODY': + case '+TFOOT': + case '+THEAD': + case '+TR': + case '+TD': + case '+TH': + // @todo Indicate a parse error once it's possible. + $this->state->stack_of_open_elements->pop_until( 'SELECT' ); + $this->reset_insertion_mode(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + + /* + * > An end tag whose tag name is one of: "caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th" + */ + case '-CAPTION': + case '-TABLE': + case '-TBODY': + case '-TFOOT': + case '-THEAD': + case '-TR': + case '-TD': + case '-TH': + // @todo Indicate a parse error once it's possible. + if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $token_name ) ) { + return $this->step(); + } + $this->state->stack_of_open_elements->pop_until( 'SELECT' ); + $this->reset_insertion_mode(); + return $this->step( self::REPROCESS_CURRENT_NODE ); + } + + /* + * > Anything else + */ + return $this->step_in_select(); } /** From da0f44fdff1f9ac47f606440593ee977881f2734 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 2 Aug 2024 19:38:44 +0000 Subject: [PATCH 203/422] Docs: Improve the wording for `cron_reschedule_event_error` action description. Follow-up to [54258]. Props NekoJonez, audrasjb. See #61608. git-svn-id: https://develop.svn.wordpress.org/trunk@58842 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-cron.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-cron.php b/src/wp-cron.php index c3161d9864865..417dcce375849 100644 --- a/src/wp-cron.php +++ b/src/wp-cron.php @@ -141,7 +141,7 @@ function _get_cron_lock() { ); /** - * Fires when an error happens rescheduling a cron event. + * Fires if an error happens when rescheduling a cron event. * * @since 6.1.0 * @@ -168,7 +168,7 @@ function _get_cron_lock() { ); /** - * Fires when an error happens unscheduling a cron event. + * Fires if an error happens when unscheduling a cron event. * * @since 6.1.0 * From 0e06e2b522e812e0d62193eb7ad21f9b38dde7bb Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Fri, 2 Aug 2024 22:36:27 +0000 Subject: [PATCH 204/422] General: Use clean WordPress version in `is_wp_version_compatible()`. Update `is_wp_version_compatible()` to use `wp_get_wp_version()` introduced in [58813] to ensure the value of `$wp_version` has not been modified by a theme or plugin. Props costdev, mukesh27, Cybr, sergeybiryukov. Fixes #61781. git-svn-id: https://develop.svn.wordpress.org/trunk@58843 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 12 +++- .../tests/functions/isWpVersionCompatible.php | 66 ++++++++++++------- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 136012dd07284..465383b81eeee 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -8833,13 +8833,21 @@ function wp_get_wp_version() { * * @since 5.2.0 * - * @global string $wp_version The WordPress version string. + * @global string $_wp_tests_wp_version The WordPress version string. Used only in Core tests. * * @param string $required Minimum required WordPress version. * @return bool True if required version is compatible or empty, false if not. */ function is_wp_version_compatible( $required ) { - global $wp_version; + if ( + defined( 'WP_RUN_CORE_TESTS' ) + && WP_RUN_CORE_TESTS + && isset( $GLOBALS['_wp_tests_wp_version'] ) + ) { + $wp_version = $GLOBALS['_wp_tests_wp_version']; + } else { + $wp_version = wp_get_wp_version(); + } // Strip off any -alpha, -RC, -beta, -src suffixes. list( $version ) = explode( '-', $wp_version ); diff --git a/tests/phpunit/tests/functions/isWpVersionCompatible.php b/tests/phpunit/tests/functions/isWpVersionCompatible.php index 599f3b29f0005..fba8af3e14fdd 100644 --- a/tests/phpunit/tests/functions/isWpVersionCompatible.php +++ b/tests/phpunit/tests/functions/isWpVersionCompatible.php @@ -8,12 +8,45 @@ * @covers ::is_wp_version_compatible */ class Tests_Functions_IsWpVersionCompatible extends WP_UnitTestCase { + /** + * The current WordPress version. + * + * @var string + */ + private static $wp_version; + + /** + * Sets the test WordPress version property and global before any tests run. + */ + public static function set_up_before_class() { + parent::set_up_before_class(); + self::$wp_version = wp_get_wp_version(); + $GLOBALS['_wp_tests_wp_version'] = self::$wp_version; + } + + /** + * Resets the test WordPress version global after each test runs. + */ + public function tear_down() { + $GLOBALS['_wp_tests_wp_version'] = self::$wp_version; + parent::tear_down(); + } + + /** + * Unsets the test WordPress version global after all tests run. + */ + public static function tear_down_after_class() { + unset( $GLOBALS['_wp_tests_wp_version'] ); + parent::tear_down_after_class(); + } + /** * Tests is_wp_version_compatible(). * * @dataProvider data_is_wp_version_compatible * * @ticket 54257 + * @ticket 61781 * * @param mixed $required The minimum required WordPress version. * @param bool $expected The expected result. @@ -28,8 +61,7 @@ public function test_is_wp_version_compatible( $required, $expected ) { * @return array[] */ public function data_is_wp_version_compatible() { - global $wp_version; - + $wp_version = wp_get_wp_version(); $version_parts = explode( '.', $wp_version ); $lower_version = $version_parts; $higher_version = $version_parts; @@ -104,22 +136,15 @@ public function data_is_wp_version_compatible() { * @dataProvider data_is_wp_version_compatible_should_gracefully_handle_trailing_point_zero_version_numbers * * @ticket 59448 + * @ticket 61781 * * @param mixed $required The minimum required WordPress version. * @param string $wp The value for the $wp_version global variable. * @param bool $expected The expected result. */ public function test_is_wp_version_compatible_should_gracefully_handle_trailing_point_zero_version_numbers( $required, $wp, $expected ) { - global $wp_version; - $original_version = $wp_version; - $wp_version = $wp; - - $actual = is_wp_version_compatible( $required ); - - // Reset the version before the assertion in case of failure. - $wp_version = $original_version; - - $this->assertSame( $expected, $actual, 'The expected result was not returned.' ); + $GLOBALS['_wp_tests_wp_version'] = $wp; + $this->assertSame( $expected, is_wp_version_compatible( $required ), 'The expected result was not returned.' ); } /** @@ -183,22 +208,15 @@ public function data_is_wp_version_compatible_should_gracefully_handle_trailing_ * @dataProvider data_is_wp_version_compatible_with_development_versions * * @ticket 54257 + * @ticket 61781 * * @param string $required The minimum required WordPress version. * @param string $wp The value for the $wp_version global variable. * @param bool $expected The expected result. */ public function test_is_wp_version_compatible_with_development_versions( $required, $wp, $expected ) { - global $wp_version; - - $original_version = $wp_version; - $wp_version = $wp; - $actual = is_wp_version_compatible( $required ); - - // Reset the version before the assertion in case of failure. - $wp_version = $original_version; - - $this->assertSame( $expected, $actual ); + $GLOBALS['_wp_tests_wp_version'] = $wp; + $this->assertSame( $expected, is_wp_version_compatible( $required ) ); } /** @@ -207,10 +225,8 @@ public function test_is_wp_version_compatible_with_development_versions( $requir * @return array[] */ public function data_is_wp_version_compatible_with_development_versions() { - global $wp_version; - // For consistent results, remove possible suffixes. - list( $version ) = explode( '-', $wp_version ); + list( $version ) = explode( '-', wp_get_wp_version() ); $version_parts = explode( '.', $version ); $lower_version = $version_parts; From 0c46e2a0b4803a0a7e7c9b0abf1cbb7811019a1f Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 2 Aug 2024 22:57:46 +0000 Subject: [PATCH 205/422] HTML API: Indicate when WordPress rejects attribute updates. When setting an an attribute value in the HTML API, WordPress may reject an update based on rules in `kses`. In these cases, the return value from an escaping function will be an empty string, and the HTML API should reject the update. Unfortunately, it currently reports that it updates the attribute but sets an empty string value, which is misleading. In this patch, the HTML API will refuse the attribute update and return false to indicate as much when WordPress rejects the updates. Developed in https://github.com/wordpress/wordpress-develop/pull/7114 Discussed in https://core.trac.wordpress.org/ticket/61719 Follow-up to [58472]. Props: amitraj2203, dmsnell, mukesh27. Fixes #61719. git-svn-id: https://develop.svn.wordpress.org/trunk@58844 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/html-api/class-wp-html-tag-processor.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index c619806525732..5e2ee114ae9e6 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -3197,6 +3197,12 @@ public function set_attribute( $name, $value ): bool { * @see https://html.spec.whatwg.org/#attributes-3 */ $escaped_new_value = in_array( $comparable_name, wp_kses_uri_attributes() ) ? esc_url( $value ) : esc_attr( $value ); + + // If the escaping functions wiped out the update, reject it and indicate it was rejected. + if ( '' === $escaped_new_value && '' !== $value ) { + return false; + } + $updated_attribute = "{$name}=\"{$escaped_new_value}\""; } From bdef9de86c7dfe4193fd9188c28fe637f64b6bd5 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 2 Aug 2024 23:46:45 +0000 Subject: [PATCH 206/422] HTML API: Fix an infinite loop in certain unclosed SCRIPT tags. When the Tag Processor (or HTML Processor) attempts to parse certain incomplete script tags, the parser enters an infinite loop and will hang indefinitely. The conditions to reach this situation are: - Input HTML ends with an open script tag. - The final character of input is `-` or `<`. The infinite loop was caused by the parser-advancing increment not being called when two `||` OR conditions short-circuited. If the first condition was true, the `$at++` code was never reached. This path resolves the issue. Developed in https://github.com/wordpress/wordpress-develop/pull/7128 Discussed in https://core.trac.wordpress.org/ticket/61810 Follow-up to [55203]. Props: dmsnell, jonsurrell. Fixes #61810. git-svn-id: https://develop.svn.wordpress.org/trunk@58845 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 11 ++++++-- .../tests/html-api/wpHtmlTagProcessor.php | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 5e2ee114ae9e6..7a53fbea1e273 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -1431,8 +1431,15 @@ private function skip_script_data(): bool { continue; } - // Everything of interest past here starts with "<". - if ( $at + 1 >= $doc_length || '<' !== $html[ $at++ ] ) { + if ( $at + 1 >= $doc_length ) { + return false; + } + + /* + * Everything of interest past here starts with "<". + * Check this character and advance position regardless. + */ + if ( '<' !== $html[ $at++ ] ) { continue; } diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php index fceaaddb04af6..637aa38751688 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php @@ -2875,4 +2875,32 @@ public function insert_after( $new_html ) { 'Should have properly applied the update from in front of the cursor.' ); } + + /** + * Test an infinite loop bugfix in incomplete script tag parsing. + * + * @small + * + * @ticket 61810 + */ + public function test_script_tag_processing_no_infinite_loop_final_dash() { + $processor = new WP_HTML_Tag_Processor( '' ); + $processor->next_token(); + + $this->assertSame( + 'SCRIPT', + $processor->get_token_name(), + "Should have found text node but found '{$processor->get_token_name()}' instead: check test setup." + ); + + $this->assertSame( + '', + $processor->get_modifiable_text(), + 'Should have found initial test text: check test setup.' + ); + + $processor->set_modifiable_text( $after ); + $this->assertSame( + $after, + $processor->get_modifiable_text(), + 'Should have found enqueued updated text.' + ); + + $processor->get_updated_html(); + $this->assertSame( + $after, + $processor->get_modifiable_text(), + 'Should have found updated text.' + ); + } + /** * Ensures that updates to modifiable text that are shorter than the * original text do not cause the parser to lose its orientation. From de084d7d0e302027fb8f0a99bbeedf88e079efee Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 8 Aug 2024 07:23:53 +0000 Subject: [PATCH 225/422] HTML API: Add support for SVG and MathML (Foreign content) As part of work to add more spec support to the HTML API, this patch adds support for SVG and MathML elements, or more generally, "foreign content." The rules in foreign content are a mix of XML and HTML parsing rules and introduce additional complexity into the processor, but is important in order to avoid getting lost when inside these elements. Developed in https://github.com/wordpress/wordpress-develop/pull/6006 Discussed in https://core.trac.wordpress.org/ticket/61576 Props: dmsnell, jonsurrell, westonruter. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58867 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 113 ++-- .../class-wp-html-processor-state.php | 12 - .../html-api/class-wp-html-processor.php | 598 ++++++++++++++++-- .../html-api/class-wp-html-tag-processor.php | 464 +++++++++++++- .../html-api/class-wp-html-token.php | 19 + .../tests/html-api/wpHtmlProcessor.php | 31 - .../html-api/wpHtmlProcessorBreadcrumbs.php | 43 -- .../html-api/wpHtmlProcessorHtml5lib.php | 70 +- .../wpHtmlSupportRequiredOpenElements.php | 219 ------- .../wpHtmlTagProcessor-token-scanning.php | 61 ++ 10 files changed, 1199 insertions(+), 431 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index c760009ce0c28..5ce1f8feb552c 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -113,13 +113,13 @@ public function set_push_handler( Closure $handler ): void { * * @param int $nth Retrieve the nth item on the stack, with 1 being * the top element, 2 being the second, etc... - * @return string|null Name of the node on the stack at the given location, - * or `null` if the location isn't on the stack. + * @return WP_HTML_Token|null Name of the node on the stack at the given location, + * or `null` if the location isn't on the stack. */ - public function at( int $nth ): ?string { + public function at( int $nth ): ?WP_HTML_Token { foreach ( $this->walk_down() as $item ) { if ( 0 === --$nth ) { - return $item->node_name; + return $item; } } @@ -242,18 +242,22 @@ public function current_node_is( string $identity ): bool { */ public function has_element_in_specific_scope( string $tag_name, $termination_list ): bool { foreach ( $this->walk_up() as $node ) { - if ( $node->node_name === $tag_name ) { + $namespaced_name = 'html' === $node->namespace + ? $node->node_name + : "{$node->namespace} {$node->node_name}"; + + if ( $namespaced_name === $tag_name ) { return true; } if ( '(internal: H1 through H6 - do not use)' === $tag_name && - in_array( $node->node_name, array( 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ), true ) + in_array( $namespaced_name, array( 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ), true ) ) { return true; } - if ( in_array( $node->node_name, $termination_list, true ) ) { + if ( in_array( $namespaced_name, $termination_list, true ) ) { return false; } } @@ -288,7 +292,7 @@ public function has_element_in_specific_scope( string $tag_name, $termination_li * > - SVG title * * @since 6.4.0 - * @since 6.7.0 Supports all required HTML elements. + * @since 6.7.0 Full support. * * @see https://html.spec.whatwg.org/#has-an-element-in-scope * @@ -309,19 +313,16 @@ public function has_element_in_scope( string $tag_name ): bool { 'OBJECT', 'TEMPLATE', - /* - * @todo Support SVG and MathML nodes when support for foreign content is added. - * - * - MathML mi - * - MathML mo - * - MathML mn - * - MathML ms - * - MathML mtext - * - MathML annotation-xml - * - SVG foreignObject - * - SVG desc - * - SVG title - */ + 'math MI', + 'math MO', + 'math MN', + 'math MS', + 'math MTEXT', + 'math ANNOTATION-XML', + + 'svg FOREIGNOBJECT', + 'svg DESC', + 'svg TITLE', ) ); } @@ -363,19 +364,16 @@ public function has_element_in_list_item_scope( string $tag_name ): bool { 'TEMPLATE', 'UL', - /* - * @todo Support SVG and MathML nodes when support for foreign content is added. - * - * - MathML mi - * - MathML mo - * - MathML mn - * - MathML ms - * - MathML mtext - * - MathML annotation-xml - * - SVG foreignObject - * - SVG desc - * - SVG title - */ + 'math MI', + 'math MO', + 'math MN', + 'math MS', + 'math MTEXT', + 'math ANNOTATION-XML', + + 'svg FOREIGNOBJECT', + 'svg DESC', + 'svg TITLE', ) ); } @@ -413,19 +411,16 @@ public function has_element_in_button_scope( string $tag_name ): bool { 'OBJECT', 'TEMPLATE', - /* - * @todo Support SVG and MathML nodes when support for foreign content is added. - * - * - MathML mi - * - MathML mo - * - MathML mn - * - MathML ms - * - MathML mtext - * - MathML annotation-xml - * - SVG foreignObject - * - SVG desc - * - SVG title - */ + 'math MI', + 'math MO', + 'math MN', + 'math MS', + 'math MTEXT', + 'math ANNOTATION-XML', + + 'svg FOREIGNOBJECT', + 'svg DESC', + 'svg TITLE', ) ); } @@ -692,11 +687,15 @@ public function walk_up( ?WP_HTML_Token $above_this_node = null ) { * @param WP_HTML_Token $item Element that was added to the stack of open elements. */ public function after_element_push( WP_HTML_Token $item ): void { + $namespaced_name = 'html' === $item->namespace + ? $item->node_name + : "{$item->namespace} {$item->node_name}"; + /* * When adding support for new elements, expand this switch to trap * cases where the precalculated value needs to change. */ - switch ( $item->node_name ) { + switch ( $namespaced_name ) { case 'APPLET': case 'BUTTON': case 'CAPTION': @@ -707,6 +706,15 @@ public function after_element_push( WP_HTML_Token $item ): void { case 'MARQUEE': case 'OBJECT': case 'TEMPLATE': + case 'math MI': + case 'math MO': + case 'math MN': + case 'math MS': + case 'math MTEXT': + case 'math ANNOTATION-XML': + case 'svg FOREIGNOBJECT': + case 'svg DESC': + case 'svg TITLE': $this->has_p_in_button_scope = false; break; @@ -750,6 +758,15 @@ public function after_element_pop( WP_HTML_Token $item ): void { case 'MARQUEE': case 'OBJECT': case 'TEMPLATE': + case 'math MI': + case 'math MO': + case 'math MN': + case 'math MS': + case 'math MTEXT': + case 'math ANNOTATION-XML': + case 'svg FOREIGNOBJECT': + case 'svg DESC': + case 'svg TITLE': $this->has_p_in_button_scope = $this->has_element_in_button_scope( 'P' ); break; } diff --git a/src/wp-includes/html-api/class-wp-html-processor-state.php b/src/wp-includes/html-api/class-wp-html-processor-state.php index 97f6da95a0012..16875c4ac1b2b 100644 --- a/src/wp-includes/html-api/class-wp-html-processor-state.php +++ b/src/wp-includes/html-api/class-wp-html-processor-state.php @@ -299,18 +299,6 @@ class WP_HTML_Processor_State { */ const INSERTION_MODE_AFTER_AFTER_FRAMESET = 'insertion-mode-after-after-frameset'; - /** - * In foreign content insertion mode for full HTML parser. - * - * @since 6.7.0 - * - * @see https://html.spec.whatwg.org/#parsing-main-inforeign - * @see WP_HTML_Processor_State::$insertion_mode - * - * @var string - */ - const INSERTION_MODE_IN_FOREIGN_CONTENT = 'insertion-mode-in-foreign-content'; - /** * No-quirks mode document compatability mode. * diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 39ba43e467d5c..3820fe027723d 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -307,14 +307,14 @@ public static function create_fragment( $html, $context = '', $encoding = $processor->bookmarks['root-node'] = new WP_HTML_Span( 0, 0 ); $processor->bookmarks['context-node'] = new WP_HTML_Span( 0, 0 ); - $processor->state->stack_of_open_elements->push( - new WP_HTML_Token( - 'root-node', - 'HTML', - false - ) + $root_node = new WP_HTML_Token( + 'root-node', + 'HTML', + false ); + $processor->state->stack_of_open_elements->push( $root_node ); + $context_node = new WP_HTML_Token( 'context-node', $processor->state->context_node[0], @@ -392,6 +392,8 @@ function ( WP_HTML_Token $token ): void { $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::PUSH, $provenance ); + + $this->change_parsing_namespace( $token->namespace ); } ); @@ -401,6 +403,12 @@ function ( WP_HTML_Token $token ): void { $same_node = isset( $this->state->current_token ) && $token->node_name === $this->state->current_token->node_name; $provenance = ( ! $same_node || $is_virtual ) ? 'virtual' : 'real'; $this->element_queue[] = new WP_HTML_Stack_Event( $token, WP_HTML_Stack_Event::POP, $provenance ); + $adjusted_current_node = $this->get_adjusted_current_node(); + $this->change_parsing_namespace( + $adjusted_current_node + ? $adjusted_current_node->namespace + : 'html' + ); } ); @@ -767,19 +775,20 @@ public function matches_breadcrumbs( $breadcrumbs ): bool { * foreign content will also act just like a void tag, immediately * closing as soon as the processor advances to the next token. * - * @since 6.6.0 + * @todo Review the self-closing logic when no node is present, ensure it + * matches the expectations in `step()`. * - * @todo When adding support for foreign content, ensure that - * this returns false for self-closing elements in the - * SVG and MathML namespace. + * @since 6.6.0 * * @param WP_HTML_Token|null $node Optional. Node to examine, if provided. * Default is to examine current node. * @return bool|null Whether to expect a closer for the currently-matched node, * or `null` if not matched on any token. */ - public function expects_closer( $node = null ): ?bool { - $token_name = $node->node_name ?? $this->get_token_name(); + public function expects_closer( WP_HTML_Token $node = null ): ?bool { + $token_name = $node->node_name ?? $this->get_token_name(); + $token_namespace = $node->namespace ?? $this->get_namespace(); + if ( ! isset( $token_name ) ) { return null; } @@ -792,7 +801,9 @@ public function expects_closer( $node = null ): ?bool { // Void elements. self::is_void( $token_name ) || // Special atomic elements. - in_array( $token_name, array( 'IFRAME', 'NOEMBED', 'NOFRAMES', 'SCRIPT', 'STYLE', 'TEXTAREA', 'TITLE', 'XMP' ), true ) + ( 'html' === $token_namespace && in_array( $token_name, array( 'IFRAME', 'NOEMBED', 'NOFRAMES', 'SCRIPT', 'STYLE', 'TEXTAREA', 'TITLE', 'XMP' ), true ) ) || + // Self-closing elements in foreign content. + ( isset( $node ) && 'html' !== $node->namespace && $node->has_self_closing_flag ) ); } @@ -824,14 +835,9 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ): bool { * * When moving on to the next node, therefore, if the bottom-most element * on the stack is a void element, it must be closed. - * - * @todo Once self-closing foreign elements and BGSOUND are supported, - * they must also be implicitly closed here too. BGSOUND is - * special since it's only self-closing if the self-closing flag - * is provided in the opening tag, otherwise it expects a tag closer. */ $top_node = $this->state->stack_of_open_elements->current_node(); - if ( isset( $top_node ) && ! static::expects_closer( $top_node ) ) { + if ( isset( $top_node ) && ! $this->expects_closer( $top_node ) ) { $this->state->stack_of_open_elements->pop(); } } @@ -848,14 +854,46 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ): bool { return false; } - $this->state->current_token = new WP_HTML_Token( - $this->bookmark_token(), - $this->get_token_name(), - $this->has_self_closing_flag(), - $this->release_internal_bookmark_on_destruct + $adjusted_current_node = $this->get_adjusted_current_node(); + $is_closer = $this->is_tag_closer(); + $is_start_tag = WP_HTML_Tag_Processor::STATE_MATCHED_TAG === $this->parser_state && ! $is_closer; + $token_name = $this->get_token_name(); + + if ( self::REPROCESS_CURRENT_NODE !== $node_to_process ) { + $this->state->current_token = new WP_HTML_Token( + $this->bookmark_token(), + $token_name, + $this->has_self_closing_flag(), + $this->release_internal_bookmark_on_destruct + ); + } + + $parse_in_current_insertion_mode = ( + 0 === $this->state->stack_of_open_elements->count() || + 'html' === $adjusted_current_node->namespace || + ( + 'math' === $adjusted_current_node->integration_node_type && + ( + ( $is_start_tag && ! in_array( $token_name, array( 'MGLYPH', 'MALIGNMARK' ), true ) ) || + '#text' === $token_name + ) + ) || + ( + 'math' === $adjusted_current_node->namespace && + 'ANNOTATION-XML' === $adjusted_current_node->node_name && + $is_start_tag && 'SVG' === $token_name + ) || + ( + 'html' === $adjusted_current_node->integration_node_type && + ( $is_start_tag || '#text' === $token_name ) + ) ); try { + if ( ! $parse_in_current_insertion_mode ) { + return $this->step_in_foreign_content(); + } + switch ( $this->state->insertion_mode ) { case WP_HTML_Processor_State::INSERTION_MODE_INITIAL: return $this->step_initial(); @@ -923,9 +961,6 @@ public function step( $node_to_process = self::PROCESS_NEXT_NODE ): bool { case WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_FRAMESET: return $this->step_after_after_frameset(); - case WP_HTML_Processor_State::INSERTION_MODE_IN_FOREIGN_CONTENT: - return $this->step_in_foreign_content(); - // This should be unreachable but PHP doesn't have total type checking on switch. default: $this->bail( "Unaware of the requested parsing mode: '{$this->state->insertion_mode}'." ); @@ -1853,7 +1888,7 @@ private function step_in_body(): bool { case '+BODY': if ( 1 === $this->state->stack_of_open_elements->count() || - 'BODY' !== $this->state->stack_of_open_elements->at( 2 ) || + 'BODY' !== ( $this->state->stack_of_open_elements->at( 2 )->node_name ?? null ) || $this->state->stack_of_open_elements->contains( 'TEMPLATE' ) ) { // Ignore the token. @@ -1879,7 +1914,7 @@ private function step_in_body(): bool { case '+FRAMESET': if ( 1 === $this->state->stack_of_open_elements->count() || - 'BODY' !== $this->state->stack_of_open_elements->at( 2 ) || + 'BODY' !== ( $this->state->stack_of_open_elements->at( 2 )->node_name ?? null ) || false === $this->state->frameset_ok ) { // Ignore the token. @@ -2075,7 +2110,7 @@ private function step_in_body(): bool { 'ADDRESS' !== $node->node_name && 'DIV' !== $node->node_name && 'P' !== $node->node_name && - $this->is_special( $node->node_name ) + self::is_special( $node ) ) { /* * > If node is in the special category, but is not an address, div, @@ -2136,11 +2171,6 @@ private function step_in_body(): bool { * > "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", * > "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", * > "menu", "nav", "ol", "pre", "search", "section", "summary", "ul" - * - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as `
    `, and a foreign element of - * the same given name. */ case '-ADDRESS': case '-ARTICLE': @@ -2411,11 +2441,6 @@ private function step_in_body(): bool { /* * > A end tag token whose tag name is one of: "applet", "marquee", "object" - * - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as ``, and a foreign element of - * the same given name. */ case '-APPLET': case '-MARQUEE': @@ -2679,9 +2704,12 @@ private function step_in_body(): bool { * * These ought to be handled in the attribute methods. */ - - $this->bail( 'Cannot process MATH element, opening foreign content.' ); - break; + $this->state->current_token->namespace = 'math'; + $this->insert_html_element( $this->state->current_token ); + if ( $this->state->current_token->has_self_closing_flag ) { + $this->state->stack_of_open_elements->pop(); + } + return true; /* * > A start tag whose tag name is "svg" @@ -2695,9 +2723,12 @@ private function step_in_body(): bool { * * These ought to be handled in the attribute methods. */ - - $this->bail( 'Cannot process SVG element, opening foreign content.' ); - break; + $this->state->current_token->namespace = 'svg'; + $this->insert_html_element( $this->state->current_token ); + if ( $this->state->current_token->has_self_closing_flag ) { + $this->state->stack_of_open_elements->pop(); + } + return true; /* * > A start tag whose tag name is one of: "caption", "col", "colgroup", @@ -2737,17 +2768,11 @@ private function step_in_body(): bool { * close anything beyond its containing `P` or `DIV` element. */ foreach ( $this->state->stack_of_open_elements->walk_up() as $node ) { - /* - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as ``, and a foreign element of - * the same given name. - */ - if ( $token_name === $node->node_name ) { + if ( 'html' === $node->namespace && $token_name === $node->node_name ) { break; } - if ( self::is_special( $node->node_name ) ) { + if ( self::is_special( $node ) ) { // This is a parse error, ignore the token. return $this->step(); } @@ -4069,7 +4094,284 @@ private function step_after_after_frameset(): bool { * @return bool Whether an element was found. */ private function step_in_foreign_content(): bool { - $this->bail( 'No support for parsing in the ' . WP_HTML_Processor_State::INSERTION_MODE_IN_FOREIGN_CONTENT . ' state.' ); + $tag_name = $this->get_token_name(); + $token_type = $this->get_token_type(); + $op_sigil = '#tag' === $token_type ? ( $this->is_tag_closer() ? '-' : '+' ) : ''; + $op = "{$op_sigil}{$tag_name}"; + + /* + * > A start tag whose name is "font", if the token has any attributes named "color", "face", or "size" + * + * This section drawn out above the switch to more easily incorporate + * the additional rules based on the presence of the attributes. + */ + if ( + '+FONT' === $op && + ( + null !== $this->get_attribute( 'color' ) || + null !== $this->get_attribute( 'face' ) || + null !== $this->get_attribute( 'size' ) + ) + ) { + $op = '+FONT with attributes'; + } + + switch ( $op ) { + case '#text': + /* + * > A character token that is U+0000 NULL + * + * This is handled by `get_modifiable_text()`. + */ + + /* + * Whitespace-only text does not affect the frameset-ok flag. + * It is probably inter-element whitespace, but it may also + * contain character references which decode only to whitespace. + */ + $text = $this->get_modifiable_text(); + if ( strlen( $text ) !== strspn( $text, " \t\n\f\r" ) ) { + $this->state->frameset_ok = false; + } + + $this->insert_foreign_element( $this->state->current_token, false ); + return true; + + /* + * > A comment token + */ + case '#cdata-section': + case '#comment': + case '#funky_comment': + $this->insert_foreign_element( $this->state->current_token, false ); + return true; + + /* + * > A DOCTYPE token + */ + case 'html': + // Parse error: ignore the token. + return $this->step(); + + /* + * > A start tag whose tag name is "b", "big", "blockquote", "body", "br", "center", + * > "code", "dd", "div", "dl", "dt", "em", "embed", "h1", "h2", "h3", "h4", "h5", + * > "h6", "head", "hr", "i", "img", "li", "listing", "menu", "meta", "nobr", "ol", + * > "p", "pre", "ruby", "s", "small", "span", "strong", "strike", "sub", "sup", + * > "table", "tt", "u", "ul", "var" + * + * > A start tag whose name is "font", if the token has any attributes named "color", "face", or "size" + * + * > An end tag whose tag name is "br", "p" + * + * Closing BR tags are always reported by the Tag Processor as opening tags. + */ + case '+B': + case '+BIG': + case '+BLOCKQUOTE': + case '+BODY': + case '+BR': + case '+CENTER': + case '+CODE': + case '+DD': + case '+DIV': + case '+DL': + case '+DT': + case '+EM': + case '+EMBED': + case '+H1': + case '+H2': + case '+H3': + case '+H4': + case '+H5': + case '+H6': + case '+HEAD': + case '+HR': + case '+I': + case '+IMG': + case '+LI': + case '+LISTING': + case '+MENU': + case '+META': + case '+NOBR': + case '+OL': + case '+P': + case '+PRE': + case '+RUBY': + case '+S': + case '+SMALL': + case '+SPAN': + case '+STRONG': + case '+STRIKE': + case '+SUB': + case '+SUP': + case '+TABLE': + case '+TT': + case '+U': + case '+UL': + case '+VAR': + case '+FONT with attributes': + case '-BR': + case '-P': + // @todo Indicate a parse error once it's possible. + foreach ( $this->state->stack_of_open_elements->walk_up() as $current_node ) { + if ( + 'math' === $current_node->integration_node_type || + 'html' === $current_node->integration_node_type || + 'html' === $current_node->namespace + ) { + break; + } + + $this->state->stack_of_open_elements->pop(); + } + return $this->step( self::REPROCESS_CURRENT_NODE ); + } + + /* + * > Any other start tag + */ + if ( ! $this->is_tag_closer() ) { + $this->insert_foreign_element( $this->state->current_token, false ); + + /* + * > If the token has its self-closing flag set, then run + * > the appropriate steps from the following list: + */ + if ( $this->state->current_token->has_self_closing_flag ) { + if ( 'SCRIPT' === $this->state->current_token->node_name && 'svg' === $this->state->current_token->namespace ) { + /* + * > Acknowledge the token's self-closing flag, and then act as + * > described in the steps for a "script" end tag below. + * + * @todo Verify that this shouldn't be handled by the rule for + * "An end tag whose name is 'script', if the current node + * is an SVG script element." + */ + goto in_foreign_content_any_other_end_tag; + } else { + $this->state->stack_of_open_elements->pop(); + } + } + return true; + } + + /* + * > An end tag whose name is "script", if the current node is an SVG script element. + */ + if ( $this->is_tag_closer() && 'SCRIPT' === $this->state->current_token->node_name && 'svg' === $this->state->current_token->namespace ) { + $this->state->stack_of_open_elements->pop(); + } + + /* + * > Any other end tag + */ + if ( $this->is_tag_closer() ) { + in_foreign_content_any_other_end_tag: + $node = $this->state->stack_of_open_elements->current_node(); + if ( $tag_name !== $node->node_name ) { + // @todo Indicate a parse error once it's possible. + } + in_foreign_content_end_tag_loop: + if ( $node === $this->state->stack_of_open_elements->at( 1 ) ) { + return true; + } + + /* + * > If node's tag name, converted to ASCII lowercase, is the same as the tag name + * > of the token, pop elements from the stack of open elements until node has + * > been popped from the stack, and then return. + */ + if ( 0 === strcasecmp( $node->node_name, $tag_name ) ) { + foreach ( $this->state->stack_of_open_elements->walk_up() as $item ) { + $this->state->stack_of_open_elements->pop(); + if ( $node === $item ) { + return true; + } + } + } + + foreach ( $this->state->stack_of_open_elements->walk_up( $node ) as $item ) { + $node = $item; + break; + } + + if ( 'html' !== $node->namespace ) { + goto in_foreign_content_end_tag_loop; + } + + switch ( $this->state->insertion_mode ) { + case WP_HTML_Processor_State::INSERTION_MODE_INITIAL: + return $this->step_initial(); + + case WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HTML: + return $this->step_before_html(); + + case WP_HTML_Processor_State::INSERTION_MODE_BEFORE_HEAD: + return $this->step_before_head(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD: + return $this->step_in_head(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_HEAD_NOSCRIPT: + return $this->step_in_head_noscript(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_HEAD: + return $this->step_after_head(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_BODY: + return $this->step_in_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE: + return $this->step_in_table(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_TEXT: + return $this->step_in_table_text(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_CAPTION: + return $this->step_in_caption(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_COLUMN_GROUP: + return $this->step_in_column_group(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TABLE_BODY: + return $this->step_in_table_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_ROW: + return $this->step_in_row(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_CELL: + return $this->step_in_cell(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT: + return $this->step_in_select(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_SELECT_IN_TABLE: + return $this->step_in_select_in_table(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_TEMPLATE: + return $this->step_in_template(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_BODY: + return $this->step_after_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_IN_FRAMESET: + return $this->step_in_frameset(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_FRAMESET: + return $this->step_after_frameset(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_BODY: + return $this->step_after_after_body(); + + case WP_HTML_Processor_State::INSERTION_MODE_AFTER_AFTER_FRAMESET: + return $this->step_after_after_frameset(); + + // This should be unreachable but PHP doesn't have total type checking on switch. + default: + $this->bail( "Unaware of the requested parsing mode: '{$this->state->insertion_mode}'." ); + } + } } /* @@ -4099,6 +4401,19 @@ private function bookmark_token() { * HTML semantic overrides for Tag Processor */ + /** + * Indicates the namespace of the current token, or "html" if there is none. + * + * @return string One of "html", "math", or "svg". + */ + public function get_namespace(): string { + if ( ! isset( $this->current_element ) ) { + return 'html'; + } + + return $this->current_element->token->namespace; + } + /** * Returns the uppercase name of the matched tag. * @@ -4734,6 +5049,28 @@ private function generate_implied_end_tags_thoroughly(): void { } } + /** + * Returns the adjusted current node. + * + * > The adjusted current node is the context element if the parser was created as + * > part of the HTML fragment parsing algorithm and the stack of open elements + * > has only one element in it (fragment case); otherwise, the adjusted current + * > node is the current node. + * + * @see https://html.spec.whatwg.org/#adjusted-current-node + * + * @since 6.7.0 + * + * @return WP_HTML_Token|null The adjusted current node. + */ + private function get_adjusted_current_node(): ?WP_HTML_Token { + if ( isset( $this->context_node ) && 1 === $this->state->stack_of_open_elements->count() ) { + return $this->context_node; + } + + return $this->state->stack_of_open_elements->current_node(); + } + /** * Reconstructs the active formatting elements. * @@ -5043,7 +5380,7 @@ private function run_adoption_agency_algorithm(): void { continue; } - if ( self::is_special( $item->node_name ) ) { + if ( self::is_special( $item ) ) { $furthest_block = $item; break; } @@ -5111,6 +5448,45 @@ private function insert_html_element( WP_HTML_Token $token ): void { $this->state->stack_of_open_elements->push( $token ); } + /** + * Inserts a foreign element on to the stack of open elements. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#insert-a-foreign-element + * + * @param WP_HTML_Token $token Insert this token. The token's namespace and + * insertion point will be updated correctly. + * @param bool $only_add_to_element_stack Whether to skip the "insert an element at the adjusted + * insertion location" algorithm when adding this element. + */ + private function insert_foreign_element( WP_HTML_Token $token, bool $only_add_to_element_stack ): void { + $adjusted_current_node = $this->get_adjusted_current_node(); + + $token->namespace = $adjusted_current_node ? $adjusted_current_node->namespace : 'html'; + + if ( $this->is_mathml_integration_point() ) { + $token->integration_node_type = 'math'; + } elseif ( $this->is_html_integration_point() ) { + $token->integration_node_type = 'html'; + } + + if ( false === $only_add_to_element_stack ) { + /* + * @todo Implement the "appropriate place for inserting a node" and the + * "insert an element at the adjusted insertion location" algorithms. + * + * These algorithms mostly impacts DOM tree construction and not the HTML API. + * Here, there's no DOM node onto which the element will be appended, so the + * parser will skip this step. + * + * @see https://html.spec.whatwg.org/#insert-an-element-at-the-adjusted-insertion-location + */ + } + + $this->insert_html_element( $token ); + } + /** * Inserts a virtual element on the stack of open elements. * @@ -5136,6 +5512,88 @@ private function insert_virtual_node( $token_name, $bookmark_name = null ): WP_H * HTML Specification Helpers */ + /** + * Indicates if the current token is a MathML integration point. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#mathml-text-integration-point + * + * @return bool Whether the current token is a MathML integration point. + */ + private function is_mathml_integration_point(): bool { + $current_token = $this->state->current_token; + if ( ! isset( $current_token ) ) { + return false; + } + + if ( 'math' !== $current_token->namespace || 'M' !== $current_token->node_name[0] ) { + return false; + } + + $tag_name = $current_token->node_name; + + return ( + 'MI' === $tag_name || + 'MO' === $tag_name || + 'MN' === $tag_name || + 'MS' === $tag_name || + 'MTEXT' === $tag_name + ); + } + + /** + * Indicates if the current token is an HTML integration point. + * + * Note that this method must be an instance method with access + * to the current token, since it needs to examine the attributes + * of the currently-matched tag, if it's in the MathML namespace. + * Otherwise it would be required to scan the HTML and ensure that + * no other accounting is overlooked. + * + * @since 6.7.0 + * + * @see https://html.spec.whatwg.org/#html-integration-point + * + * @return bool Whether the current token is an HTML integration point. + */ + private function is_html_integration_point(): bool { + $current_token = $this->state->current_token; + if ( ! isset( $current_token ) ) { + return false; + } + + if ( 'html' === $current_token->namespace ) { + return false; + } + + $tag_name = $current_token->node_name; + + if ( 'svg' === $current_token->namespace ) { + return ( + 'DESC' === $tag_name || + 'FOREIGNOBJECT' === $tag_name || + 'TITLE' === $tag_name + ); + } + + if ( 'math' === $current_token->namespace ) { + if ( 'ANNOTATION-XML' !== $tag_name ) { + return false; + } + + $encoding = $this->get_attribute( 'encoding' ); + + return ( + is_string( $encoding ) && + ( + 0 === strcasecmp( $encoding, 'application/xhtml+xml' ) || + 0 === strcasecmp( $encoding, 'text/html' ) + ) + ); + } + } + /** * Returns whether an element of a given name is in the HTML special category. * @@ -5143,11 +5601,17 @@ private function insert_virtual_node( $token_name, $bookmark_name = null ): WP_H * * @see https://html.spec.whatwg.org/#special * - * @param string $tag_name Name of element to check. + * @param WP_HTML_Token|string $tag_name Node to check, or only its name if in the HTML namespace. * @return bool Whether the element of the given name is in the special category. */ public static function is_special( $tag_name ): bool { - $tag_name = strtoupper( $tag_name ); + if ( is_string( $tag_name ) ) { + $tag_name = strtoupper( $tag_name ); + } else { + $tag_name = 'html' === $tag_name->namespace + ? strtoupper( $tag_name->node_name ) + : "{$tag_name->namespace} {$tag_name->node_name}"; + } return ( 'ADDRESS' === $tag_name || @@ -5235,17 +5699,17 @@ public static function is_special( $tag_name ): bool { 'XMP' === $tag_name || // MathML. - 'MI' === $tag_name || - 'MO' === $tag_name || - 'MN' === $tag_name || - 'MS' === $tag_name || - 'MTEXT' === $tag_name || - 'ANNOTATION-XML' === $tag_name || + 'math MI' === $tag_name || + 'math MO' === $tag_name || + 'math MN' === $tag_name || + 'math MS' === $tag_name || + 'math MTEXT' === $tag_name || + 'math ANNOTATION-XML' === $tag_name || // SVG. - 'FOREIGNOBJECT' === $tag_name || - 'DESC' === $tag_name || - 'TITLE' === $tag_name + 'svg DESC' === $tag_name || + 'svg FOREIGNOBJECT' === $tag_name || + 'svg TITLE' === $tag_name ); } diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 0ff2cdc4dd10d..fb21c15d1d96e 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -511,6 +511,23 @@ class WP_HTML_Tag_Processor { */ protected $parser_state = self::STATE_READY; + /** + * Indicates whether the parser is inside foreign content, + * e.g. inside an SVG or MathML element. + * + * One of 'html', 'svg', or 'math'. + * + * Several parsing rules change based on whether the parser + * is inside foreign content, including whether CDATA sections + * are allowed and whether a self-closing flag indicates that + * an element has no content. + * + * @since 6.7.0 + * + * @var string + */ + private $parsing_namespace = 'html'; + /** * What kind of syntax token became an HTML comment. * @@ -780,6 +797,25 @@ public function __construct( $html ) { $this->html = $html; } + /** + * Switches parsing mode into a new namespace, such as when + * encountering an SVG tag and entering foreign content. + * + * @since 6.7.0 + * + * @param string $new_namespace One of 'html', 'svg', or 'math' indicating into what + * namespace the next tokens will be processed. + * @return bool Whether the namespace was valid and changed. + */ + public function change_parsing_namespace( string $new_namespace ): bool { + if ( ! in_array( $new_namespace, array( 'html', 'math', 'svg' ), true ) ) { + return false; + } + + $this->parsing_namespace = $new_namespace; + return true; + } + /** * Finds the next tag matching the $query. * @@ -843,6 +879,7 @@ public function next_tag( $query = null ): bool { * The Tag Processor currently only supports the tag token. * * @since 6.5.0 + * @since 6.7.0 Recognizes CDATA sections within foreign content. * * @return bool Whether a token was parsed. */ @@ -956,6 +993,7 @@ private function base_class_next_token(): bool { */ if ( $this->is_closing_tag || + 'html' !== $this->parsing_namespace || 1 !== strspn( $this->html, 'iIlLnNpPsStTxX', $this->tag_name_starts_at, 1 ) ) { return true; @@ -996,7 +1034,6 @@ private function base_class_next_token(): bool { $duplicate_attributes = $this->duplicate_attributes; // Find the closing tag if necessary. - $found_closer = false; switch ( $tag_name ) { case 'SCRIPT': $found_closer = $this->skip_script_data(); @@ -1759,6 +1796,32 @@ private function parse_next_tag(): bool { return true; } + if ( + 'html' !== $this->parsing_namespace && + strlen( $html ) > $at + 8 && + '[' === $html[ $at + 2 ] && + 'C' === $html[ $at + 3 ] && + 'D' === $html[ $at + 4 ] && + 'A' === $html[ $at + 5 ] && + 'T' === $html[ $at + 6 ] && + 'A' === $html[ $at + 7 ] && + '[' === $html[ $at + 8 ] + ) { + $closer_at = strpos( $html, ']]>', $at + 9 ); + if ( false === $closer_at ) { + $this->parser_state = self::STATE_INCOMPLETE_INPUT; + + return false; + } + + $this->parser_state = self::STATE_CDATA_NODE; + $this->text_starts_at = $at + 9; + $this->text_length = $closer_at - $this->text_starts_at; + $this->token_length = $closer_at + 3 - $this->token_starts_at; + $this->bytes_already_parsed = $closer_at + 3; + return true; + } + /* * Anything else here is an incorrectly-opened comment and transitions * to the bogus comment state - skip to the nearest >. If no closer is @@ -2653,6 +2716,17 @@ public function get_attribute_names_with_prefix( $prefix ): ?array { return $matches; } + /** + * Returns the namespace of the matched token. + * + * @since 6.7.0 + * + * @return string One of 'html', 'math', or 'svg'. + */ + public function get_namespace(): string { + return $this->parsing_namespace; + } + /** * Returns the uppercase name of the matched tag. * @@ -2690,6 +2764,388 @@ public function get_tag(): ?string { return null; } + /** + * Returns the adjusted tag name for a given token, taking into + * account the current parsing context, whether HTML, SVG, or MathML. + * + * @since 6.7.0 + * + * @return string|null Name of current tag name. + */ + public function get_qualified_tag_name(): ?string { + $tag_name = $this->get_tag(); + if ( null === $tag_name ) { + return null; + } + + if ( 'html' === $this->get_namespace() ) { + return $tag_name; + } + + $lower_tag_name = strtolower( $tag_name ); + if ( 'math' === $this->get_namespace() ) { + return $lower_tag_name; + } + + if ( 'svg' === $this->get_namespace() ) { + switch ( $lower_tag_name ) { + case 'altglyph': + return 'altGlyph'; + + case 'altglyphdef': + return 'altGlyphDef'; + + case 'altglyphitem': + return 'altGlyphItem'; + + case 'animatecolor': + return 'animateColor'; + + case 'animatemotion': + return 'animateMotion'; + + case 'animatetransform': + return 'animateTransform'; + + case 'clippath': + return 'clipPath'; + + case 'feblend': + return 'feBlend'; + + case 'fecolormatrix': + return 'feColorMatrix'; + + case 'fecomponenttransfer': + return 'feComponentTransfer'; + + case 'fecomposite': + return 'feComposite'; + + case 'feconvolvematrix': + return 'feConvolveMatrix'; + + case 'fediffuselighting': + return 'feDiffuseLighting'; + + case 'fedisplacementmap': + return 'feDisplacementMap'; + + case 'fedistantlight': + return 'feDistantLight'; + + case 'fedropshadow': + return 'feDropShadow'; + + case 'feflood': + return 'feFlood'; + + case 'fefunca': + return 'feFuncA'; + + case 'fefuncb': + return 'feFuncB'; + + case 'fefuncg': + return 'feFuncG'; + + case 'fefuncr': + return 'feFuncR'; + + case 'fegaussianblur': + return 'feGaussianBlur'; + + case 'feimage': + return 'feImage'; + + case 'femerge': + return 'feMerge'; + + case 'femergenode': + return 'feMergeNode'; + + case 'femorphology': + return 'feMorphology'; + + case 'feoffset': + return 'feOffset'; + + case 'fepointlight': + return 'fePointLight'; + + case 'fespecularlighting': + return 'feSpecularLighting'; + + case 'fespotlight': + return 'feSpotLight'; + + case 'fetile': + return 'feTile'; + + case 'feturbulence': + return 'feTurbulence'; + + case 'foreignobject': + return 'foreignObject'; + + case 'glyphref': + return 'glyphRef'; + + case 'lineargradient': + return 'linearGradient'; + + case 'radialgradient': + return 'radialGradient'; + + case 'textpath': + return 'textPath'; + + default: + return $lower_tag_name; + } + } + } + + /** + * Returns the adjusted attribute name for a given attribute, taking into + * account the current parsing context, whether HTML, SVG, or MathML. + * + * @since 6.7.0 + * + * @param string $attribute_name Which attribute to adjust. + * + * @return string|null + */ + public function get_qualified_attribute_name( $attribute_name ): ?string { + if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { + return null; + } + + $namespace = $this->get_namespace(); + $lower_name = strtolower( $attribute_name ); + + if ( 'math' === $namespace && 'definitionurl' === $lower_name ) { + return 'definitionURL'; + } + + if ( 'svg' === $this->get_namespace() ) { + switch ( $lower_name ) { + case 'attributename': + return 'attributeName'; + + case 'attributetype': + return 'attributeType'; + + case 'basefrequency': + return 'baseFrequency'; + + case 'baseprofile': + return 'baseProfile'; + + case 'calcmode': + return 'calcMode'; + + case 'clippathunits': + return 'clipPathUnits'; + + case 'diffuseconstant': + return 'diffuseConstant'; + + case 'edgemode': + return 'edgeMode'; + + case 'filterunits': + return 'filterUnits'; + + case 'glyphref': + return 'glyphRef'; + + case 'gradienttransform': + return 'gradientTransform'; + + case 'gradientunits': + return 'gradientUnits'; + + case 'kernelmatrix': + return 'kernelMatrix'; + + case 'kernelunitlength': + return 'kernelUnitLength'; + + case 'keypoints': + return 'keyPoints'; + + case 'keysplines': + return 'keySplines'; + + case 'keytimes': + return 'keyTimes'; + + case 'lengthadjust': + return 'lengthAdjust'; + + case 'limitingconeangle': + return 'limitingConeAngle'; + + case 'markerheight': + return 'markerHeight'; + + case 'markerunits': + return 'markerUnits'; + + case 'markerwidth': + return 'markerWidth'; + + case 'maskcontentunits': + return 'maskContentUnits'; + + case 'maskunits': + return 'maskUnits'; + + case 'numoctaves': + return 'numOctaves'; + + case 'pathlength': + return 'pathLength'; + + case 'patterncontentunits': + return 'patternContentUnits'; + + case 'patterntransform': + return 'patternTransform'; + + case 'patternunits': + return 'patternUnits'; + + case 'pointsatx': + return 'pointsAtX'; + + case 'pointsaty': + return 'pointsAtY'; + + case 'pointsatz': + return 'pointsAtZ'; + + case 'preservealpha': + return 'preserveAlpha'; + + case 'preserveaspectratio': + return 'preserveAspectRatio'; + + case 'primitiveunits': + return 'primitiveUnits'; + + case 'refx': + return 'refX'; + + case 'refy': + return 'refY'; + + case 'repeatcount': + return 'repeatCount'; + + case 'repeatdur': + return 'repeatDur'; + + case 'requiredextensions': + return 'requiredExtensions'; + + case 'requiredfeatures': + return 'requiredFeatures'; + + case 'specularconstant': + return 'specularConstant'; + + case 'specularexponent': + return 'specularExponent'; + + case 'spreadmethod': + return 'spreadMethod'; + + case 'startoffset': + return 'startOffset'; + + case 'stddeviation': + return 'stdDeviation'; + + case 'stitchtiles': + return 'stitchTiles'; + + case 'surfacescale': + return 'surfaceScale'; + + case 'systemlanguage': + return 'systemLanguage'; + + case 'tablevalues': + return 'tableValues'; + + case 'targetx': + return 'targetX'; + + case 'targety': + return 'targetY'; + + case 'textlength': + return 'textLength'; + + case 'viewbox': + return 'viewBox'; + + case 'viewtarget': + return 'viewTarget'; + + case 'xchannelselector': + return 'xChannelSelector'; + + case 'ychannelselector': + return 'yChannelSelector'; + + case 'zoomandpan': + return 'zoomAndPan'; + } + } + + if ( 'html' !== $namespace ) { + switch ( $lower_name ) { + case 'xlink:actuate': + return 'xlink actuate'; + + case 'xlink:arcrole': + return 'xlink arcrole'; + + case 'xlink:href': + return 'xlink href'; + + case 'xlink:role': + return 'xlink role'; + + case 'xlink:show': + return 'xlink show'; + + case 'xlink:title': + return 'xlink title'; + + case 'xlink:type': + return 'xlink type'; + + case 'xml:lang': + return 'xml lang'; + + case 'xml:space': + return 'xml space'; + + case 'xmlns': + return 'xmlns'; + + case 'xmlns:xlink': + return 'xmlns xlink'; + } + } + + return $attribute_name; + } + /** * Indicates if the currently matched tag contains the self-closing flag. * @@ -2963,8 +3419,12 @@ public function get_modifiable_text(): string { * In all other contexts it's replaced by the replacement character (U+FFFD) * for security reasons (to avoid joining together strings that were safe * when separated, but not when joined). + * + * @todo Inside HTML integration points and MathML integration points, the + * text is processed according to the insertion mode, not according + * to the foreign content rules. This should strip the NULL bytes. */ - return '#text' === $tag_name + return ( '#text' === $tag_name && 'html' === $this->get_namespace() ) ? str_replace( "\x00", '', $decoded ) : str_replace( "\x00", "\u{FFFD}", $decoded ); } diff --git a/src/wp-includes/html-api/class-wp-html-token.php b/src/wp-includes/html-api/class-wp-html-token.php index 948fe343dfbaa..d5e51ac29007f 100644 --- a/src/wp-includes/html-api/class-wp-html-token.php +++ b/src/wp-includes/html-api/class-wp-html-token.php @@ -60,6 +60,24 @@ class WP_HTML_Token { */ public $has_self_closing_flag = false; + /** + * Indicates if the element is an HTML element or if it's inside foreign content. + * + * @since 6.7.0 + * + * @var string 'html', 'svg', or 'math'. + */ + public $namespace = 'html'; + + /** + * Indicates which kind of integration point the element is, if any. + * + * @since 6.7.0 + * + * @var string|null 'math', 'html', or null if not an integration point. + */ + public $integration_node_type = null; + /** * Called when token is garbage-collected or otherwise destroyed. * @@ -80,6 +98,7 @@ class WP_HTML_Token { */ public function __construct( ?string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) { $this->bookmark_name = $bookmark_name; + $this->namespace = 'html'; $this->node_name = $node_name; $this->has_self_closing_flag = $has_self_closing_flag; $this->on_destroy = $on_destroy; diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 01e0f4f02c0b5..68c60a1ff85cc 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -358,37 +358,6 @@ public static function data_void_tags_not_ignored_in_body() { return $all_void_tags; } - /** - * Ensures that special handling of unsupported tags is cleaned up - * as handling is implemented. Otherwise there's risk of leaving special - * handling (that is never reached) when tag handling is implemented. - * - * @ticket 60092 - * - * @dataProvider data_unsupported_special_in_body_tags - * - * @covers WP_HTML_Processor::step_in_body - * - * @param string $tag_name Name of the tag to test. - */ - public function test_step_in_body_fails_on_unsupported_tags( $tag_name ) { - $fragment = WP_HTML_Processor::create_fragment( '<' . $tag_name . '>' ); - $this->assertFalse( $fragment->next_tag(), 'Should fail to find tag: ' . $tag_name . '.' ); - $this->assertEquals( $fragment->get_last_error(), WP_HTML_Processor::ERROR_UNSUPPORTED, 'Should have unsupported last error.' ); - } - - /** - * Data provider. - * - * @return array[] - */ - public static function data_unsupported_special_in_body_tags() { - return array( - 'MATH' => array( 'MATH' ), - 'SVG' => array( 'SVG' ), - ); - } - /** * Ensures that the HTML Processor properly reports the depth of a given element. * diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 1486769533e96..911fa8b910b37 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -164,49 +164,6 @@ public static function data_single_tag_of_supported_elements() { return $data; } - /** - * Ensures that no new HTML elements are accidentally partially-supported. - * - * When introducing support for new HTML elements, there are multiple places - * in the HTML Processor that need to be updated, until the time that the class - * has full HTML5 support. Because of this, these tests lock down the interface - * to ensure that support isn't accidentally updated in one place for a new - * element while overlooked in another. - * - * @ticket 58517 - * - * @covers WP_HTML_Processor::step - * - * @dataProvider data_unsupported_elements - * - * @param string $html HTML string containing unsupported elements. - */ - public function test_fails_when_encountering_unsupported_tag( $html ) { - $processor = WP_HTML_Processor::create_fragment( $html ); - - $this->assertFalse( $processor->step(), "Should not have stepped into unsupported {$processor->get_tag()} element." ); - } - - /** - * Data provider. - * - * @return array[] - */ - public static function data_unsupported_elements() { - $unsupported_elements = array( - 'MATH', - 'PLAINTEXT', // Neutralized. - 'SVG', - ); - - $data = array(); - foreach ( $unsupported_elements as $tag_name ) { - $data[ $tag_name ] = array( "<{$tag_name}>" ); - } - - return $data; - } - /** * @ticket 58517 * diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index 22eef774d4e90..b6213aac8d0e9 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -181,19 +181,24 @@ private static function build_tree_representation( ?string $fragment_context, st $is_closer = $processor->is_tag_closer(); if ( $was_text && '#text' !== $token_name ) { - $output .= "{$text_node}\"\n"; + if ( '' !== $text_node ) { + $output .= "{$text_node}\"\n"; + } $was_text = false; $text_node = ''; } switch ( $token_type ) { case '#tag': - $tag_name = strtolower( $token_name ); + $namespace = $processor->get_namespace(); + $tag_name = 'html' === $namespace + ? strtolower( $processor->get_tag() ) + : "{$namespace} {$processor->get_qualified_tag_name()}"; if ( $is_closer ) { --$indent_level; - if ( 'TEMPLATE' === $token_name ) { + if ( 'html' === $namespace && 'TEMPLATE' === $token_name ) { --$indent_level; } @@ -202,7 +207,11 @@ private static function build_tree_representation( ?string $fragment_context, st $tag_indent = $indent_level; - if ( ! WP_HTML_Processor::is_void( $tag_name ) ) { + if ( 'html' !== $namespace ) { + if ( ! $processor->has_self_closing_flag() ) { + ++$indent_level; + } + } elseif ( ! WP_HTML_Processor::is_void( $tag_name ) ) { ++$indent_level; } @@ -210,9 +219,47 @@ private static function build_tree_representation( ?string $fragment_context, st $attribute_names = $processor->get_attribute_names_with_prefix( '' ); if ( $attribute_names ) { - sort( $attribute_names, SORT_STRING ); - + $sorted_attributes = array(); foreach ( $attribute_names as $attribute_name ) { + $sorted_attributes[ $attribute_name ] = $processor->get_qualified_attribute_name( $attribute_name ); + } + + /* + * Sorts attributes to match html5lib sort order. + * + * - First comes normal HTML attributes. + * - Then come adjusted foreign attributes; these have spaces in their names. + * - Finally come non-adjusted foreign attributes; these have a colon in their names. + * + * Example: + * + * From: + * Sorted: 'definitionURL', 'xlink show', 'xlink title', 'xlink:author' + */ + uasort( + $sorted_attributes, + static function ( $a, $b ) { + $a_has_ns = str_contains( $a, ':' ); + $b_has_ns = str_contains( $b, ':' ); + + // Attributes with `:` should follow all other attributes. + if ( $a_has_ns !== $b_has_ns ) { + return $a_has_ns ? 1 : -1; + } + + $a_has_sp = str_contains( $a, ' ' ); + $b_has_sp = str_contains( $b, ' ' ); + + // Attributes with a namespace ' ' should come after those without. + if ( $a_has_sp !== $b_has_sp ) { + return $a_has_sp ? 1 : -1; + } + + return $a <=> $b; + } + ); + + foreach ( $sorted_attributes as $attribute_name => $display_name ) { $val = $processor->get_attribute( $attribute_name ); /* * Attributes with no value are `true` with the HTML API, @@ -221,7 +268,7 @@ private static function build_tree_representation( ?string $fragment_context, st if ( true === $val ) { $val = ''; } - $output .= str_repeat( $indent, $tag_indent + 1 ) . "{$attribute_name}=\"{$val}\"\n"; + $output .= str_repeat( $indent, $tag_indent + 1 ) . "{$display_name}=\"{$val}\"\n"; } } @@ -231,7 +278,7 @@ private static function build_tree_representation( ?string $fragment_context, st $output .= str_repeat( $indent, $indent_level ) . "\"{$modifiable_text}\"\n"; } - if ( 'TEMPLATE' === $token_name ) { + if ( 'html' === $namespace && 'TEMPLATE' === $token_name ) { $output .= str_repeat( $indent, $indent_level ) . "content\n"; ++$indent_level; } @@ -242,12 +289,17 @@ private static function build_tree_representation( ?string $fragment_context, st break; + case '#cdata-section': case '#text': + $text_content = $processor->get_modifiable_text(); + if ( '' === $text_content ) { + break; + } $was_text = true; if ( '' === $text_node ) { $text_node .= str_repeat( $indent, $indent_level ) . '"'; } - $text_node .= $processor->get_modifiable_text(); + $text_node .= $text_content; break; case '#funky-comment': diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php index d2b24cd8bbcbc..e69de29bb2d1d 100644 --- a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php +++ b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php @@ -1,219 +0,0 @@ -" ); - - $this->assertFalse( $processor->step(), "Must support terminating elements in specific scope check before adding support for the {$tag_name} element." ); - } - - /** - * The check for whether an element is in a scope depends on - * looking for a number of terminating elements in the stack of open - * elements. Until the listed elements are supported in the HTML - * processor, there are no terminating elements and there's no - * point in taking the time to look for them. - * - * @since 6.4.0 - * - * @ticket 58517 - */ - public function test_has_element_in_scope_needs_support() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The check for whether an element is in list item scope depends on - * the elements for any scope, plus UL and OL. - * - * The method for asserting list item scope doesn't currently exist - * because the LI element isn't yet supported and the LI element is - * the only element that needs to know about list item scope. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::has_element_in_list_item_scope - */ - public function test_has_element_in_list_item_scope_needs_support() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The check for whether an element is in BUTTON scope depends on - * the elements for any scope, plus BUTTON. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::has_element_in_button_scope - */ - public function test_has_element_in_button_scope_needs_support() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The optimization maintaining a flag for "P is in BUTTON scope" requires - * updating that flag every time an element is popped from the stack of - * open elements. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::after_element_pop - */ - public function test_after_element_pop_must_maintain_p_in_button_scope_flag() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The optimization maintaining a flag for "P is in BUTTON scope" requires - * updating that flag every time an element is pushed onto the stack of - * open elements. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::after_element_push - */ - public function test_after_element_push_must_maintain_p_in_button_scope_flag() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The check for whether an element is in TABLE scope depends on - * the HTML, TABLE, and TEMPLATE elements. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::has_element_in_table_scope - */ - public function test_has_element_in_table_scope_needs_support() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } - - /** - * The check for whether an element is in SELECT scope depends on - * the OPTGROUP and OPTION elements. - * - * @since 6.4.0 - * - * @ticket 58517 - * - * @covers WP_HTML_Open_Elements::has_element_in_select_scope - */ - public function test_has_element_in_select_scope_needs_support() { - // MathML Elements: MI, MO, MN, MS, MTEXT, ANNOTATION-XML. - $this->ensure_support_is_added_everywhere( 'MATH' ); - - /* - * SVG elements: note that TITLE is both an HTML element and an SVG element - * so care must be taken when adding support for either one. - * - * FOREIGNOBJECT, DESC, TITLE. - */ - $this->ensure_support_is_added_everywhere( 'SVG' ); - } -} diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php index fbb2521233679..e8195dcfa28c6 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor-token-scanning.php @@ -512,6 +512,67 @@ public function test_basic_assertion_abruptly_closed_cdata_section() { ); } + /** + * Ensures that basic CDATA sections inside foreign content are detected. + * + * @ticket 61576 + */ + public function test_basic_cdata_in_foreign_content() { + $processor = new WP_HTML_Tag_Processor( 'this is >&gt; real CDATA' ); + $processor->next_token(); + + // Artificially change namespace; this should be done in the HTML Processor. + $processor->change_parsing_namespace( 'svg' ); + $processor->next_token(); + + $this->assertSame( + '#cdata-section', + $processor->get_token_name(), + "Should have found a CDATA section but found {$processor->get_token_name()} instead." + ); + + $this->assertNull( + $processor->get_tag(), + 'Should not have been able to query tag name on non-element token.' + ); + + $this->assertNull( + $processor->get_attribute( 'type' ), + 'Should not have been able to query attributes on non-element token.' + ); + + $this->assertSame( + 'this is >> real CDATA', + $processor->get_modifiable_text(), + 'Found incorrect modifiable text.' + ); + } + + /** + * Ensures that empty CDATA sections inside foreign content are detected. + * + * @ticket 61576 + */ + public function test_empty_cdata_in_foreign_content() { + $processor = new WP_HTML_Tag_Processor( '' ); + $processor->next_token(); + + // Artificially change namespace; this should be done in the HTML Processor. + $processor->change_parsing_namespace( 'svg' ); + $processor->next_token(); + + $this->assertSame( + '#cdata-section', + $processor->get_token_name(), + "Should have found a CDATA section but found {$processor->get_token_name()} instead." + ); + + $this->assertEmpty( + $processor->get_modifiable_text(), + 'Found non-empty modifiable text.' + ); + } + /** * Ensures that normative Processing Instruction nodes are properly parsed. * From fe9aa7c48d4c72bda6c55273015bd01cd24aa603 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 8 Aug 2024 07:31:15 +0000 Subject: [PATCH 226/422] HTML API: Add support for SVG and MathML (Foreign content) (remove file) As part of work to add more spec support to the HTML API, this patch adds support for SVG and MathML elements, or more generally, "foreign content." The rules in foreign content are a mix of XML and HTML parsing rules and introduce additional complexity into the processor, but is important in order to avoid getting lost when inside these elements. This patch follows the first by deleting the empty files, which were mistakenly left in during the initial merge. Developed in https://github.com/wordpress/wordpress-develop/pull/6006 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58867]. Props: dmsnell, jonsurrell, westonruter. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58868 602fd350-edb4-49c9-b593-d223f7449a82 --- .../phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php diff --git a/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php b/tests/phpunit/tests/html-api/wpHtmlSupportRequiredOpenElements.php deleted file mode 100644 index e69de29bb2d1d..0000000000000 From b9014d69e3b34db9e4ec792fd48651241ae4a4f9 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 8 Aug 2024 16:13:25 +0000 Subject: [PATCH 227/422] HTML API: `expect_closer()` should report false for self-closing foreign elements. Previously, `WP_HTML_Processor::expects_closer()` would report `true` for self-closing foreign elements when called without supplying a node in question, but it should have been reporting `true` just as it does for HTML elements. This patch adds a test case demonstrating the issue and a bugfix. The `html5lib` test runner was relying on the incorrect behavior, accidentally working. This is also corrected and the `html5lib` test now relies on the correct behavior of `expects_closer()`. Developed in https://github.com/wordpress/wordpress-develop/pull/7162 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58868]. Props: dmsnell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58870 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 8 +++++--- .../html-api/class-wp-html-tag-processor.php | 2 +- .../phpunit/tests/html-api/wpHtmlProcessor.php | 18 ++++++++++++++++++ .../tests/html-api/wpHtmlProcessorHtml5lib.php | 12 ++---------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 3820fe027723d..415ff23eea95f 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -786,13 +786,15 @@ public function matches_breadcrumbs( $breadcrumbs ): bool { * or `null` if not matched on any token. */ public function expects_closer( WP_HTML_Token $node = null ): ?bool { - $token_name = $node->node_name ?? $this->get_token_name(); - $token_namespace = $node->namespace ?? $this->get_namespace(); + $token_name = $node->node_name ?? $this->get_token_name(); if ( ! isset( $token_name ) ) { return null; } + $token_namespace = $node->namespace ?? $this->get_namespace(); + $token_has_self_closing = $node->has_self_closing_flag ?? $this->has_self_closing_flag(); + return ! ( // Comments, text nodes, and other atomic tokens. '#' === $token_name[0] || @@ -803,7 +805,7 @@ public function expects_closer( WP_HTML_Token $node = null ): ?bool { // Special atomic elements. ( 'html' === $token_namespace && in_array( $token_name, array( 'IFRAME', 'NOEMBED', 'NOFRAMES', 'SCRIPT', 'STYLE', 'TEXTAREA', 'TITLE', 'XMP' ), true ) ) || // Self-closing elements in foreign content. - ( isset( $node ) && 'html' !== $node->namespace && $node->has_self_closing_flag ) + ( 'html' !== $token_namespace && $token_has_self_closing ) ); } diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index fb21c15d1d96e..95216b08a1988 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -2921,7 +2921,7 @@ public function get_qualified_attribute_name( $attribute_name ): ?string { return null; } - $namespace = $this->get_namespace(); + $namespace = $this->get_namespace(); $lower_name = strtolower( $attribute_name ); if ( 'math' === $namespace && 'definitionurl' === $lower_name ) { diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 68c60a1ff85cc..2b56cefedcd9a 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -503,4 +503,22 @@ public function __construct( $html ) { $subclass_processor = call_user_func( array( get_class( $subclass_instance ), 'create_fragment' ), '' ); $this->assertInstanceOf( get_class( $subclass_instance ), $subclass_processor, '::create_fragment did not return subclass instance.' ); } + + /** + * Ensures that self-closing elements in foreign content properly report + * that they expect no closer. + * + * @ticket 61576 + */ + public function test_expects_closer_foreign_content_self_closing() { + $processor = WP_HTML_Processor::create_fragment( '' ); + + $this->assertTrue( $processor->next_tag() ); + $this->assertSame( 'SVG', $processor->get_tag() ); + $this->assertFalse( $processor->expects_closer() ); + + $this->assertTrue( $processor->next_tag() ); + $this->assertSame( 'MATH', $processor->get_tag() ); + $this->assertTrue( $processor->expects_closer() ); + } } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php index b6213aac8d0e9..4de4ebd1cd5c4 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorHtml5lib.php @@ -207,11 +207,7 @@ private static function build_tree_representation( ?string $fragment_context, st $tag_indent = $indent_level; - if ( 'html' !== $namespace ) { - if ( ! $processor->has_self_closing_flag() ) { - ++$indent_level; - } - } elseif ( ! WP_HTML_Processor::is_void( $tag_name ) ) { + if ( $processor->expects_closer() ) { ++$indent_level; } @@ -275,7 +271,7 @@ static function ( $a, $b ) { // Self-contained tags contain their inner contents as modifiable text. $modifiable_text = $processor->get_modifiable_text(); if ( '' !== $modifiable_text ) { - $output .= str_repeat( $indent, $indent_level ) . "\"{$modifiable_text}\"\n"; + $output .= str_repeat( $indent, $tag_indent + 1 ) . "\"{$modifiable_text}\"\n"; } if ( 'html' === $namespace && 'TEMPLATE' === $token_name ) { @@ -283,10 +279,6 @@ static function ( $a, $b ) { ++$indent_level; } - if ( ! $processor->is_void( $tag_name ) && ! $processor->expects_closer() ) { - --$indent_level; - } - break; case '#cdata-section': From 7ceb8394c75d52c9c263b0cf201527fda8935bf8 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Thu, 8 Aug 2024 17:02:46 +0000 Subject: [PATCH 228/422] HTML API: Test and fix SVG script handling. When support was added for foreign content, an ambiguity in the HTML specification led to code that followed the wrong path when encountering a self-closing SCRIPT element in the SVG namespace. Further, a fallthrough was discovered during manual testing. This patch adds a new test to assert the proper behaviors and fixes these issues. In the case of the SCRIPT element, the outcome was the same with the wrong code path, making the defect benign. In the case of the fallthrough, the wrong behavior would occur. The updates in this patch also resolves a todo relating to the spec ambiguity. Developed in https://github.com/wordpress/wordpress-develop/pull/7164 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58868]. Props: dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58871 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 29 ++++++++++--------- .../tests/html-api/wpHtmlProcessor.php | 10 +++++++ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 415ff23eea95f..2bb6302c99781 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -4239,21 +4239,22 @@ private function step_in_foreign_content(): bool { /* * > If the token has its self-closing flag set, then run * > the appropriate steps from the following list: + * > + * > ↪ the token's tag name is "script", and the new current node is in the SVG namespace + * > Acknowledge the token's self-closing flag, and then act as + * > described in the steps for a "script" end tag below. + * > + * > ↪ Otherwise + * > Pop the current node off the stack of open elements and + * > acknowledge the token's self-closing flag. + * + * Since the rules for SCRIPT below indicate to pop the element off of the stack of + * open elements, which is the same for the Otherwise condition, there's no need to + * separate these checks. The difference comes when a parser operates with the scripting + * flag enabled, and executes the script, which this parser does not support. */ if ( $this->state->current_token->has_self_closing_flag ) { - if ( 'SCRIPT' === $this->state->current_token->node_name && 'svg' === $this->state->current_token->namespace ) { - /* - * > Acknowledge the token's self-closing flag, and then act as - * > described in the steps for a "script" end tag below. - * - * @todo Verify that this shouldn't be handled by the rule for - * "An end tag whose name is 'script', if the current node - * is an SVG script element." - */ - goto in_foreign_content_any_other_end_tag; - } else { - $this->state->stack_of_open_elements->pop(); - } + $this->state->stack_of_open_elements->pop(); } return true; } @@ -4263,13 +4264,13 @@ private function step_in_foreign_content(): bool { */ if ( $this->is_tag_closer() && 'SCRIPT' === $this->state->current_token->node_name && 'svg' === $this->state->current_token->namespace ) { $this->state->stack_of_open_elements->pop(); + return true; } /* * > Any other end tag */ if ( $this->is_tag_closer() ) { - in_foreign_content_any_other_end_tag: $node = $this->state->stack_of_open_elements->current_node(); if ( $tag_name !== $node->node_name ) { // @todo Indicate a parse error once it's possible. diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 2b56cefedcd9a..0b7d72bdbee9a 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -521,4 +521,14 @@ public function test_expects_closer_foreign_content_self_closing() { $this->assertSame( 'MATH', $processor->get_tag() ); $this->assertTrue( $processor->expects_closer() ); } + + /** + * Ensures that self-closing foreign SCRIPT elements are properly found. + * + * @ticket 61576 + */ + public function test_foreign_content_script_self_closing() { + $processor = WP_HTML_Processor::create_fragment( '' ); + $this->assertTrue( $processor->next_tag( 'script' ) ); + } } From ec58d38eef3f4387177e4bfca90df5b3a34f96be Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 8 Aug 2024 19:35:24 +0000 Subject: [PATCH 229/422] External Libraries: Update the Backbone.js library to version `1.6.0`. This updates the `backbone` library from version `1.5.0` to `1.6.0`. This is a minor bug fix release. The full list of changes can be found in the Backbone.js change log: https://backbonejs.org/#changelog. Props manooweb mardroid. Fixes #60512. git-svn-id: https://develop.svn.wordpress.org/trunk@58872 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 14 +++++++------- package.json | 2 +- src/wp-includes/script-loader.php | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5c985d2137f4..af97de8dc6244 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "@wordpress/warning": "3.0.1", "@wordpress/widgets": "4.0.6", "@wordpress/wordcount": "4.0.1", - "backbone": "1.5.0", + "backbone": "1.6.0", "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", "element-closest": "^3.0.2", @@ -10067,9 +10067,9 @@ "dev": true }, "node_modules/backbone": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.5.0.tgz", - "integrity": "sha512-RPKlstw5NW+rD2X4PnEnvgLhslRnXOugXw2iBloHkPMgOxvakP1/A+tZIGM3qCm8uvZeEf8zMm0uvcK1JwL+IA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", + "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", "dependencies": { "underscore": ">=1.8.3" } @@ -41569,9 +41569,9 @@ } }, "backbone": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.5.0.tgz", - "integrity": "sha512-RPKlstw5NW+rD2X4PnEnvgLhslRnXOugXw2iBloHkPMgOxvakP1/A+tZIGM3qCm8uvZeEf8zMm0uvcK1JwL+IA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", + "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", "requires": { "underscore": ">=1.8.3" } diff --git a/package.json b/package.json index 7c55cb8bc1278..eedd555935c36 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "@wordpress/warning": "3.0.1", "@wordpress/widgets": "4.0.6", "@wordpress/wordcount": "4.0.1", - "backbone": "1.5.0", + "backbone": "1.6.0", "clipboard": "2.0.11", "core-js-url-browser": "3.6.4", "element-closest": "^3.0.2", diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 24a35a291911e..2852dc2431760 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -1040,7 +1040,7 @@ function wp_default_scripts( $scripts ) { did_action( 'init' ) && $scripts->add_data( 'json2', 'conditional', 'lt IE 8' ); $scripts->add( 'underscore', "/wp-includes/js/underscore$dev_suffix.js", array(), '1.13.4', 1 ); - $scripts->add( 'backbone', "/wp-includes/js/backbone$dev_suffix.js", array( 'underscore', 'jquery' ), '1.5.0', 1 ); + $scripts->add( 'backbone', "/wp-includes/js/backbone$dev_suffix.js", array( 'underscore', 'jquery' ), '1.6.0', 1 ); $scripts->add( 'wp-util', "/wp-includes/js/wp-util$suffix.js", array( 'underscore', 'jquery' ), false, 1 ); did_action( 'init' ) && $scripts->localize( From 9f09c574c0ac64041c81760f10646994d21ce49d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 9 Aug 2024 00:16:33 +0000 Subject: [PATCH 230/422] Docs: Remove unsupported values in `plugins_api()` DocBlocks. The `group` field and the `hot_categories` action were never actually implemented on the WordPress.org side. Follow-up to [34596], [meta3227]. Props lopo, milana_cap. See #55645. git-svn-id: https://develop.svn.wordpress.org/trunk@58873 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/plugin-install.php | 38 +++++++++++------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php index 38c4b50e7d049..04287736bc661 100644 --- a/src/wp-admin/includes/plugin-install.php +++ b/src/wp-admin/includes/plugin-install.php @@ -20,34 +20,33 @@ * * The second filter, {@see 'plugins_api'}, allows a plugin to override the WordPress.org * Plugin Installation API entirely. If `$action` is 'query_plugins' or 'plugin_information', - * an object MUST be passed. If `$action` is 'hot_tags' or 'hot_categories', an array MUST - * be passed. + * an object MUST be passed. If `$action` is 'hot_tags', an array MUST be passed. * * Finally, the third filter, {@see 'plugins_api_result'}, makes it possible to filter the * response object or array, depending on the `$action` type. * * Supported arguments per action: * - * | Argument Name | query_plugins | plugin_information | hot_tags | hot_categories | - * | -------------------- | :-----------: | :----------------: | :------: | :------------: | - * | `$slug` | No | Yes | No | No | - * | `$per_page` | Yes | No | No | No | - * | `$page` | Yes | No | No | No | - * | `$number` | No | No | Yes | Yes | - * | `$search` | Yes | No | No | No | - * | `$tag` | Yes | No | No | No | - * | `$author` | Yes | No | No | No | - * | `$user` | Yes | No | No | No | - * | `$browse` | Yes | No | No | No | - * | `$locale` | Yes | Yes | No | No | - * | `$installed_plugins` | Yes | No | No | No | - * | `$is_ssl` | Yes | Yes | No | No | - * | `$fields` | Yes | Yes | No | No | + * | Argument Name | query_plugins | plugin_information | hot_tags | + * | -------------------- | :-----------: | :----------------: | :------: | + * | `$slug` | No | Yes | No | + * | `$per_page` | Yes | No | No | + * | `$page` | Yes | No | No | + * | `$number` | No | No | Yes | + * | `$search` | Yes | No | No | + * | `$tag` | Yes | No | No | + * | `$author` | Yes | No | No | + * | `$user` | Yes | No | No | + * | `$browse` | Yes | No | No | + * | `$locale` | Yes | Yes | No | + * | `$installed_plugins` | Yes | No | No | + * | `$is_ssl` | Yes | Yes | No | + * | `$fields` | Yes | Yes | No | * * @since 2.7.0 * * @param string $action API action to perform: 'query_plugins', 'plugin_information', - * 'hot_tags' or 'hot_categories'. + * or 'hot_tags'. * @param array|object $args { * Optional. Array or object of arguments to serialize for the Plugin Info API. * @@ -91,7 +90,6 @@ * @type bool $banners Whether to return the banner images links. Default false. * @type bool $icons Whether to return the icon links. Default false. * @type bool $active_installs Whether to return the number of active installations. Default false. - * @type bool $group Whether to return the assigned group. Default false. * @type bool $contributors Whether to return the list of contributors. Default false. * } * } @@ -136,7 +134,7 @@ function plugins_api( $action, $args = array() ) { * Returning a non-false value will effectively short-circuit the WordPress.org API request. * * If `$action` is 'query_plugins' or 'plugin_information', an object MUST be passed. - * If `$action` is 'hot_tags' or 'hot_categories', an array should be passed. + * If `$action` is 'hot_tags', an array should be passed. * * @since 2.7.0 * From defaa761959a500ffb8a37d5dbf06316787a73bf Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Fri, 9 Aug 2024 17:59:41 +0000 Subject: [PATCH 231/422] Comments: Add optional `$context` parameter to `get_edit_comment_link()` to get the URL without HTML entities. This brings the function in line with the similar `get_edit_post_link()` parameter. The 'get_edit_comment_link' filter now additionally receives the `$comment_id` and `$context` as parameters. Additionally, as a minor enhancement, the capability check is now more defensive, as it will no longer cause an error if the given comment ID is invalid. As part of the changeset, comprehensive test coverage for the `get_edit_comment_link()` including the new behavior is added. Props deepakrohilla. Fixes #61727. git-svn-id: https://develop.svn.wordpress.org/trunk@58875 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/link-template.php | 24 +++- .../phpunit/tests/link/getEditCommentLink.php | 130 ++++++++++++++++++ 2 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 tests/phpunit/tests/link/getEditCommentLink.php diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php index 426da57c392fa..4cfc47f83ec05 100644 --- a/src/wp-includes/link-template.php +++ b/src/wp-includes/link-template.php @@ -1595,27 +1595,39 @@ function get_delete_post_link( $post = 0, $deprecated = '', $force_delete = fals * Retrieves the edit comment link. * * @since 2.3.0 + * @since 6.7.0 The $context parameter was added. * * @param int|WP_Comment $comment_id Optional. Comment ID or WP_Comment object. - * @return string|void The edit comment link URL for the given comment. + * @param string $context Optional. Context in which the URL should be used. Either 'display', + * to include HTML entities, or 'url'. Default 'display'. + * @return string|void The edit comment link URL for the given comment, or void if the comment id does not exist or + * the current user is not allowed to edit it. */ -function get_edit_comment_link( $comment_id = 0 ) { +function get_edit_comment_link( $comment_id = 0, $context = 'display' ) { $comment = get_comment( $comment_id ); - if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) { + if ( ! is_object( $comment ) || ! current_user_can( 'edit_comment', $comment->comment_ID ) ) { return; } - $location = admin_url( 'comment.php?action=editcomment&c=' ) . $comment->comment_ID; + if ( 'display' === $context ) { + $action = 'comment.php?action=editcomment&c='; + } else { + $action = 'comment.php?action=editcomment&c='; + } + + $location = admin_url( $action ) . $comment->comment_ID; /** * Filters the comment edit link. * - * @since 2.3.0 + * @since 6.7.0 The $comment_id and $context parameters are now being passed to the filter. * * @param string $location The edit link. + * @param int $comment_id Optional. Unique ID of the comment to generate an edit link. + * @param int $context Optional. Context to include HTML entities in link. Default 'display'. */ - return apply_filters( 'get_edit_comment_link', $location ); + return apply_filters( 'get_edit_comment_link', $location, $comment_id, $context ); } /** diff --git a/tests/phpunit/tests/link/getEditCommentLink.php b/tests/phpunit/tests/link/getEditCommentLink.php new file mode 100644 index 0000000000000..1d574d40286d1 --- /dev/null +++ b/tests/phpunit/tests/link/getEditCommentLink.php @@ -0,0 +1,130 @@ +comment->create( array( 'comment_content' => 'Test comment' ) ); + + self::$user_ids = array( + 'admin' => $factory->user->create( array( 'role' => 'administrator' ) ), + 'subscriber' => $factory->user->create( array( 'role' => 'subscriber' ) ), + ); + } + + public static function wpTearDownAfterClass() { + // Delete the test comment. + wp_delete_comment( self::$comment_id, true ); + + // Delete the test users. + foreach ( self::$user_ids as $user_id ) { + self::delete_user( $user_id ); + } + } + + public function set_up() { + parent::set_up(); + wp_set_current_user( self::$user_ids['admin'] ); + } + + /** + * Tests that get_edit_comment_link() returns the correct URL by default. + */ + public function test_get_edit_comment_link_default() { + $comment_id = self::$comment_id; + $expected_url = admin_url( 'comment.php?action=editcomment&c=' . $comment_id ); + $actual_url = get_edit_comment_link( $comment_id ); + + $this->assertSame( $expected_url, $actual_url ); + } + + /** + * Tests that get_edit_comment_link() returns the correct URL with a context of 'display'. + * + * The expected result should include HTML entities. + * + * @ticket 61727 + */ + public function test_get_edit_comment_link_display_context() { + $comment_id = self::$comment_id; + $expected_url = admin_url( 'comment.php?action=editcomment&c=' . $comment_id ); + $actual_url = get_edit_comment_link( $comment_id, 'display' ); + + $this->assertSame( $expected_url, $actual_url ); + } + + /** + * Tests that get_edit_comment_link() returns the correct URL with a context of 'url'. + * + * The expected result should not include HTML entities. + * + * @ticket 61727 + */ + public function test_get_edit_comment_link_url_context() { + $comment_id = self::$comment_id; + $expected_url = admin_url( 'comment.php?action=editcomment&c=' . $comment_id ); + $actual_url = get_edit_comment_link( $comment_id, 'url' ); + + $this->assertSame( $expected_url, $actual_url ); + } + + /** + * Tests that get_edit_comment_link() returns nothing if the comment ID is invalid. + * + * @ticket 61727 + */ + public function test_get_edit_comment_link_invalid_comment() { + $comment_id = 12345; + $actual_url_display = get_edit_comment_link( $comment_id, 'display' ); + $actual_url = get_edit_comment_link( $comment_id, 'url' ); + + $this->assertNull( $actual_url_display ); + $this->assertNull( $actual_url ); + } + + /** + * Tests that get_edit_comment_link() returns nothing if the current user cannot edit it. + */ + public function test_get_edit_comment_link_user_cannot_edit() { + wp_set_current_user( self::$user_ids['subscriber'] ); + $comment_id = self::$comment_id; + $actual_url_display = get_edit_comment_link( $comment_id, 'display' ); + $actual_url = get_edit_comment_link( $comment_id, 'url' ); + + $this->assertNull( $actual_url_display ); + $this->assertNull( $actual_url ); + } + + /** + * Tests that the 'get_edit_comment_link' filter works as expected, including the additional parameters. + * + * @ticket 61727 + */ + public function test_get_edit_comment_link_filter() { + $comment_id = self::$comment_id; + $expected_url_display = admin_url( 'comment-test.php?context=display' ); + $expected_url = admin_url( 'comment-test.php?context=url' ); + + add_filter( + 'get_edit_comment_link', + function ( $location, $comment_id, $context ) { + return admin_url( 'comment-test.php?context=' . $context ); + }, + 10, + 3 + ); + + $actual_url_display = get_edit_comment_link( $comment_id, 'display' ); + $actual_url = get_edit_comment_link( $comment_id, 'url' ); + + // Assert the final URLs are as expected + $this->assertSame( $expected_url_display, $actual_url_display ); + $this->assertSame( $expected_url, $actual_url ); + } +} From 433397998a542d236c19de6c08b20b03a628738e Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Fri, 9 Aug 2024 18:29:47 +0000 Subject: [PATCH 232/422] Build/Test Tools: Avoid using `wp_delete_user()` in PHPUnit tests unless explicitly acknowledging or ignoring Multisite. `wp_delete_user()` does not actually delete the entire user when using WordPress Multisite. Therefore tests should typically use the test helper method to fully delete the user, unless explicitly ignoring Multisite or testing the `wp_delete_user()` function while taking Multisite behavior into account. Fixes #61851. git-svn-id: https://develop.svn.wordpress.org/trunk@58876 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/admin/includesPlugin.php | 10 +++++----- tests/phpunit/tests/link/getDashboardUrl.php | 6 +----- .../tests/rest-api/rest-sidebars-controller.php | 4 ++-- tests/phpunit/tests/user/queryCache.php | 2 +- tests/phpunit/tests/xmlrpc/wp/getUser.php | 2 +- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/tests/phpunit/tests/admin/includesPlugin.php b/tests/phpunit/tests/admin/includesPlugin.php index 0d29b81d028e0..e95697810d43f 100644 --- a/tests/phpunit/tests/admin/includesPlugin.php +++ b/tests/phpunit/tests/admin/includesPlugin.php @@ -96,7 +96,7 @@ public function test_submenu_position( $position, $expected_position ) { wp_set_current_user( $current_user ); // Clean up the temporary user. - wp_delete_user( $admin_user ); + self::delete_user( $admin_user ); // Verify the menu was inserted at the expected position. $this->assertSame( 'custom-position', $submenu[ $parent ][ $expected_position ][2] ); @@ -204,7 +204,7 @@ public function test_submenu_helpers_position( $position, $expected_position ) { } // Clean up the temporary user. - wp_delete_user( $admin_user ); + self::delete_user( $admin_user ); foreach ( $actual_positions as $test => $actual_position ) { // Verify the menu was inserted at the expected position. @@ -295,7 +295,7 @@ public function test_position_when_parent_slug_child_slug_are_the_same() { // Clean up the temporary user. wp_set_current_user( $current_user ); - wp_delete_user( $admin_user ); + self::delete_user( $admin_user ); // Verify the menu was inserted at the expected position. $this->assertSame( 'main_slug', $submenu['main_slug'][0][2] ); @@ -326,7 +326,7 @@ public function test_passing_string_as_position_fires_doing_it_wrong_submenu() { // Clean up the temporary user. wp_set_current_user( $current_user ); - wp_delete_user( $admin_user ); + self::delete_user( $admin_user ); // Verify the menu was inserted at the expected position. $this->assertSame( 'submenu_page_1', $submenu['main_slug'][1][2] ); @@ -355,7 +355,7 @@ public function test_passing_float_as_position_does_not_override_int() { // Clean up the temporary user. wp_set_current_user( $current_user ); - wp_delete_user( $admin_user ); + self::delete_user( $admin_user ); // Verify the menus were inserted. $this->assertSame( 'main_slug_1', $menu[1][2] ); diff --git a/tests/phpunit/tests/link/getDashboardUrl.php b/tests/phpunit/tests/link/getDashboardUrl.php index dafaa7b62e96a..2864db235ffb9 100644 --- a/tests/phpunit/tests/link/getDashboardUrl.php +++ b/tests/phpunit/tests/link/getDashboardUrl.php @@ -12,11 +12,7 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { } public static function wpTearDownAfterClass() { - if ( is_multisite() ) { - wpmu_delete_user( self::$user_id ); - } else { - wp_delete_user( self::$user_id ); - } + self::delete_user( self::$user_id ); } /** diff --git a/tests/phpunit/tests/rest-api/rest-sidebars-controller.php b/tests/phpunit/tests/rest-api/rest-sidebars-controller.php index 0bddf12df92b9..67a49770dbc86 100644 --- a/tests/phpunit/tests/rest-api/rest-sidebars-controller.php +++ b/tests/phpunit/tests/rest-api/rest-sidebars-controller.php @@ -43,8 +43,8 @@ public static function wpSetUpBeforeClass( $factory ) { } public static function wpTearDownAfterClass() { - wp_delete_user( self::$admin_id ); - wp_delete_user( self::$author_id ); + self::delete_user( self::$admin_id ); + self::delete_user( self::$author_id ); } public function set_up() { diff --git a/tests/phpunit/tests/user/queryCache.php b/tests/phpunit/tests/user/queryCache.php index 985c6d7da9f6d..0e708a55c4de8 100644 --- a/tests/phpunit/tests/user/queryCache.php +++ b/tests/phpunit/tests/user/queryCache.php @@ -388,7 +388,7 @@ public function test_query_cache_delete_user() { $this->assertSameSets( $expected, $found, 'Find author in returned values' ); - wp_delete_user( $user_id ); + self::delete_user( $user_id ); $q2 = new WP_User_Query( array( diff --git a/tests/phpunit/tests/xmlrpc/wp/getUser.php b/tests/phpunit/tests/xmlrpc/wp/getUser.php index dfeb1c8e2e226..391ec7157cee9 100644 --- a/tests/phpunit/tests/xmlrpc/wp/getUser.php +++ b/tests/phpunit/tests/xmlrpc/wp/getUser.php @@ -98,7 +98,7 @@ public function test_valid_user() { $this->assertSame( $user_data['user_login'], $result['username'] ); $this->assertContains( $user_data['role'], $result['roles'] ); - wp_delete_user( $user_id ); + self::delete_user( $user_id ); } public function test_no_fields() { From 29348dfc9a9fbddb4adcef4b8353ef695b8639ce Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Sat, 10 Aug 2024 04:58:16 +0000 Subject: [PATCH 233/422] HTML API: Remove completed TODO comments. This patch removes TODO comments indicating the need to verify certain behaviors and algorithms. Those verifications have taken place and the comments are no longer needed. Developed in https://github.com/wordpress/wordpress-develop/pull/7174 Discussed in https://core.trac.wordpress.org/ticket/61646 Follow-up to [58867], [58870]. Props jonsurrell. See #64646. git-svn-id: https://develop.svn.wordpress.org/trunk@58877 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 2bb6302c99781..6f5da5477f922 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -775,9 +775,6 @@ public function matches_breadcrumbs( $breadcrumbs ): bool { * foreign content will also act just like a void tag, immediately * closing as soon as the processor advances to the next token. * - * @todo Review the self-closing logic when no node is present, ensure it - * matches the expectations in `step()`. - * * @since 6.6.0 * * @param WP_HTML_Token|null $node Optional. Node to examine, if provided. @@ -3317,12 +3314,6 @@ private function step_in_table_body(): bool { case '-TBODY': case '-TFOOT': case '-THEAD': - /* - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as `
    `, and a foreign element of - * the same given name. - */ if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { // Parse error: ignore the token. return $this->step(); @@ -3453,12 +3444,6 @@ private function step_in_row(): bool { case '-TBODY': case '-TFOOT': case '-THEAD': - /* - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as `
    `, and a foreign element of - * the same given name. - */ if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { // Parse error: ignore the token. return $this->step(); @@ -3521,12 +3506,6 @@ private function step_in_cell(): bool { */ case '-TD': case '-TH': - /* - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as `
    `, and a foreign element of - * the same given name. - */ if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { // Parse error: ignore the token. return $this->step(); @@ -3590,12 +3569,6 @@ private function step_in_cell(): bool { case '-TFOOT': case '-THEAD': case '-TR': - /* - * @todo This needs to check if the element in scope is an HTML element, meaning that - * when SVG and MathML support is added, this needs to differentiate between an - * HTML element of the given name, such as `
    `, and a foreign element of - * the same given name. - */ if ( ! $this->state->stack_of_open_elements->has_element_in_table_scope( $tag_name ) ) { // Parse error: ignore the token. return $this->step(); From e0ee668d0dc17748be036e0583add30b02f0f2f9 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Sat, 10 Aug 2024 22:58:07 +0000 Subject: [PATCH 234/422] Code Quality: Clarify variable names in dependency classes. Renames several variables in the `WP_Scripts` and `WP_Styles` classes to clarify their purpose for developers reading the code. Props peterwilsoncc, sergeybiryukov. See #61607. git-svn-id: https://develop.svn.wordpress.org/trunk@58878 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-scripts.php | 84 ++++++++++++++-------------- src/wp-includes/class-wp-styles.php | 24 ++++---- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/wp-includes/class-wp-scripts.php b/src/wp-includes/class-wp-scripts.php index 7e4bd2732a85f..77dff94c0497a 100644 --- a/src/wp-includes/class-wp-scripts.php +++ b/src/wp-includes/class-wp-scripts.php @@ -289,12 +289,12 @@ public function do_item( $handle, $group = false ) { $ver = $ver ? $ver . '&' . $this->args[ $handle ] : $this->args[ $handle ]; } - $src = $obj->src; - $strategy = $this->get_eligible_loading_strategy( $handle ); - $intended_strategy = (string) $this->get_data( $handle, 'strategy' ); - $cond_before = ''; - $cond_after = ''; - $conditional = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : ''; + $src = $obj->src; + $strategy = $this->get_eligible_loading_strategy( $handle ); + $intended_strategy = (string) $this->get_data( $handle, 'strategy' ); + $ie_conditional_prefix = ''; + $ie_conditional_suffix = ''; + $conditional = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : ''; if ( ! $this->is_delayed_strategy( $intended_strategy ) ) { $intended_strategy = ''; @@ -320,15 +320,15 @@ public function do_item( $handle, $group = false ) { } if ( $conditional ) { - $cond_before = "\n"; + $ie_conditional_prefix = "\n"; } $before_script = $this->get_inline_script_tag( $handle, 'before' ); $after_script = $this->get_inline_script_tag( $handle, 'after' ); if ( $before_script || $after_script ) { - $inline_script_tag = $cond_before . $before_script . $after_script . $cond_after; + $inline_script_tag = $ie_conditional_prefix . $before_script . $after_script . $ie_conditional_suffix; } else { $inline_script_tag = ''; } @@ -353,10 +353,10 @@ public function do_item( $handle, $group = false ) { * @param string $src Script loader source path. * @param string $handle Script handle. */ - $srce = apply_filters( 'script_loader_src', $src, $handle ); + $filtered_src = apply_filters( 'script_loader_src', $src, $handle ); if ( - $this->in_default_dir( $srce ) + $this->in_default_dir( $filtered_src ) && ( $before_script || $after_script || $translations_stop_concat || $this->is_delayed_strategy( $strategy ) ) ) { $this->do_concat = false; @@ -364,7 +364,7 @@ public function do_item( $handle, $group = false ) { // Have to print the so-far concatenated scripts right away to maintain the right order. _print_scripts(); $this->reset(); - } elseif ( $this->in_default_dir( $srce ) && ! $conditional ) { + } elseif ( $this->in_default_dir( $filtered_src ) && ! $conditional ) { $this->print_code .= $this->print_extra_script( $handle, false ); $this->concat .= "$handle,"; $this->concat_version .= "$handle$ver"; @@ -378,13 +378,13 @@ public function do_item( $handle, $group = false ) { $has_conditional_data = $conditional && $this->get_data( $handle, 'data' ); if ( $has_conditional_data ) { - echo $cond_before; + echo $ie_conditional_prefix; } $this->print_extra_script( $handle ); if ( $has_conditional_data ) { - echo $cond_after; + echo $ie_conditional_suffix; } // A single item may alias a set of items, by having dependencies, but no source. @@ -425,9 +425,9 @@ public function do_item( $handle, $group = false ) { if ( $intended_strategy ) { $attr['data-wp-strategy'] = $intended_strategy; } - $tag = $translations . $cond_before . $before_script; + $tag = $translations . $ie_conditional_prefix . $before_script; $tag .= wp_get_script_tag( $attr ); - $tag .= $after_script . $cond_after; + $tag .= $after_script . $ie_conditional_suffix; /** * Filters the HTML script tag of an enqueued script. @@ -626,16 +626,16 @@ public function localize( $handle, $object_name, $l10n ) { */ public function set_group( $handle, $recursion, $group = false ) { if ( isset( $this->registered[ $handle ]->args ) && 1 === $this->registered[ $handle ]->args ) { - $grp = 1; + $calculated_group = 1; } else { - $grp = (int) $this->get_data( $handle, 'group' ); + $calculated_group = (int) $this->get_data( $handle, 'group' ); } - if ( false !== $group && $grp > $group ) { - $grp = $group; + if ( false !== $group && $calculated_group > $group ) { + $calculated_group = $group; } - return parent::set_group( $handle, $recursion, $grp ); + return parent::set_group( $handle, $recursion, $calculated_group ); } /** @@ -723,7 +723,7 @@ public function print_translations( $handle, $display = true ) { * @return bool True on success, false on failure. */ public function all_deps( $handles, $recursion = false, $group = false ) { - $r = parent::all_deps( $handles, $recursion, $group ); + $result = parent::all_deps( $handles, $recursion, $group ); if ( ! $recursion ) { /** * Filters the list of script dependencies left to print. @@ -734,7 +734,7 @@ public function all_deps( $handles, $recursion = false, $group = false ) { */ $this->to_do = apply_filters( 'print_scripts_array', $this->to_do ); } - return $r; + return $result; } /** @@ -889,10 +889,10 @@ private function is_delayed_strategy( $strategy ) { * @return string The best eligible loading strategy. */ private function get_eligible_loading_strategy( $handle ) { - $intended = (string) $this->get_data( $handle, 'strategy' ); + $intended_strategy = (string) $this->get_data( $handle, 'strategy' ); // Bail early if there is no intended strategy. - if ( ! $intended ) { + if ( ! $intended_strategy ) { return ''; } @@ -900,16 +900,16 @@ private function get_eligible_loading_strategy( $handle ) { * If the intended strategy is 'defer', limit the initial list of eligible * strategies, since 'async' can fallback to 'defer', but not vice-versa. */ - $initial = ( 'defer' === $intended ) ? array( 'defer' ) : null; + $initial_strategy = ( 'defer' === $intended_strategy ) ? array( 'defer' ) : null; - $eligible = $this->filter_eligible_strategies( $handle, $initial ); + $eligible_strategies = $this->filter_eligible_strategies( $handle, $initial_strategy ); // Return early once we know the eligible strategy is blocking. - if ( empty( $eligible ) ) { + if ( empty( $eligible_strategies ) ) { return ''; } - return in_array( 'async', $eligible, true ) ? 'async' : 'defer'; + return in_array( 'async', $eligible_strategies, true ) ? 'async' : 'defer'; } /** @@ -917,20 +917,20 @@ private function get_eligible_loading_strategy( $handle ) { * * @since 6.3.0 * - * @param string $handle The script handle. - * @param string[]|null $eligible Optional. The list of strategies to filter. Default null. - * @param array $checked Optional. An array of already checked script handles, used to avoid recursive loops. + * @param string $handle The script handle. + * @param string[]|null $eligible_strategies Optional. The list of strategies to filter. Default null. + * @param array $checked Optional. An array of already checked script handles, used to avoid recursive loops. * @return string[] A list of eligible loading strategies that could be used. */ - private function filter_eligible_strategies( $handle, $eligible = null, $checked = array() ) { + private function filter_eligible_strategies( $handle, $eligible_strategies = null, $checked = array() ) { // If no strategies are being passed, all strategies are eligible. - if ( null === $eligible ) { - $eligible = $this->delayed_strategies; + if ( null === $eligible_strategies ) { + $eligible_strategies = $this->delayed_strategies; } // If this handle was already checked, return early. if ( isset( $checked[ $handle ] ) ) { - return $eligible; + return $eligible_strategies; } // Mark this handle as checked. @@ -938,12 +938,12 @@ private function filter_eligible_strategies( $handle, $eligible = null, $checked // If this handle isn't registered, don't filter anything and return. if ( ! isset( $this->registered[ $handle ] ) ) { - return $eligible; + return $eligible_strategies; } // If the handle is not enqueued, don't filter anything and return. if ( ! $this->query( $handle, 'enqueued' ) ) { - return $eligible; + return $eligible_strategies; } $is_alias = (bool) ! $this->registered[ $handle ]->src; @@ -961,7 +961,7 @@ private function filter_eligible_strategies( $handle, $eligible = null, $checked // If the intended strategy is 'defer', filter out 'async'. if ( 'defer' === $intended_strategy ) { - $eligible = array( 'defer' ); + $eligible_strategies = array( 'defer' ); } $dependents = $this->get_dependents( $handle ); @@ -969,14 +969,14 @@ private function filter_eligible_strategies( $handle, $eligible = null, $checked // Recursively filter eligible strategies for dependents. foreach ( $dependents as $dependent ) { // Bail early once we know the eligible strategy is blocking. - if ( empty( $eligible ) ) { + if ( empty( $eligible_strategies ) ) { return array(); } - $eligible = $this->filter_eligible_strategies( $dependent, $eligible, $checked ); + $eligible_strategies = $this->filter_eligible_strategies( $dependent, $eligible_strategies, $checked ); } - return $eligible; + return $eligible_strategies; } /** diff --git a/src/wp-includes/class-wp-styles.php b/src/wp-includes/class-wp-styles.php index 76883b54ca98a..e64378be5fc8d 100644 --- a/src/wp-includes/class-wp-styles.php +++ b/src/wp-includes/class-wp-styles.php @@ -165,14 +165,14 @@ public function do_item( $handle, $group = false ) { $ver = $ver ? $ver . '&' . $this->args[ $handle ] : $this->args[ $handle ]; } - $src = $obj->src; - $cond_before = ''; - $cond_after = ''; - $conditional = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : ''; + $src = $obj->src; + $ie_conditional_prefix = ''; + $ie_conditional_suffix = ''; + $conditional = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : ''; if ( $conditional ) { - $cond_before = "\n"; + $ie_conditional_prefix = "\n"; } $inline_style = $this->print_inline_style( $handle, false ); @@ -279,17 +279,17 @@ public function do_item( $handle, $group = false ) { } if ( $this->do_concat ) { - $this->print_html .= $cond_before; + $this->print_html .= $ie_conditional_prefix; $this->print_html .= $tag; if ( $inline_style_tag ) { $this->print_html .= $inline_style_tag; } - $this->print_html .= $cond_after; + $this->print_html .= $ie_conditional_suffix; } else { - echo $cond_before; + echo $ie_conditional_prefix; echo $tag; $this->print_inline_style( $handle ); - echo $cond_after; + echo $ie_conditional_suffix; } return true; @@ -368,7 +368,7 @@ public function print_inline_style( $handle, $display = true ) { * @return bool True on success, false on failure. */ public function all_deps( $handles, $recursion = false, $group = false ) { - $r = parent::all_deps( $handles, $recursion, $group ); + $result = parent::all_deps( $handles, $recursion, $group ); if ( ! $recursion ) { /** * Filters the array of enqueued styles before processing for output. @@ -379,7 +379,7 @@ public function all_deps( $handles, $recursion = false, $group = false ) { */ $this->to_do = apply_filters( 'print_styles_array', $this->to_do ); } - return $r; + return $result; } /** From 76256bd975ff8ad2b210df68b60cb3d3c818de82 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 10 Aug 2024 23:00:19 +0000 Subject: [PATCH 235/422] Administration: Replace contracted verb forms for better consistency. Follow-up to [14951], [37221], [52979], [52978], [55977]. Props kebbet, sabernhardt. Fixes #58639. git-svn-id: https://develop.svn.wordpress.org/trunk@58879 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/plugins.php | 2 +- src/wp-admin/themes.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/plugins.php b/src/wp-admin/plugins.php index 7045f16661fe9..783bbe9324bd3 100644 --- a/src/wp-admin/plugins.php +++ b/src/wp-admin/plugins.php @@ -566,7 +566,7 @@ '

    ' . __( 'The search for installed plugins will search for terms in their name, description, or author.' ) . ' ' . __( 'The search results will be updated as you type.' ) . '

    ' . '

    ' . sprintf( /* translators: %s: WordPress Plugin Directory URL. */ - __( 'If you would like to see more plugins to choose from, click on the “Add New Plugin” button and you will be able to browse or search for additional plugins from the WordPress Plugin Directory. Plugins in the WordPress Plugin Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!' ), + __( 'If you would like to see more plugins to choose from, click on the “Add New Plugin” button and you will be able to browse or search for additional plugins from the WordPress Plugin Directory. Plugins in the WordPress Plugin Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they are free!' ), __( 'https://wordpress.org/plugins/' ) ) . '

    ', ) diff --git a/src/wp-admin/themes.php b/src/wp-admin/themes.php index 59d3689e69366..d7ebd5c646c42 100644 --- a/src/wp-admin/themes.php +++ b/src/wp-admin/themes.php @@ -153,7 +153,7 @@ } else { $help_install = '

    ' . sprintf( /* translators: %s: https://wordpress.org/themes/ */ - __( 'If you would like to see more themes to choose from, click on the “Add New Theme” button and you will be able to browse or search for additional themes from the WordPress Theme Directory. Themes in the WordPress Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!' ), + __( 'If you would like to see more themes to choose from, click on the “Add New Theme” button and you will be able to browse or search for additional themes from the WordPress Theme Directory. Themes in the WordPress Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they are free!' ), __( 'https://wordpress.org/themes/' ) ) . '

    '; } From faf75b7925b3dfcb7c711bd060fac8a3d2b9cdf2 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Sat, 10 Aug 2024 23:55:22 +0000 Subject: [PATCH 236/422] External Libraries: Update the Underscore.js library to version 1.13.7. This updates the Underscore library from version 1.13.6 to 1.13.7. This is a minor bug fix release. The full list of changes can be found in the Underscore.js change log: https://underscorejs.org/#changelog. Props hbhalodia, aristath, desrosj, mcrisp1972. Fixes #61836. git-svn-id: https://develop.svn.wordpress.org/trunk@58880 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 14 +++++++------- package.json | 2 +- src/wp-includes/script-loader.php | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index af97de8dc6244..f392e9064e327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,7 +97,7 @@ "react-dom": "18.3.1", "react-is": "18.3.1", "regenerator-runtime": "0.14.1", - "underscore": "1.13.6", + "underscore": "1.13.7", "whatwg-fetch": "3.6.20", "wicg-inert": "3.1.2" }, @@ -32728,9 +32728,9 @@ } }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "node_modules/underscore.string": { "version": "3.3.5", @@ -58688,9 +58688,9 @@ "dev": true }, "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "underscore.string": { "version": "3.3.5", diff --git a/package.json b/package.json index eedd555935c36..49d03a9ed3be8 100644 --- a/package.json +++ b/package.json @@ -166,7 +166,7 @@ "react-dom": "18.3.1", "react-is": "18.3.1", "regenerator-runtime": "0.14.1", - "underscore": "1.13.6", + "underscore": "1.13.7", "whatwg-fetch": "3.6.20", "wicg-inert": "3.1.2" }, diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 2852dc2431760..7c570430df441 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -1039,7 +1039,7 @@ function wp_default_scripts( $scripts ) { $scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", array(), '2015-05-03' ); did_action( 'init' ) && $scripts->add_data( 'json2', 'conditional', 'lt IE 8' ); - $scripts->add( 'underscore', "/wp-includes/js/underscore$dev_suffix.js", array(), '1.13.4', 1 ); + $scripts->add( 'underscore', "/wp-includes/js/underscore$dev_suffix.js", array(), '1.13.7', 1 ); $scripts->add( 'backbone', "/wp-includes/js/backbone$dev_suffix.js", array( 'underscore', 'jquery' ), '1.6.0', 1 ); $scripts->add( 'wp-util', "/wp-includes/js/wp-util$suffix.js", array( 'underscore', 'jquery' ), false, 1 ); From d80e18cc2d4fe6450ab6b023f2822b575ed5f5b5 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sun, 11 Aug 2024 09:43:14 +0000 Subject: [PATCH 237/422] Twenty Nineteen: Fixes translatable strings with HTML code not appearing. Only the translatable part not HTML, should appear for translators to avoid issues. This resolves one string that was not appearing. This only fixed for one theme although discussion on the ticket was for multiples. Other tickets should be open for those if desireable. Props Presskopp, SergeyBiryukov, pratikkry, pento, mukesh27, laurelfulford, kjellr, desrosj, sabernhardt. Fixes #45473. git-svn-id: https://develop.svn.wordpress.org/trunk@58881 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/single.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wp-content/themes/twentynineteen/single.php b/src/wp-content/themes/twentynineteen/single.php index 14a8ac5b54b8f..2760bc45b71ca 100644 --- a/src/wp-content/themes/twentynineteen/single.php +++ b/src/wp-content/themes/twentynineteen/single.php @@ -27,8 +27,7 @@ // Parent post navigation. the_post_navigation( array( - /* translators: %s: Parent post link. */ - 'prev_text' => sprintf( __( 'Published in%s', 'twentynineteen' ), '%title' ), + 'prev_text' => _x( 'Published in
    %title', 'Parent post link', 'twentynineteen' ), ) ); } elseif ( is_singular( 'post' ) ) { From 0cbfd5b22c11384c9f2970c61fe7dda5386d1c5e Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Sun, 11 Aug 2024 14:24:10 +0000 Subject: [PATCH 238/422] Twenty Twelve: Fixes Code block font family difference in editors. The Code block font family was different in the front-end and the editor. This resolves the overruling in the iframe editor. Props pitamdey, sabernhardt. Fixes #61808. git-svn-id: https://develop.svn.wordpress.org/trunk@58882 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwelve/css/editor-blocks.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/wp-content/themes/twentytwelve/css/editor-blocks.css b/src/wp-content/themes/twentytwelve/css/editor-blocks.css index 4a1049dae0f7e..85dd813bf2938 100644 --- a/src/wp-content/themes/twentytwelve/css/editor-blocks.css +++ b/src/wp-content/themes/twentytwelve/css/editor-blocks.css @@ -268,6 +268,7 @@ p.has-drop-cap:not(:focus)::first-letter { .wp-block-code { border: 0; + font-family: Consolas, Monaco, Lucida Console, monospace; font-size: 12px; line-height: 2; padding: 0; From 6cfec3b825adfb3c61a11093b1f76fa27a2e3a1f Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 11 Aug 2024 21:08:06 +0000 Subject: [PATCH 239/422] Docs: Switch canonical location for the `comment_row_actions` filter. This aims to bring consistency with the other `*_row_actions` filters. Follow-up to [6705], [8217], [9103], [15491], [26138], [27669]. See #61608. git-svn-id: https://develop.svn.wordpress.org/trunk@58883 602fd350-edb4-49c9-b593-d223f7449a82 --- .../includes/class-wp-comments-list-table.php | 11 ++++++++++- src/wp-admin/includes/dashboard.php | 12 +----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/wp-admin/includes/class-wp-comments-list-table.php b/src/wp-admin/includes/class-wp-comments-list-table.php index 6c45a4eb7c22b..9b46512c24092 100644 --- a/src/wp-admin/includes/class-wp-comments-list-table.php +++ b/src/wp-admin/includes/class-wp-comments-list-table.php @@ -847,7 +847,16 @@ protected function handle_row_actions( $item, $column_name, $primary ) { ); } - /** This filter is documented in wp-admin/includes/dashboard.php */ + /** + * Filters the action links displayed for each comment in the Comments list table. + * + * @since 2.6.0 + * + * @param string[] $actions An array of comment actions. Default actions include: + * 'Approve', 'Unapprove', 'Edit', 'Reply', 'Spam', + * 'Delete', and 'Trash'. + * @param WP_Comment $comment The comment object. + */ $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); $always_visible = false; diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 022a00174c8a0..84514015e22fd 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -800,17 +800,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { __( 'View' ) ); - /** - * Filters the action links displayed for each comment in the 'Recent Comments' - * dashboard widget. - * - * @since 2.6.0 - * - * @param string[] $actions An array of comment actions. Default actions include: - * 'Approve', 'Unapprove', 'Edit', 'Reply', 'Spam', - * 'Delete', and 'Trash'. - * @param WP_Comment $comment The comment object. - */ + /** This filter is documented in wp-admin/includes/class-wp-comments-list-table.php */ $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); $i = 0; From ac5fdb4660caa95d78867c6615de8e329e0e18f1 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Mon, 12 Aug 2024 04:52:55 +0000 Subject: [PATCH 240/422] Site Health: Check if directories exist before checking size. Prevents the Site Health Debug tab from stalling when reporting directory sizes if the directory does not exist. Props clorith, aristath, narenin, kowsar89, hellofromTonya, ironprogrammer, shailu25. Fixes #61638. git-svn-id: https://develop.svn.wordpress.org/trunk@58884 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-debug-data.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php index 1d4ab39aa8692..f626dc4c4aa61 100644 --- a/src/wp-admin/includes/class-wp-debug-data.php +++ b/src/wp-admin/includes/class-wp-debug-data.php @@ -1695,6 +1695,18 @@ public static function get_sizes() { 'raw' => 0, ); + // If the directory does not exist, skip checking it, as it will skew the other results. + if ( ! is_dir( $path ) ) { + $all_sizes[ $name ] = array( + 'path' => $path, + 'raw' => 0, + 'size' => __( 'The directory does not exist.' ), + 'debug' => 'directory not found', + ); + + continue; + } + if ( microtime( true ) - WP_START_TIMESTAMP < $max_execution_time ) { if ( 'wordpress_size' === $name ) { $dir_size = recurse_dirsize( $path, $exclude, $max_execution_time ); From ddc5d6aba43b85b072b442d99badb06d84373048 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 12 Aug 2024 10:54:43 +0000 Subject: [PATCH 241/422] Twenty Twelve: Fixes Button block outline style having wrong text color on front. The Button block has a different text color on the front to the editor when you apply text color. This resolves it without changing other styles. Props pitamdey, ugyensupport, sabernhardt. Fixes #61846. git-svn-id: https://develop.svn.wordpress.org/trunk@58885 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwelve/css/blocks.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wp-content/themes/twentytwelve/css/blocks.css b/src/wp-content/themes/twentytwelve/css/blocks.css index ca828eef4aaa2..9dfa0cd6d6f9b 100644 --- a/src/wp-content/themes/twentytwelve/css/blocks.css +++ b/src/wp-content/themes/twentytwelve/css/blocks.css @@ -263,6 +263,11 @@ pre.wp-block-code { color: #7c7c7c; } +.is-style-outline .wp-block-button__link, +.is-style-outline .wp-block-button__link:visited { + color: currentColor; +} + .wp-block-button.is-style-outline .wp-block-button__link, .wp-block-button.is-style-outline .wp-block-button__link:visited { background-color: inherit; From ac7045cedfa00e57516768551727967974c56090 Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 12 Aug 2024 13:42:09 +0000 Subject: [PATCH 242/422] Twenty Seventeen: Fixes Pullquote block text color not changing on front. The Pullquote block text color was not changing on the front. This overrides the inlined styles. Props iamjaydip, laurelfulford, sabernhardt. Fixes #46080. git-svn-id: https://develop.svn.wordpress.org/trunk@58886 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyseventeen/assets/css/editor-blocks.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css index 34a4749db7313..1a4902fbbd613 100644 --- a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css +++ b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css @@ -649,6 +649,10 @@ html[lang="th"] .edit-post-visual-editor * { border: 0 solid; } +figure.wp-block-pullquote blockquote { + color: inherit; +} + .wp-block-pullquote.alignleft blockquote > .editor-rich-text p, .wp-block-pullquote.alignright blockquote > .editor-rich-text p { font-size: 20px; From 802e069d05f83db905932eebd87c87a33b37164e Mon Sep 17 00:00:00 2001 From: Tammie Lister Date: Mon, 12 Aug 2024 15:17:27 +0000 Subject: [PATCH 243/422] Twenty Twelve: Fixes navigation block submenus being cut off. The navigation block submenus were being cut off. This is the simpler method proposed in patches. Props poena, sabernhardt. Fixes #61672. git-svn-id: https://develop.svn.wordpress.org/trunk@58887 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwelve/css/blocks.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wp-content/themes/twentytwelve/css/blocks.css b/src/wp-content/themes/twentytwelve/css/blocks.css index 9dfa0cd6d6f9b..ced4f827f8f40 100644 --- a/src/wp-content/themes/twentytwelve/css/blocks.css +++ b/src/wp-content/themes/twentytwelve/css/blocks.css @@ -340,6 +340,12 @@ pre.wp-block-code { margin-bottom: 0; } +/* Navigation */ + +.site-content .wp-block-navigation { + overflow: visible; +} + /*-------------------------------------------------------------- 5.0 Blocks - Widgets --------------------------------------------------------------*/ From 5f8f3789d16e28923772f1675e371baaea3e71ec Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 12 Aug 2024 21:26:27 +0000 Subject: [PATCH 244/422] Coding Standards: Bring some consistency to setting up comment moderation links. Follow-up to [7082], [7175], [9103], [10102], [11749], [12008], [12286], [32516]. Props kebbet. See #61607. git-svn-id: https://develop.svn.wordpress.org/trunk@58888 602fd350-edb4-49c9-b593-d223f7449a82 --- .../includes/class-wp-comments-list-table.php | 38 +++++++++---------- src/wp-admin/includes/dashboard.php | 26 +++++++------ 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/wp-admin/includes/class-wp-comments-list-table.php b/src/wp-admin/includes/class-wp-comments-list-table.php index 9b46512c24092..e7707daba901b 100644 --- a/src/wp-admin/includes/class-wp-comments-list-table.php +++ b/src/wp-admin/includes/class-wp-comments-list-table.php @@ -705,18 +705,18 @@ protected function handle_row_actions( $item, $column_name, $primary ) { $output = ''; - $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); - $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( 'approve-comment_' . $comment->comment_ID ) ); + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( 'delete-comment_' . $comment->comment_ID ) ); - $url = "comment.php?c=$comment->comment_ID"; + $action_string = 'comment.php?action=%s&c=' . $comment->comment_ID . '&%s'; - $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" ); - $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" ); - $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" ); - $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" ); - $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" ); - $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" ); - $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" ); + $approve_url = sprintf( $action_string, 'approvecomment', $approve_nonce ); + $unapprove_url = sprintf( $action_string, 'unapprovecomment', $approve_nonce ); + $spam_url = sprintf( $action_string, 'spamcomment', $del_nonce ); + $unspam_url = sprintf( $action_string, 'unspamcomment', $del_nonce ); + $trash_url = sprintf( $action_string, 'trashcomment', $del_nonce ); + $untrash_url = sprintf( $action_string, 'untrashcomment', $del_nonce ); + $delete_url = sprintf( $action_string, 'deletecomment', $del_nonce ); // Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash. $actions = array( @@ -737,7 +737,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { if ( 'approved' === $the_comment_status ) { $actions['unapprove'] = sprintf( '%s', - $unapprove_url, + esc_url( $unapprove_url ), "delete:the-comment-list:comment-{$comment->comment_ID}:e7e7d3:action=dim-comment&new=unapproved", esc_attr__( 'Unapprove this comment' ), __( 'Unapprove' ) @@ -745,7 +745,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { } elseif ( 'unapproved' === $the_comment_status ) { $actions['approve'] = sprintf( '%s', - $approve_url, + esc_url( $approve_url ), "delete:the-comment-list:comment-{$comment->comment_ID}:e7e7d3:action=dim-comment&new=approved", esc_attr__( 'Approve this comment' ), __( 'Approve' ) @@ -754,7 +754,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { } else { $actions['approve'] = sprintf( '%s', - $approve_url, + esc_url( $approve_url ), "dim:the-comment-list:comment-{$comment->comment_ID}:unapproved:e7e7d3:e7e7d3:new=approved", esc_attr__( 'Approve this comment' ), __( 'Approve' ) @@ -762,7 +762,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { $actions['unapprove'] = sprintf( '%s', - $unapprove_url, + esc_url( $unapprove_url ), "dim:the-comment-list:comment-{$comment->comment_ID}:unapproved:e7e7d3:e7e7d3:new=unapproved", esc_attr__( 'Unapprove this comment' ), __( 'Unapprove' ) @@ -772,7 +772,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { if ( 'spam' !== $the_comment_status ) { $actions['spam'] = sprintf( '%s', - $spam_url, + esc_url( $spam_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::spam=1", esc_attr__( 'Mark this comment as spam' ), /* translators: "Mark as spam" link. */ @@ -781,7 +781,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { } elseif ( 'spam' === $the_comment_status ) { $actions['unspam'] = sprintf( '%s', - $unspam_url, + esc_url( $unspam_url ), "delete:the-comment-list:comment-{$comment->comment_ID}:66cc66:unspam=1", esc_attr__( 'Restore this comment from the spam' ), _x( 'Not Spam', 'comment' ) @@ -791,7 +791,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { if ( 'trash' === $the_comment_status ) { $actions['untrash'] = sprintf( '%s', - $untrash_url, + esc_url( $untrash_url ), "delete:the-comment-list:comment-{$comment->comment_ID}:66cc66:untrash=1", esc_attr__( 'Restore this comment from the Trash' ), __( 'Restore' ) @@ -801,7 +801,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { if ( 'spam' === $the_comment_status || 'trash' === $the_comment_status || ! EMPTY_TRASH_DAYS ) { $actions['delete'] = sprintf( '%s', - $delete_url, + esc_url( $delete_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::delete=1", esc_attr__( 'Delete this comment permanently' ), __( 'Delete Permanently' ) @@ -809,7 +809,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { } else { $actions['trash'] = sprintf( '%s', - $trash_url, + esc_url( $trash_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::trash=1", esc_attr__( 'Move this comment to the Trash' ), _x( 'Trash', 'verb' ) diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 84514015e22fd..be1ac4224cb24 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -726,18 +726,20 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { 'view' => '', ); - $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); - $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( 'approve-comment_' . $comment->comment_ID ) ); + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( 'delete-comment_' . $comment->comment_ID ) ); - $approve_url = esc_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); - $unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); - $spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); - $trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); - $delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $action_string = 'comment.php?action=%s&p=' . $comment->comment_post_ID . '&c=' . $comment->comment_ID . '&%s'; + + $approve_url = sprintf( $action_string, 'approvecomment', $approve_nonce ); + $unapprove_url = sprintf( $action_string, 'unapprovecomment', $approve_nonce ); + $spam_url = sprintf( $action_string, 'spamcomment', $del_nonce ); + $trash_url = sprintf( $action_string, 'trashcomment', $del_nonce ); + $delete_url = sprintf( $action_string, 'deletecomment', $del_nonce ); $actions['approve'] = sprintf( '%s', - $approve_url, + esc_url( $approve_url ), "dim:the-comment-list:comment-{$comment->comment_ID}:unapproved:e7e7d3:e7e7d3:new=approved", esc_attr__( 'Approve this comment' ), __( 'Approve' ) @@ -745,7 +747,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { $actions['unapprove'] = sprintf( '%s', - $unapprove_url, + esc_url( $unapprove_url ), "dim:the-comment-list:comment-{$comment->comment_ID}:unapproved:e7e7d3:e7e7d3:new=unapproved", esc_attr__( 'Unapprove this comment' ), __( 'Unapprove' ) @@ -768,7 +770,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { $actions['spam'] = sprintf( '%s', - $spam_url, + esc_url( $spam_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::spam=1", esc_attr__( 'Mark this comment as spam' ), /* translators: "Mark as spam" link. */ @@ -778,7 +780,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { if ( ! EMPTY_TRASH_DAYS ) { $actions['delete'] = sprintf( '%s', - $delete_url, + esc_url( $delete_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::trash=1", esc_attr__( 'Delete this comment permanently' ), __( 'Delete Permanently' ) @@ -786,7 +788,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { } else { $actions['trash'] = sprintf( '%s', - $trash_url, + esc_url( $trash_url ), "delete:the-comment-list:comment-{$comment->comment_ID}::trash=1", esc_attr__( 'Move this comment to the Trash' ), _x( 'Trash', 'verb' ) From 3476790c2ed47c5d98347955b8e32f4dba708f5b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 13 Aug 2024 16:27:32 +0000 Subject: [PATCH 245/422] Coding Standards: Replace an empty `foreach` loop in `wp_replace_in_html_tags()`. This aims to clarify the intention of the code and improve readability. Follow-up to [33359]. Props jrf, TobiasBg, mi5t4n, dhruvang21, mayura8991, nadimcse, Presskopp, SergeyBiryukov. Fixes #61860. git-svn-id: https://develop.svn.wordpress.org/trunk@58889 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/formatting.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index d170728e015b5..e618536f41a20 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -762,8 +762,8 @@ function wp_replace_in_html_tags( $haystack, $replace_pairs ) { // Optimize when searching for one item. if ( 1 === count( $replace_pairs ) ) { // Extract $needle and $replace. - foreach ( $replace_pairs as $needle => $replace ) { - } + $needle = array_key_first( $replace_pairs ); + $replace = $replace_pairs[ $needle ]; // Loop through delimiters (elements) only. for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) { From fa417fc14a8b2e7504d09b4b45f91d956367ef1f Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Tue, 13 Aug 2024 17:43:18 +0000 Subject: [PATCH 246/422] Editor: Fix bumped specificity for layout styles in non-iframed editor. Fixes a regression introduced in [58241] which inadvertently bumped the specificity in a non-iframed editor for `.editor-styles-wrapper .is-layout-flow > *` from (0,1,0) to (0,2,0). This fix restores theme.json spacing rules taking precedence over the implicit spacing rules in a non-iframed editor. **The What** When the block editor is not iframed (which can happen when Custom Fields are active, or blocks that use and older `apiVersion` are present), style rules are processed using post css to append the `.editor-styles-wrapper` class name. This has the effect of scoping the the style rules to ensure they don't affect the editor chrome or admin. With [58241], one of the rules was changed to `.is-layout-flow > *`. In a iframed editor, the specificity of this rule is okay (0,1,0), but in a non-iframed editor it becomes `.editor-styles-wrapper .is-layout-flow > *`, a specificity of (0,2,0). Comparing this to before [58241], the same rule was `.editor-styles-wrapper :where(body .is-layout-flow) > *` (specificity 0,1,0). This is a regression in specificity that has caused some issues. Notably themes can no longer properly override the spacing for blocks using theme.json and have the results correctly shown in the non-iframed editor. **The How** This changeset modifies the selector to `:root :where(.is-layout-flow) > *` (still specificity 0,1,0). `transformStyles` handles 'root' selectors a little differently, it'll instead replace the `:root` part so it becomes `.editor-styles-wrapper where(.is-layout-flow) > *` (keeping the specificity at 0,1,0). The other layout selector that this affects is the `:first-child` `:last-child` selectors that are responsible for resetting margin at the start and end of a block list. They traditionally have a 0,2,0 specificity so that they can override both the above rule and any rules in the theme.json. Those selectors are also maintained at 0,2,0 with this change, they become something like `:root :where(.is-layout-flow) > :first-child`. **References:** * PHP changes from [https://github.com/WordPress/gutenberg/pull/64076 Gutenberg PR 64076]. Follow-up to [58241], [58228], [55956], [54162]. Props talldanwp, aaronrobertshaw, andrewserong, markhowellsmead, ramonopoly, hellofromTonya. Fixes #61829. git-svn-id: https://develop.svn.wordpress.org/trunk@58890 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json.php | 2 +- tests/phpunit/tests/theme/wpThemeJson.php | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 894ce25a1cf3a..f246a7ed7ad28 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -1692,7 +1692,7 @@ protected function get_layout_styles( $block_metadata, $types = array() ) { $spacing_rule['selector'] ); } else { - $format = static::ROOT_BLOCK_SELECTOR === $selector ? '.%2$s %3$s' : '%1$s-%2$s %3$s'; + $format = static::ROOT_BLOCK_SELECTOR === $selector ? ':root :where(.%2$s)%3$s' : ':root :where(%1$s-%2$s)%3$s'; $layout_selector = sprintf( $format, $selector, diff --git a/tests/phpunit/tests/theme/wpThemeJson.php b/tests/phpunit/tests/theme/wpThemeJson.php index 8ca4393f0daa2..59630868316b2 100644 --- a/tests/phpunit/tests/theme/wpThemeJson.php +++ b/tests/phpunit/tests/theme/wpThemeJson.php @@ -684,6 +684,7 @@ public function test_get_stylesheet_skips_disabled_protected_properties() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61829 */ public function test_get_stylesheet_renders_enabled_protected_properties() { $theme_json = new WP_Theme_JSON( @@ -702,7 +703,7 @@ public function test_get_stylesheet_renders_enabled_protected_properties() { ) ); - $expected = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1em; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1em; }.is-layout-flow > :first-child{margin-block-start: 0;}.is-layout-flow > :last-child{margin-block-end: 0;}.is-layout-flow > *{margin-block-start: 1em;margin-block-end: 0;}.is-layout-constrained > :first-child{margin-block-start: 0;}.is-layout-constrained > :last-child{margin-block-end: 0;}.is-layout-constrained > *{margin-block-start: 1em;margin-block-end: 0;}.is-layout-flex {gap: 1em;}.is-layout-grid {gap: 1em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}'; + $expected = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1em; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1em; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1em;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1em;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1em;}:root :where(.is-layout-grid){gap: 1em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}'; $this->assertSame( $expected, $theme_json->get_stylesheet() ); $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) ); } @@ -1077,6 +1078,7 @@ public function test_get_stylesheet_handles_priority_of_elements_vs_block_elemen * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61829 */ public function test_get_stylesheet_generates_layout_styles() { $theme_json = new WP_Theme_JSON( @@ -1102,7 +1104,7 @@ public function test_get_stylesheet_generates_layout_styles() { // Results also include root site blocks styles. $this->assertSame( - ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1em; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1em; }.is-layout-flow > :first-child{margin-block-start: 0;}.is-layout-flow > :last-child{margin-block-end: 0;}.is-layout-flow > *{margin-block-start: 1em;margin-block-end: 0;}.is-layout-constrained > :first-child{margin-block-start: 0;}.is-layout-constrained > :last-child{margin-block-end: 0;}.is-layout-constrained > *{margin-block-start: 1em;margin-block-end: 0;}.is-layout-flex {gap: 1em;}.is-layout-grid {gap: 1em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}', + ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1em; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1em; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1em;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1em;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1em;}:root :where(.is-layout-grid){gap: 1em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}', $theme_json->get_stylesheet( array( 'styles' ) ) ); } @@ -1113,6 +1115,7 @@ public function test_get_stylesheet_generates_layout_styles() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61829 */ public function test_get_stylesheet_generates_layout_styles_with_spacing_presets() { $theme_json = new WP_Theme_JSON( @@ -1138,7 +1141,7 @@ public function test_get_stylesheet_generates_layout_styles_with_spacing_presets // Results also include root site blocks styles. $this->assertSame( - ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: var(--wp--preset--spacing--60); margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: var(--wp--preset--spacing--60); }.is-layout-flow > :first-child{margin-block-start: 0;}.is-layout-flow > :last-child{margin-block-end: 0;}.is-layout-flow > *{margin-block-start: var(--wp--preset--spacing--60);margin-block-end: 0;}.is-layout-constrained > :first-child{margin-block-start: 0;}.is-layout-constrained > :last-child{margin-block-end: 0;}.is-layout-constrained > *{margin-block-start: var(--wp--preset--spacing--60);margin-block-end: 0;}.is-layout-flex {gap: var(--wp--preset--spacing--60);}.is-layout-grid {gap: var(--wp--preset--spacing--60);}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}', + ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: var(--wp--preset--spacing--60); margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: var(--wp--preset--spacing--60); }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--60);margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--60);margin-block-end: 0;}:root :where(.is-layout-flex){gap: var(--wp--preset--spacing--60);}:root :where(.is-layout-grid){gap: var(--wp--preset--spacing--60);}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}', $theme_json->get_stylesheet( array( 'styles' ) ) ); } @@ -1239,6 +1242,7 @@ public function test_get_stylesheet_skips_layout_styles() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61829 */ public function test_get_stylesheet_generates_valid_block_gap_values_and_skips_null_or_false_values() { $theme_json = new WP_Theme_JSON( @@ -1285,7 +1289,7 @@ public function test_get_stylesheet_generates_valid_block_gap_values_and_skips_n ); $this->assertSame( - ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1rem; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1rem; }.is-layout-flow > :first-child{margin-block-start: 0;}.is-layout-flow > :last-child{margin-block-end: 0;}.is-layout-flow > *{margin-block-start: 1rem;margin-block-end: 0;}.is-layout-constrained > :first-child{margin-block-start: 0;}.is-layout-constrained > :last-child{margin-block-end: 0;}.is-layout-constrained > *{margin-block-start: 1rem;margin-block-end: 0;}.is-layout-flex {gap: 1rem;}.is-layout-grid {gap: 1rem;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(.wp-block-post-content){color: gray;}.wp-block-social-links-is-layout-flow > :first-child{margin-block-start: 0;}.wp-block-social-links-is-layout-flow > :last-child{margin-block-end: 0;}.wp-block-social-links-is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-social-links-is-layout-constrained > :first-child{margin-block-start: 0;}.wp-block-social-links-is-layout-constrained > :last-child{margin-block-end: 0;}.wp-block-social-links-is-layout-constrained > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-social-links-is-layout-flex {gap: 0;}.wp-block-social-links-is-layout-grid {gap: 0;}.wp-block-buttons-is-layout-flow > :first-child{margin-block-start: 0;}.wp-block-buttons-is-layout-flow > :last-child{margin-block-end: 0;}.wp-block-buttons-is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-buttons-is-layout-constrained > :first-child{margin-block-start: 0;}.wp-block-buttons-is-layout-constrained > :last-child{margin-block-end: 0;}.wp-block-buttons-is-layout-constrained > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-buttons-is-layout-flex {gap: 0;}.wp-block-buttons-is-layout-grid {gap: 0;}', + ':root { --wp--style--global--content-size: 640px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1rem; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1rem; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1rem;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1rem;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1rem;}:root :where(.is-layout-grid){gap: 1rem;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:root :where(.wp-block-post-content){color: gray;}:root :where(.wp-block-social-links-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-social-links-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-flow) > *{margin-block-start: 0;margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-constrained) > *{margin-block-start: 0;margin-block-end: 0;}:root :where(.wp-block-social-links-is-layout-flex){gap: 0;}:root :where(.wp-block-social-links-is-layout-grid){gap: 0;}:root :where(.wp-block-buttons-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flow) > *{margin-block-start: 0;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > *{margin-block-start: 0;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flex){gap: 0;}:root :where(.wp-block-buttons-is-layout-grid){gap: 0;}', $theme_json->get_stylesheet() ); } @@ -3833,6 +3837,7 @@ public function test_get_styles_with_content_width() { * @ticket 58550 * @ticket 60936 * @ticket 61165 + * @ticket 61829 */ public function test_get_styles_with_appearance_tools() { $theme_json = new WP_Theme_JSON( @@ -3849,7 +3854,7 @@ public function test_get_styles_with_appearance_tools() { 'selector' => 'body', ); - $expected = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: ; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: ; }.is-layout-flow > :first-child{margin-block-start: 0;}.is-layout-flow > :last-child{margin-block-end: 0;}.is-layout-flow > *{margin-block-start: 1;margin-block-end: 0;}.is-layout-constrained > :first-child{margin-block-start: 0;}.is-layout-constrained > :last-child{margin-block-end: 0;}.is-layout-constrained > *{margin-block-start: 1;margin-block-end: 0;}.is-layout-flex {gap: 1;}.is-layout-grid {gap: 1;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}'; + $expected = ':where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: ; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: ; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1;}:root :where(.is-layout-grid){gap: 1;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}'; $this->assertSame( $expected, $theme_json->get_root_layout_rules( WP_Theme_JSON::ROOT_BLOCK_SELECTOR, $metadata ) ); } From 7bf49470297fb9b2e1c24c0e8bcbac18c7e6acaa Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 13 Aug 2024 21:42:07 +0000 Subject: [PATCH 247/422] HTML API: Remove unnecessary skips in tests for unsupported markup. The HTML API allowed tests to be skipped for unsupported HTML, for example tags that had not yet been implemented. This provided stability to the test suite while primary support was being added. In many places, the tags are now fully supported and the test skips can be removed. Developed in https://github.com/wordpress/wordpress-develop/pull/7186 Discussed in https://core.trac.wordpress.org/ticket/61646 Props jonsurrell. See #61646. git-svn-id: https://develop.svn.wordpress.org/trunk@58892 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/html-api/wpHtmlProcessor.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 0b7d72bdbee9a..ebc41aef9b5ef 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -155,10 +155,6 @@ public function test_cannot_nest_void_tags( $tag_name ) { $found_tag = $processor->next_tag(); - if ( WP_HTML_Processor::ERROR_UNSUPPORTED === $processor->get_last_error() ) { - $this->markTestSkipped( "Tag {$tag_name} is not supported." ); - } - $this->assertTrue( $found_tag, "Could not find first {$tag_name}." @@ -220,10 +216,6 @@ public function test_expects_closer_expects_no_closer_for_self_contained_tokens( $processor = WP_HTML_Processor::create_fragment( $self_contained_token ); $found_token = $processor->next_token(); - if ( WP_HTML_Processor::ERROR_UNSUPPORTED === $processor->get_last_error() ) { - $this->markTestSkipped( "HTML '{$self_contained_token}' is not supported." ); - } - $this->assertTrue( $found_token, "Failed to find any tokens in '{$self_contained_token}': check test data provider." @@ -305,10 +297,6 @@ public function test_cannot_nest_void_tags_next_token( $tag_name ) { $found_tag = $processor->next_token(); - if ( WP_HTML_Processor::ERROR_UNSUPPORTED === $processor->get_last_error() ) { - $this->markTestSkipped( "Tag {$tag_name} is not supported." ); - } - $this->assertTrue( $found_tag, "Could not find first {$tag_name}." From c20224beaec66dd302616391df1890eba2c697f6 Mon Sep 17 00:00:00 2001 From: dmsnell Date: Tue, 13 Aug 2024 22:12:01 +0000 Subject: [PATCH 248/422] HTML API: Only stop on full matches for requested tag name. An optimization pass on the HTML API left a bug in the `matches()` method, whereby it would falsely detect a tag name match if the found tag were a lexical subset of the requested tag. This occurred because of the use of `substr_compare()` without checking that the outer lengths matched. This patch resolves the bug by adding the length check. Developed in https://github.com/wordpress/wordpress-develop/pull/7189 Discussed in https://core.trac.wordpress.org/ticket/61545 Follow-up to [58613]. Props dmsnell, westonruter. See #61545. git-svn-id: https://develop.svn.wordpress.org/trunk@58893 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-tag-processor.php | 8 +++++- .../tests/html-api/wpHtmlTagProcessor.php | 25 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php index 95216b08a1988..11a0daa4b26f4 100644 --- a/src/wp-includes/html-api/class-wp-html-tag-processor.php +++ b/src/wp-includes/html-api/class-wp-html-tag-processor.php @@ -4009,7 +4009,13 @@ private function matches(): bool { } // Does the tag name match the requested tag name in a case-insensitive manner? - if ( isset( $this->sought_tag_name ) && 0 !== substr_compare( $this->html, $this->sought_tag_name, $this->tag_name_starts_at, $this->tag_name_length, true ) ) { + if ( + isset( $this->sought_tag_name ) && + ( + strlen( $this->sought_tag_name ) !== $this->tag_name_length || + 0 !== substr_compare( $this->html, $this->sought_tag_name, $this->tag_name_starts_at, $this->tag_name_length, true ) + ) + ) { return false; } diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php index b9c6817988032..908e286a8fb21 100644 --- a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php @@ -601,6 +601,31 @@ public function test_next_tag_should_return_false_for_a_non_existing_tag() { $this->assertFalse( $processor->next_tag( 'p' ), 'Querying a non-existing tag did not return false' ); } + /** + * @ticket 61545 + */ + public function test_next_tag_should_not_match_on_substrings_of_a_requested_tag() { + $processor = new WP_HTML_Tag_Processor( '

    ' ); + + $this->assertTrue( + $processor->next_tag( 'PICTURE' ), + 'Failed to find a tag when requested: check test setup.' + ); + + $this->assertSame( + 'PICTURE', + $processor->get_tag(), + 'Should have skipped past substring tag matches, directly finding the PICTURE element.' + ); + + $processor = new WP_HTML_Tag_Processor( '

    ' ); + + $this->assertFalse( + $processor->next_tag( 'PICTURE' ), + "Should not have found any PICTURE element, but found '{$processor->get_token_name()}' instead." + ); + } + /** * @ticket 59209 * From 2061a52da3d9d6d3994b0a60b2df07037d95e3d8 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Tue, 13 Aug 2024 23:35:51 +0000 Subject: [PATCH 249/422] Bulk/Quick Edit: Remove duplicate HTML IDs from post list tables. Removes duplicate IDs on the post list admin pages affecting various list items, selects and checkboxes: * JavaScript duplication of the inline editing HTML for bulk editing renames various IDs to include the prefix `bulk-edit-`, * IDs in the Category Checkbox Walker make use of `wp_unique_prefixed_id()` to avoid duplicates, resulting in a numeric suffix, and, * the post parent dropdown for the bulk editor is given a custom ID `bulk_edit_post_parent`. Props peterwilsoncc, sergeybiryukov, azaozz, joedolson, siliconforks, zodiac1978, rcreators. Fixes #61014. git-svn-id: https://develop.svn.wordpress.org/trunk@58894 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/admin/inline-edit-post.js | 10 +++++++++- src/wp-admin/css/list-tables.css | 2 +- .../includes/class-walker-category-checklist.php | 10 ++++++---- src/wp-admin/includes/class-wp-posts-list-table.php | 1 + 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/js/_enqueues/admin/inline-edit-post.js b/src/js/_enqueues/admin/inline-edit-post.js index 65cd342c284b2..9d6f66c3b0034 100644 --- a/src/js/_enqueues/admin/inline-edit-post.js +++ b/src/js/_enqueues/admin/inline-edit-post.js @@ -128,8 +128,16 @@ window.wp = window.wp || {}; inlineEditPost.edit( this ); }); + // Clone quick edit categories for the bulk editor. + var beCategories = $( '#inline-edit fieldset.inline-edit-categories' ).clone(); + + // Make "id" attributes globally unique. + beCategories.find( '*[id]' ).each( function() { + this.id = 'bulk-edit-' + this.id; + }); + $('#bulk-edit').find('fieldset:first').after( - $('#inline-edit fieldset.inline-edit-categories').clone() + beCategories ).siblings( 'fieldset:last' ).prepend( $( '#inline-edit .inline-edit-tags-wrap' ).clone() ); diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css index de36190b51e4c..e06793ea6b12b 100644 --- a/src/wp-admin/css/list-tables.css +++ b/src/wp-admin/css/list-tables.css @@ -1131,7 +1131,7 @@ tr.inline-edit-row td { width: 75%; } -.inline-edit-row #post_parent, +.inline-edit-row select[name="post_parent"], .inline-edit-row select[name="page_template"] { max-width: 80%; } diff --git a/src/wp-admin/includes/class-walker-category-checklist.php b/src/wp-admin/includes/class-walker-category-checklist.php index 1deb3f9206932..7960d06114c3a 100644 --- a/src/wp-admin/includes/class-walker-category-checklist.php +++ b/src/wp-admin/includes/class-walker-category-checklist.php @@ -107,11 +107,13 @@ public function start_el( &$output, $data_object, $depth = 0, $args = array(), $ /** This filter is documented in wp-includes/category-template.php */ esc_html( apply_filters( 'the_category', $category->name, '', '' ) ) . ''; } else { - $is_selected = in_array( $category->term_id, $args['selected_cats'], true ); - $is_disabled = ! empty( $args['disabled'] ); + $is_selected = in_array( $category->term_id, $args['selected_cats'], true ); + $is_disabled = ! empty( $args['disabled'] ); + $li_element_id = wp_unique_prefixed_id( "in-{$taxonomy}-{$category->term_id}-" ); + $checkbox_element_id = wp_unique_prefixed_id( "in-{$taxonomy}-{$category->term_id}-" ); - $output .= "\n

  • " . - '
  • ` implicitly closes any open `P` element. + * + * - In `QUIRKS_MODE`: + * - CSS class and ID selectors match match in an ASCII case-insensitive manner. + * - A TABLE start tag `
    ` opens a `TABLE` element as a child of a `P` + * element if one is open. + * + * Quirks and no-quirks mode are thus mostly about styling, but have an impact when + * tables are found inside paragraph elements. + * + * @see self::QUIRKS_MODE + * @see self::NO_QUIRKS_MODE + * + * @since 6.7.0 + * + * @var string + */ + protected $compat_mode = self::NO_QUIRKS_MODE; + /** * Indicates whether the parser is inside foreign content, * e.g. inside an SVG or MathML element. @@ -1155,6 +1181,8 @@ public function class_list() { $seen = array(); + $is_quirks = self::QUIRKS_MODE === $this->compat_mode; + $at = 0; while ( $at < strlen( $class ) ) { // Skip past any initial boundary characters. @@ -1169,13 +1197,11 @@ public function class_list() { return; } - /* - * CSS class names are case-insensitive in the ASCII range. - * - * @see https://www.w3.org/TR/CSS2/syndata.html#x1 - */ - $name = str_replace( "\x00", "\u{FFFD}", strtolower( substr( $class, $at, $length ) ) ); - $at += $length; + $name = str_replace( "\x00", "\u{FFFD}", substr( $class, $at, $length ) ); + if ( $is_quirks ) { + $name = strtolower( $name ); + } + $at += $length; /* * It's expected that the number of class names for a given tag is relatively small. @@ -1205,10 +1231,14 @@ public function has_class( $wanted_class ): ?bool { return null; } - $wanted_class = strtolower( $wanted_class ); + $case_insensitive = self::QUIRKS_MODE === $this->compat_mode; + $wanted_length = strlen( $wanted_class ); foreach ( $this->class_list() as $class_name ) { - if ( $class_name === $wanted_class ) { + if ( + strlen( $class_name ) === $wanted_length && + 0 === substr_compare( $class_name, $wanted_class, 0, strlen( $wanted_class ), $case_insensitive ) + ) { return true; } } @@ -2296,6 +2326,23 @@ private function class_name_updates_to_attributes_updates(): void { */ $modified = false; + $seen = array(); + $to_remove = array(); + $is_quirks = self::QUIRKS_MODE === $this->compat_mode; + if ( $is_quirks ) { + foreach ( $this->classname_updates as $updated_name => $action ) { + if ( self::REMOVE_CLASS === $action ) { + $to_remove[] = strtolower( $updated_name ); + } + } + } else { + foreach ( $this->classname_updates as $updated_name => $action ) { + if ( self::REMOVE_CLASS === $action ) { + $to_remove[] = $updated_name; + } + } + } + // Remove unwanted classes by only copying the new ones. $existing_class_length = strlen( $existing_class ); while ( $at < $existing_class_length ) { @@ -2311,25 +2358,23 @@ private function class_name_updates_to_attributes_updates(): void { break; } - $name = substr( $existing_class, $at, $name_length ); - $at += $name_length; - - // If this class is marked for removal, start processing the next one. - $remove_class = ( - isset( $this->classname_updates[ $name ] ) && - self::REMOVE_CLASS === $this->classname_updates[ $name ] - ); + $name = substr( $existing_class, $at, $name_length ); + $comparable_class_name = $is_quirks ? strtolower( $name ) : $name; + $at += $name_length; - // If a class has already been seen then skip it; it should not be added twice. - if ( ! $remove_class ) { - $this->classname_updates[ $name ] = self::SKIP_CLASS; + // If this class is marked for removal, remove it and move on to the next one. + if ( in_array( $comparable_class_name, $to_remove, true ) ) { + $modified = true; + continue; } - if ( $remove_class ) { - $modified = true; + // If a class has already been seen then skip it; it should not be added twice. + if ( in_array( $comparable_class_name, $seen, true ) ) { continue; } + $seen[] = $comparable_class_name; + /* * Otherwise, append it to the new "class" attribute value. * @@ -2350,7 +2395,8 @@ private function class_name_updates_to_attributes_updates(): void { // Add new classes by appending those which haven't already been seen. foreach ( $this->classname_updates as $name => $operation ) { - if ( self::ADD_CLASS === $operation ) { + $comparable_name = $is_quirks ? strtolower( $name ) : $name; + if ( self::ADD_CLASS === $operation && ! in_array( $comparable_name, $seen, true ) ) { $modified = true; $class .= strlen( $class ) > 0 ? ' ' : ''; @@ -3932,8 +3978,29 @@ public function add_class( $class_name ): bool { return false; } - $this->classname_updates[ $class_name ] = self::ADD_CLASS; + if ( self::QUIRKS_MODE !== $this->compat_mode ) { + $this->classname_updates[ $class_name ] = self::ADD_CLASS; + return true; + } + /* + * Because class names are matched ASCII-case-insensitively in quirks mode, + * this needs to see if a case variant of the given class name is already + * enqueued and update that existing entry, if so. This picks the casing of + * the first-provided class name for all lexical variations. + */ + $class_name_length = strlen( $class_name ); + foreach ( $this->classname_updates as $updated_name => $action ) { + if ( + strlen( $updated_name ) === $class_name_length && + 0 === substr_compare( $updated_name, $class_name, 0, $class_name_length, true ) + ) { + $this->classname_updates[ $updated_name ] = self::ADD_CLASS; + return true; + } + } + + $this->classname_updates[ $class_name ] = self::ADD_CLASS; return true; } @@ -3953,10 +4020,29 @@ public function remove_class( $class_name ): bool { return false; } - if ( null !== $this->tag_name_starts_at ) { + if ( self::QUIRKS_MODE !== $this->compat_mode ) { $this->classname_updates[ $class_name ] = self::REMOVE_CLASS; + return true; + } + + /* + * Because class names are matched ASCII-case-insensitively in quirks mode, + * this needs to see if a case variant of the given class name is already + * enqueued and update that existing entry, if so. This picks the casing of + * the first-provided class name for all lexical variations. + */ + $class_name_length = strlen( $class_name ); + foreach ( $this->classname_updates as $updated_name => $action ) { + if ( + strlen( $updated_name ) === $class_name_length && + 0 === substr_compare( $updated_name, $class_name, 0, $class_name_length, true ) + ) { + $this->classname_updates[ $updated_name ] = self::REMOVE_CLASS; + return true; + } } + $this->classname_updates[ $class_name ] = self::REMOVE_CLASS; return true; } @@ -4350,6 +4436,37 @@ public function get_doctype_info(): ?WP_HTML_Doctype_Info { */ const COMMENT_AS_INVALID_HTML = 'COMMENT_AS_INVALID_HTML'; + /** + * No-quirks mode document compatability mode. + * + * > In no-quirks mode, the behavior is (hopefully) the desired behavior + * > described by the modern HTML and CSS specifications. + * + * @see self::$compat_mode + * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode + * + * @since 6.7.0 + * + * @var string + */ + const NO_QUIRKS_MODE = 'no-quirks-mode'; + + /** + * Quirks mode document compatability mode. + * + * > In quirks mode, layout emulates behavior in Navigator 4 and Internet + * > Explorer 5. This is essential in order to support websites that were + * > built before the widespread adoption of web standards. + * + * @see self::$compat_mode + * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode + * + * @since 6.7.0 + * + * @var string + */ + const QUIRKS_MODE = 'quirks-mode'; + /** * Indicates that a span of text may contain any combination of significant * kinds of characters: NULL bytes, whitespace, and others. diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index ebc41aef9b5ef..e9b9063f77a7b 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -519,4 +519,155 @@ public function test_foreign_content_script_self_closing() { $processor = WP_HTML_Processor::create_fragment( '' ); $this->assertTrue( $processor->next_tag( 'script' ) ); } + + /** + * Ensures that the tag processor is case sensitive when removing CSS classes in no-quirks mode. + * + * @ticket 61531 + * + * @covers ::remove_class + */ + public function test_remove_class_no_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $processor->remove_class( 'upper' ); + $this->assertSame( '', $processor->get_updated_html() ); + + $processor->remove_class( 'UPPER' ); + $this->assertSame( '', $processor->get_updated_html() ); + } + + /** + * Ensures that the tag processor is case sensitive when adding CSS classes in no-quirks mode. + * + * @ticket 61531 + * + * @covers ::add_class + */ + public function test_add_class_no_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $processor->add_class( 'UPPER' ); + $this->assertSame( '', $processor->get_updated_html() ); + + $processor->add_class( 'upper' ); + $this->assertSame( '', $processor->get_updated_html() ); + } + + /** + * Ensures that the tag processor is case sensitive when checking has CSS classes in no-quirks mode. + * + * @ticket 61531 + * + * @covers ::has_class + */ + public function test_has_class_no_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $this->assertFalse( $processor->has_class( 'upper' ) ); + $this->assertTrue( $processor->has_class( 'UPPER' ) ); + } + + /** + * Ensures that the tag processor lists unique CSS class names in no-quirks mode. + * + * @ticket 61531 + * + * @covers ::class_list + */ + public function test_class_list_no_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( + /* + * U+00C9 is LATIN CAPITAL LETTER E WITH ACUTE + * U+0045 is LATIN CAPITAL LETTER E + * U+0301 is COMBINING ACUTE ACCENT + * + * This tests not only that the class matching deduplicates the É, but also + * that it treats the same character in different normalization forms as + * distinct, since matching occurs on a byte-for-byte basis. + */ + "" + ); + $processor->next_tag( 'SPAN' ); + $class_list = iterator_to_array( $processor->class_list() ); + $this->assertSame( + array( 'A', 'a', 'B', 'b', 'É', "E\u{0301}", 'é' ), + $class_list + ); + } + + /** + * Ensures that the tag processor is case insensitive when removing CSS classes in quirks mode. + * + * @ticket 61531 + * + * @covers ::remove_class + */ + public function test_remove_class_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $processor->remove_class( 'upPer' ); + $this->assertSame( '', $processor->get_updated_html() ); + } + + /** + * Ensures that the tag processor is case insensitive when adding CSS classes in quirks mode. + * + * @ticket 61531 + * + * @covers ::add_class + */ + public function test_add_class_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $processor->add_class( 'upper' ); + + $this->assertSame( '', $processor->get_updated_html() ); + + $processor->add_class( 'ANOTHER-UPPER' ); + $this->assertSame( '', $processor->get_updated_html() ); + } + + /** + * Ensures that the tag processor is case sensitive when checking has CSS classes in quirks mode. + * + * @ticket 61531 + * + * @covers ::has_class + */ + public function test_has_class_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( '' ); + $processor->next_tag( 'SPAN' ); + $this->assertTrue( $processor->has_class( 'upper' ) ); + $this->assertTrue( $processor->has_class( 'UPPER' ) ); + } + + /** + * Ensures that the tag processor lists unique CSS class names in quirks mode. + * + * @ticket 61531 + * + * @covers ::class_list + */ + public function test_class_list_quirks_mode() { + $processor = WP_HTML_Processor::create_full_parser( + /* + * U+00C9 is LATIN CAPITAL LETTER E WITH ACUTE + * U+0045 is LATIN CAPITAL LETTER E + * U+0065 is LATIN SMALL LETTER E + * U+0301 is COMBINING ACUTE ACCENT + * + * This tests not only that the class matching deduplicates the É, but also + * that it treats the same character in different normalization forms as + * distinct, since matching occurs on a byte-for-byte basis. + */ + "" + ); + $processor->next_tag( 'SPAN' ); + $class_list = iterator_to_array( $processor->class_list() ); + $this->assertSame( + array( 'a', 'b', 'É', "e\u{301}", 'é' ), + $class_list + ); + } } From 769f0170f87acc22dca0289a042ae55148c3a35a Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Wed, 4 Sep 2024 16:23:11 +0000 Subject: [PATCH 336/422] Editor: Update packages for 6.6.2 RC1. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the versions from the [https://github.com/WordPress/gutenberg/commit/a74a70ed203bbcbb5f3d34335df9631178647acb released packages] for the following bugfixes: * [https://github.com/WordPress/gutenberg/pull/63980 Global Styles: Fix block custom CSS pseudo element selectors] * [https://github.com/WordPress/gutenberg/pull/64463 Featured Image Block: Reduce CSS specificity] * [https://github.com/WordPress/gutenberg/pull/64076 Fix bumped specificity for layout styles in non-iframed editor] * [https://github.com/WordPress/gutenberg/pull/64379 Don't allow duplicating template parts in non-block-based themes] * [https://github.com/WordPress/gutenberg/pull/64250 Data Views: Don't render action modal when there are no eligible items] * [https://github.com/WordPress/gutenberg/pull/63724 Fix canvas issues by removing VisualEditor’s height] * [https://github.com/WordPress/gutenberg/pull/64992 Post Editor: fix click space after post content to append] * [https://github.com/WordPress/gutenberg/pull/63939 Post Editor: Prevent popover from being hidden by metabox] * [https://github.com/WordPress/gutenberg/pull/64639 Post editor: apply space below content using a pseudo-element instead of padding-bottom] * [https://github.com/WordPress/gutenberg/pull/64015 Avoid errors for post types without a 'menu_icon'] * [https://github.com/WordPress/gutenberg/pull/64458 Update postcss-prefixwrap dependency to 1.51.0 to fix prefixing in :where selectors] Props vcanales. Fixes #61982. See #61704, #61769, #61829. git-svn-id: https://develop.svn.wordpress.org/trunk@58988 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 414 +++++++++--------- package.json | 30 +- .../assets/script-loader-packages.min.php | 2 +- 3 files changed, 223 insertions(+), 223 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82abc3952a860..20175e84daeda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,31 +14,31 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.8", - "@wordpress/block-editor": "13.0.6", - "@wordpress/block-library": "9.0.7", + "@wordpress/block-directory": "5.0.9", + "@wordpress/block-editor": "13.0.7", + "@wordpress/block-library": "9.0.8", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.6", - "@wordpress/core-data": "7.0.6", - "@wordpress/customize-widgets": "5.0.7", + "@wordpress/core-commands": "1.0.7", + "@wordpress/core-data": "7.0.7", + "@wordpress/customize-widgets": "5.0.8", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.4", + "@wordpress/dataviews": "2.0.5", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.8", - "@wordpress/edit-site": "6.0.8", - "@wordpress/edit-widgets": "6.0.7", - "@wordpress/editor": "14.0.7", + "@wordpress/edit-post": "8.0.9", + "@wordpress/edit-site": "6.0.9", + "@wordpress/edit-widgets": "6.0.8", + "@wordpress/editor": "14.0.8", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.6", + "@wordpress/format-library": "5.0.7", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -53,7 +53,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.6", + "@wordpress/patterns": "2.0.7", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -61,7 +61,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.6", + "@wordpress/reusable-blocks": "5.0.7", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -73,7 +73,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.6", + "@wordpress/widgets": "4.0.7", "@wordpress/wordcount": "4.0.1", "backbone": "1.6.0", "clipboard": "2.0.11", @@ -6159,21 +6159,21 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.8.tgz", - "integrity": "sha512-rHU/X3OZrE/IBtA1ayRqfsqw72IYonb8jiVWYBod+NI2bMeOEyXJ3PP/o7N856YFDVEka8b3sBNcr+A15xGysw==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.9.tgz", + "integrity": "sha512-InIsawLBWZaZCIGb0UG9lXeHnL6JCgCbXpaTd/vi10jZBEZO5JwBTnMo73kpOUiAWjMpH5CPiGcqvjTmxamn0Q==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.8", - "@wordpress/editor": "^14.0.7", + "@wordpress/edit-post": "^8.0.9", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6195,9 +6195,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.6.tgz", - "integrity": "sha512-j1+wfHK5qIi/LBdUyaT1ipIGfkcBnLZBlFglaCliwTO7jOMH0+Kyc8vwKFW4waPZVesGt1+w+s1YZrtgkA+vdQ==", + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.7.tgz", + "integrity": "sha512-In+SsdGgzpvOiVVlLxwNbs8hp+vgsXzeLQNbxral7jwX0s3wU7RnVTqb2pgJ4X0FsKr+Lveh3g+oK6cq/rAqtg==", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6240,7 +6240,7 @@ "fast-deep-equal": "^3.1.3", "memize": "^2.1.0", "postcss": "^8.4.21", - "postcss-prefixwrap": "^1.41.0", + "postcss-prefixwrap": "^1.51.0", "postcss-urlrebase": "^1.0.0", "react-autosize-textarea": "^7.1.0", "react-easy-crop": "^5.0.6", @@ -6256,20 +6256,20 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.7.tgz", - "integrity": "sha512-n4ON/8AqcXdJmvW15d4cTYxxljgjPsUzWH7JvQreQdZDoOTnaDaF8rdil0gYa7YSaDCVMsniDxAItyUFxUbijg==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.8.tgz", + "integrity": "sha512-TvFLNaxrH1SFYnMPtPteMODb0SnCscCYcKIuQlK1GIAj98+rL4ShVtz6ghd1ptHsymBjuzqZ5NY7k4xHFkjBzg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6285,10 +6285,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -6490,15 +6490,15 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.6.tgz", - "integrity": "sha512-KkZ93Q79XlpxwL9tAsw/MSmrJ1T0Q9DFa48p2U4xcnZGrKh5p4vFAwJV3MOpZDbVXkoT/1msBNe6+FHmRdaREQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.7.tgz", + "integrity": "sha512-47x3Yg2hwr7DDuucf+mGSOM+1SLKz1Q37a+Tlwbc5hWrMbmIJ6T2HM776uEnv8UiELq5FvXJofN35zdB9CZD7A==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -6517,13 +6517,13 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.6.tgz", - "integrity": "sha512-hjLoLBmRFvueEK5HWQMVWQYL985zq5gPouWYvpSDpjTRUkRctThmilB8xrdX17Zjgs52xOX/DpLAvFbWGlCsYw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.7.tgz", + "integrity": "sha512-axqZhMG5EFJ27v5hDlrkLqWIliNRFp9OvIE3aJeUBIlkf4iMfunGP47CIaNH9HD5r/gqEXHKtbllF69Zp+MvXg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -6553,17 +6553,17 @@ } }, "node_modules/@wordpress/customize-widgets": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.7.tgz", - "integrity": "sha512-rGpa8ylei6tUN55QHLo79JcglySC263SDc+TPR8CXXwUiGG9h03ZgrMTo/Ho50KSp4WGhZELWccGAk4uPxh8Bw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.8.tgz", + "integrity": "sha512-GPN45Fgwy1s3Q9I3kxpdmgA/hbiERQKMYJqoEgL7Xj5wqUixruBK/LBp4wgoGY1OjcEKu8cZE8sU7nmxk0VJfQ==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -6577,7 +6577,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6638,9 +6638,9 @@ } }, "node_modules/@wordpress/dataviews": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.4.tgz", - "integrity": "sha512-4FpLyvmiO0su4Fx3cLctqTIE+Bp1HCC1fHRFZw5JJgvkNXuAKHJRdpFCo1O11ZMH3ibxpWVshXZcfu7Z7HBWlw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.5.tgz", + "integrity": "sha512-z6UPChjoCk4xmiOVoO1zpk67QXlpaI0p6L5EZnw7xWgtoPcfj+Aj58dN9KyUPUXM8PepU9YkfbHdFAjeU1Vmvw==", "dependencies": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -6819,25 +6819,25 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.8.tgz", - "integrity": "sha512-zB4k+1NbD1J9dhxq+c+Nqih+Zm6yOgMNs4TRNF6YYBOGSuAPxcNSA0qtfALC8PtI19MpUv0JCh3HckaJQs+fHQ==", + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.9.tgz", + "integrity": "sha512-aWFfSD8DggI4s1F0cnpPO88ELQ/UGRrAQo5zaCxdhKlezC7hGXJFzi1agGQo7ggFY3r590dy8JFKiOFMJpj9+w==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.6", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-commands": "^1.0.7", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.7", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -6852,7 +6852,7 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -6866,29 +6866,29 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.8.tgz", - "integrity": "sha512-HJZmmpV3UDPylfa0+3MNXNzfgWt+eGoYdmLG4z2JpNPEyOZ+w0yY3nx8oSsx85sHtT5bRT0drWsj0gqr4qZynw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.9.tgz", + "integrity": "sha512-8NmmJ4gI7peY+MG6kCv6J65EnMZLT9NDEdE8K1D3lesbbDywgwL/ImQu3Y8ISTxV/ZglNNsgS25vIVspVJNxvQ==", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.6", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-commands": "^1.0.7", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.4", + "@wordpress/dataviews": "^2.0.5", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.7", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -6898,18 +6898,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -6928,18 +6928,18 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.7.tgz", - "integrity": "sha512-KUas6yd7Lmt623F5lQNd/n2S9VWFfmtjckemlwlP7niXaU8XrdEhRFxDAY52W6Jk90KXVxLsG20qnx8nYah3NQ==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.8.tgz", + "integrity": "sha512-4mRA1qoobOW6WwtS5LQuS+G38AIJbTHOV7nHd2DjcbJpGIM4vfq39EBM02T6roOOfOnjCB5RLF5x0UATZpuqtw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -6952,13 +6952,13 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1" }, "engines": { @@ -6971,20 +6971,20 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.7.tgz", - "integrity": "sha512-Y3eHgVbf8h+T3Ssn1hLFpAGBwNxbP2ZeWQIwopIZ2V5d/qcHWzRW2Aoss3Wy1K+NHQJTkXJSsfrnC2zyd7dZBQ==", + "version": "14.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.8.tgz", + "integrity": "sha512-HOClxkTSqoVpWXfgnEMrX3A+K8ifuV2gSTadd6QA2Rhc6hLXQxcIgxVsAaG6impn8wHPx0IVdZyloEa0K0gw+g==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -6999,11 +6999,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -7119,13 +7119,13 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.6.tgz", - "integrity": "sha512-91LTfbjfgPqVnI8uuBEtA6ZBzJCmFyUJn1amGcvlpK9gX1BRvCZmmbOwTfAs4Wce7NIJswUr//5I765pz7P8Tg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.7.tgz", + "integrity": "sha512-4clVNQ5YxAjhp9pBcILYyjeoZGWBDuXXOqSfpSClptaH3bTqLjesSpGUf6NABu/RDwll66ce6VxiHPAcl3jrOw==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -7430,17 +7430,17 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.6.tgz", - "integrity": "sha512-b1ne2lxq4sdl4/HvIFIVcbnGfDL5BWpo3x+uf22N/bMXVxSNBWlGlI9TDtISnkHzpXFlrjcPiAmCBz//hEJa/g==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.7.tgz", + "integrity": "sha512-LpropyY8VgCVu3cFdPjhG+1UhyxQfUgo+lIH3cX4VJFQzCzFJNy1cPUauB2uRCHSrtJ/Uwbz3pjynC/X7sYZCg==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -7609,15 +7609,15 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.6.tgz", - "integrity": "sha512-a/ZeUFGkAr7Ki/a0pQ0SsSODrY3q1ff+qe2E2+I0ORk5FSX71yli56bmlqbsFr/KCTRcITtYRsev4oalL6QzDg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.7.tgz", + "integrity": "sha512-hO90gkSOySAer2I9uIp+NeRuGg2nkOVyTaSQ2KIOQCVRg3jxZGYqrtNyi/acxNHL6AMpeSij5ew52+PW9eZ4ng==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -8918,17 +8918,17 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.6.tgz", - "integrity": "sha512-PPhSX9NuQKpBVdF+bw2Ai134fOBACinUjksN49PWdSbBpTH5uCr5QEOisMsRsKuqr8k6hphMNnKuRxq0qfulBw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.7.tgz", + "integrity": "sha512-GeSVSw5xbhnihTd+fDODxNIGMBDNStH3vQfx6+mLFF0UEg5s8DXmEvJaEYXEnJ0mM4fQ0o4mNAzCIXRn222iww==", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -27478,9 +27478,9 @@ } }, "node_modules/postcss-prefixwrap": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.44.0.tgz", - "integrity": "sha512-h9MJGaIvT5hnzFc7Vuo+2ulBw6ecmmfcd8SKKH2TziUzcIA04gUoXIbptuM+tR+htmsQIKNEluiQlmCQ2p5a2g==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.51.0.tgz", + "integrity": "sha512-PuP4md5zFSY921dUcLShwSLv2YyyDec0dK9/puXl/lu7ZNvJ1U59+ZEFRMS67xwfNg5nIIlPXnAycPJlhA/Isw==", "peerDependencies": { "postcss": "*" } @@ -38783,21 +38783,21 @@ } }, "@wordpress/block-directory": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.8.tgz", - "integrity": "sha512-rHU/X3OZrE/IBtA1ayRqfsqw72IYonb8jiVWYBod+NI2bMeOEyXJ3PP/o7N856YFDVEka8b3sBNcr+A15xGysw==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.0.9.tgz", + "integrity": "sha512-InIsawLBWZaZCIGb0UG9lXeHnL6JCgCbXpaTd/vi10jZBEZO5JwBTnMo73kpOUiAWjMpH5CPiGcqvjTmxamn0Q==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", - "@wordpress/edit-post": "^8.0.8", - "@wordpress/editor": "^14.0.7", + "@wordpress/edit-post": "^8.0.9", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -38811,9 +38811,9 @@ } }, "@wordpress/block-editor": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.6.tgz", - "integrity": "sha512-j1+wfHK5qIi/LBdUyaT1ipIGfkcBnLZBlFglaCliwTO7jOMH0+Kyc8vwKFW4waPZVesGt1+w+s1YZrtgkA+vdQ==", + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-13.0.7.tgz", + "integrity": "sha512-In+SsdGgzpvOiVVlLxwNbs8hp+vgsXzeLQNbxral7jwX0s3wU7RnVTqb2pgJ4X0FsKr+Lveh3g+oK6cq/rAqtg==", "requires": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -38856,7 +38856,7 @@ "fast-deep-equal": "^3.1.3", "memize": "^2.1.0", "postcss": "^8.4.21", - "postcss-prefixwrap": "^1.41.0", + "postcss-prefixwrap": "^1.51.0", "postcss-urlrebase": "^1.0.0", "react-autosize-textarea": "^7.1.0", "react-easy-crop": "^5.0.6", @@ -38864,20 +38864,20 @@ } }, "@wordpress/block-library": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.7.tgz", - "integrity": "sha512-n4ON/8AqcXdJmvW15d4cTYxxljgjPsUzWH7JvQreQdZDoOTnaDaF8rdil0gYa7YSaDCVMsniDxAItyUFxUbijg==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.0.8.tgz", + "integrity": "sha512-TvFLNaxrH1SFYnMPtPteMODb0SnCscCYcKIuQlK1GIAj98+rL4ShVtz6ghd1ptHsymBjuzqZ5NY7k4xHFkjBzg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/autop": "^4.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -38893,10 +38893,10 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/primitives": "^4.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39052,15 +39052,15 @@ } }, "@wordpress/core-commands": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.6.tgz", - "integrity": "sha512-KkZ93Q79XlpxwL9tAsw/MSmrJ1T0Q9DFa48p2U4xcnZGrKh5p4vFAwJV3MOpZDbVXkoT/1msBNe6+FHmRdaREQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.0.7.tgz", + "integrity": "sha512-47x3Yg2hwr7DDuucf+mGSOM+1SLKz1Q37a+Tlwbc5hWrMbmIJ6T2HM776uEnv8UiELq5FvXJofN35zdB9CZD7A==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/commands": "^1.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -39071,13 +39071,13 @@ } }, "@wordpress/core-data": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.6.tgz", - "integrity": "sha512-hjLoLBmRFvueEK5HWQMVWQYL985zq5gPouWYvpSDpjTRUkRctThmilB8xrdX17Zjgs52xOX/DpLAvFbWGlCsYw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.0.7.tgz", + "integrity": "sha512-axqZhMG5EFJ27v5hDlrkLqWIliNRFp9OvIE3aJeUBIlkf4iMfunGP47CIaNH9HD5r/gqEXHKtbllF69Zp+MvXg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39099,17 +39099,17 @@ } }, "@wordpress/customize-widgets": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.7.tgz", - "integrity": "sha512-rGpa8ylei6tUN55QHLo79JcglySC263SDc+TPR8CXXwUiGG9h03ZgrMTo/Ho50KSp4WGhZELWccGAk4uPxh8Bw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.0.8.tgz", + "integrity": "sha512-GPN45Fgwy1s3Q9I3kxpdmgA/hbiERQKMYJqoEgL7Xj5wqUixruBK/LBp4wgoGY1OjcEKu8cZE8sU7nmxk0VJfQ==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/dom": "^4.0.1", "@wordpress/element": "^6.0.1", @@ -39123,7 +39123,7 @@ "@wordpress/media-utils": "^5.0.1", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" } @@ -39162,9 +39162,9 @@ } }, "@wordpress/dataviews": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.4.tgz", - "integrity": "sha512-4FpLyvmiO0su4Fx3cLctqTIE+Bp1HCC1fHRFZw5JJgvkNXuAKHJRdpFCo1O11ZMH3ibxpWVshXZcfu7Z7HBWlw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-2.0.5.tgz", + "integrity": "sha512-z6UPChjoCk4xmiOVoO1zpk67QXlpaI0p6L5EZnw7xWgtoPcfj+Aj58dN9KyUPUXM8PepU9YkfbHdFAjeU1Vmvw==", "requires": { "@ariakit/react": "^0.3.12", "@babel/runtime": "^7.16.0", @@ -39290,25 +39290,25 @@ } }, "@wordpress/edit-post": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.8.tgz", - "integrity": "sha512-zB4k+1NbD1J9dhxq+c+Nqih+Zm6yOgMNs4TRNF6YYBOGSuAPxcNSA0qtfALC8PtI19MpUv0JCh3HckaJQs+fHQ==", + "version": "8.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.0.9.tgz", + "integrity": "sha512-aWFfSD8DggI4s1F0cnpPO88ELQ/UGRrAQo5zaCxdhKlezC7hGXJFzi1agGQo7ggFY3r590dy8JFKiOFMJpj9+w==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.6", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-commands": "^1.0.7", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.7", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/hooks": "^4.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39323,35 +39323,35 @@ "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", "@wordpress/warning": "^3.0.1", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1", "memize": "^2.1.0" } }, "@wordpress/edit-site": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.8.tgz", - "integrity": "sha512-HJZmmpV3UDPylfa0+3MNXNzfgWt+eGoYdmLG4z2JpNPEyOZ+w0yY3nx8oSsx85sHtT5bRT0drWsj0gqr4qZynw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.0.9.tgz", + "integrity": "sha512-8NmmJ4gI7peY+MG6kCv6J65EnMZLT9NDEdE8K1D3lesbbDywgwL/ImQu3Y8ISTxV/ZglNNsgS25vIVspVJNxvQ==", "requires": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-commands": "^1.0.6", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-commands": "^1.0.7", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", - "@wordpress/dataviews": "^2.0.4", + "@wordpress/dataviews": "^2.0.5", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", - "@wordpress/editor": "^14.0.7", + "@wordpress/editor": "^14.0.8", "@wordpress/element": "^6.0.1", "@wordpress/escape-html": "^3.0.1", "@wordpress/hooks": "^4.0.1", @@ -39361,18 +39361,18 @@ "@wordpress/keyboard-shortcuts": "^5.0.2", "@wordpress/keycodes": "^4.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/primitives": "^4.0.1", "@wordpress/priority-queue": "^3.0.1", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/router": "^1.0.2", "@wordpress/style-engine": "^2.0.2", "@wordpress/url": "^4.0.1", "@wordpress/viewport": "^6.0.2", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "@wordpress/wordcount": "^4.0.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -39383,18 +39383,18 @@ } }, "@wordpress/edit-widgets": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.7.tgz", - "integrity": "sha512-KUas6yd7Lmt623F5lQNd/n2S9VWFfmtjckemlwlP7niXaU8XrdEhRFxDAY52W6Jk90KXVxLsG20qnx8nYah3NQ==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.0.8.tgz", + "integrity": "sha512-4mRA1qoobOW6WwtS5LQuS+G38AIJbTHOV7nHd2DjcbJpGIM4vfq39EBM02T6roOOfOnjCB5RLF5x0UATZpuqtw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", - "@wordpress/block-library": "^9.0.7", + "@wordpress/block-editor": "^13.0.7", + "@wordpress/block-library": "^9.0.8", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/deprecated": "^4.0.1", "@wordpress/dom": "^4.0.1", @@ -39407,31 +39407,31 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/url": "^4.0.1", - "@wordpress/widgets": "^4.0.6", + "@wordpress/widgets": "^4.0.7", "clsx": "^2.1.1" } }, "@wordpress/editor": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.7.tgz", - "integrity": "sha512-Y3eHgVbf8h+T3Ssn1hLFpAGBwNxbP2ZeWQIwopIZ2V5d/qcHWzRW2Aoss3Wy1K+NHQJTkXJSsfrnC2zyd7dZBQ==", + "version": "14.0.8", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.0.8.tgz", + "integrity": "sha512-HOClxkTSqoVpWXfgnEMrX3A+K8ifuV2gSTadd6QA2Rhc6hLXQxcIgxVsAaG6impn8wHPx0IVdZyloEa0K0gw+g==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", "@wordpress/api-fetch": "^7.0.1", "@wordpress/blob": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/commands": "^1.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/date": "^5.0.1", "@wordpress/deprecated": "^4.0.1", @@ -39446,11 +39446,11 @@ "@wordpress/keycodes": "^4.0.1", "@wordpress/media-utils": "^5.0.1", "@wordpress/notices": "^5.0.2", - "@wordpress/patterns": "^2.0.6", + "@wordpress/patterns": "^2.0.7", "@wordpress/plugins": "^7.0.3", "@wordpress/preferences": "^4.0.3", "@wordpress/private-apis": "^1.0.2", - "@wordpress/reusable-blocks": "^5.0.6", + "@wordpress/reusable-blocks": "^5.0.7", "@wordpress/rich-text": "^7.0.2", "@wordpress/server-side-render": "^5.0.3", "@wordpress/url": "^4.0.1", @@ -39528,13 +39528,13 @@ } }, "@wordpress/format-library": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.6.tgz", - "integrity": "sha512-91LTfbjfgPqVnI8uuBEtA6ZBzJCmFyUJn1amGcvlpK9gX1BRvCZmmbOwTfAs4Wce7NIJswUr//5I765pz7P8Tg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.0.7.tgz", + "integrity": "sha512-4clVNQ5YxAjhp9pBcILYyjeoZGWBDuXXOqSfpSClptaH3bTqLjesSpGUf6NABu/RDwll66ce6VxiHPAcl3jrOw==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", "@wordpress/data": "^10.0.2", @@ -39732,17 +39732,17 @@ } }, "@wordpress/patterns": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.6.tgz", - "integrity": "sha512-b1ne2lxq4sdl4/HvIFIVcbnGfDL5BWpo3x+uf22N/bMXVxSNBWlGlI9TDtISnkHzpXFlrjcPiAmCBz//hEJa/g==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.0.7.tgz", + "integrity": "sha512-LpropyY8VgCVu3cFdPjhG+1UhyxQfUgo+lIH3cX4VJFQzCzFJNy1cPUauB2uRCHSrtJ/Uwbz3pjynC/X7sYZCg==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/html-entities": "^4.0.1", @@ -39850,15 +39850,15 @@ } }, "@wordpress/reusable-blocks": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.6.tgz", - "integrity": "sha512-a/ZeUFGkAr7Ki/a0pQ0SsSODrY3q1ff+qe2E2+I0ORk5FSX71yli56bmlqbsFr/KCTRcITtYRsev4oalL6QzDg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.0.7.tgz", + "integrity": "sha512-hO90gkSOySAer2I9uIp+NeRuGg2nkOVyTaSQ2KIOQCVRg3jxZGYqrtNyi/acxNHL6AMpeSij5ew52+PW9eZ4ng==", "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -40722,17 +40722,17 @@ "integrity": "sha512-xSVH/zMAg4ABeNOWo6mlkF+TDBDQNaWVdMNzi+yvGoSDImhaM6Bqrhr1e/65AS29iajnqQt6dlu7E56o5FZlcg==" }, "@wordpress/widgets": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.6.tgz", - "integrity": "sha512-PPhSX9NuQKpBVdF+bw2Ai134fOBACinUjksN49PWdSbBpTH5uCr5QEOisMsRsKuqr8k6hphMNnKuRxq0qfulBw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.0.7.tgz", + "integrity": "sha512-GeSVSw5xbhnihTd+fDODxNIGMBDNStH3vQfx6+mLFF0UEg5s8DXmEvJaEYXEnJ0mM4fQ0o4mNAzCIXRn222iww==", "requires": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.0.1", - "@wordpress/block-editor": "^13.0.6", + "@wordpress/block-editor": "^13.0.7", "@wordpress/blocks": "^13.0.3", "@wordpress/components": "^28.0.3", "@wordpress/compose": "^7.0.1", - "@wordpress/core-data": "^7.0.6", + "@wordpress/core-data": "^7.0.7", "@wordpress/data": "^10.0.2", "@wordpress/element": "^6.0.1", "@wordpress/i18n": "^5.0.1", @@ -54716,9 +54716,9 @@ } }, "postcss-prefixwrap": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.44.0.tgz", - "integrity": "sha512-h9MJGaIvT5hnzFc7Vuo+2ulBw6ecmmfcd8SKKH2TziUzcIA04gUoXIbptuM+tR+htmsQIKNEluiQlmCQ2p5a2g==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.51.0.tgz", + "integrity": "sha512-PuP4md5zFSY921dUcLShwSLv2YyyDec0dK9/puXl/lu7ZNvJ1U59+ZEFRMS67xwfNg5nIIlPXnAycPJlhA/Isw==" }, "postcss-reduce-initial": { "version": "7.0.1", diff --git a/package.json b/package.json index a5a4dc945903c..f2f243a089a57 100644 --- a/package.json +++ b/package.json @@ -83,31 +83,31 @@ "@wordpress/api-fetch": "7.0.1", "@wordpress/autop": "4.0.1", "@wordpress/blob": "4.0.1", - "@wordpress/block-directory": "5.0.8", - "@wordpress/block-editor": "13.0.6", - "@wordpress/block-library": "9.0.7", + "@wordpress/block-directory": "5.0.9", + "@wordpress/block-editor": "13.0.7", + "@wordpress/block-library": "9.0.8", "@wordpress/block-serialization-default-parser": "5.0.1", "@wordpress/blocks": "13.0.3", "@wordpress/commands": "1.0.3", "@wordpress/components": "28.0.3", "@wordpress/compose": "7.0.1", - "@wordpress/core-commands": "1.0.6", - "@wordpress/core-data": "7.0.6", - "@wordpress/customize-widgets": "5.0.7", + "@wordpress/core-commands": "1.0.7", + "@wordpress/core-data": "7.0.7", + "@wordpress/customize-widgets": "5.0.8", "@wordpress/data": "10.0.2", "@wordpress/data-controls": "4.0.2", - "@wordpress/dataviews": "2.0.4", + "@wordpress/dataviews": "2.0.5", "@wordpress/date": "5.0.1", "@wordpress/deprecated": "4.0.1", "@wordpress/dom": "4.0.1", "@wordpress/dom-ready": "4.0.1", - "@wordpress/edit-post": "8.0.8", - "@wordpress/edit-site": "6.0.8", - "@wordpress/edit-widgets": "6.0.7", - "@wordpress/editor": "14.0.7", + "@wordpress/edit-post": "8.0.9", + "@wordpress/edit-site": "6.0.9", + "@wordpress/edit-widgets": "6.0.8", + "@wordpress/editor": "14.0.8", "@wordpress/element": "6.0.1", "@wordpress/escape-html": "3.0.1", - "@wordpress/format-library": "5.0.6", + "@wordpress/format-library": "5.0.7", "@wordpress/hooks": "4.0.1", "@wordpress/html-entities": "4.0.1", "@wordpress/i18n": "5.0.1", @@ -122,7 +122,7 @@ "@wordpress/media-utils": "5.0.1", "@wordpress/notices": "5.0.2", "@wordpress/nux": "9.0.3", - "@wordpress/patterns": "2.0.6", + "@wordpress/patterns": "2.0.7", "@wordpress/plugins": "7.0.3", "@wordpress/preferences": "4.0.3", "@wordpress/preferences-persistence": "2.0.1", @@ -130,7 +130,7 @@ "@wordpress/priority-queue": "3.0.1", "@wordpress/private-apis": "1.0.2", "@wordpress/redux-routine": "5.0.1", - "@wordpress/reusable-blocks": "5.0.6", + "@wordpress/reusable-blocks": "5.0.7", "@wordpress/rich-text": "7.0.2", "@wordpress/router": "1.0.2", "@wordpress/server-side-render": "5.0.3", @@ -142,7 +142,7 @@ "@wordpress/url": "4.0.1", "@wordpress/viewport": "6.0.2", "@wordpress/warning": "3.0.1", - "@wordpress/widgets": "4.0.6", + "@wordpress/widgets": "4.0.7", "@wordpress/wordcount": "4.0.1", "backbone": "1.6.0", "clipboard": "2.0.11", diff --git a/src/wp-includes/assets/script-loader-packages.min.php b/src/wp-includes/assets/script-loader-packages.min.php index c39418af7632e..5749a44088e68 100644 --- a/src/wp-includes/assets/script-loader-packages.min.php +++ b/src/wp-includes/assets/script-loader-packages.min.php @@ -1 +1 @@ - array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => 'f989eae66982c6c90d6e'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'c81574a3c95e631df2a9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '07feee0ca98b13ab617d'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'bf7b57a061aad9bf9020'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => '908b9738a38cdf931130'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '8607251058f984a77c8f'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '74acf014a3907af88267'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); + array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => 'd90eebea464f6c09bfd5'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '4c185334c5ec26e149cc'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array(), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '286a70e45f3a8522a72a'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '7ab6a9fdca1a0386ea66'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-wordcount'), 'version' => '96b614e020e4ab48838d'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode'), 'version' => '0d232d232463200f5cfd'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '73d702f6367f60b06d89'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '36b97398bf090476214e'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'b8d54449305350b51869'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'c81574a3c95e631df2a9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '07feee0ca98b13ab617d'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '9b7db92a95af0a39ae98'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '7c62e39de0308c73d50c'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => 'aaca6387d1cf924acc51'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '4ecffbffba91b10c5c7a'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => '914d3a541465a53adb05'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-widgets'), 'version' => 'ad45ba993152443a36b9'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '974884730aac247c3a3e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '9b9729953f3754e74846'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'cb762d190aebbec25b27'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'e3618e6d17a1146f03e4'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '2810c76e705dd1a53b18'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => '0eaedbf902a3af0eee37'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n'), 'version' => '1cf582d3c080c8694c8c'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b8f02a77b1489668fb50'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '74acf014a3907af88267'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => 'ef6da4a9b2747b62c09c'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'e7b06b8f8bdd714600e9'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '17a2e640b653d742da6e'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => 'a0a172871afaeb261566'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '5c420cb83017d586169a'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '4021b9e4e9ef4d3cd868'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element', 'wp-private-apis', 'wp-url'), 'version' => 'e4887fecc16ef03e908f'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '1e0f25c205ebeb30bcd2'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '86ba6721a03e5b921dfe'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '05f8a6df6258f0081718'), 'undo-manager.min.js' => array('dependencies' => array('wp-is-shallow-equal'), 'version' => 'f0698003cb0f0a7bd794'), 'url.min.js' => array('dependencies' => array(), 'version' => '36ae0e4dd9043bb8749b'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives'), 'version' => '53f9d5d5df6f21e39834'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec')); From b73edfb4afa12e8506d4c9e6696c66117fa70de9 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Wed, 4 Sep 2024 19:23:48 +0000 Subject: [PATCH 337/422] HTML API: Only examine HTML nodes in `pop_until()` instack of open elements. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `pop_until( $tag_name )` method in the stack of open elements should only be examining HTML elements, but it has only been checking the tag name. This has led to closing the wrong tags when run from inside foreign content. A very specific situation where this may arise is when a `TEMPLATE` closer is found inside foreign content, inside another template. {{{ HTML:template SVG:template HTML:/template
    ╰──< this outer TEMPLATE is closed by this one >───╯ }}} This patch constains the method to checking for elements matching the tag name which are in the HTML namespace so that the proper detection occurs. Developed in https://github.com/WordPress/wordpress-develop/pull/7286 Discussed in https://core.trac.wordpress.org/ticket/61576 Follow-up to [58867]. Props dmsnell, jonsurrell. See #61576. git-svn-id: https://develop.svn.wordpress.org/trunk@58992 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-open-elements.php | 18 +++++++------- .../html-api/class-wp-html-processor.php | 9 +++++++ .../tests/html-api/wpHtmlProcessor.php | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-open-elements.php b/src/wp-includes/html-api/class-wp-html-open-elements.php index 5ce1f8feb552c..cb913853f0ee9 100644 --- a/src/wp-includes/html-api/class-wp-html-open-elements.php +++ b/src/wp-includes/html-api/class-wp-html-open-elements.php @@ -530,31 +530,31 @@ public function pop(): bool { } /** - * Pops nodes off of the stack of open elements until one with the given tag name has been popped. + * Pops nodes off of the stack of open elements until an HTML tag with the given name has been popped. * * @since 6.4.0 * * @see WP_HTML_Open_Elements::pop * - * @param string $tag_name Name of tag that needs to be popped off of the stack of open elements. + * @param string $html_tag_name Name of tag that needs to be popped off of the stack of open elements. * @return bool Whether a tag of the given name was found and popped off of the stack of open elements. */ - public function pop_until( string $tag_name ): bool { + public function pop_until( string $html_tag_name ): bool { foreach ( $this->walk_up() as $item ) { - if ( 'context-node' === $item->bookmark_name ) { - return true; - } - $this->pop(); + if ( 'html' !== $item->namespace ) { + continue; + } + if ( - '(internal: H1 through H6 - do not use)' === $tag_name && + '(internal: H1 through H6 - do not use)' === $html_tag_name && in_array( $item->node_name, array( 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ), true ) ) { return true; } - if ( $tag_name === $item->node_name ) { + if ( $html_tag_name === $item->node_name ) { return true; } } diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 55b906136820f..cb581fac3988f 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -5428,6 +5428,11 @@ private function reset_insertion_mode_appropriately(): void { } } + // All of the following rules are for matching HTML elements. + if ( 'html' !== $node->namespace ) { + continue; + } + switch ( $node->node_name ) { /* * > 4. If node is a `select` element, run these substeps: @@ -5443,6 +5448,10 @@ private function reset_insertion_mode_appropriately(): void { case 'SELECT': if ( ! $last ) { foreach ( $this->state->stack_of_open_elements->walk_up( $node ) as $ancestor ) { + if ( 'html' !== $ancestor->namespace ) { + continue; + } + switch ( $ancestor->node_name ) { /* * > 5. If _ancestor_ is a `template` node, jump to the step below diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index e9b9063f77a7b..17dd2ff7fbd68 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -520,6 +520,30 @@ public function test_foreign_content_script_self_closing() { $this->assertTrue( $processor->next_tag( 'script' ) ); } + /** + * Ensures that the HTML Processor correctly handles TEMPLATE tag closing and namespaces. + * + * This is a tricky test case that corresponds to the html5lib tests "template/line1466". + * + * When the `` token is reached it is in the HTML namespace (thanks to the + * SVG `foreignObject` element). It is not handled as foreign content; therefore, it + * closes the open HTML `TEMPLATE` element (the first `