From 502624fef086973c4bcfe00b077b9cba317cc0e5 Mon Sep 17 00:00:00 2001 From: Jon Surrell Date: Wed, 8 Apr 2026 12:24:47 +0000 Subject: [PATCH 001/106] Block Hooks: Set ignored blocks meta in REST API response. Set `_wp_ignored_hooked_blocks` post meta in the REST API response sent from post-like endpoints that support Block Hooks (see `rest_block_hooks_post_types` filter). Previously, it was enough to set that post meta on write (i.e. save to DB). However, due to the way real-time collaboration syncs posts and reconciles them with content received from the server side, this information is now vital on the client side to ensure hooked blocks aren't duplicated. Developed in https://github.com/WordPress/wordpress-develop/pull/11410. Props bernhard-reiter, czarate, ingeniumed. Fixes #65008. git-svn-id: https://develop.svn.wordpress.org/trunk@62219 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 30 +++++++- ...applyBlockHooksToContentFromPostObject.php | 71 +++++++++++++++++-- 2 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 170d7c0fbf10a..cc1ac60667773 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -1196,6 +1196,7 @@ function apply_block_hooks_to_content( $content, $context = null, $callback = 'i * of the block that corresponds to the post type are handled correctly. * * @since 6.8.0 + * @since 7.0.0 Added the `$ignored_hooked_blocks_at_root` parameter. * @access private * * @param string $content Serialized content. @@ -1205,9 +1206,17 @@ function apply_block_hooks_to_content( $content, $context = null, $callback = 'i * @param callable $callback A function that will be called for each block to generate * the markup for a given list of blocks that are hooked to it. * Default: 'insert_hooked_blocks'. + * @param array|null $ignored_hooked_blocks_at_root A reference to an array that will be populated + * with the ignored hooked blocks at the root level. + * Default: `null`. * @return string The serialized markup. */ -function apply_block_hooks_to_content_from_post_object( $content, $post = null, $callback = 'insert_hooked_blocks' ) { +function apply_block_hooks_to_content_from_post_object( + $content, + $post = null, + $callback = 'insert_hooked_blocks', + &$ignored_hooked_blocks_at_root = null +) { // Default to the current post if no context is provided. if ( null === $post ) { $post = get_post(); @@ -1287,6 +1296,16 @@ function apply_block_hooks_to_content_from_post_object( $content, $post = null, $content = apply_block_hooks_to_content( $content, $post, $callback ); remove_filter( 'hooked_block_types', $suppress_blocks_from_insertion_before_and_after_wrapper_block, PHP_INT_MAX ); + if ( null !== $ignored_hooked_blocks_at_root ) { + // Check wrapper block's metadata for ignored hooked blocks at the root level, and populate the reference parameter if needed. + $wrapper_block_markup = extract_serialized_parent_block( $content ); + $wrapper_block = parse_blocks( $wrapper_block_markup )[0]; + + if ( ! empty( $wrapper_block['attrs']['metadata']['ignoredHookedBlocks'] ) ) { + $ignored_hooked_blocks_at_root = $wrapper_block['attrs']['metadata']['ignoredHookedBlocks']; + } + } + // Finally, we need to remove the temporary wrapper block. $content = remove_serialized_parent_block( $content ); @@ -1449,6 +1468,7 @@ function insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata( &$parsed_a * * @since 6.6.0 * @since 6.8.0 Support non-`wp_navigation` post types. + * @since 7.0.0 Set `_wp_ignored_hooked_blocks` meta in the response for blocks hooked at the root level. * * @param WP_REST_Response $response The response object. * @param WP_Post $post Post object. @@ -1459,12 +1479,18 @@ function insert_hooked_blocks_into_rest_response( $response, $post ) { return $response; } + $ignored_hooked_blocks_at_root = array(); $response->data['content']['raw'] = apply_block_hooks_to_content_from_post_object( $response->data['content']['raw'], $post, - 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata' + 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata', + $ignored_hooked_blocks_at_root ); + if ( ! empty( $ignored_hooked_blocks_at_root ) ) { + $response->data['meta']['_wp_ignored_hooked_blocks'] = wp_json_encode( $ignored_hooked_blocks_at_root ); + } + // If the rendered content was previously empty, we leave it like that. if ( empty( $response->data['content']['rendered'] ) ) { return $response; diff --git a/tests/phpunit/tests/blocks/applyBlockHooksToContentFromPostObject.php b/tests/phpunit/tests/blocks/applyBlockHooksToContentFromPostObject.php index 5ff9f7323e0f3..4f95727524c8c 100644 --- a/tests/phpunit/tests/blocks/applyBlockHooksToContentFromPostObject.php +++ b/tests/phpunit/tests/blocks/applyBlockHooksToContentFromPostObject.php @@ -130,21 +130,59 @@ public function test_apply_block_hooks_to_content_from_post_object_inserts_hooke $this->assertSame( $expected, $actual ); } + /** + * @ticket 65008 + */ + public function test_apply_block_hooks_to_content_from_post_object_sets_ignored_hooked_blocks() { + $ignored_hooked_blocks_at_root = array(); + + $expected = '' . + '' . + '

Hello World!

' . + '' . + ''; + $actual = apply_block_hooks_to_content_from_post_object( + self::$post->post_content, + self::$post, + 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata', + $ignored_hooked_blocks_at_root + ); + $this->assertSame( $expected, $actual, "Markup wasn't updated correctly." ); + $this->assertSame( + array( 'tests/hooked-block-first-child' ), + $ignored_hooked_blocks_at_root, + "Hooked block added at 'first_child' position wasn't added to ignoredHookedBlocks metadata." + ); + } + /** * @ticket 62716 + * @ticket 65008 */ public function test_apply_block_hooks_to_content_from_post_object_respects_ignored_hooked_blocks_post_meta() { - $expected = self::$post_with_ignored_hooked_block->post_content . ''; + $ignored_hooked_blocks_at_root = array(); + + $expected = '' . + '

Hello World!

' . + '' . + ''; $actual = apply_block_hooks_to_content_from_post_object( self::$post_with_ignored_hooked_block->post_content, self::$post_with_ignored_hooked_block, - 'insert_hooked_blocks' + 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata', + $ignored_hooked_blocks_at_root ); $this->assertSame( $expected, $actual ); + $this->assertSame( + array( 'tests/hooked-block-first-child' ), + $ignored_hooked_blocks_at_root, + "Pre-existing ignored hooked block at root level wasn't reflected in metadata." + ); } /** * @ticket 63287 + * @ticket 65008 */ public function test_apply_block_hooks_to_content_from_post_object_does_not_insert_hooked_block_before_container_block() { $filter = function ( $hooked_block_types, $relative_position, $anchor_block_type ) { @@ -155,31 +193,50 @@ public function test_apply_block_hooks_to_content_from_post_object_does_not_inse return $hooked_block_types; }; + $ignored_hooked_blocks_at_root = array(); + $expected = '' . - self::$post->post_content . + '' . + '

Hello World!

' . + '' . ''; add_filter( 'hooked_block_types', $filter, 10, 3 ); $actual = apply_block_hooks_to_content_from_post_object( self::$post->post_content, self::$post, - 'insert_hooked_blocks' + 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata', + $ignored_hooked_blocks_at_root ); remove_filter( 'hooked_block_types', $filter, 10 ); - $this->assertSame( $expected, $actual ); + $this->assertSame( $expected, $actual, "Hooked block added before 'core/post-content' block shouldn't be inserted." ); + $this->assertSame( + array( 'tests/hooked-block-first-child' ), + $ignored_hooked_blocks_at_root, + "ignoredHookedBlocks metadata wasn't set correctly." + ); } /** * @ticket 62716 + * @ticket 65008 */ public function test_apply_block_hooks_to_content_from_post_object_inserts_hooked_block_if_content_contains_no_blocks() { + $ignored_hooked_blocks_at_root = array(); + $expected = '' . self::$post_with_non_block_content->post_content; $actual = apply_block_hooks_to_content_from_post_object( self::$post_with_non_block_content->post_content, self::$post_with_non_block_content, - 'insert_hooked_blocks' + 'insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata', + $ignored_hooked_blocks_at_root + ); + $this->assertSame( $expected, $actual, "Markup wasn't updated correctly." ); + $this->assertSame( + array( 'tests/hooked-block-first-child' ), + $ignored_hooked_blocks_at_root, + "Hooked block added at 'first_child' position wasn't added to ignoredHookedBlocks metadata." ); - $this->assertSame( $expected, $actual ); } } From c37a60aa62949ee90ff4705106ae525aaba54196 Mon Sep 17 00:00:00 2001 From: Jorge Costa Date: Wed, 8 Apr 2026 15:47:24 +0000 Subject: [PATCH 002/106] Abilities: Strip internal schema keywords from abilities REST responses. Remove WordPress-internal properties (`sanitize_callback`, `validate_callback`, `arg_options`) from ability `input_schema` and `output_schema` fields in REST responses. These properties are used server-side but are not valid JSON Schema keywords and cause client-side validators to fail. Props jorgefilipecosta, ocean90, gziolo. Fixes #65035. git-svn-id: https://develop.svn.wordpress.org/trunk@62221 602fd350-edb4-49c9-b593-d223f7449a82 --- ...s-wp-rest-abilities-v1-list-controller.php | 83 +++++- .../wpRestAbilitiesV1ListController.php | 240 ++++++++++++++++++ 2 files changed, 321 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php index 6dfc54003863e..e3ce0c4f2e03e 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php @@ -215,6 +215,81 @@ private function normalize_schema_empty_object_defaults( array $schema ): array return $schema; } + /** + * WordPress-internal schema keywords to strip from REST responses. + * + * @since 7.0.0 + * @var array + */ + private const INTERNAL_SCHEMA_KEYWORDS = array( + 'sanitize_callback' => true, + 'validate_callback' => true, + 'arg_options' => true, + ); + + /** + * Recursively removes WordPress-internal keywords from a schema. + * + * Ability schemas may include WordPress-internal properties like + * `sanitize_callback`, `validate_callback`, and `arg_options` that are + * used server-side but are not valid JSON Schema keywords. This method + * removes those specific keys so they are not exposed in REST responses. + * + * @since 7.0.0 + * + * @param array $schema The schema array. + * @return array The schema without WordPress-internal keywords. + */ + private function strip_internal_schema_keywords( array $schema ): array { + $schema = array_diff_key( $schema, self::INTERNAL_SCHEMA_KEYWORDS ); + + // Sub-schema maps: keys are user-defined, values are sub-schemas. + // Note: 'dependencies' values can also be property-dependency arrays + // (numeric arrays of strings) which are skipped via wp_is_numeric_array(). + foreach ( array( 'properties', 'patternProperties', 'definitions', 'dependencies' ) as $keyword ) { + if ( isset( $schema[ $keyword ] ) && is_array( $schema[ $keyword ] ) ) { + foreach ( $schema[ $keyword ] as $key => $child_schema ) { + if ( is_array( $child_schema ) && ! wp_is_numeric_array( $child_schema ) ) { + $schema[ $keyword ][ $key ] = $this->strip_internal_schema_keywords( $child_schema ); + } + } + } + } + + // Single sub-schema keywords. + foreach ( array( 'not', 'additionalProperties', 'additionalItems' ) as $keyword ) { + if ( isset( $schema[ $keyword ] ) && is_array( $schema[ $keyword ] ) ) { + $schema[ $keyword ] = $this->strip_internal_schema_keywords( $schema[ $keyword ] ); + } + } + + // Items: single schema or tuple array of schemas. + if ( isset( $schema['items'] ) ) { + if ( wp_is_numeric_array( $schema['items'] ) ) { + foreach ( $schema['items'] as $index => $item_schema ) { + if ( is_array( $item_schema ) ) { + $schema['items'][ $index ] = $this->strip_internal_schema_keywords( $item_schema ); + } + } + } elseif ( is_array( $schema['items'] ) ) { + $schema['items'] = $this->strip_internal_schema_keywords( $schema['items'] ); + } + } + + // Array-of-schemas keywords. + foreach ( array( 'anyOf', 'oneOf', 'allOf' ) as $keyword ) { + if ( isset( $schema[ $keyword ] ) && is_array( $schema[ $keyword ] ) ) { + foreach ( $schema[ $keyword ] as $index => $sub_schema ) { + if ( is_array( $sub_schema ) ) { + $schema[ $keyword ][ $index ] = $this->strip_internal_schema_keywords( $sub_schema ); + } + } + } + } + + return $schema; + } + /** * Prepares an ability for response. * @@ -230,8 +305,12 @@ public function prepare_item_for_response( $ability, $request ) { 'label' => $ability->get_label(), 'description' => $ability->get_description(), 'category' => $ability->get_category(), - 'input_schema' => $this->normalize_schema_empty_object_defaults( $ability->get_input_schema() ), - 'output_schema' => $this->normalize_schema_empty_object_defaults( $ability->get_output_schema() ), + 'input_schema' => $this->strip_internal_schema_keywords( + $this->normalize_schema_empty_object_defaults( $ability->get_input_schema() ) + ), + 'output_schema' => $this->strip_internal_schema_keywords( + $this->normalize_schema_empty_object_defaults( $ability->get_output_schema() ) + ), 'meta' => $ability->get_meta(), ); diff --git a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php index 9ee564ef00069..d73a2c64177fc 100644 --- a/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php +++ b/tests/phpunit/tests/rest-api/wpRestAbilitiesV1ListController.php @@ -776,4 +776,244 @@ public function test_filter_by_nonexistent_category(): void { $this->assertIsArray( $data ); $this->assertEmpty( $data, 'Should return empty array for non-existent category' ); } + + /** + * Test that WordPress-internal schema keywords are stripped from ability schemas in REST response. + * + * @ticket 65035 + */ + public function test_internal_schema_keywords_stripped_from_response(): void { + $this->register_test_ability( + 'test/with-internal-keywords', + array( + 'label' => 'Test Internal Keywords', + 'description' => 'Tests stripping of internal schema keywords', + 'category' => 'general', + 'input_schema' => array( + 'type' => 'object', + 'properties' => array( + 'content' => array( + 'type' => 'string', + 'description' => 'The content value.', + 'sanitize_callback' => 'sanitize_text_field', + 'validate_callback' => 'is_string', + 'arg_options' => array( 'sanitize_callback' => 'wp_kses_post' ), + ), + ), + ), + 'output_schema' => array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + 'execute_callback' => static function ( $input ) { + return $input['content']; + }, + 'permission_callback' => '__return_true', + 'meta' => array( 'show_in_rest' => true ), + ) + ); + + $request = new WP_REST_Request( 'GET', '/wp-abilities/v1/abilities/test/with-internal-keywords' ); + $response = $this->server->dispatch( $request ); + + $this->assertSame( 200, $response->get_status() ); + + $data = $response->get_data(); + $this->assertArrayHasKey( 'input_schema', $data ); + $this->assertArrayHasKey( 'properties', $data['input_schema'] ); + $this->assertArrayHasKey( 'content', $data['input_schema']['properties'] ); + $this->assertArrayHasKey( 'output_schema', $data ); + + // Verify internal keywords are stripped from input_schema properties. + $content_schema = $data['input_schema']['properties']['content']; + $this->assertArrayNotHasKey( 'sanitize_callback', $content_schema ); + $this->assertArrayNotHasKey( 'validate_callback', $content_schema ); + $this->assertArrayNotHasKey( 'arg_options', $content_schema ); + + // Verify valid JSON Schema keywords are preserved. + $this->assertSame( 'string', $content_schema['type'] ); + $this->assertSame( 'The content value.', $content_schema['description'] ); + + // Verify internal keywords are stripped from output_schema. + $this->assertArrayNotHasKey( 'sanitize_callback', $data['output_schema'] ); + $this->assertSame( 'string', $data['output_schema']['type'] ); + } + + /** + * Test that internal schema keywords are stripped from nested sub-schema locations. + * + * @ticket 64098 + */ + public function test_internal_schema_keywords_stripped_from_nested_sub_schemas(): void { + $this->register_test_ability( + 'test/nested-internal-keywords', + array( + 'label' => 'Test Nested Keywords', + 'description' => 'Tests stripping from all sub-schema locations', + 'category' => 'general', + 'input_schema' => array( + 'type' => 'object', + 'anyOf' => array( + array( + 'type' => 'object', + 'sanitize_callback' => 'sanitize_text_field', + 'properties' => array( + 'value' => array( + 'type' => 'string', + 'validate_callback' => 'is_string', + ), + ), + ), + array( + 'type' => 'number', + 'arg_options' => array( 'sanitize_callback' => 'absint' ), + ), + ), + 'oneOf' => array( + array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + 'allOf' => array( + array( + 'type' => 'object', + 'validate_callback' => 'rest_validate_request_arg', + ), + ), + 'not' => array( + 'type' => 'null', + 'arg_options' => array( 'sanitize_callback' => 'absint' ), + ), + 'patternProperties' => array( + '^S_' => array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + 'definitions' => array( + 'address' => array( + 'type' => 'object', + 'validate_callback' => 'rest_validate_request_arg', + 'properties' => array( + 'street' => array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + ), + ), + 'dependencies' => array( + 'bar' => array( + 'type' => 'object', + 'validate_callback' => 'rest_validate_request_arg', + 'properties' => array( + 'baz' => array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + ), + 'qux' => array( 'bar' ), + ), + 'additionalProperties' => array( + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + 'output_schema' => array( + 'type' => 'array', + 'items' => array( + array( + 'type' => 'string', + 'validate_callback' => 'is_string', + ), + array( + 'type' => 'number', + 'arg_options' => array( 'sanitize_callback' => 'absint' ), + ), + ), + 'additionalItems' => array( + 'type' => 'boolean', + 'sanitize_callback' => 'rest_sanitize_boolean', + ), + ), + 'execute_callback' => static function ( $input ) { + return array(); + }, + 'permission_callback' => '__return_true', + 'meta' => array( 'show_in_rest' => true ), + ) + ); + + $request = new WP_REST_Request( 'GET', '/wp-abilities/v1/abilities/test/nested-internal-keywords' ); + $response = $this->server->dispatch( $request ); + + $this->assertSame( 200, $response->get_status() ); + + $data = $response->get_data(); + + // Verify internal keywords are stripped from anyOf sub-schemas. + $this->assertArrayHasKey( 'anyOf', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['anyOf'][0] ); + $this->assertSame( 'object', $data['input_schema']['anyOf'][0]['type'] ); + $this->assertArrayNotHasKey( 'validate_callback', $data['input_schema']['anyOf'][0]['properties']['value'] ); + $this->assertSame( 'string', $data['input_schema']['anyOf'][0]['properties']['value']['type'] ); + $this->assertArrayNotHasKey( 'arg_options', $data['input_schema']['anyOf'][1] ); + $this->assertSame( 'number', $data['input_schema']['anyOf'][1]['type'] ); + + // Verify internal keywords are stripped from oneOf sub-schemas. + $this->assertArrayHasKey( 'oneOf', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['oneOf'][0] ); + $this->assertSame( 'string', $data['input_schema']['oneOf'][0]['type'] ); + + // Verify internal keywords are stripped from allOf sub-schemas. + $this->assertArrayHasKey( 'allOf', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'validate_callback', $data['input_schema']['allOf'][0] ); + $this->assertSame( 'object', $data['input_schema']['allOf'][0]['type'] ); + + // Verify internal keywords are stripped from not sub-schema. + $this->assertArrayHasKey( 'not', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'arg_options', $data['input_schema']['not'] ); + $this->assertSame( 'null', $data['input_schema']['not']['type'] ); + + // Verify internal keywords are stripped from patternProperties sub-schemas. + $this->assertArrayHasKey( 'patternProperties', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['patternProperties']['^S_'] ); + $this->assertSame( 'string', $data['input_schema']['patternProperties']['^S_']['type'] ); + + // Verify internal keywords are stripped from dependencies schema values. + $this->assertArrayHasKey( 'dependencies', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'validate_callback', $data['input_schema']['dependencies']['bar'] ); + $this->assertSame( 'object', $data['input_schema']['dependencies']['bar']['type'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['dependencies']['bar']['properties']['baz'] ); + $this->assertSame( 'string', $data['input_schema']['dependencies']['bar']['properties']['baz']['type'] ); + // Property dependencies (numeric arrays) should pass through unchanged. + $this->assertSame( array( 'bar' ), $data['input_schema']['dependencies']['qux'] ); + + // Verify internal keywords are stripped from definitions sub-schemas. + $this->assertArrayHasKey( 'definitions', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'validate_callback', $data['input_schema']['definitions']['address'] ); + $this->assertSame( 'object', $data['input_schema']['definitions']['address']['type'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['definitions']['address']['properties']['street'] ); + $this->assertSame( 'string', $data['input_schema']['definitions']['address']['properties']['street']['type'] ); + + // Verify internal keywords are stripped from additionalProperties sub-schema. + $this->assertArrayHasKey( 'additionalProperties', $data['input_schema'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['input_schema']['additionalProperties'] ); + $this->assertSame( 'string', $data['input_schema']['additionalProperties']['type'] ); + + // Verify internal keywords are stripped from tuple-style items sub-schemas. + $this->assertArrayHasKey( 'items', $data['output_schema'] ); + $this->assertCount( 2, $data['output_schema']['items'] ); + $this->assertArrayNotHasKey( 'validate_callback', $data['output_schema']['items'][0] ); + $this->assertSame( 'string', $data['output_schema']['items'][0]['type'] ); + $this->assertArrayNotHasKey( 'arg_options', $data['output_schema']['items'][1] ); + $this->assertSame( 'number', $data['output_schema']['items'][1]['type'] ); + + // Verify internal keywords are stripped from additionalItems sub-schema. + $this->assertArrayHasKey( 'additionalItems', $data['output_schema'] ); + $this->assertArrayNotHasKey( 'sanitize_callback', $data['output_schema']['additionalItems'] ); + $this->assertSame( 'boolean', $data['output_schema']['additionalItems']['type'] ); + } } From e12ddb3c76e73ef32510e5464472e04f0cd1483a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 8 Apr 2026 18:41:15 +0000 Subject: [PATCH 003/106] Tests: Add missing `@covers` tags for some multisite tests. Follow-up to [62213], [62218]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62222 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/multisite/isEmailAddressUnsafe.php | 2 ++ tests/phpunit/tests/multisite/isUploadSpaceAvailable.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/phpunit/tests/multisite/isEmailAddressUnsafe.php b/tests/phpunit/tests/multisite/isEmailAddressUnsafe.php index 38d17d9ed0719..862086f0ebb85 100644 --- a/tests/phpunit/tests/multisite/isEmailAddressUnsafe.php +++ b/tests/phpunit/tests/multisite/isEmailAddressUnsafe.php @@ -3,6 +3,8 @@ /** * @group ms-required * @group multisite + * + * @covers ::is_email_address_unsafe */ class Tests_Multisite_IsEmailAddressUnsafe extends WP_UnitTestCase { diff --git a/tests/phpunit/tests/multisite/isUploadSpaceAvailable.php b/tests/phpunit/tests/multisite/isUploadSpaceAvailable.php index 62c9dc6c97e31..57fee4056334c 100644 --- a/tests/phpunit/tests/multisite/isUploadSpaceAvailable.php +++ b/tests/phpunit/tests/multisite/isUploadSpaceAvailable.php @@ -8,6 +8,8 @@ * * @group ms-required * @group multisite + * + * @covers ::is_upload_space_available */ class Tests_Multisite_IsUploadSpaceAvailable extends WP_UnitTestCase { From a1c062cbab200fb95a4bab29b8b34869435c7276 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 9 Apr 2026 20:07:35 +0000 Subject: [PATCH 004/106] Tests: Add missing `@covers` tags for some oEmbed tests. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62223 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/oembed/WpEmbed.php | 2 ++ tests/phpunit/tests/oembed/postEmbedUrl.php | 2 ++ tests/phpunit/tests/oembed/wpOembed.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/tests/phpunit/tests/oembed/WpEmbed.php b/tests/phpunit/tests/oembed/WpEmbed.php index c7b0649867d97..59a1b37dd9e81 100644 --- a/tests/phpunit/tests/oembed/WpEmbed.php +++ b/tests/phpunit/tests/oembed/WpEmbed.php @@ -2,6 +2,8 @@ /** * @group oembed + * + * @covers WP_Embed */ class Tests_WP_Embed extends WP_UnitTestCase { /** diff --git a/tests/phpunit/tests/oembed/postEmbedUrl.php b/tests/phpunit/tests/oembed/postEmbedUrl.php index ed674b8429c38..225bf05e16839 100644 --- a/tests/phpunit/tests/oembed/postEmbedUrl.php +++ b/tests/phpunit/tests/oembed/postEmbedUrl.php @@ -2,6 +2,8 @@ /** * @group oembed + * + * @covers ::get_post_embed_url */ class Tests_Post_Embed_URL extends WP_UnitTestCase { public function test_non_existent_post() { diff --git a/tests/phpunit/tests/oembed/wpOembed.php b/tests/phpunit/tests/oembed/wpOembed.php index 76d733dbce2e0..43324870350e6 100644 --- a/tests/phpunit/tests/oembed/wpOembed.php +++ b/tests/phpunit/tests/oembed/wpOembed.php @@ -2,6 +2,8 @@ /** * @group oembed + * + * @covers WP_oEmbed */ class Tests_WP_oEmbed extends WP_UnitTestCase { /** From 80433208a67206b6413f7fa4f7d5f68c72f2a15c Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 10 Apr 2026 19:46:03 +0000 Subject: [PATCH 005/106] Tests: Rename some oEmbed test classes as per the naming conventions. Follow-up to [34903], [62223]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62224 602fd350-edb4-49c9-b593-d223f7449a82 --- .../oembed/{getResponseData.php => getOembedResponseData.php} | 3 ++- .../tests/oembed/{postEmbedUrl.php => getPostEmbedUrl.php} | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename tests/phpunit/tests/oembed/{getResponseData.php => getOembedResponseData.php} (99%) rename tests/phpunit/tests/oembed/{postEmbedUrl.php => getPostEmbedUrl.php} (98%) diff --git a/tests/phpunit/tests/oembed/getResponseData.php b/tests/phpunit/tests/oembed/getOembedResponseData.php similarity index 99% rename from tests/phpunit/tests/oembed/getResponseData.php rename to tests/phpunit/tests/oembed/getOembedResponseData.php index 09a0f3142b319..695c4f6c5f889 100644 --- a/tests/phpunit/tests/oembed/getResponseData.php +++ b/tests/phpunit/tests/oembed/getOembedResponseData.php @@ -2,9 +2,10 @@ /** * @group oembed + * * @covers ::get_oembed_response_data */ -class Tests_oEmbed_Response_Data extends WP_UnitTestCase { +class Tests_oEmbed_GetOembedResponseData extends WP_UnitTestCase { public function set_up() { parent::set_up(); diff --git a/tests/phpunit/tests/oembed/postEmbedUrl.php b/tests/phpunit/tests/oembed/getPostEmbedUrl.php similarity index 98% rename from tests/phpunit/tests/oembed/postEmbedUrl.php rename to tests/phpunit/tests/oembed/getPostEmbedUrl.php index 225bf05e16839..3f2cd23399126 100644 --- a/tests/phpunit/tests/oembed/postEmbedUrl.php +++ b/tests/phpunit/tests/oembed/getPostEmbedUrl.php @@ -5,7 +5,7 @@ * * @covers ::get_post_embed_url */ -class Tests_Post_Embed_URL extends WP_UnitTestCase { +class Tests_oEmbed_GetPostEmbedUrl extends WP_UnitTestCase { public function test_non_existent_post() { $embed_url = get_post_embed_url( 0 ); $this->assertFalse( $embed_url ); From a34cf16ab66c3534154a6728a536fe7cc9e91af8 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Sat, 11 Apr 2026 14:22:15 +0000 Subject: [PATCH 006/106] Email: Add unit tests covering email validation and sanitization. In preparation for later work to allow non-US-ASCII email addresses, this change extends the unit test suite for `is_email()` and adds new tests covering `antispambot()` and `sanitize_email()`. This work was done collaboratively during WordCamp Vienna, 2026 as a Contributor Challenge in cooperation with and support from ICANN and also GeoTLDs Universal Acceptance Local Initiative. Developed in: https://github.com/WordPress/wordpress-develop/pull/11552 Discussed in: https://core.trac.wordpress.org/ticket/31992 Props agulbra, akirk, benniledl, dmsnell. See #31992. git-svn-id: https://develop.svn.wordpress.org/trunk@62225 602fd350-edb4-49c9-b593-d223f7449a82 --- .../phpunit/tests/formatting/antispambot.php | 73 +++++++++++++++ tests/phpunit/tests/formatting/isEmail.php | 89 ++++++++++++++++--- .../tests/formatting/sanitizeEmail.php | 43 +++++++++ 3 files changed, 193 insertions(+), 12 deletions(-) create mode 100644 tests/phpunit/tests/formatting/antispambot.php create mode 100644 tests/phpunit/tests/formatting/sanitizeEmail.php diff --git a/tests/phpunit/tests/formatting/antispambot.php b/tests/phpunit/tests/formatting/antispambot.php new file mode 100644 index 0000000000000..159d907ada9b0 --- /dev/null +++ b/tests/phpunit/tests/formatting/antispambot.php @@ -0,0 +1,73 @@ +assertTrue( wp_is_valid_utf8( antispambot( $email ) ) ); + } + + /** + * Data provider. + * + * return array[] + */ + public function data_returns_valid_utf8() { + return array( + 'plain' => array( 'bob@example.com' ), + 'plain with ip' => array( 'ace@204.32.222.14' ), + 'deep subdomain' => array( 'kevin@many.subdomains.make.a.happy.man.edu' ), + 'short address' => array( 'a@b.co' ), + 'weird but legal dots' => array( '..@example.com' ), + ); + } + + /** + * This tests that antispambot performs some sort of obfuscation + * and that the obfuscation maps back to the original value. + * + * @ticket 31992 + * + * @dataProvider data_antispambot_obfuscates + * + * @param string $provided The email address to obfuscate. + */ + public function test_antispambot_obfuscates( $provided ) { + // The only token should be the email address, so advance once and treat as a text node. + $obfuscated = antispambot( $provided ); + $p = new WP_HTML_Tag_Processor( $obfuscated ); + $p->next_token(); + $decoded = rawurldecode( $p->get_modifiable_text() ); + + $this->assertNotSame( $provided, $obfuscated, 'Should have produced an obfuscated representation.' ); + $this->assertSame( $provided, $decoded, 'Should have decoded to the original email after restoring.' ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_antispambot_obfuscates() { + return array( + array( 'example@example.com' ), + array( '#@example.com' ), + ); + } +} diff --git a/tests/phpunit/tests/formatting/isEmail.php b/tests/phpunit/tests/formatting/isEmail.php index eb5a0379b8515..d79647885ceba 100644 --- a/tests/phpunit/tests/formatting/isEmail.php +++ b/tests/phpunit/tests/formatting/isEmail.php @@ -1,32 +1,44 @@ assertSame( $email, is_email( $email ), "is_email() should return the email address for $email." ); + $this->assertSame( + $email, + is_email( $email ), + 'Should return the given email address unchanged when valid.' + ); } /** - * Data provider for valid email addresses. + * Data provider. * - * @return array + * @return Generator */ - public static function valid_email_provider() { + public static function data_valid_email_provider() { $valid_emails = array( 'bob@example.com', 'phil@example.info', + 'phil@TLA.example', 'ace@204.32.222.14', 'kevin@many.subdomains.make.a.happy.man.edu', 'a@b.co', 'bill+ted@example.com', + '..@example.com', ); foreach ( $valid_emails as $email ) { @@ -35,18 +47,27 @@ public static function valid_email_provider() { } /** - * @dataProvider invalid_email_provider + * Ensures that unrecognized email addresses are rejected. + * + * @ticket 31992 + * + * @dataProvider data_invalid_email_provider + * + * @param string $email Invalid or unrecognized-to-WordPress email address. */ public function test_returns_false_if_given_an_invalid_email_address( $email ) { - $this->assertFalse( is_email( $email ), "is_email() should return false for $email." ); + $this->assertFalse( + is_email( $email ), + 'Should have rejected the email as invalid.' + ); } /** - * Data provider for invalid email addresses. + * Data provider. * - * @return array + * @return Generator */ - public static function invalid_email_provider() { + public static function data_invalid_email_provider() { $invalid_emails = array( 'khaaaaaaaaaaaaaaan!', 'http://bob.example.com/', @@ -54,6 +75,50 @@ public static function invalid_email_provider() { 'com.exampleNOSPAMbob', 'bob@your mom', 'a@b.c', + '" "@b.c', + '"@"@b.c', + 'a@route.org@b.c', + 'h(aj@couc.ou', // bad comment. + 'hi@', + 'hi@hi@couc.ou', // double @. + + /* + * The next address is not deliverable as described, + * SMTP servers should strip the (ab), so it is very + * likely a source of confusion or a typo. + * Best rejected. + */ + '(ab)cd@couc.ou', + + /* + * The next address is not globally deliverable, + * so it may work with PHPMailer and break with + * mail sending services. Best not allow users + * to paint themselves into that corner. This also + * avoids security problems like those that were + * used to probe the WordPress server's local + * network. + */ + 'toto@to', + + /* + * Several addresses are best rejected because + * we don't want to allow sending to fe80::, 192.168 + * and other special addresses; that too might + * be used to probe the WordPress server's local + * network. + */ + 'to@[2001:db8::1]', + 'to@[IPv6:2001:db8::1]', + 'to@[192.168.1.1]', + + /* + * Ill-formed UTF-8 byte sequences must be rejected. + * A lone continuation byte (0x80) is not valid UTF-8 + * whether it appears in the local part or the domain. + */ + "a\x80b@example.com", // invalid UTF-8 in local part. + "abc@\x80.org", // invalid UTF-8 in domain subdomain. ); foreach ( $invalid_emails as $email ) { diff --git a/tests/phpunit/tests/formatting/sanitizeEmail.php b/tests/phpunit/tests/formatting/sanitizeEmail.php new file mode 100644 index 0000000000000..110375bd21cf2 --- /dev/null +++ b/tests/phpunit/tests/formatting/sanitizeEmail.php @@ -0,0 +1,43 @@ +assertSame( + $expected, + sanitize_email( $address ), + 'Should have produced the known sanitized form of the email.' + ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_sanitized_email_pairs() { + return array( + 'shorter than 6 characters' => array( 'a@b', '' ), + 'contains no @' => array( 'ab', '' ), + 'just a TLD' => array( 'abc@com', '' ), + 'plain' => array( 'abc@example.com', 'abc@example.com' ), + 'invalid utf8 in local' => array( "a\x80b@example.com", '' ), + 'invalid utf8 subdomain dropped' => array( "abc@sub.\x80.org", 'abc@sub.org' ), + 'all subdomains invalid utf8' => array( "abc@\x80.org", '' ), + ); + } +} From bbb00c582738989cc57a4fc84a564efb8ace0b55 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Sat, 11 Apr 2026 18:45:38 +0000 Subject: [PATCH 007/106] Email: Add unit tests covering email validation and sanitization. (Take 2) When the original patch from PR#11552 was merged, it did not include the latest version of the PR code, which had removed a failing test. This patch removes the failing test to match what ran in the tests on the PR. Developed in: https://github.com/WordPress/wordpress-develop/pull/11552 Discussed in: https://core.trac.wordpress.org/ticket/31992 Follow-up to: [62225]. Props agulbra, akirk, benniledl, dmsnell. See #31992. git-svn-id: https://develop.svn.wordpress.org/trunk@62226 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/formatting/sanitizeEmail.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/phpunit/tests/formatting/sanitizeEmail.php b/tests/phpunit/tests/formatting/sanitizeEmail.php index 110375bd21cf2..6ca396f42dc26 100644 --- a/tests/phpunit/tests/formatting/sanitizeEmail.php +++ b/tests/phpunit/tests/formatting/sanitizeEmail.php @@ -35,7 +35,6 @@ public function data_sanitized_email_pairs() { 'contains no @' => array( 'ab', '' ), 'just a TLD' => array( 'abc@com', '' ), 'plain' => array( 'abc@example.com', 'abc@example.com' ), - 'invalid utf8 in local' => array( "a\x80b@example.com", '' ), 'invalid utf8 subdomain dropped' => array( "abc@sub.\x80.org", 'abc@sub.org' ), 'all subdomains invalid utf8' => array( "abc@\x80.org", '' ), ); From e28a4a4657f8768389855abf36a8dbb88a9bb89f Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 11 Apr 2026 23:53:56 +0000 Subject: [PATCH 008/106] Tests: Rename some oEmbed test classes as per the naming conventions. Includes moving the data provider after the corresponding test for consistency with the rest of the test suite. Follow-up to [34903], [62223], [62224]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62227 602fd350-edb4-49c9-b593-d223f7449a82 --- ...> wpFilterOembedIframeTitleAttributes.php} | 25 ++++++++------- ...terResult.php => wpFilterOembedResult.php} | 31 ++++++++++--------- 2 files changed, 31 insertions(+), 25 deletions(-) rename tests/phpunit/tests/oembed/{filterTitleAttributes.php => wpFilterOembedIframeTitleAttributes.php} (92%) rename tests/phpunit/tests/oembed/{filterResult.php => wpFilterOembedResult.php} (98%) diff --git a/tests/phpunit/tests/oembed/filterTitleAttributes.php b/tests/phpunit/tests/oembed/wpFilterOembedIframeTitleAttributes.php similarity index 92% rename from tests/phpunit/tests/oembed/filterTitleAttributes.php rename to tests/phpunit/tests/oembed/wpFilterOembedIframeTitleAttributes.php index 29d22f838af79..83cc4b5f3ca38 100644 --- a/tests/phpunit/tests/oembed/filterTitleAttributes.php +++ b/tests/phpunit/tests/oembed/wpFilterOembedIframeTitleAttributes.php @@ -2,9 +2,21 @@ /** * @group oembed + * + * @covers ::wp_filter_oembed_iframe_title_attribute */ -class Tests_Filter_oEmbed_Iframe_Title_Attribute extends WP_UnitTestCase { - public function data_filter_oembed_iframe_title_attribute() { +class Tests_oEmbed_wpFilterOembedIframeTitleAttribute extends WP_UnitTestCase { + + /** + * @dataProvider data_oembed_iframe_title_attribute + */ + public function test_oembed_iframe_title_attribute( $html, $oembed_data, $url, $expected ) { + $actual = wp_filter_oembed_iframe_title_attribute( $html, (object) $oembed_data, $url ); + + $this->assertEqualHTML( $expected, $actual ); + } + + public function data_oembed_iframe_title_attribute() { return array( array( '

Foo

Bar', @@ -61,15 +73,6 @@ public function data_filter_oembed_iframe_title_attribute() { ); } - /** - * @dataProvider data_filter_oembed_iframe_title_attribute - */ - public function test_oembed_iframe_title_attribute( $html, $oembed_data, $url, $expected ) { - $actual = wp_filter_oembed_iframe_title_attribute( $html, (object) $oembed_data, $url ); - - $this->assertEqualHTML( $expected, $actual ); - } - public function test_filter_oembed_iframe_title_attribute() { add_filter( 'oembed_iframe_title_attribute', array( $this, '_filter_oembed_iframe_title_attribute' ) ); diff --git a/tests/phpunit/tests/oembed/filterResult.php b/tests/phpunit/tests/oembed/wpFilterOembedResult.php similarity index 98% rename from tests/phpunit/tests/oembed/filterResult.php rename to tests/phpunit/tests/oembed/wpFilterOembedResult.php index 10dbe0e4ea017..3649d7210b58a 100644 --- a/tests/phpunit/tests/oembed/filterResult.php +++ b/tests/phpunit/tests/oembed/wpFilterOembedResult.php @@ -2,8 +2,11 @@ /** * @group oembed + * + * @covers ::wp_filter_oembed_result */ -class Tests_Filter_oEmbed_Result extends WP_UnitTestCase { +class Tests_oEmbed_wpFilterOembedResult extends WP_UnitTestCase { + public function test_filter_oembed_result_trusted_malicious_iframe() { $html = '

'; @@ -154,6 +157,19 @@ public function test_filter_oembed_result_allowed_html() { $this->assertEqualHTML( '
', $actual ); } + /** + * @dataProvider data_wp_filter_pre_oembed_custom_result + */ + public function test_wp_filter_pre_oembed_custom_result( $html, $expected ) { + $data = (object) array( + 'type' => 'rich', + 'title' => 'Hola', + 'html' => $html, + ); + $actual = _wp_oembed_get_object()->data2html( $data, 'https://untrusted.localhost' ); + $this->assertEqualHTML( $expected, $actual ); + } + public function data_wp_filter_pre_oembed_custom_result() { return array( array( @@ -175,19 +191,6 @@ public function data_wp_filter_pre_oembed_custom_result() { ); } - /** - * @dataProvider data_wp_filter_pre_oembed_custom_result - */ - public function test_wp_filter_pre_oembed_custom_result( $html, $expected ) { - $data = (object) array( - 'type' => 'rich', - 'title' => 'Hola', - 'html' => $html, - ); - $actual = _wp_oembed_get_object()->data2html( $data, 'https://untrusted.localhost' ); - $this->assertEqualHTML( $expected, $actual ); - } - /** * @group feed */ From 4bdcb352d932ca57c98f9c96edb580cbfa17a7b8 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 12 Apr 2026 14:25:32 +0000 Subject: [PATCH 009/106] Tests: Expand `@covers` tags for `WP_oEmbed` tests. Follow-up to [62223]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62228 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/oembed/wpOembed.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/tests/oembed/wpOembed.php b/tests/phpunit/tests/oembed/wpOembed.php index 43324870350e6..288d1742d373e 100644 --- a/tests/phpunit/tests/oembed/wpOembed.php +++ b/tests/phpunit/tests/oembed/wpOembed.php @@ -3,7 +3,7 @@ /** * @group oembed * - * @covers WP_oEmbed + * @coversDefaultClass WP_oEmbed */ class Tests_WP_oEmbed extends WP_UnitTestCase { /** @@ -49,6 +49,9 @@ public function _filter_pre_oembed_result( $result ) { return $result ? $result : false; } + /** + * @covers ::get_html + */ public function test_wp_filter_pre_oembed_result_prevents_http_request_for_internal_permalinks() { $post_id = self::factory()->post->create(); $permalink = get_permalink( $post_id ); @@ -61,6 +64,9 @@ public function test_wp_filter_pre_oembed_result_prevents_http_request_for_inter $this->assertSame( $this->pre_oembed_result_filtered, $actual ); } + /** + * @covers ::get_html + */ public function test_wp_filter_pre_oembed_result_prevents_http_request_when_viewing_the_post() { $post_id = self::factory()->post->create(); $permalink = get_permalink( $post_id ); @@ -76,6 +82,9 @@ public function test_wp_filter_pre_oembed_result_prevents_http_request_when_view $this->assertSame( $this->pre_oembed_result_filtered, $actual ); } + /** + * @covers ::get_html + */ public function test_wp_filter_pre_oembed_result_non_existent_post() { $post_id = self::factory()->post->create(); $permalink = get_permalink( $post_id ); @@ -95,6 +104,8 @@ public function test_wp_filter_pre_oembed_result_non_existent_post() { * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_root_root() { $post_id = self::factory()->post->create(); @@ -112,6 +123,8 @@ public function test_wp_filter_pre_oembed_result_multisite_root_root() { * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_sub_samesub() { $user_id = self::$user_id; @@ -141,6 +154,8 @@ public function test_wp_filter_pre_oembed_result_multisite_sub_samesub() { * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_sub_othersub() { $user_id = self::$user_id; @@ -178,6 +193,8 @@ public function test_wp_filter_pre_oembed_result_multisite_sub_othersub() { * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_sub_main() { $post_id = self::factory()->post->create(); @@ -205,6 +222,8 @@ public function test_wp_filter_pre_oembed_result_multisite_sub_main() { * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_preserves_switched_state() { $user_id = self::$user_id; @@ -234,6 +253,8 @@ public function test_wp_filter_pre_oembed_result_multisite_preserves_switched_st * @ticket 40673 * @group multisite * @group ms-required + * + * @covers ::get_html */ public function test_wp_filter_pre_oembed_result_multisite_restores_state_if_no_post_is_found() { $current_blog_id = get_current_blog_id(); From aa72dfed4432cfd875f77d2c475f772c6623cae5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 13 Apr 2026 07:29:55 +0000 Subject: [PATCH 010/106] Tests: Expand `@covers` tags for `WP_Embed` tests. Includes removing the `external-http` group for a `WP_Embed::run_shortcode()` test which does not perform any HTTP requests. Follow-up to [50448], [62223], [62228]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62229 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/oembed/WpEmbed.php | 65 +++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/oembed/WpEmbed.php b/tests/phpunit/tests/oembed/WpEmbed.php index 59a1b37dd9e81..4c77e904399db 100644 --- a/tests/phpunit/tests/oembed/WpEmbed.php +++ b/tests/phpunit/tests/oembed/WpEmbed.php @@ -3,7 +3,7 @@ /** * @group oembed * - * @covers WP_Embed + * @coversDefaultClass WP_Embed */ class Tests_WP_Embed extends WP_UnitTestCase { /** @@ -24,11 +24,17 @@ public function _pre_oembed_result_callback() { return 'Embedded content'; } + /** + * @covers ::maybe_run_ajax_cache + */ public function test_maybe_run_ajax_cache_should_return_nothing_if_there_is_no_post() { $this->expectOutputString( '' ); $this->wp_embed->maybe_run_ajax_cache(); } + /** + * @covers ::maybe_run_ajax_cache + */ public function test_maybe_run_ajax_cache_should_return_nothing_if_there_is_no_message() { $GLOBALS['post'] = self::factory()->post->create_and_get( array( @@ -42,6 +48,9 @@ public function test_maybe_run_ajax_cache_should_return_nothing_if_there_is_no_m unset( $GLOBALS['post'] ); } + /** + * @covers ::maybe_run_ajax_cache + */ public function test_maybe_run_ajax_cache_should_return_javascript() { $GLOBALS['post'] = self::factory()->post->create_and_get( array( @@ -59,6 +68,9 @@ public function test_maybe_run_ajax_cache_should_return_javascript() { $this->assertStringContainsString( $url, $actual ); } + /** + * @covers ::wp_maybe_load_embeds + */ public function test_wp_maybe_load_embeds() { $this->assertSameSets( array( 10, 9999 ), array_keys( $GLOBALS['wp_embed']->handlers ) ); $this->assertSameSets( @@ -76,6 +88,9 @@ public function test_wp_maybe_load_embeds() { ); } + /** + * @covers ::wp_embed_register_handler + */ public function test_wp_embed_register_handler() { $handle = __FUNCTION__; $regex = '#https?://example\.com/embed/([^/]+)#i'; @@ -94,6 +109,9 @@ public function test_wp_embed_register_handler() { $this->assertContains( $expected, $actual ); } + /** + * @covers ::wp_embed_unregister_handler + */ public function test_wp_embed_unregister_handler() { $this->assertArrayHasKey( 'youtube_embed_url', $GLOBALS['wp_embed']->handlers[10] ); @@ -109,6 +127,8 @@ public function test_wp_embed_unregister_handler() { /** * @group external-http + * + * @covers ::autoembed */ public function test_autoembed_should_do_nothing_without_matching_handler() { $content = "\nhttp://example.com/embed/foo\n"; @@ -119,6 +139,8 @@ public function test_autoembed_should_do_nothing_without_matching_handler() { /** * @group external-http + * + * @covers ::autoembed */ public function test_autoembed_should_return_modified_content() { $handle = __FUNCTION__; @@ -135,6 +157,9 @@ public function test_autoembed_should_return_modified_content() { $this->assertSame( "\nEmbedded http://example.com/embed/foo\n", $actual ); } + /** + * @covers ::delete_oembed_caches + */ public function test_delete_oembed_caches() { $post_id = self::factory()->post->create(); @@ -148,6 +173,9 @@ public function test_delete_oembed_caches() { $this->assertSame( array(), get_post_meta( $post_id, '_oembed_baz' ) ); } + /** + * @covers ::cache_oembed + */ public function test_cache_oembed_invalid_post_type() { $post_id = self::factory()->post->create( array( 'post_type' => 'nav_menu_item' ) ); @@ -155,6 +183,9 @@ public function test_cache_oembed_invalid_post_type() { $this->assertNotSame( $post_id, $this->wp_embed->post_ID ); } + /** + * @covers ::cache_oembed + */ public function test_cache_oembed_empty_content() { $post_id = self::factory()->post->create( array( 'post_content' => '' ) ); @@ -162,6 +193,9 @@ public function test_cache_oembed_empty_content() { $this->assertNotSame( $post_id, $this->wp_embed->post_ID ); } + /** + * @covers ::cache_oembed + */ public function test_cache_oembed_for_post() { $url = 'https://example.com/'; $expected = 'Embedded content'; @@ -180,6 +214,9 @@ public function test_cache_oembed_for_post() { $this->assertNotEmpty( get_post_meta( $post_id, $cachekey_time, true ) ); } + /** + * @covers ::shortcode + */ public function test_shortcode_should_get_cached_data_from_post_meta_for_known_post() { global $post; @@ -207,6 +244,9 @@ public function test_shortcode_should_get_cached_data_from_post_meta_for_known_p $this->assertSame( $expected, $cached ); } + /** + * @covers ::shortcode + */ public function test_shortcode_should_get_cached_failure_from_post_meta_for_known_post() { global $post; @@ -241,6 +281,8 @@ public function test_shortcode_should_get_cached_failure_from_post_meta_for_know /** * @ticket 34115 + * + * @covers ::shortcode */ public function test_shortcode_should_cache_data_in_custom_post() { $url = 'https://example.com/'; @@ -267,6 +309,8 @@ public function test_shortcode_should_cache_data_in_custom_post() { /** * @ticket 34115 + * + * @covers ::shortcode */ public function test_shortcode_should_cache_failure_in_custom_post() { $url = 'https://example.com/'; @@ -295,6 +339,8 @@ public function test_shortcode_should_cache_failure_in_custom_post() { * Test that parsing an embed shortcode should cause oembed_cache to be updated. * * @ticket 42310 + * + * @covers ::shortcode */ public function test_shortcode_should_update_custom_post() { add_filter( 'oembed_ttl', '__return_zero' ); @@ -327,6 +373,8 @@ public function test_shortcode_should_update_custom_post() { /** * @group external-http + * + * @covers ::shortcode */ public function test_shortcode_should_get_url_from_src_attribute() { $url = 'http://example.com/embed/foo'; @@ -337,6 +385,8 @@ public function test_shortcode_should_get_url_from_src_attribute() { /** * @group external-http + * + * @covers ::shortcode */ public function test_shortcode_should_return_empty_string_for_missing_url() { $this->assertEmpty( $this->wp_embed->shortcode( array() ) ); @@ -344,6 +394,8 @@ public function test_shortcode_should_return_empty_string_for_missing_url() { /** * @group external-http + * + * @covers ::shortcode */ public function test_shortcode_should_make_link_for_unknown_url() { $url = 'http://example.com/embed/foo'; @@ -353,7 +405,7 @@ public function test_shortcode_should_make_link_for_unknown_url() { } /** - * @group external-http + * @covers ::run_shortcode */ public function test_run_shortcode_url_only() { $url = 'http://example.com/embed/foo'; @@ -361,6 +413,9 @@ public function test_run_shortcode_url_only() { $this->assertSame( '' . esc_html( $url ) . '', $actual ); } + /** + * @covers ::maybe_make_link + */ public function test_maybe_make_link() { $url = 'http://example.com/embed/foo'; $actual = $this->wp_embed->maybe_make_link( $url ); @@ -368,11 +423,17 @@ public function test_maybe_make_link() { $this->assertSame( '' . esc_html( $url ) . '', $actual ); } + /** + * @covers ::maybe_make_link + */ public function test_maybe_make_link_return_false_on_fail() { $this->wp_embed->return_false_on_fail = true; $this->assertFalse( $this->wp_embed->maybe_make_link( 'http://example.com/' ) ); } + /** + * @covers ::maybe_make_link + */ public function test_maybe_make_link_do_not_link_if_unknown() { $url = 'http://example.com/'; From 281692378f2d68216ea68c82cc62302e7e20c216 Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Tue, 14 Apr 2026 10:12:12 +0000 Subject: [PATCH 011/106] Upgrade/Install: Use new default admin color scheme for links on the setup screen. This changeset updates the link colors on the setup screen and the default `wp_die()` fallback styles to use the new default admin color scheme. Props audrasjb, darshitrajyaguru97, dhrumilk, hbhalodia, huzaifaalmesbah, ismail0071, mikinc860, pooja-n, shailu25, sumitsingh, vishitshah, wildworks Fixes #64962. See #64308. git-svn-id: https://develop.svn.wordpress.org/trunk@62230 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/install.css | 6 +++--- src/wp-includes/functions.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wp-admin/css/install.css b/src/wp-admin/css/install.css index 71ea71c7d2863..9476749dd7cf2 100644 --- a/src/wp-admin/css/install.css +++ b/src/wp-admin/css/install.css @@ -16,16 +16,16 @@ body { } a { - color: #2271b1; + color: var(--wp-admin-theme-color); } a:hover, a:active { - color: #135e96; + color: var(--wp-admin-theme-color-darker-20); } a:focus { - color: #043959; + color: var(--wp-admin-theme-color-darker-20); border-radius: 2px; box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color, #3858e9); /* Only visible in Windows High Contrast mode */ diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 85b6043b0b5c8..7d71c8c56963d 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -3975,14 +3975,14 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) { font-size: 14px ; } a { - color: #2271b1; + color: #3858e9; } a:hover, a:active { - color: #135e96; + color: #183ad6; } a:focus { - color: #043959; + color: #183ad6; box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color, #3858e9); outline: 2px solid transparent; } From 5accf7de0ce5078b47e5941aa32b2e560eae80af Mon Sep 17 00:00:00 2001 From: ramonopoly Date: Tue, 14 Apr 2026 10:25:31 +0000 Subject: [PATCH 012/106] Disable pings/trackbacks for local, development, and staging environments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When WP_ENVIRONMENT_TYPE is not `production`, disable pingbacks and trackbacks. Otherwise, when `WP_ENVIRONMENT_TYPE` is `local`, `development`, or `staging`, pingbacks and trackbacks are sent when posts are published. This creates confusion on the receiving end and is unnecessary for testing workflows. Props arcangelini, cagrimmett, ramonopoly, tyxla. Fixes #64837. git-svn-id: https://develop.svn.wordpress.org/trunk@62231 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment.php | 78 ++++++ src/wp-includes/default-filters.php | 6 + .../comment/disablePingsForEnvironment.php | 254 ++++++++++++++++++ 3 files changed, 338 insertions(+) create mode 100644 tests/phpunit/tests/comment/disablePingsForEnvironment.php diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php index 5395997ecd0ef..70d5c03b378f4 100644 --- a/src/wp-includes/comment.php +++ b/src/wp-includes/comment.php @@ -3163,6 +3163,84 @@ function generic_ping( $post_id = 0 ) { return $post_id; } +/** + * Determines whether pings should be disabled for the current environment. + * + * By default, all pings (outgoing pingbacks, trackbacks, and ping service + * notifications, as well as incoming pingbacks and trackbacks) are disabled + * for non-production environments ('local', 'development', 'staging'). + * + * @since 7.1.0 + * + * @return bool True if pings should be disabled, false otherwise. + */ +function wp_should_disable_pings_for_environment() { + $environment_type = wp_get_environment_type(); + $should_disable = 'production' !== $environment_type; + + /** + * Filters whether pings should be disabled for the current environment. + * + * Returning false re-enables pings in non-production environments. + * Returning true disables pings even in production. + * + * @since 7.1.0 + * + * @param bool $should_disable Whether pings should be disabled. Default true + * for non-production environments, false for production. + * @param string $environment_type The current environment type as returned by + * wp_get_environment_type(). + */ + return apply_filters( 'wp_should_disable_pings_for_environment', $should_disable, $environment_type ); +} + +/** + * Removes outgoing ping callbacks in non-production environments. + * + * Hooked to `do_all_pings` at priority 1 so it runs before the default + * priority 10 callbacks. Does not remove `do_all_enclosures`. + * + * @since 7.1.0 + */ +function wp_maybe_disable_outgoing_pings_for_environment() { + if ( wp_should_disable_pings_for_environment() ) { + remove_action( 'do_all_pings', 'do_all_pingbacks' ); + remove_action( 'do_all_pings', 'do_all_trackbacks' ); + remove_action( 'do_all_pings', 'generic_ping' ); + } +} + +/** + * Rejects incoming trackbacks in non-production environments. + * + * Hooked to `pre_trackback_post` which fires in `wp-trackback.php` before the + * trackback is processed. Calls `trackback_response()` which sends an XML error + * response and terminates the request. + * + * @since 7.1.0 + */ +function wp_maybe_disable_trackback_for_environment() { + if ( wp_should_disable_pings_for_environment() ) { + trackback_response( 1, __( 'Trackbacks are disabled in non-production environments.' ) ); + } +} + +/** + * Removes the pingback XML-RPC method in non-production environments. + * + * @since 7.1.0 + * + * @param string[] $methods An array of XML-RPC methods, keyed by their methodName. + * @return string[] Modified array of XML-RPC methods. + */ +function wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ) { + if ( wp_should_disable_pings_for_environment() ) { + unset( $methods['pingback.ping'] ); + } + + return $methods; +} + /** * Pings back the links found in a post. * diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 4b6d9de25fa11..8beb3718f52f5 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -421,6 +421,12 @@ add_action( 'do_all_pings', 'do_all_enclosures', 10, 0 ); add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); add_action( 'do_all_pings', 'generic_ping', 10, 0 ); + +// Disable pings (pingbacks, trackbacks, and ping service notifications) in non-production environments. +add_action( 'do_all_pings', 'wp_maybe_disable_outgoing_pings_for_environment', 1, 0 ); +add_action( 'pre_trackback_post', 'wp_maybe_disable_trackback_for_environment', 10, 0 ); +add_filter( 'xmlrpc_methods', 'wp_maybe_disable_xmlrpc_pingback_for_environment' ); + add_action( 'do_robots', 'do_robots' ); add_action( 'do_favicon', 'do_favicon' ); add_action( 'wp_before_include_template', 'wp_start_template_enhancement_output_buffer', 1000 ); // Late priority to let `wp_template_enhancement_output_buffer` filters and `wp_finalized_template_enhancement_output_buffer` actions be registered. diff --git a/tests/phpunit/tests/comment/disablePingsForEnvironment.php b/tests/phpunit/tests/comment/disablePingsForEnvironment.php new file mode 100644 index 0000000000000..88fbd3e55f434 --- /dev/null +++ b/tests/phpunit/tests/comment/disablePingsForEnvironment.php @@ -0,0 +1,254 @@ +original_env = getenv( 'WP_ENVIRONMENT_TYPE' ); + } + + public function tear_down() { + if ( false === $this->original_env ) { + putenv( 'WP_ENVIRONMENT_TYPE' ); + } else { + putenv( 'WP_ENVIRONMENT_TYPE=' . $this->original_env ); + } + parent::tear_down(); + } + + /** + * @ticket 64837 + */ + public function test_should_disable_returns_true_for_local() { + putenv( 'WP_ENVIRONMENT_TYPE=local' ); + $this->assertTrue( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_should_disable_returns_true_for_development() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + $this->assertTrue( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_should_disable_returns_true_for_staging() { + putenv( 'WP_ENVIRONMENT_TYPE=staging' ); + $this->assertTrue( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_should_disable_returns_false_for_production() { + putenv( 'WP_ENVIRONMENT_TYPE=production' ); + $this->assertFalse( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_filter_can_enable_pings_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=local' ); + add_filter( 'wp_should_disable_pings_for_environment', '__return_false' ); + + $this->assertFalse( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_filter_can_disable_pings_in_production() { + putenv( 'WP_ENVIRONMENT_TYPE=production' ); + add_filter( 'wp_should_disable_pings_for_environment', '__return_true' ); + + $this->assertTrue( wp_should_disable_pings_for_environment() ); + } + + /** + * @ticket 64837 + */ + public function test_filter_receives_environment_type() { + putenv( 'WP_ENVIRONMENT_TYPE=staging' ); + + $received_type = null; + add_filter( + 'wp_should_disable_pings_for_environment', + function ( $should_disable, $environment_type ) use ( &$received_type ) { + $received_type = $environment_type; + return $should_disable; + }, + 10, + 2 + ); + + wp_should_disable_pings_for_environment(); + + $this->assertSame( 'staging', $received_type ); + } + + /** + * @ticket 64837 + */ + public function test_outgoing_pingbacks_removed_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + // Re-register the defaults to ensure a clean state. + add_action( 'do_all_pings', 'do_all_pingbacks', 10, 0 ); + + // Fire the priority-1 callback. + wp_maybe_disable_outgoing_pings_for_environment(); + + $this->assertFalse( has_action( 'do_all_pings', 'do_all_pingbacks' ) ); + } + + /** + * @ticket 64837 + */ + public function test_outgoing_trackbacks_removed_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); + + wp_maybe_disable_outgoing_pings_for_environment(); + + $this->assertFalse( has_action( 'do_all_pings', 'do_all_trackbacks' ) ); + } + + /** + * @ticket 64837 + */ + public function test_outgoing_generic_ping_removed_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + add_action( 'do_all_pings', 'generic_ping', 10, 0 ); + + wp_maybe_disable_outgoing_pings_for_environment(); + + $this->assertFalse( has_action( 'do_all_pings', 'generic_ping' ) ); + } + + /** + * @ticket 64837 + */ + public function test_enclosures_not_removed_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + add_action( 'do_all_pings', 'do_all_enclosures', 10, 0 ); + + wp_maybe_disable_outgoing_pings_for_environment(); + + $this->assertTrue( has_action( 'do_all_pings', 'do_all_enclosures', 10 ) ); + } + + /** + * @ticket 64837 + */ + public function test_outgoing_pings_preserved_in_production() { + putenv( 'WP_ENVIRONMENT_TYPE=production' ); + + add_action( 'do_all_pings', 'do_all_pingbacks', 10, 0 ); + add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); + add_action( 'do_all_pings', 'generic_ping', 10, 0 ); + + wp_maybe_disable_outgoing_pings_for_environment(); + + $this->assertTrue( has_action( 'do_all_pings', 'do_all_pingbacks', 10 ), 'do_all_pingbacks should still be hooked at priority 10.' ); + $this->assertTrue( has_action( 'do_all_pings', 'do_all_trackbacks', 10 ), 'do_all_trackbacks should still be hooked at priority 10.' ); + $this->assertTrue( has_action( 'do_all_pings', 'generic_ping', 10 ), 'generic_ping should still be hooked at priority 10.' ); + } + + /** + * @ticket 64837 + */ + public function test_trackback_hook_is_registered() { + $this->assertTrue( has_action( 'pre_trackback_post', 'wp_maybe_disable_trackback_for_environment', 10 ) ); + } + + /** + * @ticket 64837 + */ + public function test_pings_open_unaffected_by_environment() { + putenv( 'WP_ENVIRONMENT_TYPE=local' ); + + $post = self::factory()->post->create_and_get( + array( 'ping_status' => 'open' ) + ); + + $this->assertTrue( pings_open( $post ) ); + } + + /** + * @ticket 64837 + */ + public function test_xmlrpc_pingback_removed_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + $methods = array( + 'pingback.ping' => 'this:pingback_ping', + 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', + 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', + ); + + $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); + + $this->assertArrayNotHasKey( 'pingback.ping', $filtered ); + } + + /** + * @ticket 64837 + */ + public function test_xmlrpc_pingback_preserved_in_production() { + putenv( 'WP_ENVIRONMENT_TYPE=production' ); + + $methods = array( + 'pingback.ping' => 'this:pingback_ping', + 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', + ); + + $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); + + $this->assertArrayHasKey( 'pingback.ping', $filtered ); + } + + /** + * @ticket 64837 + */ + public function test_xmlrpc_other_methods_preserved_in_non_production() { + putenv( 'WP_ENVIRONMENT_TYPE=development' ); + + $methods = array( + 'pingback.ping' => 'this:pingback_ping', + 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', + 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', + 'wp.getPost' => 'this:wp_getPost', + ); + + $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); + + $this->assertArrayHasKey( 'pingback.extensions.getPingbacks', $filtered ); + $this->assertArrayHasKey( 'wp.getUsersBlogs', $filtered ); + $this->assertArrayHasKey( 'wp.getPost', $filtered ); + } +} From 8e3998b60e8a93a7626da1825aa919664275234c Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Tue, 14 Apr 2026 10:45:04 +0000 Subject: [PATCH 013/106] Administration: Fix focus outline being cut off for the metabox collapse and move buttons. Fixes an issue where the focus outline on metabox collapse buttons and move handles was being clipped. Props abcd95, audrasjb, brianhogg, darshitrajyaguru97, poena, wildworks. Fixes #65060. git-svn-id: https://develop.svn.wordpress.org/trunk@62232 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/common.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index b317af45e023e..4c18ab586c359 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -3340,7 +3340,7 @@ img { .postbox .handle-order-higher:focus, .postbox .handle-order-lower:focus, .postbox .handlediv:focus { - box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color); + box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color); border-radius: 50%; /* Only visible in Windows High Contrast mode */ outline: 2px solid transparent; From d7a80fc1887fc2a94560ee54e6a74e6fdce800d7 Mon Sep 17 00:00:00 2001 From: ramonopoly Date: Tue, 14 Apr 2026 11:37:02 +0000 Subject: [PATCH 014/106] REVERT r62231: Disable pings/trackbacks for local, development, and staging environments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commits to trunk have been paused for 7.0. See: https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/ Props arcangelini, cagrimmett, ramonopoly, tyxla, ocean90, khushipatel15. Follow-up to [64837]. See #64837. git-svn-id: https://develop.svn.wordpress.org/trunk@62233 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment.php | 78 ------ src/wp-includes/default-filters.php | 6 - .../comment/disablePingsForEnvironment.php | 254 ------------------ 3 files changed, 338 deletions(-) delete mode 100644 tests/phpunit/tests/comment/disablePingsForEnvironment.php diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php index 70d5c03b378f4..5395997ecd0ef 100644 --- a/src/wp-includes/comment.php +++ b/src/wp-includes/comment.php @@ -3163,84 +3163,6 @@ function generic_ping( $post_id = 0 ) { return $post_id; } -/** - * Determines whether pings should be disabled for the current environment. - * - * By default, all pings (outgoing pingbacks, trackbacks, and ping service - * notifications, as well as incoming pingbacks and trackbacks) are disabled - * for non-production environments ('local', 'development', 'staging'). - * - * @since 7.1.0 - * - * @return bool True if pings should be disabled, false otherwise. - */ -function wp_should_disable_pings_for_environment() { - $environment_type = wp_get_environment_type(); - $should_disable = 'production' !== $environment_type; - - /** - * Filters whether pings should be disabled for the current environment. - * - * Returning false re-enables pings in non-production environments. - * Returning true disables pings even in production. - * - * @since 7.1.0 - * - * @param bool $should_disable Whether pings should be disabled. Default true - * for non-production environments, false for production. - * @param string $environment_type The current environment type as returned by - * wp_get_environment_type(). - */ - return apply_filters( 'wp_should_disable_pings_for_environment', $should_disable, $environment_type ); -} - -/** - * Removes outgoing ping callbacks in non-production environments. - * - * Hooked to `do_all_pings` at priority 1 so it runs before the default - * priority 10 callbacks. Does not remove `do_all_enclosures`. - * - * @since 7.1.0 - */ -function wp_maybe_disable_outgoing_pings_for_environment() { - if ( wp_should_disable_pings_for_environment() ) { - remove_action( 'do_all_pings', 'do_all_pingbacks' ); - remove_action( 'do_all_pings', 'do_all_trackbacks' ); - remove_action( 'do_all_pings', 'generic_ping' ); - } -} - -/** - * Rejects incoming trackbacks in non-production environments. - * - * Hooked to `pre_trackback_post` which fires in `wp-trackback.php` before the - * trackback is processed. Calls `trackback_response()` which sends an XML error - * response and terminates the request. - * - * @since 7.1.0 - */ -function wp_maybe_disable_trackback_for_environment() { - if ( wp_should_disable_pings_for_environment() ) { - trackback_response( 1, __( 'Trackbacks are disabled in non-production environments.' ) ); - } -} - -/** - * Removes the pingback XML-RPC method in non-production environments. - * - * @since 7.1.0 - * - * @param string[] $methods An array of XML-RPC methods, keyed by their methodName. - * @return string[] Modified array of XML-RPC methods. - */ -function wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ) { - if ( wp_should_disable_pings_for_environment() ) { - unset( $methods['pingback.ping'] ); - } - - return $methods; -} - /** * Pings back the links found in a post. * diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 8beb3718f52f5..4b6d9de25fa11 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -421,12 +421,6 @@ add_action( 'do_all_pings', 'do_all_enclosures', 10, 0 ); add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); add_action( 'do_all_pings', 'generic_ping', 10, 0 ); - -// Disable pings (pingbacks, trackbacks, and ping service notifications) in non-production environments. -add_action( 'do_all_pings', 'wp_maybe_disable_outgoing_pings_for_environment', 1, 0 ); -add_action( 'pre_trackback_post', 'wp_maybe_disable_trackback_for_environment', 10, 0 ); -add_filter( 'xmlrpc_methods', 'wp_maybe_disable_xmlrpc_pingback_for_environment' ); - add_action( 'do_robots', 'do_robots' ); add_action( 'do_favicon', 'do_favicon' ); add_action( 'wp_before_include_template', 'wp_start_template_enhancement_output_buffer', 1000 ); // Late priority to let `wp_template_enhancement_output_buffer` filters and `wp_finalized_template_enhancement_output_buffer` actions be registered. diff --git a/tests/phpunit/tests/comment/disablePingsForEnvironment.php b/tests/phpunit/tests/comment/disablePingsForEnvironment.php deleted file mode 100644 index 88fbd3e55f434..0000000000000 --- a/tests/phpunit/tests/comment/disablePingsForEnvironment.php +++ /dev/null @@ -1,254 +0,0 @@ -original_env = getenv( 'WP_ENVIRONMENT_TYPE' ); - } - - public function tear_down() { - if ( false === $this->original_env ) { - putenv( 'WP_ENVIRONMENT_TYPE' ); - } else { - putenv( 'WP_ENVIRONMENT_TYPE=' . $this->original_env ); - } - parent::tear_down(); - } - - /** - * @ticket 64837 - */ - public function test_should_disable_returns_true_for_local() { - putenv( 'WP_ENVIRONMENT_TYPE=local' ); - $this->assertTrue( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_should_disable_returns_true_for_development() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - $this->assertTrue( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_should_disable_returns_true_for_staging() { - putenv( 'WP_ENVIRONMENT_TYPE=staging' ); - $this->assertTrue( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_should_disable_returns_false_for_production() { - putenv( 'WP_ENVIRONMENT_TYPE=production' ); - $this->assertFalse( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_filter_can_enable_pings_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=local' ); - add_filter( 'wp_should_disable_pings_for_environment', '__return_false' ); - - $this->assertFalse( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_filter_can_disable_pings_in_production() { - putenv( 'WP_ENVIRONMENT_TYPE=production' ); - add_filter( 'wp_should_disable_pings_for_environment', '__return_true' ); - - $this->assertTrue( wp_should_disable_pings_for_environment() ); - } - - /** - * @ticket 64837 - */ - public function test_filter_receives_environment_type() { - putenv( 'WP_ENVIRONMENT_TYPE=staging' ); - - $received_type = null; - add_filter( - 'wp_should_disable_pings_for_environment', - function ( $should_disable, $environment_type ) use ( &$received_type ) { - $received_type = $environment_type; - return $should_disable; - }, - 10, - 2 - ); - - wp_should_disable_pings_for_environment(); - - $this->assertSame( 'staging', $received_type ); - } - - /** - * @ticket 64837 - */ - public function test_outgoing_pingbacks_removed_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - // Re-register the defaults to ensure a clean state. - add_action( 'do_all_pings', 'do_all_pingbacks', 10, 0 ); - - // Fire the priority-1 callback. - wp_maybe_disable_outgoing_pings_for_environment(); - - $this->assertFalse( has_action( 'do_all_pings', 'do_all_pingbacks' ) ); - } - - /** - * @ticket 64837 - */ - public function test_outgoing_trackbacks_removed_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); - - wp_maybe_disable_outgoing_pings_for_environment(); - - $this->assertFalse( has_action( 'do_all_pings', 'do_all_trackbacks' ) ); - } - - /** - * @ticket 64837 - */ - public function test_outgoing_generic_ping_removed_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - add_action( 'do_all_pings', 'generic_ping', 10, 0 ); - - wp_maybe_disable_outgoing_pings_for_environment(); - - $this->assertFalse( has_action( 'do_all_pings', 'generic_ping' ) ); - } - - /** - * @ticket 64837 - */ - public function test_enclosures_not_removed_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - add_action( 'do_all_pings', 'do_all_enclosures', 10, 0 ); - - wp_maybe_disable_outgoing_pings_for_environment(); - - $this->assertTrue( has_action( 'do_all_pings', 'do_all_enclosures', 10 ) ); - } - - /** - * @ticket 64837 - */ - public function test_outgoing_pings_preserved_in_production() { - putenv( 'WP_ENVIRONMENT_TYPE=production' ); - - add_action( 'do_all_pings', 'do_all_pingbacks', 10, 0 ); - add_action( 'do_all_pings', 'do_all_trackbacks', 10, 0 ); - add_action( 'do_all_pings', 'generic_ping', 10, 0 ); - - wp_maybe_disable_outgoing_pings_for_environment(); - - $this->assertTrue( has_action( 'do_all_pings', 'do_all_pingbacks', 10 ), 'do_all_pingbacks should still be hooked at priority 10.' ); - $this->assertTrue( has_action( 'do_all_pings', 'do_all_trackbacks', 10 ), 'do_all_trackbacks should still be hooked at priority 10.' ); - $this->assertTrue( has_action( 'do_all_pings', 'generic_ping', 10 ), 'generic_ping should still be hooked at priority 10.' ); - } - - /** - * @ticket 64837 - */ - public function test_trackback_hook_is_registered() { - $this->assertTrue( has_action( 'pre_trackback_post', 'wp_maybe_disable_trackback_for_environment', 10 ) ); - } - - /** - * @ticket 64837 - */ - public function test_pings_open_unaffected_by_environment() { - putenv( 'WP_ENVIRONMENT_TYPE=local' ); - - $post = self::factory()->post->create_and_get( - array( 'ping_status' => 'open' ) - ); - - $this->assertTrue( pings_open( $post ) ); - } - - /** - * @ticket 64837 - */ - public function test_xmlrpc_pingback_removed_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - $methods = array( - 'pingback.ping' => 'this:pingback_ping', - 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', - 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', - ); - - $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); - - $this->assertArrayNotHasKey( 'pingback.ping', $filtered ); - } - - /** - * @ticket 64837 - */ - public function test_xmlrpc_pingback_preserved_in_production() { - putenv( 'WP_ENVIRONMENT_TYPE=production' ); - - $methods = array( - 'pingback.ping' => 'this:pingback_ping', - 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', - ); - - $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); - - $this->assertArrayHasKey( 'pingback.ping', $filtered ); - } - - /** - * @ticket 64837 - */ - public function test_xmlrpc_other_methods_preserved_in_non_production() { - putenv( 'WP_ENVIRONMENT_TYPE=development' ); - - $methods = array( - 'pingback.ping' => 'this:pingback_ping', - 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', - 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', - 'wp.getPost' => 'this:wp_getPost', - ); - - $filtered = wp_maybe_disable_xmlrpc_pingback_for_environment( $methods ); - - $this->assertArrayHasKey( 'pingback.extensions.getPingbacks', $filtered ); - $this->assertArrayHasKey( 'wp.getUsersBlogs', $filtered ); - $this->assertArrayHasKey( 'wp.getPost', $filtered ); - } -} From 5044e953df6e6bc058f8c6bf2eb9e81e4889a9b1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 14 Apr 2026 22:29:29 +0000 Subject: [PATCH 015/106] Tests: Rename some oEmbed test classes as per the naming conventions. Follow-up to [37708], [37892], [62224], [62227]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62234 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/oembed/WpEmbed.php | 2 +- tests/phpunit/tests/oembed/wpOembed.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/oembed/WpEmbed.php b/tests/phpunit/tests/oembed/WpEmbed.php index 4c77e904399db..42d9c9e0f4ed9 100644 --- a/tests/phpunit/tests/oembed/WpEmbed.php +++ b/tests/phpunit/tests/oembed/WpEmbed.php @@ -5,7 +5,7 @@ * * @coversDefaultClass WP_Embed */ -class Tests_WP_Embed extends WP_UnitTestCase { +class Tests_oEmbed_WpEmbed extends WP_UnitTestCase { /** * @var WP_Embed */ diff --git a/tests/phpunit/tests/oembed/wpOembed.php b/tests/phpunit/tests/oembed/wpOembed.php index 288d1742d373e..bc10c2a10a7eb 100644 --- a/tests/phpunit/tests/oembed/wpOembed.php +++ b/tests/phpunit/tests/oembed/wpOembed.php @@ -5,7 +5,7 @@ * * @coversDefaultClass WP_oEmbed */ -class Tests_WP_oEmbed extends WP_UnitTestCase { +class Tests_oEmbed_wpOembed extends WP_UnitTestCase { /** * @var WP_oEmbed */ From bf4c17409433cc14a37aa0ad7bf10982a4b8ebe6 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 15 Apr 2026 22:27:45 +0000 Subject: [PATCH 016/106] Tests: Add missing `@covers` tags for some multisite tests. Follow-up to [62213], [62218], [62222]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62237 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/multisite/getBlogDetails.php | 2 ++ tests/phpunit/tests/multisite/updateBlogDetails.php | 2 ++ tests/phpunit/tests/multisite/updateBlogStatus.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/tests/phpunit/tests/multisite/getBlogDetails.php b/tests/phpunit/tests/multisite/getBlogDetails.php index 5a374d43dc69a..19a8520c2c887 100644 --- a/tests/phpunit/tests/multisite/getBlogDetails.php +++ b/tests/phpunit/tests/multisite/getBlogDetails.php @@ -5,6 +5,8 @@ * @group ms-required * @group ms-site * @group multisite + * + * @covers ::get_blog_details */ class Tests_Multisite_GetBlogDetails extends WP_UnitTestCase { diff --git a/tests/phpunit/tests/multisite/updateBlogDetails.php b/tests/phpunit/tests/multisite/updateBlogDetails.php index 8800e66818684..62c0f7b355cd7 100644 --- a/tests/phpunit/tests/multisite/updateBlogDetails.php +++ b/tests/phpunit/tests/multisite/updateBlogDetails.php @@ -4,6 +4,8 @@ * @group ms-required * @group ms-site * @group multisite + * + * @covers ::update_blog_details */ class Tests_Multisite_UpdateBlogDetails extends WP_UnitTestCase { diff --git a/tests/phpunit/tests/multisite/updateBlogStatus.php b/tests/phpunit/tests/multisite/updateBlogStatus.php index 069eddd984abb..20cd90307fd34 100644 --- a/tests/phpunit/tests/multisite/updateBlogStatus.php +++ b/tests/phpunit/tests/multisite/updateBlogStatus.php @@ -4,6 +4,8 @@ * @group ms-required * @group ms-site * @group multisite + * + * @covers ::update_blog_status */ class Tests_Multisite_UpdateBlogStatus extends WP_UnitTestCase { From 42388b5720be7aaa3e79b653cc46c92a3d5c75b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=B3=C5=82kowski?= Date: Thu, 16 Apr 2026 07:22:23 +0000 Subject: [PATCH 017/106] Abilities API: Catch exceptions thrown by ability callbacks and return WP_Error. Wraps `invoke_callback()` in a try/catch so that exceptions thrown by execute or permission callbacks are converted to a `WP_Error` with the `ability_callback_exception` code instead of propagating as uncaught throwables. Developed in: https://github.com/WordPress/wordpress-develop/pull/11544 Props priyankagusani, jamesgiroux, jeffpaul, dkotter, adamsilverstein, justlevine, jorbin, pavanpatil1. Fixes #65058. git-svn-id: https://develop.svn.wordpress.org/trunk@62238 602fd350-edb4-49c9-b593-d223f7449a82 --- .../abilities-api/class-wp-ability.php | 16 ++++++- .../phpunit/tests/abilities-api/wpAbility.php | 48 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/abilities-api/class-wp-ability.php b/src/wp-includes/abilities-api/class-wp-ability.php index 967f1641156b0..cc01cc274c143 100644 --- a/src/wp-includes/abilities-api/class-wp-ability.php +++ b/src/wp-includes/abilities-api/class-wp-ability.php @@ -502,7 +502,7 @@ public function validate_input( $input = null ) { * * @param callable $callback The callable to invoke. * @param mixed $input Optional. The input data for the ability. Default `null`. - * @return mixed The result of the callable execution. + * @return mixed The result of the callable execution, or a `WP_Error` if the callback threw. */ protected function invoke_callback( callable $callback, $input = null ) { $args = array(); @@ -510,7 +510,19 @@ protected function invoke_callback( callable $callback, $input = null ) { $args[] = $input; } - return $callback( ...$args ); + try { + return $callback( ...$args ); + } catch ( Throwable $e ) { + return new WP_Error( + 'ability_callback_exception', + sprintf( + /* translators: 1: Ability name, 2: Exception message. */ + __( 'Ability "%1$s" callback threw an exception: %2$s' ), + esc_html( $this->name ), + esc_html( $e->getMessage() ) + ) + ); + } } /** diff --git a/tests/phpunit/tests/abilities-api/wpAbility.php b/tests/phpunit/tests/abilities-api/wpAbility.php index 73a5fbf17a9ef..aea2c09624929 100644 --- a/tests/phpunit/tests/abilities-api/wpAbility.php +++ b/tests/phpunit/tests/abilities-api/wpAbility.php @@ -497,6 +497,54 @@ public function test_execute_no_input() { $this->assertSame( 42, $ability->execute() ); } + /** + * Tests that an exception thrown by the execute callback is converted to a WP_Error + * instead of being propagated as an uncaught throwable. + * + * @ticket 65058 + */ + public function test_execute_catches_callback_exception() { + $args = array_merge( + self::$test_ability_properties, + array( + 'execute_callback' => static function (): int { + throw new RuntimeException( 'boom' ); + }, + ) + ); + + $ability = new WP_Ability( self::$test_ability_name, $args ); + $result = $ability->execute(); + + $this->assertWPError( $result, 'Ability::execute() should return WP_Error when the callback throws.' ); + $this->assertSame( 'ability_callback_exception', $result->get_error_code() ); + $this->assertStringContainsString( 'boom', $result->get_error_message() ); + } + + /** + * Tests that an exception thrown by the permission callback is converted to a WP_Error + * instead of being propagated as an uncaught throwable. + * + * @ticket 65058 + */ + public function test_check_permissions_catches_callback_exception() { + $args = array_merge( + self::$test_ability_properties, + array( + 'permission_callback' => static function (): bool { + throw new RuntimeException( 'permission exploded' ); + }, + ) + ); + + $ability = new WP_Ability( self::$test_ability_name, $args ); + $result = $ability->check_permissions(); + + $this->assertWPError( $result, 'Ability::check_permissions() should return WP_Error when the callback throws.' ); + $this->assertSame( 'ability_callback_exception', $result->get_error_code() ); + $this->assertStringContainsString( 'permission exploded', $result->get_error_message() ); + } + /** * Tests that before_execute_ability action is fired with correct parameters. * From 9f8a3b1e1893f85fabc17b0d2b6d96e6bdb92208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=B3=C5=82kowski?= Date: Thu, 16 Apr 2026 07:37:31 +0000 Subject: [PATCH 018/106] AI: Prevent `wp_supports_ai` filter from overriding the `WP_AI_SUPPORT` constant. When `WP_AI_SUPPORT` is explicitly set to `false`, `wp_supports_ai()` now returns early before the filter runs. This ensures the site owner's explicit preference to disable AI cannot be overridden by a plugin via the `wp_supports_ai` filter. The filter default is now always `true`, since the constant check happens beforehand. Developed in: https://github.com/WordPress/wordpress-develop/pull/11295 Follow-up to [62067]. Props justlevine, westonruter, gziolo, mindctrl, adamsilverstein, johnjamesjacoby, ahortin, nilambar, ozgursar, audrasjb, jeffpaul. Fixes #64706. git-svn-id: https://develop.svn.wordpress.org/trunk@62239 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/ai-client.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/wp-includes/ai-client.php b/src/wp-includes/ai-client.php index 818e1dbaedcde..4fc20166fb8bb 100644 --- a/src/wp-includes/ai-client.php +++ b/src/wp-includes/ai-client.php @@ -17,20 +17,22 @@ * @return bool Whether AI features are supported. */ function wp_supports_ai(): bool { - $is_enabled = defined( 'WP_AI_SUPPORT' ) ? WP_AI_SUPPORT : true; + // Return early if AI is disabled by the current environment. + if ( defined( 'WP_AI_SUPPORT' ) && ! WP_AI_SUPPORT ) { + return false; + } /** - * Filters whether the current request should use AI. + * Filters whether the current request can use AI. * * This allows plugins and 3rd-party code to disable AI features on a per-request basis, or to even override explicit * preferences defined by the site owner. * * @since 7.0.0 * - * @param bool $is_enabled Whether the current request should use AI. Default to WP_AI_SUPPORT constant, or true if - * the constant is not defined. + * @param bool $is_enabled Whether AI is available. Default to true. */ - return (bool) apply_filters( 'wp_supports_ai', $is_enabled ); + return (bool) apply_filters( 'wp_supports_ai', true ); } /** From bccb9c1143d15fd00da54059269aa2cc3dbd1665 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 16 Apr 2026 18:42:53 +0000 Subject: [PATCH 019/106] Tests: Remove `external-http` group from a `get_theme_feature_list()` test. This particular test checks the list of theme features hardcoded into Core and does not perform an external API request. Follow-up to [39906]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62243 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/admin/includesTheme.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/phpunit/tests/admin/includesTheme.php b/tests/phpunit/tests/admin/includesTheme.php index ed90cf9514ae5..446c048bcf18e 100644 --- a/tests/phpunit/tests/admin/includesTheme.php +++ b/tests/phpunit/tests/admin/includesTheme.php @@ -241,7 +241,6 @@ public function test_get_theme_featured_list_api() { * * Differences in the structure can also trigger failure by causing PHP notices/warnings. * - * @group external-http * @ticket 28121 */ public function test_get_theme_featured_list_hardcoded() { From 7f836430e47c74df312cdf4af45ad32a7021b41e Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 17 Apr 2026 19:50:27 +0000 Subject: [PATCH 020/106] Tests: Add missing `@covers` tags for some rewrite tests. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62244 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/rewrite/addRewriteEndpoint.php | 2 ++ tests/phpunit/tests/rewrite/addRewriteRule.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/phpunit/tests/rewrite/addRewriteEndpoint.php b/tests/phpunit/tests/rewrite/addRewriteEndpoint.php index 7b3ada5febe7d..6527f32929917 100644 --- a/tests/phpunit/tests/rewrite/addRewriteEndpoint.php +++ b/tests/phpunit/tests/rewrite/addRewriteEndpoint.php @@ -2,6 +2,8 @@ /** * @group rewrite + * + * @covers ::add_rewrite_endpoint */ class Tests_Rewrite_AddRewriteEndpoint extends WP_UnitTestCase { private $qvs; diff --git a/tests/phpunit/tests/rewrite/addRewriteRule.php b/tests/phpunit/tests/rewrite/addRewriteRule.php index 02efc7bd0aa37..d667f58ceafa9 100644 --- a/tests/phpunit/tests/rewrite/addRewriteRule.php +++ b/tests/phpunit/tests/rewrite/addRewriteRule.php @@ -2,6 +2,8 @@ /** * @group rewrite + * + * @covers ::add_rewrite_rule */ class Tests_Rewrite_AddRewriteRule extends WP_UnitTestCase { From c31e5ef785567be46f3be35e4bf323836db8dfcb Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 18 Apr 2026 16:45:54 +0000 Subject: [PATCH 021/106] Tests: Use a data provider in a `WP_Block_Type_Registry` test for invalid block names. Includes adding missing `@covers` tags. Follow-up to [43742], [51491]. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62245 602fd350-edb4-49c9-b593-d223f7449a82 --- .../tests/blocks/wpBlockTypeRegistry.php | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/tests/phpunit/tests/blocks/wpBlockTypeRegistry.php b/tests/phpunit/tests/blocks/wpBlockTypeRegistry.php index c97bdc95d43a1..97f35f2e8ac7a 100644 --- a/tests/phpunit/tests/blocks/wpBlockTypeRegistry.php +++ b/tests/phpunit/tests/blocks/wpBlockTypeRegistry.php @@ -7,6 +7,8 @@ * @since 5.0.0 * * @group blocks + * + * @coversDefaultClass WP_Block_Type_Registry */ class Tests_Blocks_wpBlockTypeRegistry extends WP_UnitTestCase { @@ -41,57 +43,42 @@ public function tear_down() { } /** - * Should reject numbers + * Should reject invalid block names. * * @ticket 45097 * - * @expectedIncorrectUsage WP_Block_Type_Registry::register - */ - public function test_invalid_non_string_names() { - $result = $this->registry->register( 1, array() ); - $this->assertFalse( $result ); - } - - /** - * Should reject blocks without a namespace + * @covers ::register * - * @ticket 45097 + * @dataProvider data_invalid_block_names * * @expectedIncorrectUsage WP_Block_Type_Registry::register */ - public function test_invalid_names_without_namespace() { - $result = $this->registry->register( 'paragraph', array() ); + public function test_invalid_block_names( $name ) { + $result = $this->registry->register( $name, array() ); $this->assertFalse( $result ); } /** - * Should reject blocks with invalid characters - * - * @ticket 45097 + * Data provider for test_invalid_block_names(). * - * @expectedIncorrectUsage WP_Block_Type_Registry::register + * @return array */ - public function test_invalid_characters() { - $result = $this->registry->register( 'still/_doing_it_wrong', array() ); - $this->assertFalse( $result ); + public function data_invalid_block_names(): array { + return array( + 'non-string name' => array( 1 ), + 'no namespace' => array( 'paragraph' ), + 'invalid characters' => array( 'still/_doing_it_wrong' ), + 'uppercase characters' => array( 'Core/Paragraph' ), + ); } /** - * Should reject blocks with uppercase characters + * Should accept valid block names. * * @ticket 45097 * - * @expectedIncorrectUsage WP_Block_Type_Registry::register - */ - public function test_uppercase_characters() { - $result = $this->registry->register( 'Core/Paragraph', array() ); - $this->assertFalse( $result ); - } - - /** - * Should accept valid block names - * - * @ticket 45097 + * @covers ::register + * @covers ::get_registered */ public function test_register_block_type() { $name = 'core/paragraph'; @@ -106,10 +93,12 @@ public function test_register_block_type() { } /** - * Should fail to re-register the same block + * Should fail to re-register the same block. * * @ticket 45097 * + * @covers ::register + * * @expectedIncorrectUsage WP_Block_Type_Registry::register */ public function test_register_block_type_twice() { @@ -125,9 +114,11 @@ public function test_register_block_type_twice() { } /** - * Should accept a WP_Block_Type instance + * Should accept a WP_Block_Type instance. * * @ticket 45097 + * + * @covers ::register */ public function test_register_block_type_instance() { $block_type = new WP_Fake_Block_Type( 'core/fake' ); @@ -137,10 +128,12 @@ public function test_register_block_type_instance() { } /** - * Unregistering should fail if a block is not registered + * Unregistering should fail if a block is not registered. * * @ticket 45097 * + * @covers ::unregister + * * @expectedIncorrectUsage WP_Block_Type_Registry::unregister */ public function test_unregister_not_registered_block() { @@ -149,9 +142,12 @@ public function test_unregister_not_registered_block() { } /** - * Should unregister existing blocks + * Should unregister existing blocks. * * @ticket 45097 + * + * @covers ::unregister + * @covers ::is_registered */ public function test_unregister_block_type() { $name = 'core/paragraph'; @@ -168,6 +164,8 @@ public function test_unregister_block_type() { /** * @ticket 45097 + * + * @covers ::get_all_registered */ public function test_get_all_registered() { $names = array( 'core/paragraph', 'core/image', 'core/blockquote' ); From 047ef806c329a11ba6357f1a650f04f3703e3a44 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 19 Apr 2026 22:24:22 +0000 Subject: [PATCH 022/106] Tests: Add missing `@covers` tags for some rewrite tests. Follow-up to [36181], [62244]. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62246 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/rewrite/permastructs.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/phpunit/tests/rewrite/permastructs.php b/tests/phpunit/tests/rewrite/permastructs.php index 4e2bc0594b216..ce98e06a68bb3 100644 --- a/tests/phpunit/tests/rewrite/permastructs.php +++ b/tests/phpunit/tests/rewrite/permastructs.php @@ -2,6 +2,9 @@ /** * @group rewrite + * + * @covers ::add_permastruct + * @covers ::remove_permastruct */ class Tests_Rewrite_Permastructs extends WP_UnitTestCase { From 67094eec602b813723a5f96c66c6169cf559477b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 20 Apr 2026 23:11:32 +0000 Subject: [PATCH 023/106] Tests: Use `assertSame()` in `get_adjacent_post()` 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 [60733], [61066]. Props sagardeshmukh. See #64324. git-svn-id: https://develop.svn.wordpress.org/trunk@62247 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/link/getAdjacentPost.php | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/phpunit/tests/link/getAdjacentPost.php b/tests/phpunit/tests/link/getAdjacentPost.php index 7fdd06ec75ead..e10ff82c099dc 100644 --- a/tests/phpunit/tests/link/getAdjacentPost.php +++ b/tests/phpunit/tests/link/getAdjacentPost.php @@ -477,14 +477,14 @@ public function test_get_adjacent_post_term_array_processing_order() { // Should find post_one (previous post that shares term1). $this->assertInstanceOf( WP_Post::class, $result ); - $this->assertEquals( $post1_id, $result->ID ); + $this->assertSame( $post1_id, $result->ID ); // Test next post. $result = get_adjacent_post( true, array( $term2_id ), false, 'wptests_tax' ); // Should find post_three (next post that shares term1). $this->assertInstanceOf( WP_Post::class, $result ); - $this->assertEquals( $post3_id, $result->ID ); + $this->assertSame( $post3_id, $result->ID ); } /** @@ -614,12 +614,12 @@ public function test_get_adjacent_post_with_identical_dates() { // Previous post should be the 2nd post (lower ID, same date). $previous = get_adjacent_post( false, '', true ); $this->assertInstanceOf( 'WP_Post', $previous ); - $this->assertEquals( $post_ids[1], $previous->ID ); + $this->assertSame( $post_ids[1], $previous->ID ); // Next post should be the 4th post (higher ID, same date). $next = get_adjacent_post( false, '', false ); $this->assertInstanceOf( 'WP_Post', $next ); - $this->assertEquals( $post_ids[3], $next->ID ); + $this->assertSame( $post_ids[3], $next->ID ); } /** @@ -661,12 +661,12 @@ public function test_get_adjacent_post_mixed_dates_with_identical_groups() { // Previous should be the early post (different date). $previous = get_adjacent_post( false, '', true ); $this->assertInstanceOf( 'WP_Post', $previous ); - $this->assertEquals( $post_early, $previous->ID ); + $this->assertSame( $post_early, $previous->ID ); // Next should be the second identical post (same date, higher ID). $next = get_adjacent_post( false, '', false ); $this->assertInstanceOf( 'WP_Post', $next ); - $this->assertEquals( $post_ids[1], $next->ID ); + $this->assertSame( $post_ids[1], $next->ID ); // Test from middle identical post. $this->go_to( get_permalink( $post_ids[1] ) ); @@ -674,12 +674,12 @@ public function test_get_adjacent_post_mixed_dates_with_identical_groups() { // Previous should be the first identical post (same date, lower ID). $previous = get_adjacent_post( false, '', true ); $this->assertInstanceOf( 'WP_Post', $previous ); - $this->assertEquals( $post_ids[0], $previous->ID ); + $this->assertSame( $post_ids[0], $previous->ID ); // Next should be the third identical post (same date, higher ID). $next = get_adjacent_post( false, '', false ); $this->assertInstanceOf( 'WP_Post', $next ); - $this->assertEquals( $post_ids[2], $next->ID ); + $this->assertSame( $post_ids[2], $next->ID ); // Test from last identical post. $this->go_to( get_permalink( $post_ids[2] ) ); @@ -687,12 +687,12 @@ public function test_get_adjacent_post_mixed_dates_with_identical_groups() { // Previous should be the second identical post (same date, lower ID). $previous = get_adjacent_post( false, '', true ); $this->assertInstanceOf( 'WP_Post', $previous ); - $this->assertEquals( $post_ids[1], $previous->ID ); + $this->assertSame( $post_ids[1], $previous->ID ); // Next should be the late post (different date). $next = get_adjacent_post( false, '', false ); $this->assertInstanceOf( 'WP_Post', $next ); - $this->assertEquals( $post_late, $next->ID ); + $this->assertSame( $post_late, $next->ID ); } /** @@ -719,26 +719,26 @@ public function test_get_adjacent_post_navigation_through_identical_dates() { // From post 1, next should be post 2. $next = get_adjacent_post( false, '', false ); - $this->assertEquals( $post_ids[1], $next->ID ); + $this->assertSame( $post_ids[1], $next->ID ); // From post 2, previous should be post 1, next should be post 3. $this->go_to( get_permalink( $post_ids[1] ) ); $previous = get_adjacent_post( false, '', true ); - $this->assertEquals( $post_ids[0], $previous->ID ); + $this->assertSame( $post_ids[0], $previous->ID ); $next = get_adjacent_post( false, '', false ); - $this->assertEquals( $post_ids[2], $next->ID ); + $this->assertSame( $post_ids[2], $next->ID ); // From post 3, previous should be post 2, next should be post 4. $this->go_to( get_permalink( $post_ids[2] ) ); $previous = get_adjacent_post( false, '', true ); - $this->assertEquals( $post_ids[1], $previous->ID ); + $this->assertSame( $post_ids[1], $previous->ID ); $next = get_adjacent_post( false, '', false ); - $this->assertEquals( $post_ids[3], $next->ID ); + $this->assertSame( $post_ids[3], $next->ID ); // From post 4, previous should be post 3. $this->go_to( get_permalink( $post_ids[3] ) ); $previous = get_adjacent_post( false, '', true ); - $this->assertEquals( $post_ids[2], $previous->ID ); + $this->assertSame( $post_ids[2], $previous->ID ); } /** @@ -777,6 +777,6 @@ public function test_get_adjacent_post_identical_dates_with_category() { $next = get_adjacent_post( true, '', false, 'category' ); $this->assertInstanceOf( 'WP_Post', $next ); - $this->assertEquals( $post_ids[3], $next->ID ); // Post 4 (in category) + $this->assertSame( $post_ids[3], $next->ID ); // Post 4 (in category) } } From fc65d677c90f8799dd66c7e949c0495b1924cba0 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 21 Apr 2026 12:33:43 +0000 Subject: [PATCH 024/106] Tests: Use `assertSame()` in `WP_AI_Client_Prompt_Builder` 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 [61700]. Props sagardeshmukh. See #64324. git-svn-id: https://develop.svn.wordpress.org/trunk@62248 602fd350-edb4-49c9-b593-d223f7449a82 --- .../ai-client/wpAiClientPromptBuilder.php | 156 +++++++++--------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php b/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php index 3630b0bab403a..3a781ccc73751 100644 --- a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php +++ b/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php @@ -188,7 +188,7 @@ public function test_constructor_sets_default_request_timeout() { $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); $this->assertInstanceOf( RequestOptions::class, $request_options ); - $this->assertEquals( 30, $request_options->getTimeout() ); + $this->assertSame( 30.0, $request_options->getTimeout() ); } /** @@ -210,7 +210,7 @@ static function () { $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); $this->assertInstanceOf( RequestOptions::class, $request_options ); - $this->assertEquals( 45, $request_options->getTimeout() ); + $this->assertSame( 45.0, $request_options->getTimeout() ); } /** @@ -401,7 +401,7 @@ public function test_constructor_with_string_prompt() { $this->assertCount( 1, $messages ); $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Hello, world!', $messages[0]->getParts()[0]->getText() ); + $this->assertSame( 'Hello, world!', $messages[0]->getParts()[0]->getText() ); } /** @@ -418,7 +418,7 @@ public function test_constructor_with_message_part_prompt() { $this->assertCount( 1, $messages ); $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Test message', $messages[0]->getParts()[0]->getText() ); + $this->assertSame( 'Test message', $messages[0]->getParts()[0]->getText() ); } /** @@ -479,7 +479,7 @@ public function test_constructor_with_message_array_shape() { $this->assertCount( 1, $messages ); $this->assertInstanceOf( Message::class, $messages[0] ); - $this->assertEquals( 'Hello from array', $messages[0]->getParts()[0]->getText() ); + $this->assertSame( 'Hello from array', $messages[0]->getParts()[0]->getText() ); } /** @@ -497,7 +497,7 @@ public function test_with_text() { $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); $this->assertCount( 1, $messages ); - $this->assertEquals( 'Some text', $messages[0]->getParts()[0]->getText() ); + $this->assertSame( 'Some text', $messages[0]->getParts()[0]->getText() ); } /** @@ -515,8 +515,8 @@ public function test_with_text_appends_to_existing_user_message() { $this->assertCount( 1, $messages ); $parts = $messages[0]->getParts(); $this->assertCount( 2, $parts ); - $this->assertEquals( 'Initial text', $parts[0]->getText() ); - $this->assertEquals( ' Additional text', $parts[1]->getText() ); + $this->assertSame( 'Initial text', $parts[0]->getText() ); + $this->assertSame( ' Additional text', $parts[1]->getText() ); } /** @@ -537,8 +537,8 @@ public function test_with_inline_file() { $this->assertCount( 1, $messages ); $file = $messages[0]->getParts()[0]->getFile(); $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'data:image/png;base64,' . $base64, $file->getDataUri() ); - $this->assertEquals( 'image/png', $file->getMimeType() ); + $this->assertSame( 'data:image/png;base64,' . $base64, $file->getDataUri() ); + $this->assertSame( 'image/png', $file->getMimeType() ); } /** @@ -558,8 +558,8 @@ public function test_with_remote_file() { $this->assertCount( 1, $messages ); $file = $messages[0]->getParts()[0]->getFile(); $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'https://example.com/image.jpg', $file->getUrl() ); - $this->assertEquals( 'image/jpeg', $file->getMimeType() ); + $this->assertSame( 'https://example.com/image.jpg', $file->getUrl() ); + $this->assertSame( 'image/jpeg', $file->getMimeType() ); } /** @@ -580,7 +580,7 @@ public function test_with_inline_file_data_uri() { $this->assertCount( 1, $messages ); $file = $messages[0]->getParts()[0]->getFile(); $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'image/jpeg', $file->getMimeType() ); + $this->assertSame( 'image/jpeg', $file->getMimeType() ); } /** @@ -600,8 +600,8 @@ public function test_with_remote_file_without_mime_type() { $this->assertCount( 1, $messages ); $file = $messages[0]->getParts()[0]->getFile(); $this->assertInstanceOf( File::class, $file ); - $this->assertEquals( 'https://example.com/audio.mp3', $file->getUrl() ); - $this->assertEquals( 'audio/mpeg', $file->getMimeType() ); + $this->assertSame( 'https://example.com/audio.mp3', $file->getUrl() ); + $this->assertSame( 'audio/mpeg', $file->getMimeType() ); } /** @@ -644,9 +644,9 @@ public function test_with_message_parts() { $this->assertCount( 1, $messages ); $parts = $messages[0]->getParts(); $this->assertCount( 3, $parts ); - $this->assertEquals( 'Part 1', $parts[0]->getText() ); - $this->assertEquals( 'Part 2', $parts[1]->getText() ); - $this->assertEquals( 'Part 3', $parts[2]->getText() ); + $this->assertSame( 'Part 1', $parts[0]->getText() ); + $this->assertSame( 'Part 2', $parts[1]->getText() ); + $this->assertSame( 'Part 3', $parts[2]->getText() ); } /** @@ -670,9 +670,9 @@ public function test_with_history() { $messages = $this->get_wrapped_prompt_builder_property_value( $builder, 'messages' ); $this->assertCount( 3, $messages ); - $this->assertEquals( 'User 1', $messages[0]->getParts()[0]->getText() ); - $this->assertEquals( 'Model 1', $messages[1]->getParts()[0]->getText() ); - $this->assertEquals( 'User 2', $messages[2]->getParts()[0]->getText() ); + $this->assertSame( 'User 1', $messages[0]->getParts()[0]->getText() ); + $this->assertSame( 'Model 1', $messages[1]->getParts()[0]->getText() ); + $this->assertSame( 'User 2', $messages[2]->getParts()[0]->getText() ); } /** @@ -710,9 +710,9 @@ public function test_constructor_with_string_parts_list() { $this->assertInstanceOf( Message::class, $messages[0] ); $parts = $messages[0]->getParts(); $this->assertCount( 3, $parts ); - $this->assertEquals( 'Part 1', $parts[0]->getText() ); - $this->assertEquals( 'Part 2', $parts[1]->getText() ); - $this->assertEquals( 'Part 3', $parts[2]->getText() ); + $this->assertSame( 'Part 1', $parts[0]->getText() ); + $this->assertSame( 'Part 2', $parts[1]->getText() ); + $this->assertSame( 'Part 3', $parts[2]->getText() ); } /** @@ -735,9 +735,9 @@ public function test_constructor_with_mixed_parts_list() { $this->assertCount( 1, $messages ); $parts = $messages[0]->getParts(); $this->assertCount( 3, $parts ); - $this->assertEquals( 'String part', $parts[0]->getText() ); - $this->assertEquals( 'Part 1', $parts[1]->getText() ); - $this->assertEquals( 'Part 2', $parts[2]->getText() ); + $this->assertSame( 'String part', $parts[0]->getText() ); + $this->assertSame( 'Part 1', $parts[1]->getText() ); + $this->assertSame( 'Part 2', $parts[2]->getText() ); } /** @@ -775,13 +775,13 @@ public function test_method_chaining() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'Be helpful', $config->getSystemInstruction() ); - $this->assertEquals( 500, $config->getMaxTokens() ); - $this->assertEquals( 0.8, $config->getTemperature() ); - $this->assertEquals( 0.95, $config->getTopP() ); - $this->assertEquals( 50, $config->getTopK() ); - $this->assertEquals( 2, $config->getCandidateCount() ); - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); + $this->assertSame( 'Be helpful', $config->getSystemInstruction() ); + $this->assertSame( 500, $config->getMaxTokens() ); + $this->assertSame( 0.8, $config->getTemperature() ); + $this->assertSame( 0.95, $config->getTopP() ); + $this->assertSame( 50, $config->getTopK() ); + $this->assertSame( 2, $config->getCandidateCount() ); + $this->assertSame( 'application/json', $config->getOutputMimeType() ); } /** @@ -1001,11 +1001,11 @@ public function test_using_model_config() { /** @var ModelConfig $merged_config */ $merged_config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'Builder instruction', $merged_config->getSystemInstruction() ); - $this->assertEquals( 500, $merged_config->getMaxTokens() ); - $this->assertEquals( 0.5, $merged_config->getTemperature() ); - $this->assertEquals( 0.9, $merged_config->getTopP() ); - $this->assertEquals( 40, $merged_config->getTopK() ); + $this->assertSame( 'Builder instruction', $merged_config->getSystemInstruction() ); + $this->assertSame( 500, $merged_config->getMaxTokens() ); + $this->assertSame( 0.5, $merged_config->getTemperature() ); + $this->assertSame( 0.9, $merged_config->getTopP() ); + $this->assertSame( 40, $merged_config->getTopK() ); } /** @@ -1028,22 +1028,22 @@ public function test_using_model_config_with_custom_options() { $this->assertArrayHasKey( 'stopSequences', $custom_options ); $this->assertIsArray( $custom_options['stopSequences'] ); - $this->assertEquals( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); + $this->assertSame( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); $this->assertArrayHasKey( 'otherOption', $custom_options ); - $this->assertEquals( 'value', $custom_options['otherOption'] ); + $this->assertSame( 'value', $custom_options['otherOption'] ); $builder->using_stop_sequences( 'STOP' ); /** @var ModelConfig $merged_config */ $merged_config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( array( 'STOP' ), $merged_config->getStopSequences() ); + $this->assertSame( array( 'STOP' ), $merged_config->getStopSequences() ); $custom_options = $merged_config->getCustomOptions(); $this->assertArrayHasKey( 'stopSequences', $custom_options ); - $this->assertEquals( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); + $this->assertSame( array( 'CONFIG_STOP' ), $custom_options['stopSequences'] ); $this->assertArrayHasKey( 'otherOption', $custom_options ); - $this->assertEquals( 'value', $custom_options['otherOption'] ); + $this->assertSame( 'value', $custom_options['otherOption'] ); } /** @@ -1058,7 +1058,7 @@ public function test_using_provider() { $this->assertSame( $builder, $result ); $actual_provider = $this->get_wrapped_prompt_builder_property_value( $builder, 'providerIdOrClassName' ); - $this->assertEquals( 'test-provider', $actual_provider ); + $this->assertSame( 'test-provider', $actual_provider ); } /** @@ -1075,7 +1075,7 @@ public function test_using_system_instruction() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'You are a helpful assistant.', $config->getSystemInstruction() ); + $this->assertSame( 'You are a helpful assistant.', $config->getSystemInstruction() ); } /** @@ -1092,7 +1092,7 @@ public function test_using_max_tokens() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 1000, $config->getMaxTokens() ); + $this->assertSame( 1000, $config->getMaxTokens() ); } /** @@ -1109,7 +1109,7 @@ public function test_using_temperature() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 0.7, $config->getTemperature() ); + $this->assertSame( 0.7, $config->getTemperature() ); } /** @@ -1126,7 +1126,7 @@ public function test_using_top_p() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 0.9, $config->getTopP() ); + $this->assertSame( 0.9, $config->getTopP() ); } /** @@ -1143,7 +1143,7 @@ public function test_using_top_k() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 40, $config->getTopK() ); + $this->assertSame( 40, $config->getTopK() ); } /** @@ -1160,7 +1160,7 @@ public function test_using_stop_sequences() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( array( 'STOP', 'END', '###' ), $config->getStopSequences() ); + $this->assertSame( array( 'STOP', 'END', '###' ), $config->getStopSequences() ); } /** @@ -1177,7 +1177,7 @@ public function test_using_candidate_count() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 3, $config->getCandidateCount() ); + $this->assertSame( 3, $config->getCandidateCount() ); } /** @@ -1194,7 +1194,7 @@ public function test_using_output_mime() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); + $this->assertSame( 'application/json', $config->getOutputMimeType() ); } /** @@ -1218,7 +1218,7 @@ public function test_using_output_schema() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( $schema, $config->getOutputSchema() ); + $this->assertSame( $schema, $config->getOutputSchema() ); } /** @@ -1258,7 +1258,7 @@ public function test_as_json_response() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); + $this->assertSame( 'application/json', $config->getOutputMimeType() ); } /** @@ -1276,8 +1276,8 @@ public function test_as_json_response_with_schema() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'application/json', $config->getOutputMimeType() ); - $this->assertEquals( $schema, $config->getOutputSchema() ); + $this->assertSame( 'application/json', $config->getOutputMimeType() ); + $this->assertSame( $schema, $config->getOutputSchema() ); } /** @@ -1824,14 +1824,14 @@ public function test_generate_texts() { $texts = $builder->generate_texts( 3 ); $this->assertCount( 3, $texts ); - $this->assertEquals( 'Text 1', $texts[0] ); - $this->assertEquals( 'Text 2', $texts[1] ); - $this->assertEquals( 'Text 3', $texts[2] ); + $this->assertSame( 'Text 1', $texts[0] ); + $this->assertSame( 'Text 2', $texts[1] ); + $this->assertSame( 'Text 3', $texts[2] ); /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 3, $config->getCandidateCount() ); + $this->assertSame( 3, $config->getCandidateCount() ); } /** @@ -2255,7 +2255,7 @@ public function test_as_output_media_aspect_ratio() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( '16:9', $config->getOutputMediaAspectRatio() ); + $this->assertSame( '16:9', $config->getOutputMediaAspectRatio() ); } /** @@ -2272,7 +2272,7 @@ public function test_as_output_speech_voice() { /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'alloy', $config->getOutputSpeechVoice() ); + $this->assertSame( 'alloy', $config->getOutputSpeechVoice() ); } /** @@ -2290,8 +2290,8 @@ public function test_using_ability_with_string() { $this->assertNotNull( $declarations ); $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'A simple test ability with no parameters.', $declarations[0]->getDescription() ); + $this->assertSame( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); + $this->assertSame( 'A simple test ability with no parameters.', $declarations[0]->getDescription() ); } /** @@ -2311,8 +2311,8 @@ public function test_using_ability_with_wp_ability_object() { $this->assertNotNull( $declarations ); $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[0]->getName() ); - $this->assertEquals( 'A test ability that accepts parameters.', $declarations[0]->getDescription() ); + $this->assertSame( 'wpab__wpaiclienttests__with-params', $declarations[0]->getName() ); + $this->assertSame( 'A test ability that accepts parameters.', $declarations[0]->getDescription() ); $params = $declarations[0]->getParameters(); $this->assertNotNull( $params ); @@ -2339,9 +2339,9 @@ public function test_using_ability_with_multiple_abilities() { $this->assertNotNull( $declarations ); $this->assertCount( 3, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__returns-error', $declarations[2]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__returns-error', $declarations[2]->getName() ); } /** @@ -2367,8 +2367,8 @@ public function test_using_ability_skips_nonexistent_abilities() { $this->assertNotNull( $declarations ); $this->assertCount( 2, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); } /** @@ -2407,8 +2407,8 @@ public function test_using_ability_with_mixed_types() { $this->assertNotNull( $declarations ); $this->assertCount( 2, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); - $this->assertEquals( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__with-params', $declarations[1]->getName() ); } /** @@ -2426,7 +2426,7 @@ public function test_using_ability_with_hyphenated_name() { $this->assertNotNull( $declarations ); $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__hyphen-test', $declarations[0]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__hyphen-test', $declarations[0]->getName() ); } /** @@ -2448,13 +2448,13 @@ public function test_using_ability_method_chaining() { $this->assertNotNull( $declarations ); $this->assertCount( 1, $declarations ); - $this->assertEquals( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); + $this->assertSame( 'wpab__wpaiclienttests__simple', $declarations[0]->getName() ); /** @var ModelConfig $config */ $config = $this->get_wrapped_prompt_builder_property_value( $builder, 'modelConfig' ); - $this->assertEquals( 'You are a helpful assistant', $config->getSystemInstruction() ); - $this->assertEquals( 500, $config->getMaxTokens() ); + $this->assertSame( 'You are a helpful assistant', $config->getSystemInstruction() ); + $this->assertSame( 500, $config->getMaxTokens() ); } /** From 4440667d806019cbe9b9e67fad6836b0d74cce6d Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 21 Apr 2026 14:03:56 +0000 Subject: [PATCH 025/106] Tests: Print invalid UTF-8 as ASCII to fix hosts test reporting failures. When serializing test output into XML, invalid UTF-8 bytes lead to a failure to load those test results when they are read. This patch adds code to remap those invalid bytes in an ASCII-readable form, whereas the invalid bytes are separated by parentheses and encoded in their hex form. This ensures that a proper XML file is generated from the testing results. Developed in: https://github.com/WordPress/wordpress-develop/pull/11620 Discussed in: https://core.trac.wordpress.org/ticket/31992 Reported in: https://github.com/WordPress/phpunit-test-runner/pull/310 Follow-up to: [62225]. Props agulbra, amykamala, codexdemon, dmsnell, mywp459, rolle. See #31992. git-svn-id: https://develop.svn.wordpress.org/trunk@62249 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/formatting/isEmail.php | 55 +++++++++++++- .../tests/formatting/sanitizeEmail.php | 73 +++++++++++++++++-- 2 files changed, 122 insertions(+), 6 deletions(-) diff --git a/tests/phpunit/tests/formatting/isEmail.php b/tests/phpunit/tests/formatting/isEmail.php index d79647885ceba..b793af2c4a70d 100644 --- a/tests/phpunit/tests/formatting/isEmail.php +++ b/tests/phpunit/tests/formatting/isEmail.php @@ -122,7 +122,60 @@ public static function data_invalid_email_provider() { ); foreach ( $invalid_emails as $email ) { - yield $email => array( $email ); + yield self::invalid_utf8_as_ascii( $email ) => array( $email ); + } + } + + /** + * Transforms invalid byte sequences in UTF-8 into representations of + * each byte value, according to the maximal subpart rule. + * + * Example: + * + * // For valid UTF-8 the output is the input. + * 'test' === invalid_utf8_as_ascii( 'test' ); + * + * // Invalid bytes are represented with their hex value. + * 'a(0x80)b' === invalid_utf8_as_ascii( "a\x80b" ); + * + * // Invalid byte sequences form maximal subparts. + * '(0xC2)(0xEF 0xBF)' === invalid_utf8_as_ascii( "\xC2\xEF\xBF" ); + * + * @param string $text + * @return string + */ + private static function invalid_utf8_as_ascii( string $text ): string { + $output = ''; + $at = 0; + $was_at = 0; + $end = strlen( $text ); + $invalid_bytes = 0; + + while ( $at < $end ) { + if ( 0 === _wp_scan_utf8( $text, $at, $invalid_bytes ) && 0 === $invalid_bytes ) { + break; + } + + if ( $at > $was_at ) { + $output .= substr( $text, $was_at, $at - $was_at ); + } + + if ( $invalid_bytes > 0 ) { + $output .= '('; + + for ( $i = 0; $i < $invalid_bytes; $i++ ) { + $space = $i > 0 ? ' ' : ''; + $as_hex = bin2hex( $text[ $at + $i ] ); + $output .= "{$space}0x{$as_hex}"; + } + + $output .= ')'; + } + + $at += $invalid_bytes; + $was_at = $at; } + + return $output; } } diff --git a/tests/phpunit/tests/formatting/sanitizeEmail.php b/tests/phpunit/tests/formatting/sanitizeEmail.php index 6ca396f42dc26..5490374d0a5e7 100644 --- a/tests/phpunit/tests/formatting/sanitizeEmail.php +++ b/tests/phpunit/tests/formatting/sanitizeEmail.php @@ -17,11 +17,21 @@ class Tests_Formatting_SanitizeEmail extends WP_UnitTestCase { * @param string $expected The expected sanitized email address. */ public function test_returns_stripped_email_address( $address, $expected ) { - $this->assertSame( - $expected, - sanitize_email( $address ), - 'Should have produced the known sanitized form of the email.' - ); + $sanitized = sanitize_email( $address ); + + if ( $expected === $sanitized ) { + $this->assertSame( + $expected, + $sanitized, + 'Should have produced the known sanitized form of the email.' + ); + } else { + $this->assertSame( + $expected, + self::invalid_utf8_as_ascii( $sanitized ), + 'Should have produced the known sanitized form of the email.' + ); + } } /** @@ -39,4 +49,57 @@ public function data_sanitized_email_pairs() { 'all subdomains invalid utf8' => array( "abc@\x80.org", '' ), ); } + + /** + * Transforms invalid byte sequences in UTF-8 into representations of + * each byte value, according to the maximal subpart rule. + * + * Example: + * + * // For valid UTF-8 the output is the input. + * 'test' === invalid_utf8_as_ascii( 'test' ); + * + * // Invalid bytes are represented with their hex value. + * 'a(0x80)b' === invalid_utf8_as_ascii( "a\x80b" ); + * + * // Invalid byte sequences form maximal subparts. + * '(0xC2)(0xEF 0xBF)' === invalid_utf8_as_ascii( "\xC2\xEF\xBF" ); + * + * @param string $text + * @return string + */ + private static function invalid_utf8_as_ascii( string $text ): string { + $output = ''; + $at = 0; + $was_at = 0; + $end = strlen( $text ); + $invalid_bytes = 0; + + while ( $at < $end ) { + if ( 0 === _wp_scan_utf8( $text, $at, $invalid_bytes ) && 0 === $invalid_bytes ) { + break; + } + + if ( $at > $was_at ) { + $output .= substr( $text, $was_at, $at - $was_at ); + } + + if ( $invalid_bytes > 0 ) { + $output .= '('; + + for ( $i = 0; $i < $invalid_bytes; $i++ ) { + $space = $i > 0 ? ' ' : ''; + $as_hex = bin2hex( $text[ $at + $i ] ); + $output .= "{$space}0x{$as_hex}"; + } + + $output .= ')'; + } + + $at += $invalid_bytes; + $was_at = $at; + } + + return $output; + } } From ee81e2fc68f63b6c539e755ba7d28c8bf3e2f4cd Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 21 Apr 2026 16:48:42 +0000 Subject: [PATCH 026/106] Build/Test Tools: Add more workflow file linting with Zizmor. This change introduces Zizmor, which is a tool for linting GitHub Actions workflow files for security weaknesses. This compliments the existing Actionlint scanning. For more information about Actionlint and Zizmor, see the GitHub Actions Workflow Standards page in the developer handbook: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/github-actions/ Some issues in workflow files that are reported by Zizmor will be addressed in follow-up commits. Props johnbillion, desrosj. See #64227 git-svn-id: https://develop.svn.wordpress.org/trunk@62250 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/reusable-workflow-lint.yml | 39 ++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/.github/workflows/reusable-workflow-lint.yml b/.github/workflows/reusable-workflow-lint.yml index 3a538a8a99690..db70672745b0c 100644 --- a/.github/workflows/reusable-workflow-lint.yml +++ b/.github/workflows/reusable-workflow-lint.yml @@ -32,3 +32,42 @@ jobs: uses: docker://rhysd/actionlint@sha256:887a259a5a534f3c4f36cb02dca341673c6089431057242cdc931e9f133147e9 # v1.7.7 with: args: "-color -verbose" + + # Runs the Zizmor GitHub Action workflow file linter. + # + # See https://github.com/zizmorcore/zizmor + # + # This helps guard against supply chain attacks, unpinned dependencies, excessive permissions, + # dangerous triggers, credential leaks, and sophisticated security vulnerabilities. + # + # Performs the following steps: + # - Checks out the repository. + # - Installs and configures uv. + # - Runs a zizmor scan. + # - Uploads the SARIF file to GitHub. + zizmor: + name: Zizmor + runs-on: ubuntu-24.04 + permissions: + security-events: write + actions: read + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Install the latest version of uv + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 + + - name: Run zizmor + run: uvx zizmor@1.24.1 --persona=regular --format=sarif --strict-collection . > results.sarif + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + with: + sarif_file: results.sarif + category: zizmor From 8808211a8cdfb1dc3864a691445cc89ae0fa17f5 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 21 Apr 2026 16:56:34 +0000 Subject: [PATCH 027/106] Build/Test Tools: Address some issues in GitHub Actions workflow files as reported by Zizmor. This removes unnecessarily broad inheritance of secrets, replaces some GitHub Actions expressions with environment variables, removes git credential persistence, and adds documentation to the readme. See #64227 git-svn-id: https://develop.svn.wordpress.org/trunk@62251 602fd350-edb4-49c9-b593-d223f7449a82 --- .../workflows/commit-built-file-changes.yml | 5 ++-- .github/workflows/install-testing.yml | 1 - .../workflows/local-docker-environment.yml | 1 - .github/workflows/phpunit-tests.yml | 20 +++++++++++---- .../workflows/reusable-check-built-files.yml | 1 + .../reusable-cleanup-pull-requests.yml | 25 ++++++++----------- README.md | 23 +++++++++++++++++ 7 files changed, 52 insertions(+), 24 deletions(-) diff --git a/.github/workflows/commit-built-file-changes.yml b/.github/workflows/commit-built-file-changes.yml index f93cd4bd662ec..b6ba9935ba675 100644 --- a/.github/workflows/commit-built-file-changes.yml +++ b/.github/workflows/commit-built-file-changes.yml @@ -131,11 +131,12 @@ jobs: path: 'pr-repo' show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} token: ${{ env.ACCESS_TOKEN }} + persist-credentials: true - name: Apply patch if: ${{ steps.artifact-check.outputs.exists == 'true' }} working-directory: 'pr-repo' - run: git apply ${{ github.workspace }}/changes.diff + run: git apply "$GITHUB_WORKSPACE/changes.diff" - name: Display changes to versioned files if: ${{ steps.artifact-check.outputs.exists == 'true' }} @@ -149,7 +150,7 @@ jobs: GH_APP_ID: ${{ secrets.GH_PR_BUILT_FILES_APP_ID }} run: | git config user.name "wordpress-develop-pr-bot[bot]" - git config user.email ${{ env.GH_APP_ID }}+wordpress-develop-pr-bot[bot]@users.noreply.github.com + git config user.email "${GH_APP_ID}+wordpress-develop-pr-bot[bot]@users.noreply.github.com" - name: Stage changes if: ${{ steps.artifact-check.outputs.exists == 'true' }} diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index f15d6e4830268..f042853ca1bc5 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -49,7 +49,6 @@ jobs: uses: ./.github/workflows/reusable-support-json-reader-v1.yml permissions: contents: read - secrets: inherit if: ${{ github.repository == 'WordPress/wordpress-develop' }} with: wp-version: ${{ inputs.wp-version }} diff --git a/.github/workflows/local-docker-environment.yml b/.github/workflows/local-docker-environment.yml index c9dbae312595a..d42bba623ec64 100644 --- a/.github/workflows/local-docker-environment.yml +++ b/.github/workflows/local-docker-environment.yml @@ -79,7 +79,6 @@ jobs: uses: ./.github/workflows/reusable-support-json-reader-v1.yml permissions: contents: read - secrets: inherit if: ${{ github.repository == 'WordPress/wordpress-develop' }} with: wp-version: ${{ github.event_name == 'pull_request' && github.base_ref || github.ref_name }} diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index de36d5a505187..85604b1182db7 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -66,7 +66,9 @@ jobs: uses: ./.github/workflows/reusable-phpunit-tests-v3.yml permissions: contents: read - secrets: inherit + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + WPT_REPORT_API_KEY: ${{ secrets.WPT_REPORT_API_KEY }} if: ${{ startsWith( github.repository, 'WordPress/' ) && ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) }} strategy: fail-fast: false @@ -143,7 +145,9 @@ jobs: uses: ./.github/workflows/reusable-phpunit-tests-v3.yml permissions: contents: read - secrets: inherit + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + WPT_REPORT_API_KEY: ${{ secrets.WPT_REPORT_API_KEY }} if: ${{ startsWith( github.repository, 'WordPress/' ) && ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) }} strategy: fail-fast: false @@ -195,7 +199,9 @@ jobs: uses: ./.github/workflows/reusable-phpunit-tests-v3.yml permissions: contents: read - secrets: inherit + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + WPT_REPORT_API_KEY: ${{ secrets.WPT_REPORT_API_KEY }} if: ${{ startsWith( github.repository, 'WordPress/' ) && ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) }} strategy: fail-fast: false @@ -238,7 +244,9 @@ jobs: uses: ./.github/workflows/reusable-phpunit-tests-v3.yml permissions: contents: read - secrets: inherit + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + WPT_REPORT_API_KEY: ${{ secrets.WPT_REPORT_API_KEY }} if: ${{ startsWith( github.repository, 'WordPress/' ) && ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) }} strategy: fail-fast: false @@ -267,7 +275,9 @@ jobs: uses: ./.github/workflows/reusable-phpunit-tests-v3.yml permissions: contents: read - secrets: inherit + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + WPT_REPORT_API_KEY: ${{ secrets.WPT_REPORT_API_KEY }} if: ${{ ! startsWith( github.repository, 'WordPress/' ) && github.event_name == 'pull_request' }} strategy: fail-fast: false diff --git a/.github/workflows/reusable-check-built-files.yml b/.github/workflows/reusable-check-built-files.yml index 11d97639a30fc..8951f26547733 100644 --- a/.github/workflows/reusable-check-built-files.yml +++ b/.github/workflows/reusable-check-built-files.yml @@ -40,6 +40,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + persist-credentials: false - name: Set up Node.js uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 diff --git a/.github/workflows/reusable-cleanup-pull-requests.yml b/.github/workflows/reusable-cleanup-pull-requests.yml index 9dae63cb213d3..cdce56001d16b 100644 --- a/.github/workflows/reusable-cleanup-pull-requests.yml +++ b/.github/workflows/reusable-cleanup-pull-requests.yml @@ -19,7 +19,7 @@ jobs: # - Parse fixed ticket numbers from the commit message. # - Parse the SVN revision from the commit message. # - Searches for pull requests referencing any fixed tickets. - # - Leaves a comment on each PR before closing. +# - Comments on pull requests referencing any fixed tickets before closing. close-prs: name: Find and close PRs runs-on: ubuntu-24.04 @@ -43,13 +43,17 @@ jobs: COMMIT_MESSAGE="$(echo "$COMMIT_MSG_RAW" | sed -n '$p')" echo "svn_revision_number=$(echo "$COMMIT_MESSAGE" | sed -n 's/.*git-svn-id: https:\/\/develop.svn.wordpress.org\/[^@]*@\([0-9]*\) .*/\1/p')" >> "$GITHUB_OUTPUT" - - name: Find pull requests - id: linked-prs + - name: Find, comment on, and close pull requests if: ${{ steps.trac-tickets.outputs.fixed_list != '' && steps.git-svn-id.outputs.svn_revision_number != '' }} uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + env: + FIXED_LIST: ${{ steps.trac-tickets.outputs.fixed_list }} + SVN_REVISION_NUMBER: ${{ steps.git-svn-id.outputs.svn_revision_number }} with: script: | - const fixedList = "${{ steps.trac-tickets.outputs.fixed_list }}".split(' ').filter(Boolean); + const fixedList = process.env.FIXED_LIST.split(' ').filter(Boolean); + const svnRevisionNumber = process.env.SVN_REVISION_NUMBER; + const githubSha = process.env.GITHUB_SHA; let prNumbers = []; for (const ticket of fixedList) { @@ -86,19 +90,10 @@ jobs: prNumbers.push(...matchingPRs); } - return prNumbers; - - - name: Comment and close pull requests - if: ${{ steps.trac-tickets.outputs.fixed_list != '' && steps.git-svn-id.outputs.svn_revision_number != '' }} - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - script: | - const prNumbers = ${{ steps.linked-prs.outputs.result }}; - const commentBody = `A commit was made that fixes the Trac ticket referenced in the description of this pull request. - SVN changeset: [${{ steps.git-svn-id.outputs.svn_revision_number }}](https://core.trac.wordpress.org/changeset/${{ steps.git-svn-id.outputs.svn_revision_number }}) - GitHub commit: https://github.com/WordPress/wordpress-develop/commit/${{ github.sha }} + SVN changeset: [${svnRevisionNumber}](https://core.trac.wordpress.org/changeset/${svnRevisionNumber}) + GitHub commit: https://github.com/WordPress/wordpress-develop/commit/${githubSha} This PR will be closed, but please confirm the accuracy of this and reopen if there is more work to be done.`; diff --git a/README.md b/README.md index 4c27999495f55..5201a5180c1da 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,29 @@ npm run test:php -- --filter npm run test:php -- --group ``` +#### To lint the workflow files + +GitHub Actions workflows operate in a privileged software supply chain environment, therefore all workflow files must adhere to a high degree of quality and security standards. + +All YAML workflow files within the `.github/workflows` directory are statically scanned when modified using [Actionlint](https://github.com/rhysd/actionlint) and [Zizmor](https://github.com/zizmorcore/zizmor). It's recommended that you install both of these tools locally using a package manager to run prior to submitting changes to workflow files. + +- [Actionlint installations instructions](https://github.com/rhysd/actionlint/blob/main/docs/install.md) +- [Zizmor installation instructions](https://docs.zizmor.sh/installation/) + +To run Actionlint: + +``` +actionlint +``` + +To run Zizmor for all workflow files (note the trailing period): + +``` +zizmor . +``` + +**Note:** A workflow run failure will not occur when issues are detected by Zizmor. Instead, the generated report is submitted to GitHub Code Scanning and surfaced through a status check. Some locally reported issues may be ignored based on the repository's configured Code Scanning settings. + #### Generating a code coverage report PHP code coverage reports are [generated daily](https://github.com/WordPress/wordpress-develop/actions/workflows/test-coverage.yml) and [submitted to Codecov.io](https://app.codecov.io/gh/WordPress/wordpress-develop). From 63111549722acebfc3a147a470e642d6dec5c1b1 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 21 Apr 2026 16:58:30 +0000 Subject: [PATCH 028/106] Build/Test Tools: Update Actionlint to the latest version. See #64227 git-svn-id: https://develop.svn.wordpress.org/trunk@62252 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/reusable-workflow-lint.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/reusable-workflow-lint.yml b/.github/workflows/reusable-workflow-lint.yml index db70672745b0c..13fcde47f5731 100644 --- a/.github/workflows/reusable-workflow-lint.yml +++ b/.github/workflows/reusable-workflow-lint.yml @@ -7,12 +7,10 @@ permissions: {} jobs: # Runs the actionlint GitHub Action workflow file linter. # + # See https://github.com/rhysd/actionlint. + # # This helps guard against common mistakes including strong type checking for expressions (${{ }}), security checks, # `run:` script checking, glob syntax validation, and more. - # - # Performs the following steps: - # - Checks out the repository. - # - Runs actionlint. actionlint: name: Run actionlint runs-on: ubuntu-24.04 @@ -26,10 +24,8 @@ jobs: persist-credentials: false show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - # actionlint is static checker for GitHub Actions workflow files. - # See https://github.com/rhysd/actionlint. - name: Run actionlint - uses: docker://rhysd/actionlint@sha256:887a259a5a534f3c4f36cb02dca341673c6089431057242cdc931e9f133147e9 # v1.7.7 + uses: docker://rhysd/actionlint@sha256:5457037ba91acd225478edac3d4b32e45cf6c10291e0dabbfd2491c63129afe1 # v1.7.11 with: args: "-color -verbose" From 6ad323312d4b0406240b459343b20dd3fb69cb4d Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 21 Apr 2026 17:24:23 +0000 Subject: [PATCH 029/106] Build/Test Tools: Remove unnecessary use of GitHub Actions expressions for values that resolve to "true" or "false" strings. See #64227 git-svn-id: https://develop.svn.wordpress.org/trunk@62253 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/end-to-end-tests.yml | 2 +- .github/workflows/phpunit-tests.yml | 4 ++-- .github/workflows/reusable-coding-standards-javascript.yml | 2 +- .github/workflows/reusable-performance-test-v2.yml | 2 +- .github/workflows/reusable-performance.yml | 2 +- .github/workflows/reusable-phpunit-tests-v1.yml | 4 ++-- .github/workflows/reusable-phpunit-tests-v2.yml | 2 +- .github/workflows/reusable-phpunit-tests-v3.yml | 2 +- .github/workflows/reusable-test-core-build-process.yml | 2 +- .github/workflows/reusable-test-gutenberg-build-process.yml | 2 +- .../workflows/reusable-test-local-docker-environment-v1.yml | 2 +- .github/workflows/test-coverage.yml | 4 ++-- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/end-to-end-tests.yml b/.github/workflows/end-to-end-tests.yml index b397a2241947e..4375091546dd7 100644 --- a/.github/workflows/end-to-end-tests.yml +++ b/.github/workflows/end-to-end-tests.yml @@ -53,7 +53,7 @@ permissions: {} env: LOCAL_DIR: build - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true jobs: # Runs the end-to-end test suite. diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 85604b1182db7..74dfc220c04a6 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -181,7 +181,7 @@ jobs: multisite: ${{ matrix.multisite }} memcached: ${{ matrix.memcached }} phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} - report: ${{ false }} + report: false # # Creates PHPUnit test jobs to test MariaDB and MySQL innovation releases. @@ -229,7 +229,7 @@ jobs: multisite: ${{ matrix.multisite }} memcached: ${{ matrix.memcached }} phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }} - report: ${{ false }} + report: false # # Runs the HTML API test group. diff --git a/.github/workflows/reusable-coding-standards-javascript.yml b/.github/workflows/reusable-coding-standards-javascript.yml index 5c9a0c1ec0d03..6d776aabf1e27 100644 --- a/.github/workflows/reusable-coding-standards-javascript.yml +++ b/.github/workflows/reusable-coding-standards-javascript.yml @@ -7,7 +7,7 @@ on: workflow_call: env: - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. diff --git a/.github/workflows/reusable-performance-test-v2.yml b/.github/workflows/reusable-performance-test-v2.yml index f572060e26d63..691e79c39508a 100644 --- a/.github/workflows/reusable-performance-test-v2.yml +++ b/.github/workflows/reusable-performance-test-v2.yml @@ -49,7 +49,7 @@ on: required: false env: - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true # Prevent wp-scripts from downloading extra Playwright browsers, # since Chromium will be installed in its dedicated step already. diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index 923b472f609c6..3ebe31ff8e38f 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -37,7 +37,7 @@ on: required: false env: - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true # Prevent wp-scripts from downloading extra Playwright browsers, # since Chromium will be installed in its dedicated step already. diff --git a/.github/workflows/reusable-phpunit-tests-v1.yml b/.github/workflows/reusable-phpunit-tests-v1.yml index bcb0451d7134b..b55e9f58fcf17 100644 --- a/.github/workflows/reusable-phpunit-tests-v1.yml +++ b/.github/workflows/reusable-phpunit-tests-v1.yml @@ -50,13 +50,13 @@ on: type: boolean default: false env: - COMPOSER_INSTALL: ${{ false }} + COMPOSER_INSTALL: false 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 }} + PUPPETEER_SKIP_DOWNLOAD: true SLOW_TESTS: 'external-http,media' # Disable permissions for all available scopes by default. diff --git a/.github/workflows/reusable-phpunit-tests-v2.yml b/.github/workflows/reusable-phpunit-tests-v2.yml index 4e7b6716ebef1..36d5927976505 100644 --- a/.github/workflows/reusable-phpunit-tests-v2.yml +++ b/.github/workflows/reusable-phpunit-tests-v2.yml @@ -58,7 +58,7 @@ env: LOCAL_PHP: ${{ inputs.php }}-fpm LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + 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' diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index da0372f8538be..c720bb99df174 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -89,7 +89,7 @@ env: LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }} PHPUNIT_CONFIG: ${{ inputs.phpunit-config }} - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. diff --git a/.github/workflows/reusable-test-core-build-process.yml b/.github/workflows/reusable-test-core-build-process.yml index fbb6a08b15820..8d4ab718ee6de 100644 --- a/.github/workflows/reusable-test-core-build-process.yml +++ b/.github/workflows/reusable-test-core-build-process.yml @@ -38,7 +38,7 @@ on: default: false env: - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true NODE_OPTIONS: --max-old-space-size=4096 # Disable permissions for all available scopes by default. diff --git a/.github/workflows/reusable-test-gutenberg-build-process.yml b/.github/workflows/reusable-test-gutenberg-build-process.yml index 6fff07a842bf2..772b8ee577d7f 100644 --- a/.github/workflows/reusable-test-gutenberg-build-process.yml +++ b/.github/workflows/reusable-test-gutenberg-build-process.yml @@ -19,7 +19,7 @@ on: env: GUTENBERG_DIRECTORY: ${{ inputs.directory == 'build' && 'build' || 'src' }}/wp-content/plugins/gutenberg - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true NODE_OPTIONS: '--max-old-space-size=8192' # Disable permissions for all available scopes by default. diff --git a/.github/workflows/reusable-test-local-docker-environment-v1.yml b/.github/workflows/reusable-test-local-docker-environment-v1.yml index 9aa0fb124a22e..ff257624b8349 100644 --- a/.github/workflows/reusable-test-local-docker-environment-v1.yml +++ b/.github/workflows/reusable-test-local-docker-environment-v1.yml @@ -45,7 +45,7 @@ env: LOCAL_DB_VERSION: ${{ inputs.db-version }} LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }} - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + PUPPETEER_SKIP_DOWNLOAD: true # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index deb190eba9e9b..f2b0afce3256f 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -40,8 +40,8 @@ permissions: {} env: LOCAL_PHP_XDEBUG: true LOCAL_PHP_XDEBUG_MODE: 'coverage' - LOCAL_PHP_MEMCACHED: ${{ false }} - PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + LOCAL_PHP_MEMCACHED: false + PUPPETEER_SKIP_DOWNLOAD: true jobs: # From c9bdbe0800db6302993ff63b820f280d70a12fa2 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 21 Apr 2026 17:43:18 +0000 Subject: [PATCH 030/106] Build/Test Tools: Use the exact tag name in version number comments that trail pinned actions. None of these actions use `v`-prefixed tag names. See #64227 git-svn-id: https://develop.svn.wordpress.org/trunk@62254 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/install-testing.yml | 2 +- .github/workflows/reusable-check-built-files.yml | 2 +- .github/workflows/reusable-coding-standards-php.yml | 4 ++-- .github/workflows/reusable-php-compatibility.yml | 4 ++-- .github/workflows/reusable-phpstan-static-analysis-v1.yml | 4 ++-- .github/workflows/reusable-phpunit-tests-v3.yml | 4 ++-- .github/workflows/reusable-test-core-build-process.yml | 2 +- .../workflows/reusable-test-local-docker-environment-v1.yml | 4 ++-- .github/workflows/reusable-upgrade-testing.yml | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index f042853ca1bc5..8da6a84f1caeb 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -117,7 +117,7 @@ jobs: steps: - name: Set up PHP ${{ matrix.php }} - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: '${{ matrix.php }}' coverage: none diff --git a/.github/workflows/reusable-check-built-files.yml b/.github/workflows/reusable-check-built-files.yml index 8951f26547733..290161c485324 100644 --- a/.github/workflows/reusable-check-built-files.yml +++ b/.github/workflows/reusable-check-built-files.yml @@ -57,7 +57,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: ${{ steps.get-date.outputs.date }} diff --git a/.github/workflows/reusable-coding-standards-php.yml b/.github/workflows/reusable-coding-standards-php.yml index 1213ccb6baa6f..99683e0850d64 100644 --- a/.github/workflows/reusable-coding-standards-php.yml +++ b/.github/workflows/reusable-coding-standards-php.yml @@ -52,7 +52,7 @@ jobs: persist-credentials: false - name: Set up PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: ${{ inputs.php-version }} coverage: none @@ -75,7 +75,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: ${{ steps.get-date.outputs.date }} diff --git a/.github/workflows/reusable-php-compatibility.yml b/.github/workflows/reusable-php-compatibility.yml index fee371fbdf7a0..a00c952bae6d1 100644 --- a/.github/workflows/reusable-php-compatibility.yml +++ b/.github/workflows/reusable-php-compatibility.yml @@ -46,7 +46,7 @@ jobs: persist-credentials: false - name: Set up PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: ${{ inputs.php-version }} coverage: none @@ -71,7 +71,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: ${{ steps.get-date.outputs.date }} diff --git a/.github/workflows/reusable-phpstan-static-analysis-v1.yml b/.github/workflows/reusable-phpstan-static-analysis-v1.yml index bbf1b78589a8c..d1ac9f9799792 100644 --- a/.github/workflows/reusable-phpstan-static-analysis-v1.yml +++ b/.github/workflows/reusable-phpstan-static-analysis-v1.yml @@ -52,7 +52,7 @@ jobs: cache: npm - name: Set up PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: ${{ inputs.php-version }} coverage: none @@ -73,7 +73,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: ${{ steps.get-date.outputs.date }} diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index c720bb99df174..793fac8adfc4f 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -150,7 +150,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: '${{ inputs.php }}' coverage: none @@ -158,7 +158,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") diff --git a/.github/workflows/reusable-test-core-build-process.yml b/.github/workflows/reusable-test-core-build-process.yml index 8d4ab718ee6de..b5c40eb040e64 100644 --- a/.github/workflows/reusable-test-core-build-process.yml +++ b/.github/workflows/reusable-test-core-build-process.yml @@ -86,7 +86,7 @@ jobs: # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies if: ${{ inputs.test-certificates }} - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: ${{ steps.get-date.outputs.date }} diff --git a/.github/workflows/reusable-test-local-docker-environment-v1.yml b/.github/workflows/reusable-test-local-docker-environment-v1.yml index ff257624b8349..370b88c6c0231 100644 --- a/.github/workflows/reusable-test-local-docker-environment-v1.yml +++ b/.github/workflows/reusable-test-local-docker-environment-v1.yml @@ -105,7 +105,7 @@ jobs: # dependency versions are installed and cached. ## - name: Set up PHP - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: '${{ inputs.php }}' coverage: none @@ -113,7 +113,7 @@ jobs: # Since Composer dependencies are installed using `composer update` and no lock file is in version control, # passing a custom cache suffix ensures that the cache is flushed at least once per week. - name: Install Composer dependencies - uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0 + uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0 with: custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") diff --git a/.github/workflows/reusable-upgrade-testing.yml b/.github/workflows/reusable-upgrade-testing.yml index 60d5523a9e3b6..372b6ae0c3e60 100644 --- a/.github/workflows/reusable-upgrade-testing.yml +++ b/.github/workflows/reusable-upgrade-testing.yml @@ -78,7 +78,7 @@ jobs: steps: - name: Set up PHP ${{ inputs.php }} - uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: '${{ inputs.php }}' coverage: none From 17017058962ca25ad57ab52e3cc43490cb4bf7d5 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 22 Apr 2026 18:13:47 +0000 Subject: [PATCH 031/106] AI: Validate filtered default request timeout in `WP_AI_Client_Prompt_Builder`. This checks that the return value of the `wp_ai_client_default_request_timeout` filter is a non-negative number before passing it to `RequestOptions`. If the filtered value is invalid, it is discarded in favor of the original default of `30.0` and a `_doing_it_wrong()` notice is issued. Without this check, a fatal error would ensue from the exception thrown in `\WordPress\AiClient\Providers\Http\DTO\RequestOptions::validateTimeout()`. The following static analysis issues are addressed: * Use `float` instead of `int` for the `wp_ai_client_default_request_timeout` filter parameter. * Add missing PHP imports for `Message` and `MessagePart` in the PHPDoc for `wp_ai_client_prompt()`. * Add PHP return type hints for `wp_ai_client_prompt()` and `WP_AI_Client_Cache::getMultiple()`. * Use native property type hints in `WP_AI_Client_HTTP_Client`. Developed in https://github.com/WordPress/wordpress-develop/pull/11596 Props westonruter, justlevine, flixos90, khushdoms, darshitrajyaguru97, adrmf25, jarodortegaaraya, tusharaddweb, gaurangsondagar. Fixes #65094. git-svn-id: https://develop.svn.wordpress.org/trunk@62255 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/ai-client.php | 4 +- .../adapters/class-wp-ai-client-cache.php | 2 +- .../class-wp-ai-client-http-client.php | 6 +- .../class-wp-ai-client-prompt-builder.php | 19 ++++- .../ai-client/wpAiClientPromptBuilder.php | 72 +++++++++++++++++-- 5 files changed, 90 insertions(+), 13 deletions(-) diff --git a/src/wp-includes/ai-client.php b/src/wp-includes/ai-client.php index 4fc20166fb8bb..b38c7b721416d 100644 --- a/src/wp-includes/ai-client.php +++ b/src/wp-includes/ai-client.php @@ -8,6 +8,8 @@ */ use WordPress\AiClient\AiClient; +use WordPress\AiClient\Messages\DTO\Message; +use WordPress\AiClient\Messages\DTO\MessagePart; /** * Returns whether AI features are supported in the current environment. @@ -55,6 +57,6 @@ function wp_supports_ai(): bool { * conversations. Default null. * @return WP_AI_Client_Prompt_Builder The prompt builder instance. */ -function wp_ai_client_prompt( $prompt = null ) { +function wp_ai_client_prompt( $prompt = null ): WP_AI_Client_Prompt_Builder { return new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry(), $prompt ); } diff --git a/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php b/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php index 18d85eee6c9e6..45504897485f7 100644 --- a/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php +++ b/src/wp-includes/ai-client/adapters/class-wp-ai-client-cache.php @@ -104,7 +104,7 @@ public function clear(): bool { * @param mixed $default_value Default value to return for keys that do not exist. * @return array A list of key => value pairs. */ - public function getMultiple( $keys, $default_value = null ) { + public function getMultiple( $keys, $default_value = null ): array { /** * Keys array. * diff --git a/src/wp-includes/ai-client/adapters/class-wp-ai-client-http-client.php b/src/wp-includes/ai-client/adapters/class-wp-ai-client-http-client.php index f1827db0e437c..f6c6dea441d1c 100644 --- a/src/wp-includes/ai-client/adapters/class-wp-ai-client-http-client.php +++ b/src/wp-includes/ai-client/adapters/class-wp-ai-client-http-client.php @@ -32,17 +32,15 @@ class WP_AI_Client_HTTP_Client implements ClientInterface, ClientWithOptionsInte * Response factory instance. * * @since 7.0.0 - * @var ResponseFactoryInterface */ - private $response_factory; + private ResponseFactoryInterface $response_factory; /** * Stream factory instance. * * @since 7.0.0 - * @var StreamFactoryInterface */ - private $stream_factory; + private StreamFactoryInterface $stream_factory; /** * Constructor. diff --git a/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php b/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php index d1f2271bd47d3..da7858dd76555 100644 --- a/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php +++ b/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php @@ -190,14 +190,29 @@ public function __construct( ProviderRegistry $registry, $prompt = null ) { $this->error = $this->exception_to_wp_error( $e ); } + $default_timeout = 30.0; + /** * Filters the default request timeout in seconds for AI Client HTTP requests. * * @since 7.0.0 * - * @param int $default_timeout The default timeout in seconds. + * @param float $default_timeout The default timeout in seconds. */ - $default_timeout = (int) apply_filters( 'wp_ai_client_default_request_timeout', 30 ); + $filtered_default_timeout = apply_filters( 'wp_ai_client_default_request_timeout', $default_timeout ); + if ( is_numeric( $filtered_default_timeout ) && (float) $filtered_default_timeout >= 0.0 ) { + $default_timeout = (float) $filtered_default_timeout; + } else { + _doing_it_wrong( + __METHOD__, + sprintf( + /* translators: %s: wp_ai_client_default_request_timeout */ + __( 'The %s filter must return a non-negative number.' ), + 'wp_ai_client_default_request_timeout' + ), + '7.0.0' + ); + } $this->builder->usingRequestOptions( RequestOptions::fromArray( diff --git a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php b/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php index 3a781ccc73751..e758a6868aa42 100644 --- a/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php +++ b/tests/phpunit/tests/ai-client/wpAiClientPromptBuilder.php @@ -192,15 +192,64 @@ public function test_constructor_sets_default_request_timeout() { } /** - * Test that the constructor allows overriding the default request timeout. + * Test that the constructor allows overriding the default request timeout with a valid value. * * @ticket 64591 + * @ticket 65094 + * + * @dataProvider data_valid_request_timeout_overrides + * + * @param mixed $input The timeout value returned by the filter. + * @param float $expected The expected timeout stored on the request options. + */ + public function test_constructor_allows_overriding_request_timeout_with_valid_timeout( $input, float $expected ) { + add_filter( + 'wp_ai_client_default_request_timeout', + static function () use ( $input ) { + return $input; + } + ); + + $builder = new WP_AI_Client_Prompt_Builder( AiClient::defaultRegistry() ); + + /** @var RequestOptions $request_options */ + $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); + + $this->assertInstanceOf( RequestOptions::class, $request_options ); + $this->assertSame( $expected, $request_options->getTimeout() ); + } + + /** + * Data provider for {@see self::test_constructor_allows_overriding_request_timeout_with_valid_timeout()}. + * + * @return array */ - public function test_constructor_allows_overriding_request_timeout() { + public function data_valid_request_timeout_overrides(): array { + return array( + 'float' => array( 45.5, 45.5 ), + 'integer' => array( 67, 67.0 ), + 'string' => array( '20', 20.0 ), + 'infinity' => array( INF, INF ), + 'zero' => array( 0.0, 0.0 ), + ); + } + + /** + * Test that the constructor disallows overriding the default request timeout with an invalid value. + * + * @ticket 65094 + * + * @dataProvider data_invalid_request_timeouts + * + * @expectedIncorrectUsage WP_AI_Client_Prompt_Builder::__construct + * + * @param mixed $timeout The invalid timeout value returned by the filter. + */ + public function test_constructor_disallows_overriding_with_invalid_request_timeout( $timeout ) { add_filter( 'wp_ai_client_default_request_timeout', - static function () { - return 45; + static function () use ( $timeout ) { + return $timeout; } ); @@ -210,7 +259,20 @@ static function () { $request_options = $this->get_wrapped_prompt_builder_property_value( $builder, 'requestOptions' ); $this->assertInstanceOf( RequestOptions::class, $request_options ); - $this->assertSame( 45.0, $request_options->getTimeout() ); + $this->assertSame( 30.0, $request_options->getTimeout() ); + } + + /** + * Data provider for {@see self::test_constructor_disallows_overriding_with_invalid_request_timeout()}. + * + * @return array + */ + public function data_invalid_request_timeouts(): array { + return array( + 'negative number' => array( -1 ), + 'array' => array( array() ), + 'null' => array( null ), + ); } /** From a747d74b952a59f2460f9ed8e75aa50ec82d98c5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 22 Apr 2026 23:51:07 +0000 Subject: [PATCH 032/106] I18N: Add context for the Library admin menu item. Props timse201, sanketparmar, trickster301, audrasjb, jadavsanjay, SergeyBiryukov. Fixes #64982. git-svn-id: https://develop.svn.wordpress.org/trunk@62256 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/menu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/menu.php b/src/wp-admin/menu.php index dc8c4271e9aad..57d94c75e26f2 100644 --- a/src/wp-admin/menu.php +++ b/src/wp-admin/menu.php @@ -72,7 +72,7 @@ $menu[10] = array( __( 'Media' ), 'upload_files', 'upload.php', '', 'menu-top menu-icon-media', 'menu-media', 'dashicons-admin-media' ); - $submenu['upload.php'][5] = array( __( 'Library' ), 'upload_files', 'upload.php' ); + $submenu['upload.php'][5] = array( _x( 'Library', 'media library menu item' ), 'upload_files', 'upload.php' ); $submenu['upload.php'][10] = array( __( 'Add Media File' ), 'upload_files', 'media-new.php' ); $submenu_index = 15; From 88fe6bf7a5defe8103d29324fc2ec85b24ed05b9 Mon Sep 17 00:00:00 2001 From: ramonopoly Date: Thu, 23 Apr 2026 01:09:24 +0000 Subject: [PATCH 033/106] Block Supports: strip custom CSS from blocks for users without edit_css capability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds capability-gated CSS stripping so that when a user without `edit_css` saves a post, any `style.css` block attributes are removed from block comments using `WP_Block_Parser::next_token()`. Props aaronrobertshaw, audrasjb, dmsnell, glendaviesnz, jonsurrell, ozgursar, ramonopoly, shailu25, westonruter. Follow-up to [64544]. Fixes #64771. git-svn-id: https://develop.svn.wordpress.org/trunk@62257 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/custom-css.php | 152 +++++++++++ .../wpStripCustomCssFromBlocks.php | 238 ++++++++++++++++++ 2 files changed, 390 insertions(+) create mode 100644 tests/phpunit/tests/block-supports/wpStripCustomCssFromBlocks.php diff --git a/src/wp-includes/block-supports/custom-css.php b/src/wp-includes/block-supports/custom-css.php index 9d5b13426f4ef..b931acf47bc02 100644 --- a/src/wp-includes/block-supports/custom-css.php +++ b/src/wp-includes/block-supports/custom-css.php @@ -124,6 +124,158 @@ function wp_register_custom_css_support( $block_type ) { } } +/** + * Strips `style.css` attributes from all blocks in post content. + * + * Uses {@see WP_Block_Parser::next_token()} to scan block tokens and surgically + * replace only the attribute JSON that changed — no parse_blocks() + + * serialize_blocks() round-trip needed. + * + * @since 7.0.0 + * @access private + * + * @param string $content Post content to filter, expected to be escaped with slashes. + * @return string Filtered post content with block custom CSS removed. + */ +function wp_strip_custom_css_from_blocks( $content ) { + if ( ! has_blocks( $content ) ) { + return $content; + } + + $unslashed = stripslashes( $content ); + + $parser = new WP_Block_Parser(); + $parser->document = $unslashed; + $parser->offset = 0; + $end = strlen( $unslashed ); + $replacements = array(); + + while ( $parser->offset < $end ) { + $next_token = $parser->next_token(); + + if ( 'no-more-tokens' === $next_token[0] ) { + break; + } + + list( $token_type, , $attrs, $start_offset, $token_length ) = $next_token; + + $parser->offset = $start_offset + $token_length; + + if ( 'block-opener' !== $token_type && 'void-block' !== $token_type ) { + continue; + } + + if ( ! isset( $attrs['style']['css'] ) ) { + continue; + } + + // Remove css and clean up empty style. + unset( $attrs['style']['css'] ); + if ( empty( $attrs['style'] ) ) { + unset( $attrs['style'] ); + } + + // Locate the JSON portion within the token. + $token_string = substr( $unslashed, $start_offset, $token_length ); + $json_rel_start = strcspn( $token_string, '{' ); + $json_rel_end = strrpos( $token_string, '}' ); + + $json_start = $start_offset + $json_rel_start; + $json_length = $json_rel_end - $json_rel_start + 1; + + // Re-encode attributes. If attrs is now empty, remove JSON and trailing space. + if ( empty( $attrs ) ) { + // Remove the trailing space after JSON. + $replacements[] = array( $json_start, $json_length + 1, '' ); + } else { + $replacements[] = array( $json_start, $json_length, serialize_block_attributes( $attrs ) ); + } + } + + if ( empty( $replacements ) ) { + return $content; + } + + // Build the result by splicing replacements into the original string. + $result = ''; + $was_at = 0; + + foreach ( $replacements as $replacement ) { + list( $offset, $length, $new_json ) = $replacement; + $result .= substr( $unslashed, $was_at, $offset - $was_at ) . $new_json; + $was_at = $offset + $length; + } + + if ( $was_at < $end ) { + $result .= substr( $unslashed, $was_at ); + } + + return addslashes( $result ); +} + +/** + * Adds the filters to strip custom CSS from block content on save. + * Priority of 8 to run before wp_filter_global_styles_post (priority 9) and wp_filter_post_kses (priority 10). + * + * @since 7.0.0 + * @access private + */ +function wp_custom_css_kses_init_filters() { + add_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks', 8 ); + add_filter( 'content_filtered_save_pre', 'wp_strip_custom_css_from_blocks', 8 ); +} + +/** + * Removes the filters that strip custom CSS from block content on save. + * Priority of 8 to run before wp_filter_global_styles_post (priority 9) and wp_filter_post_kses (priority 10). + * + * @since 7.0.0 + * @access private + */ +function wp_custom_css_remove_filters() { + remove_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks', 8 ); + remove_filter( 'content_filtered_save_pre', 'wp_strip_custom_css_from_blocks', 8 ); +} + +/** + * Registers the custom CSS content filters if the user does not have the edit_css capability. + * + * @since 7.0.0 + * @access private + */ +function wp_custom_css_kses_init() { + wp_custom_css_remove_filters(); + if ( ! current_user_can( 'edit_css' ) ) { + wp_custom_css_kses_init_filters(); + } +} + +/** + * Initializes custom CSS content filters when imported data should be filtered. + * + * Runs at priority 999 on {@see 'force_filtered_html_on_import'} to ensure it + * fires after general KSES initialization, independently of user capabilities. + * If the input of the filter is true it means we are in an import situation and should + * enable the custom CSS filters, independently of the user capabilities. + * + * @since 7.0.0 + * @access private + * + * @param mixed $arg Input argument of the filter. + * @return mixed Input argument of the filter. + */ +function wp_custom_css_force_filtered_html_on_import_filter( $arg ) { + if ( $arg ) { + wp_custom_css_kses_init_filters(); + } + return $arg; +} + +// Run before wp_filter_global_styles_post (priority 9) and wp_filter_post_kses (priority 10). +add_action( 'init', 'wp_custom_css_kses_init', 20 ); +add_action( 'set_current_user', 'wp_custom_css_kses_init' ); +add_filter( 'force_filtered_html_on_import', 'wp_custom_css_force_filtered_html_on_import_filter', 999 ); + // Register the block support. WP_Block_Supports::get_instance()->register( 'custom-css', diff --git a/tests/phpunit/tests/block-supports/wpStripCustomCssFromBlocks.php b/tests/phpunit/tests/block-supports/wpStripCustomCssFromBlocks.php new file mode 100644 index 0000000000000..1b6076ee185a4 --- /dev/null +++ b/tests/phpunit/tests/block-supports/wpStripCustomCssFromBlocks.php @@ -0,0 +1,238 @@ +assertArrayNotHasKey( 'css', $blocks[0]['attrs']['style'] ?? array(), $message ); + $this->assertArrayNotHasKey( 'style', $blocks[0]['attrs'] ?? array(), 'style key should be fully removed when css was the only property.' ); + } + + /** + * Data provider. + * + * @return array + */ + public function data_strips_css_from_blocks() { + return array( + 'single block' => array( + 'content' => '

Hello

', + 'message' => 'style.css should be stripped from block attributes.', + ), + ); + } + + /** + * Tests that style.css is stripped from nested inner blocks. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_strips_css_from_inner_blocks() { + $content = '

Hello

'; + + $result = wp_unslash( wp_strip_custom_css_from_blocks( $content ) ); + $blocks = parse_blocks( $result ); + + $inner_block = $blocks[0]['innerBlocks'][0]; + $this->assertArrayNotHasKey( 'css', $inner_block['attrs']['style'] ?? array(), 'style.css should be stripped from inner block attributes.' ); + } + + /** + * Tests that content without blocks is returned unchanged. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_returns_non_block_content_unchanged() { + $content = '

This is plain HTML content with no blocks.

'; + + $result = wp_strip_custom_css_from_blocks( $content ); + + $this->assertSame( $content, $result, 'Non-block content should be returned unchanged.' ); + } + + /** + * Tests that content without style.css attributes is returned unchanged. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_returns_unchanged_when_no_css_attributes() { + $content = '

Hello

'; + + $result = wp_strip_custom_css_from_blocks( $content ); + + $this->assertSame( $content, $result, 'Content without style.css attributes should be returned unchanged.' ); + } + + /** + * Tests that other style properties are preserved when css is stripped. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_preserves_other_style_properties() { + $content = '

Hello

'; + + $result = wp_unslash( wp_strip_custom_css_from_blocks( $content ) ); + $blocks = parse_blocks( $result ); + + $this->assertArrayNotHasKey( 'css', $blocks[0]['attrs']['style'], 'style.css should be stripped.' ); + $this->assertSame( '#ff0000', $blocks[0]['attrs']['style']['color']['text'], 'Other style properties should be preserved.' ); + } + + /** + * Tests that empty style object is cleaned up after stripping css. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_cleans_up_empty_style_object() { + $content = '

Hello

'; + + $result = wp_unslash( wp_strip_custom_css_from_blocks( $content ) ); + $blocks = parse_blocks( $result ); + + $this->assertArrayNotHasKey( 'style', $blocks[0]['attrs'], 'Empty style object should be cleaned up after stripping css.' ); + } + + /** + * Tests that slashed content is handled correctly. + * + * @covers ::wp_strip_custom_css_from_blocks + * @ticket 64771 + */ + public function test_handles_slashed_content() { + $content = '

Hello

'; + $slashed = wp_slash( $content ); + + $result = wp_strip_custom_css_from_blocks( $slashed ); + $blocks = parse_blocks( wp_unslash( $result ) ); + + $this->assertArrayNotHasKey( 'css', $blocks[0]['attrs']['style'] ?? array(), 'style.css should be stripped even from slashed content.' ); + } + + /** + * Tests that the content_save_pre filter is added for a user without edit_css. + * + * @ticket 64771 + * + * @covers ::wp_custom_css_kses_init + * @covers ::wp_custom_css_kses_init_filters + */ + public function test_filter_added_for_user_without_edit_css() { + $author_id = self::factory()->user->create( array( 'role' => 'author' ) ); + wp_set_current_user( $author_id ); + wp_custom_css_kses_init(); + + $this->assertSame( 8, has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'content_save_pre filter should be added at priority 8 for users without edit_css.' ); + $this->assertSame( 8, has_filter( 'content_filtered_save_pre', 'wp_strip_custom_css_from_blocks' ), 'content_filtered_save_pre filter should be added at priority 8 for users without edit_css.' ); + + wp_set_current_user( 0 ); + wp_custom_css_remove_filters(); + } + + /** + * Tests that the content_save_pre filter is not added for a user with edit_css. + * + * @ticket 64771 + * + * @covers ::wp_custom_css_kses_init + * @covers ::wp_custom_css_remove_filters + */ + public function test_filter_not_added_for_user_with_edit_css() { + $admin_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); + if ( is_multisite() ) { + grant_super_admin( $admin_id ); + } + wp_set_current_user( $admin_id ); + wp_custom_css_kses_init(); + + $this->assertFalse( has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'content_save_pre filter should not be added for users with edit_css.' ); + $this->assertFalse( has_filter( 'content_filtered_save_pre', 'wp_strip_custom_css_from_blocks' ), 'content_filtered_save_pre filter should not be added for users with edit_css.' ); + + if ( is_multisite() ) { + revoke_super_admin( $admin_id ); + } + wp_set_current_user( 0 ); + wp_custom_css_remove_filters(); + } + + /** + * Tests that switching to a user with edit_css removes the filter via the set_current_user action. + * + * wp_custom_css_kses_init() is hooked to set_current_user, so wp_set_current_user() + * alone should update the filter state without a manual call. + * + * @ticket 64771 + * + * @covers ::wp_custom_css_kses_init + */ + public function test_set_current_user_action_triggers_reinit() { + $admin_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); + $author_id = self::factory()->user->create( array( 'role' => 'author' ) ); + if ( is_multisite() ) { + grant_super_admin( $admin_id ); + } + + // Switching to a user without edit_css should add the filter via the set_current_user action. + wp_set_current_user( $author_id ); + $this->assertNotFalse( has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'Filter should be active for user without edit_css.' ); + + // Switching to a user with edit_css should remove the filter via the set_current_user action. + wp_set_current_user( $admin_id ); + $this->assertFalse( has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'Filter should be removed after switching to a user with edit_css.' ); + + if ( is_multisite() ) { + revoke_super_admin( $admin_id ); + } + wp_set_current_user( 0 ); + wp_custom_css_remove_filters(); + } + + /** + * Tests that the filter is enabled during import regardless of user capability. + * + * @ticket 64771 + * + * @covers ::wp_custom_css_force_filtered_html_on_import_filter + */ + public function test_force_filtered_html_on_import_enables_filter_for_privileged_user() { + $admin_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); + if ( is_multisite() ) { + grant_super_admin( $admin_id ); + } + wp_set_current_user( $admin_id ); + wp_custom_css_kses_init(); + + $this->assertFalse( has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'Filter should not be active for admin before import.' ); + + apply_filters( 'force_filtered_html_on_import', true ); + + $this->assertNotFalse( has_filter( 'content_save_pre', 'wp_strip_custom_css_from_blocks' ), 'Filter should be enabled during import regardless of user capability.' ); + + if ( is_multisite() ) { + revoke_super_admin( $admin_id ); + } + wp_set_current_user( 0 ); + wp_custom_css_remove_filters(); + } +} From adf6443199d31d971b0600c970b1ff919c755955 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Thu, 23 Apr 2026 05:09:23 +0000 Subject: [PATCH 034/106] Build/Test Tools: Consolidate vendor file copying to ensure `.min.js` files are minified. Relocates the copying of vendor JavaScript files back to the `grunt copy:vendor-js` subtask to ensure the files are in place prior to the `grunt uglify` step running to minify the files. Props desrosj. Fixes #65007. See #64393. git-svn-id: https://develop.svn.wordpress.org/trunk@62258 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 76 +++++++++++--- package.json | 3 +- tools/vendors/copy-vendors.js | 185 ---------------------------------- 3 files changed, 63 insertions(+), 201 deletions(-) delete mode 100644 tools/vendors/copy-vendors.js diff --git a/Gruntfile.js b/Gruntfile.js index 5f9109fac3cb0..8863d030627b8 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -397,6 +397,55 @@ module.exports = function(grunt) { 'suggest*' ], dest: WORKING_DIR + 'wp-includes/js/jquery/' + }, + { + [ WORKING_DIR + 'wp-includes/js/dist/vendor/lodash.js' ]: [ './node_modules/lodash/lodash.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/lodash.min.js' ]: [ './node_modules/lodash/lodash.min.js' ], + }, + { + [ WORKING_DIR + 'wp-includes/js/dist/vendor/moment.js' ]: [ './node_modules/moment/moment.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/moment.min.js' ]: [ './node_modules/moment/min/moment.min.js' ], + }, + { + [ WORKING_DIR + 'wp-includes/js/dist/vendor/regenerator-runtime.js' ]: [ './node_modules/regenerator-runtime/runtime.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/regenerator-runtime.min.js' ]: [ './node_modules/regenerator-runtime/runtime.js' ], + }, + // React libraries: react, react-dom + { + [ WORKING_DIR + 'wp-includes/js/dist/vendor/react.js' ]: [ './node_modules/react/umd/react.development.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/react.min.js' ]: [ './node_modules/react/umd/react.production.min.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/react-dom.js' ]: [ './node_modules/react-dom/umd/react-dom.development.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/react-dom.min.js' ]: [ './node_modules/react-dom/umd/react-dom.production.min.js' ], + }, + // Polyfills + { + // @wordpress/babel-preset-default + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill.js' ]: [ './node_modules/@wordpress/babel-preset-default/build/polyfill.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill.min.js' ]: [ './node_modules/@wordpress/babel-preset-default/build/polyfill.min.js' ], + // polyfill-library (DOMRect) + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-dom-rect.js' ]: [ './node_modules/polyfill-library/polyfills/__dist/DOMRect/raw.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-dom-rect.min.js' ]: [ './node_modules/polyfill-library/polyfills/__dist/DOMRect/min.js' ], + // element-closest + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-element-closest.js' ]: [ './node_modules/element-closest/browser.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-element-closest.min.js' ]: [ './node_modules/element-closest/browser.js' ], + // whatwg-fetch + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-fetch.js' ]: [ './node_modules/whatwg-fetch/dist/fetch.umd.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-fetch.min.js' ]: [ './node_modules/whatwg-fetch/dist/fetch.umd.js' ], + // formdata-polyfill + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-formdata.js' ]: [ './node_modules/formdata-polyfill/FormData.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-formdata.min.js' ]: [ './node_modules/formdata-polyfill/formdata.min.js' ], + // wicg-inert + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-inert.js' ]: [ './node_modules/wicg-inert/dist/inert.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-inert.min.js' ]: [ './node_modules/wicg-inert/dist/inert.min.js' ], + // polyfill-library (Node.prototype.contains) + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-node-contains.js' ]: [ './node_modules/polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-node-contains.min.js' ]: [ './node_modules/polyfill-library/polyfills/__dist/Node.prototype.contains/min.js' ], + // objectFitPolyfill + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-object-fit.js' ]: [ './node_modules/objectFitPolyfill/src/objectFitPolyfill.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-object-fit.min.js' ]: [ './node_modules/objectFitPolyfill/dist/objectFitPolyfill.min.js' ], + // core-js-url-browser + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-url.js' ]: [ './node_modules/core-js-url-browser/url.js' ], + [ WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-url.min.js' ]: [ './node_modules/core-js-url-browser/url.min.js' ], } ].concat( // Copy tinymce.js only when building to /src. @@ -1107,6 +1156,14 @@ module.exports = function(grunt) { src: WORKING_DIR + 'wp-includes/js/dist/vendor/moment.js', dest: WORKING_DIR + 'wp-includes/js/dist/vendor/moment.min.js' }, + 'regenerator-runtime': { + src: WORKING_DIR + 'wp-includes/js/dist/vendor/regenerator-runtime.js', + dest: WORKING_DIR + 'wp-includes/js/dist/vendor/regenerator-runtime.min.js' + }, + 'wp-polyfill-fetch': { + src: WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-fetch.js', + dest: WORKING_DIR + 'wp-includes/js/dist/vendor/wp-polyfill-fetch.min.js' + }, dynamic: { expand: true, cwd: WORKING_DIR, @@ -1635,18 +1692,6 @@ module.exports = function(grunt) { } ); } ); - grunt.registerTask( 'copy-vendor-scripts', 'Copies vendor scripts from node_modules to wp-includes/js/dist/vendor/.', function() { - const done = this.async(); - const buildDir = grunt.option( 'dev' ) ? 'src' : 'build'; - grunt.util.spawn( { - cmd: 'node', - args: [ 'tools/vendors/copy-vendors.js', `--build-dir=${ buildDir }` ], - opts: { stdio: 'inherit' } - }, function( error ) { - done( ! error ); - } ); - } ); - grunt.renameTask( 'watch', '_watch' ); grunt.registerTask( 'watch', function() { @@ -1675,6 +1720,8 @@ module.exports = function(grunt) { 'uglify:imgareaselect', 'uglify:jqueryform', 'uglify:moment', + 'uglify:regenerator-runtime', + 'uglify:wp-polyfill-fetch', 'qunit:compiled' ] ); @@ -1817,7 +1864,9 @@ module.exports = function(grunt) { 'uglify:jquery-ui', 'uglify:imgareaselect', 'uglify:jqueryform', - 'uglify:moment' + 'uglify:moment', + 'uglify:regenerator-runtime', + 'uglify:wp-polyfill-fetch' ] ); grunt.registerTask( 'build:codemirror', [ @@ -1837,7 +1886,6 @@ module.exports = function(grunt) { 'clean:js', 'build:webpack', 'copy:js', - 'copy-vendor-scripts', 'file_append', 'uglify:all', 'concat:tinymce', diff --git a/package.json b/package.json index 4d0b8110e0a9f..6f3cd1fbe6c3e 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,6 @@ "typecheck:php": "node ./tools/local-env/scripts/docker.js run --rm php composer phpstan", "gutenberg:copy": "node tools/gutenberg/copy.js", "gutenberg:verify": "node tools/gutenberg/utils.js", - "gutenberg:download": "node tools/gutenberg/download.js && grunt build:gutenberg --dev", - "vendor:copy": "node tools/vendors/copy-vendors.js" + "gutenberg:download": "node tools/gutenberg/download.js && grunt build:gutenberg --dev" } } diff --git a/tools/vendors/copy-vendors.js b/tools/vendors/copy-vendors.js deleted file mode 100644 index 12660fc639645..0000000000000 --- a/tools/vendors/copy-vendors.js +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env node - -/** - * Copy Vendor Scripts - * - * This script copies vendor dependencies from node_modules to wp-includes/js/dist/vendor/. - * These are Core's own dependencies (moment, lodash, regenerator-runtime, polyfills, etc.) - * separate from Gutenberg packages. - * - * @package WordPress - */ - -const fs = require( 'fs' ); -const path = require( 'path' ); - -// Paths -const rootDir = path.resolve( __dirname, '../..' ); -const nodeModulesDir = path.join( rootDir, 'node_modules' ); - -// Parse command line arguments -const args = process.argv.slice( 2 ); -const buildDirArg = args.find( arg => arg.startsWith( '--build-dir=' ) ); -const buildTarget = buildDirArg - ? buildDirArg.split( '=' )[1] - : ( args.includes( '--dev' ) ? 'src' : 'build' ); - -const vendorDir = path.join( rootDir, buildTarget, 'wp-includes/js/dist/vendor' ); - -/** - * Vendor files to copy from node_modules. - */ -const VENDOR_FILES = { - // Moment.js - 'moment': { - files: [ - { from: 'moment/moment.js', to: 'moment.js' }, - { from: 'moment/min/moment.min.js', to: 'moment.min.js' }, - ], - }, - - // Lodash - 'lodash': { - files: [ - { from: 'lodash/lodash.js', to: 'lodash.js' }, - { from: 'lodash/lodash.min.js', to: 'lodash.min.js' }, - ], - }, - - // Regenerator Runtime - 'regenerator-runtime': { - files: [ - { from: 'regenerator-runtime/runtime.js', to: 'regenerator-runtime.js' }, - { from: 'regenerator-runtime/runtime.js', to: 'regenerator-runtime.min.js' }, - ], - }, - - // React (UMD builds from node_modules) - 'react': { - files: [ - { from: 'react/umd/react.development.js', to: 'react.js' }, - { from: 'react/umd/react.production.min.js', to: 'react.min.js' }, - ], - }, - - // React DOM (UMD builds from node_modules) - 'react-dom': { - files: [ - { from: 'react-dom/umd/react-dom.development.js', to: 'react-dom.js' }, - { from: 'react-dom/umd/react-dom.production.min.js', to: 'react-dom.min.js' }, - ], - }, - - // Main Polyfill bundle - 'wp-polyfill': { - files: [ - { from: '@wordpress/babel-preset-default/build/polyfill.js', to: 'wp-polyfill.js' }, - { from: '@wordpress/babel-preset-default/build/polyfill.min.js', to: 'wp-polyfill.min.js' }, - ], - }, - - // Polyfills - Fetch (same source for both - was minified by webpack) - 'wp-polyfill-fetch': { - files: [ - { from: 'whatwg-fetch/dist/fetch.umd.js', to: 'wp-polyfill-fetch.js' }, - { from: 'whatwg-fetch/dist/fetch.umd.js', to: 'wp-polyfill-fetch.min.js' }, - ], - }, - - // Polyfills - FormData - 'wp-polyfill-formdata': { - files: [ - { from: 'formdata-polyfill/FormData.js', to: 'wp-polyfill-formdata.js' }, - { from: 'formdata-polyfill/formdata.min.js', to: 'wp-polyfill-formdata.min.js' }, - ], - }, - - // Polyfills - Element Closest (same for both) - 'wp-polyfill-element-closest': { - files: [ - { from: 'element-closest/browser.js', to: 'wp-polyfill-element-closest.js' }, - { from: 'element-closest/browser.js', to: 'wp-polyfill-element-closest.min.js' }, - ], - }, - - // Polyfills - Object Fit - 'wp-polyfill-object-fit': { - files: [ - { from: 'objectFitPolyfill/src/objectFitPolyfill.js', to: 'wp-polyfill-object-fit.js' }, - { from: 'objectFitPolyfill/dist/objectFitPolyfill.min.js', to: 'wp-polyfill-object-fit.min.js' }, - ], - }, - - // Polyfills - Inert - 'wp-polyfill-inert': { - files: [ - { from: 'wicg-inert/dist/inert.js', to: 'wp-polyfill-inert.js' }, - { from: 'wicg-inert/dist/inert.min.js', to: 'wp-polyfill-inert.min.js' }, - ], - }, - - // Polyfills - URL - 'wp-polyfill-url': { - files: [ - { from: 'core-js-url-browser/url.js', to: 'wp-polyfill-url.js' }, - { from: 'core-js-url-browser/url.min.js', to: 'wp-polyfill-url.min.js' }, - ], - }, - - // Polyfills - DOMRect (same source for both - was minified by webpack) - 'wp-polyfill-dom-rect': { - files: [ - { from: 'polyfill-library/polyfills/__dist/DOMRect/raw.js', to: 'wp-polyfill-dom-rect.js' }, - { from: 'polyfill-library/polyfills/__dist/DOMRect/raw.js', to: 'wp-polyfill-dom-rect.min.js' }, - ], - }, - - // Polyfills - Node.contains (same source for both - was minified by webpack) - 'wp-polyfill-node-contains': { - files: [ - { from: 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', to: 'wp-polyfill-node-contains.js' }, - { from: 'polyfill-library/polyfills/__dist/Node.prototype.contains/raw.js', to: 'wp-polyfill-node-contains.min.js' }, - ], - }, -}; - -/** - * Main execution function. - */ -async function main() { - console.log( '📦 Copying vendor scripts from node_modules...' ); - console.log( ` Build target: ${ buildTarget }/` ); - - // Create vendor directory - fs.mkdirSync( vendorDir, { recursive: true } ); - - let copied = 0; - let skipped = 0; - - for ( const [ vendor, config ] of Object.entries( VENDOR_FILES ) ) { - for ( const file of config.files ) { - const srcPath = path.join( nodeModulesDir, file.from ); - const destPath = path.join( vendorDir, file.to ); - - if ( fs.existsSync( srcPath ) ) { - fs.copyFileSync( srcPath, destPath ); - copied++; - } else { - console.log( ` ⚠️ Skipping ${ file.to }: source not found` ); - skipped++; - } - } - } - - console.log( `\n✅ Vendor scripts copied!` ); - console.log( ` Copied: ${ copied } files` ); - if ( skipped > 0 ) { - console.log( ` Skipped: ${ skipped } files` ); - } -} - -// Run main function -main().catch( ( error ) => { - console.error( '❌ Unexpected error:', error ); - process.exit( 1 ); -} ); From a95dd0e0351a9fb2ef124ea1b8be63bf6887b946 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 23 Apr 2026 22:12:40 +0000 Subject: [PATCH 035/106] Tests: Add missing `@covers` tags for `WP_Block_Parser` tests. Includes moving the data provider after the corresponding test for consistency with the rest of the test suite. Follow-up to [43751]. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62259 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/blocks/wpBlockParser.php | 56 +++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/tests/phpunit/tests/blocks/wpBlockParser.php b/tests/phpunit/tests/blocks/wpBlockParser.php index d88849d956dd6..4523f0ec4ed04 100644 --- a/tests/phpunit/tests/blocks/wpBlockParser.php +++ b/tests/phpunit/tests/blocks/wpBlockParser.php @@ -7,6 +7,8 @@ * @since 5.0.0 * * @group blocks + * + * @coversDefaultClass WP_Block_Parser */ class Tests_Blocks_wpBlockParser extends WP_UnitTestCase { /** @@ -17,35 +19,11 @@ class Tests_Blocks_wpBlockParser extends WP_UnitTestCase { */ protected static $fixtures_dir; - /** - * @ticket 45109 - */ - public function data_parsing_test_filenames() { - self::$fixtures_dir = DIR_TESTDATA . '/blocks/fixtures'; - - $fixture_filenames = array_merge( - glob( self::$fixtures_dir . '/*.json' ), - glob( self::$fixtures_dir . '/*.html' ) - ); - - $fixture_filenames = array_values( - array_unique( - array_map( - array( $this, 'clean_fixture_filename' ), - $fixture_filenames - ) - ) - ); - - return array_map( - array( $this, 'pass_parser_fixture_filenames' ), - $fixture_filenames - ); - } - /** * @dataProvider data_parsing_test_filenames * @ticket 45109 + * + * @covers ::parse */ public function test_default_parser_output( $html_filename, $parsed_json_filename ) { $html_path = self::$fixtures_dir . '/' . $html_filename; @@ -70,6 +48,32 @@ public function test_default_parser_output( $html_filename, $parsed_json_filenam ); } + /** + * @ticket 45109 + */ + public function data_parsing_test_filenames() { + self::$fixtures_dir = DIR_TESTDATA . '/blocks/fixtures'; + + $fixture_filenames = array_merge( + glob( self::$fixtures_dir . '/*.json' ), + glob( self::$fixtures_dir . '/*.html' ) + ); + + $fixture_filenames = array_values( + array_unique( + array_map( + array( $this, 'clean_fixture_filename' ), + $fixture_filenames + ) + ) + ); + + return array_map( + array( $this, 'pass_parser_fixture_filenames' ), + $fixture_filenames + ); + } + /** * Helper function to remove relative paths and extension from a filename, leaving just the fixture name. * From 59a9905fec02392bc2eda5b4d7c60768ce8be8ef Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 24 Apr 2026 18:53:08 +0000 Subject: [PATCH 036/106] Tests: Correct `@covers` tags for `WP_Error` tests. Includes removing redundant tags to help clarify the purpose of each individual test. Follow-up to [42255], [50339]. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62260 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/general/wpError.php | 77 ------------------------- 1 file changed, 77 deletions(-) diff --git a/tests/phpunit/tests/general/wpError.php b/tests/phpunit/tests/general/wpError.php index fee4233d6ab2d..cae5b2593f2cb 100644 --- a/tests/phpunit/tests/general/wpError.php +++ b/tests/phpunit/tests/general/wpError.php @@ -5,7 +5,6 @@ * @group general * @group errors * - * @covers WP_Error * @coversDefaultClass WP_Error */ class Tests_General_wpError extends WP_UnitTestCase { @@ -42,7 +41,6 @@ public function test_WP_Error_with_default_empty_parameters_should_add_no_errors /** * @covers ::__construct - * @covers ::get_error_code */ public function test_WP_Error_with_empty_code_should_add_no_code() { $this->assertSame( '', $this->wp_error->get_error_code() ); @@ -50,7 +48,6 @@ public function test_WP_Error_with_empty_code_should_add_no_code() { /** * @covers ::__construct - * @covers ::get_error_message */ public function test_WP_Error_with_empty_code_should_add_no_message() { $this->assertSame( '', $this->wp_error->get_error_message() ); @@ -65,7 +62,6 @@ public function test_WP_Error_with_empty_code_should_add_no_error_data() { /** * @covers ::__construct - * @covers ::get_error_code */ public function test_WP_Error_with_code_and_empty_message_should_add_error_with_that_code() { $wp_error = new WP_Error( 'code' ); @@ -75,7 +71,6 @@ public function test_WP_Error_with_code_and_empty_message_should_add_error_with_ /** * @covers ::__construct - * @covers ::get_error_message */ public function test_WP_Error_with_code_and_empty_message_should_add_error_with_that_code_and_empty_message() { $wp_error = new WP_Error( 'code' ); @@ -85,7 +80,6 @@ public function test_WP_Error_with_code_and_empty_message_should_add_error_with_ /** * @covers ::__construct - * @covers ::get_error_data */ public function test_WP_Error_with_code_and_empty_message_and_empty_data_should_add_error_but_not_associated_data() { $wp_error = new WP_Error( 'code' ); @@ -95,7 +89,6 @@ public function test_WP_Error_with_code_and_empty_message_and_empty_data_should_ /** * @covers ::__construct - * @covers ::get_error_data */ public function test_WP_Error_with_code_and_empty_message_and_non_empty_data_should_add_error_with_empty_message_and_that_stored_data() { $wp_error = new WP_Error( 'code', '', 'data' ); @@ -105,7 +98,6 @@ public function test_WP_Error_with_code_and_empty_message_and_non_empty_data_sho /** * @covers ::__construct - * @covers ::get_error_code */ public function test_WP_Error_with_code_and_message_should_add_error_with_that_code() { $wp_error = new WP_Error( 'code', 'message' ); @@ -115,7 +107,6 @@ public function test_WP_Error_with_code_and_message_should_add_error_with_that_c /** * @covers ::__construct - * @covers ::get_error_message */ public function test_WP_Error_with_code_and_message_should_add_error_with_that_message() { $wp_error = new WP_Error( 'code', 'message' ); @@ -125,7 +116,6 @@ public function test_WP_Error_with_code_and_message_should_add_error_with_that_m /** * @covers ::__construct - * @covers ::get_error_code */ public function test_WP_Error_with_code_and_message_and_data_should_add_error_with_that_code() { $wp_error = new WP_Error( 'code', 'message', 'data' ); @@ -135,7 +125,6 @@ public function test_WP_Error_with_code_and_message_and_data_should_add_error_wi /** * @covers ::__construct - * @covers ::get_error_message */ public function test_WP_Error_with_code_and_message_and_data_should_add_error_with_that_message() { $wp_error = new WP_Error( 'code', 'message', 'data' ); @@ -145,7 +134,6 @@ public function test_WP_Error_with_code_and_message_and_data_should_add_error_wi /** * @covers ::__construct - * @covers ::get_error_data */ public function test_WP_Error_with_code_and_message_and_data_should_add_error_with_that_data() { $wp_error = new WP_Error( 'code', 'message', 'data' ); @@ -154,7 +142,6 @@ public function test_WP_Error_with_code_and_message_and_data_should_add_error_wi } /** - * @covers ::__construct * @covers ::get_error_codes */ public function test_get_error_codes_with_no_errors_should_return_empty_array() { @@ -162,7 +149,6 @@ public function test_get_error_codes_with_no_errors_should_return_empty_array() } /** - * @covers ::add * @covers ::get_error_codes */ public function test_get_error_codes_with_one_error_should_return_an_array_with_only_that_code() { @@ -172,7 +158,6 @@ public function test_get_error_codes_with_one_error_should_return_an_array_with_ } /** - * @covers ::add * @covers ::get_error_codes */ public function test_get_error_codes_with_multiple_errors_should_return_an_array_of_those_codes() { @@ -185,7 +170,6 @@ public function test_get_error_codes_with_multiple_errors_should_return_an_array } /** - * @covers ::__construct * @covers ::get_error_code */ public function test_get_error_code_with_no_errors_should_return_an_empty_string() { @@ -193,7 +177,6 @@ public function test_get_error_code_with_no_errors_should_return_an_empty_string } /** - * @covers ::add * @covers ::get_error_code */ public function test_get_error_code_with_one_error_should_return_that_error_code() { @@ -203,7 +186,6 @@ public function test_get_error_code_with_one_error_should_return_that_error_code } /** - * @covers ::add * @covers ::get_error_code */ public function test_get_error_code_with_multiple_errors_should_return_only_the_first_error_code() { @@ -214,7 +196,6 @@ public function test_get_error_code_with_multiple_errors_should_return_only_the_ } /** - * @covers ::__construct * @covers ::get_error_messages */ public function test_get_error_messages_with_empty_code_and_no_errors_should_return_an_empty_array() { @@ -222,7 +203,6 @@ public function test_get_error_messages_with_empty_code_and_no_errors_should_ret } /** - * @covers ::add * @covers ::get_error_messages */ public function test_get_error_messages_with_empty_code_one_error_should_return_an_array_with_that_message() { @@ -232,7 +212,6 @@ public function test_get_error_messages_with_empty_code_one_error_should_return_ } /** - * @covers ::add * @covers ::get_error_messages */ public function test_get_error_messages_with_empty_code_multiple_errors_should_return_an_array_of_messages() { @@ -243,7 +222,6 @@ public function test_get_error_messages_with_empty_code_multiple_errors_should_r } /** - * @covers ::__construct * @covers ::get_error_messages */ public function test_get_error_messages_with_an_invalid_code_should_return_an_empty_array() { @@ -251,7 +229,6 @@ public function test_get_error_messages_with_an_invalid_code_should_return_an_em } /** - * @covers ::add * @covers ::get_error_messages */ public function test_get_error_messages_with_one_error_should_return_an_array_with_that_message() { @@ -261,7 +238,6 @@ public function test_get_error_messages_with_one_error_should_return_an_array_wi } /** - * @covers ::add * @covers ::get_error_messages */ public function test_get_error_messages_with_multiple_errors_same_code_should_return_an_array_with_all_messages() { @@ -272,7 +248,6 @@ public function test_get_error_messages_with_multiple_errors_same_code_should_re } /** - * @covers ::__construct * @covers ::get_error_message */ public function test_get_error_message_with_empty_code_and_no_errors_should_return_an_empty_string() { @@ -280,7 +255,6 @@ public function test_get_error_message_with_empty_code_and_no_errors_should_retu } /** - * @covers ::add * @covers ::get_error_message */ public function test_get_error_message_with_empty_code_and_one_error_should_return_that_message() { @@ -290,7 +264,6 @@ public function test_get_error_message_with_empty_code_and_one_error_should_retu } /** - * @covers ::add * @covers ::get_error_message */ public function test_get_error_message_with_empty_code_and_multiple_errors_should_return_the_first_message() { @@ -301,7 +274,6 @@ public function test_get_error_message_with_empty_code_and_multiple_errors_shoul } /** - * @covers ::add * @covers ::get_error_message */ public function test_get_error_message_with_empty_code_and_multiple_errors_multiple_codes_should_return_the_first_message() { @@ -313,7 +285,6 @@ public function test_get_error_message_with_empty_code_and_multiple_errors_multi } /** - * @covers ::__construct * @covers ::get_error_message */ public function test_get_error_message_with_invalid_code_and_no_errors_should_return_empty_string() { @@ -321,7 +292,6 @@ public function test_get_error_message_with_invalid_code_and_no_errors_should_re } /** - * @covers ::add * @covers ::get_error_message */ public function test_get_error_message_with_invalid_code_and_one_error_should_return_an_empty_string() { @@ -331,7 +301,6 @@ public function test_get_error_message_with_invalid_code_and_one_error_should_re } /** - * @covers ::add * @covers ::get_error_message */ public function test_get_error_message_with_invalid_code_and_multiple_errors_should_return_an_empty_string() { @@ -342,7 +311,6 @@ public function test_get_error_message_with_invalid_code_and_multiple_errors_sho } /** - * @covers ::__construct * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_and_no_errors_should_evaluate_as_null() { @@ -350,7 +318,6 @@ public function test_get_error_data_with_empty_code_and_no_errors_should_evaluat } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_one_error_no_data_should_evaluate_as_null() { @@ -360,7 +327,6 @@ public function test_get_error_data_with_empty_code_one_error_no_data_should_eva } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_multiple_errors_no_data_should_evaluate_as_null() { @@ -371,7 +337,6 @@ public function test_get_error_data_with_empty_code_multiple_errors_no_data_shou } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_and_one_error_with_data_should_return_that_data() { @@ -382,7 +347,6 @@ public function test_get_error_data_with_empty_code_and_one_error_with_data_shou } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_and_multiple_errors_different_codes_should_return_the_last_data_of_the_first_code() { @@ -394,7 +358,6 @@ public function test_get_error_data_with_empty_code_and_multiple_errors_differen } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_empty_code_and_multiple_errors_same_code_should_return_the_last_data_of_the_first_code() { @@ -406,7 +369,6 @@ public function test_get_error_data_with_empty_code_and_multiple_errors_same_cod } /** - * @covers ::__construct * @covers ::get_error_data */ public function test_get_error_data_with_code_and_no_errors_should_evaluate_as_null() { @@ -414,7 +376,6 @@ public function test_get_error_data_with_code_and_no_errors_should_evaluate_as_n } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_code_and_one_error_with_no_data_should_evaluate_as_null() { @@ -424,7 +385,6 @@ public function test_get_error_data_with_code_and_one_error_with_no_data_should_ } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_code_and_one_error_with_data_should_return_that_data() { @@ -435,7 +395,6 @@ public function test_get_error_data_with_code_and_one_error_with_data_should_ret } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_code_and_multiple_errors_different_codes_should_return_the_last_stored_data_of_the_code() { @@ -448,7 +407,6 @@ public function test_get_error_data_with_code_and_multiple_errors_different_code } /** - * @covers ::add * @covers ::get_error_data */ public function test_get_error_data_with_code_and_multiple_errors_same_code_should_return_the_last_stored_data() { @@ -460,7 +418,6 @@ public function test_get_error_data_with_code_and_multiple_errors_same_code_shou } /** - * @covers ::__construct * @covers ::get_all_error_data */ public function test_get_all_error_data_with_code_and_no_errors_should_evaluate_as_empty_array() { @@ -468,7 +425,6 @@ public function test_get_all_error_data_with_code_and_no_errors_should_evaluate_ } /** - * @covers ::add * @covers ::get_all_error_data */ public function test_get_all_error_data_with_code_and_one_error_with_no_data_should_evaluate_as_empty_array() { @@ -478,7 +434,6 @@ public function test_get_all_error_data_with_code_and_one_error_with_no_data_sho } /** - * @covers ::add * @covers ::get_all_error_data */ public function test_get_all_error_data_with_code_and_one_error_with_data_should_return_that_data() { @@ -491,7 +446,6 @@ public function test_get_all_error_data_with_code_and_one_error_with_data_should } /** - * @covers ::add * @covers ::get_all_error_data */ public function test_get_all_error_data_with_code_and_multiple_errors_same_code_should_return_all_data() { @@ -503,7 +457,6 @@ public function test_get_all_error_data_with_code_and_multiple_errors_same_code_ } /** - * @covers ::add * @covers ::get_all_error_data */ public function test_get_all_error_data_should_handle_manipulation_of_error_data_property() { @@ -517,7 +470,6 @@ public function test_get_all_error_data_should_handle_manipulation_of_error_data } /** - * @covers ::__construct * @covers ::has_errors */ public function test_has_errors_with_no_errors_returns_false() { @@ -525,7 +477,6 @@ public function test_has_errors_with_no_errors_returns_false() { } /** - * @covers ::add * @covers ::has_errors */ public function test_has_errors_with_errors_returns_true() { @@ -571,7 +522,6 @@ public function test_add_with_empty_code_empty_message_non_empty_data_should_sto /** * @covers ::add - * @covers ::get_error_code */ public function test_add_with_code_empty_message_empty_data_should_add_error_with_code() { $this->wp_error->add( 'code', '' ); @@ -581,7 +531,6 @@ public function test_add_with_code_empty_message_empty_data_should_add_error_wit /** * @covers ::add - * @covers ::get_error_message */ public function test_add_with_code_empty_message_empty_data_should_add_error_with_empty_message() { $this->wp_error->add( 'code', '' ); @@ -591,7 +540,6 @@ public function test_add_with_code_empty_message_empty_data_should_add_error_wit /** * @covers ::add - * @covers ::get_error_data */ public function test_add_with_code_empty_message_empty_data_should_not_add_error_data() { $this->wp_error->add( 'code', '' ); @@ -601,7 +549,6 @@ public function test_add_with_code_empty_message_empty_data_should_not_add_error /** * @covers ::add - * @covers ::get_error_message */ public function test_add_with_code_and_message_and_empty_data_should_should_add_error_with_that_message() { $this->wp_error->add( 'code', 'message' ); @@ -611,7 +558,6 @@ public function test_add_with_code_and_message_and_empty_data_should_should_add_ /** * @covers ::add - * @covers ::get_error_data */ public function test_add_with_code_and_message_and_empty_data_should_not_alter_stored_data() { $this->wp_error->add( 'code', 'message' ); @@ -621,7 +567,6 @@ public function test_add_with_code_and_message_and_empty_data_should_not_alter_s /** * @covers ::add - * @covers ::get_error_code */ public function test_add_with_code_and_empty_message_and_data_should_add_error_with_that_code() { $this->wp_error->add( 'code', '', 'data' ); @@ -631,7 +576,6 @@ public function test_add_with_code_and_empty_message_and_data_should_add_error_w /** * @covers ::add - * @covers ::get_error_data */ public function test_add_with_code_and_empty_message_and_data_should_store_that_data() { $this->wp_error->add( 'code', '', 'data' ); @@ -641,7 +585,6 @@ public function test_add_with_code_and_empty_message_and_data_should_store_that_ /** * @covers ::add - * @covers ::get_error_code */ public function test_add_with_code_and_message_and_data_should_add_an_error_with_that_code() { $this->wp_error->add( 'code', 'message', 'data' ); @@ -651,7 +594,6 @@ public function test_add_with_code_and_message_and_data_should_add_an_error_with /** * @covers ::add - * @covers ::get_error_message */ public function test_add_with_code_and_message_and_data_should_add_an_error_with_that_message() { $this->wp_error->add( 'code', 'message', 'data' ); @@ -661,7 +603,6 @@ public function test_add_with_code_and_message_and_data_should_add_an_error_with /** * @covers ::add - * @covers ::get_error_data */ public function test_add_with_code_and_message_and_data_should_store_that_data() { $this->wp_error->add( 'code', 'message', 'data' ); @@ -671,7 +612,6 @@ public function test_add_with_code_and_message_and_data_should_store_that_data() /** * @covers ::add - * @covers ::get_error_messages */ public function test_add_multiple_times_with_the_same_code_should_add_additional_messages_for_that_code() { $this->wp_error->add( 'code', 'message' ); @@ -684,7 +624,6 @@ public function test_add_multiple_times_with_the_same_code_should_add_additional /** * @covers ::add - * @covers ::get_error_data */ public function test_add_multiple_times_with_the_same_code_and_different_data_should_store_only_the_last_added_data() { $this->wp_error->add( 'code', 'message', 'data-bar' ); @@ -713,7 +652,6 @@ public function test_add_data_with_empty_data_empty_code_no_errors_should_create /** * @covers ::add_data - * @covers ::get_error_data */ public function test_add_data_with_data_empty_code_and_one_error_should_store_the_data_under_that_code() { $this->wp_error->add( 'code', 'message' ); @@ -724,7 +662,6 @@ public function test_add_data_with_data_empty_code_and_one_error_should_store_th /** * @covers ::add_data - * @covers ::get_error_data */ public function test_add_data_with_data_empty_code_and_multiple_errors_with_different_codes_should_store_it_under_the_first_code() { $this->wp_error->add( 'code', 'message' ); @@ -737,7 +674,6 @@ public function test_add_data_with_data_empty_code_and_multiple_errors_with_diff /** * @covers ::add_data - * @covers ::get_error_data */ public function test_add_data_with_data_empty_code_and_multiple_errors_with_same_code_should_store_it_under_the_first_code() { $this->wp_error->add( 'code', 'message' ); @@ -791,7 +727,6 @@ public function test_add_data_with_data_and_code_one_error_different_code_should /** * @covers ::add_data - * @covers ::get_error_data */ public function test_add_data_with_data_and_code_should_add_data() { $this->wp_error->add( 'code', 'message' ); @@ -868,8 +803,6 @@ public function test_remove_should_remove_the_error_with_the_given_code() { /** * @covers ::remove - * @covers ::get_error_data - * @covers ::get_all_error_data */ public function test_remove_should_remove_the_error_data_associated_with_the_given_code() { $this->wp_error->add( 'code', 'message', 'data' ); @@ -884,10 +817,6 @@ public function test_remove_should_remove_the_error_data_associated_with_the_giv /** * @covers ::merge_from - * @covers ::get_error_messages - * @covers ::get_error_data - * @covers ::get_all_error_data - * @covers ::get_error_message */ public function test_merge_from_should_copy_other_error_into_instance() { $this->wp_error->add( 'code1', 'message1', 'data1' ); @@ -904,7 +833,6 @@ public function test_merge_from_should_copy_other_error_into_instance() { /** * @covers ::merge_from - * @covers ::has_errors */ public function test_merge_from_with_no_errors_should_not_add_to_instance() { $other = new WP_Error(); @@ -916,10 +844,6 @@ public function test_merge_from_with_no_errors_should_not_add_to_instance() { /** * @covers ::export_to - * @covers ::get_error_messages - * @covers ::get_error_data - * @covers ::get_all_error_data - * @covers ::get_error_message */ public function test_export_to_should_copy_instance_into_other_error() { $other = new WP_Error(); @@ -938,7 +862,6 @@ public function test_export_to_should_copy_instance_into_other_error() { /** * @covers ::export_to - * @covers ::has_errors */ public function test_export_to_with_no_errors_should_not_add_to_other_error() { $other = new WP_Error(); From c2e0a55a9c6aec981e16028829e00d0fefa37151 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 25 Apr 2026 18:44:19 +0000 Subject: [PATCH 037/106] Tests: Add missing `@covers` tag for `register_block_type_from_metadata()` tests. Follow-up to [59132]. Props sagardeshmukh. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62261 602fd350-edb4-49c9-b593-d223f7449a82 --- .../tests/blocks/registerBlockTypeFromMetadataWithRegistry.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/phpunit/tests/blocks/registerBlockTypeFromMetadataWithRegistry.php b/tests/phpunit/tests/blocks/registerBlockTypeFromMetadataWithRegistry.php index 4cadfa91a33bd..b77c16660b0d9 100644 --- a/tests/phpunit/tests/blocks/registerBlockTypeFromMetadataWithRegistry.php +++ b/tests/phpunit/tests/blocks/registerBlockTypeFromMetadataWithRegistry.php @@ -3,6 +3,8 @@ * Tests for WP_Block_Metadata_Registry integration with register_block_type_from_metadata(). * * @group blocks + * + * @covers ::register_block_type_from_metadata */ class Tests_Blocks_RegisterBlockTypeFromMetadataWithRegistry extends WP_UnitTestCase { private $temp_manifest_file; From b95a327b304d01b097bebf76e6175d1cbe3dbf6e Mon Sep 17 00:00:00 2001 From: Jb Audras Date: Sun, 26 Apr 2026 07:02:59 +0000 Subject: [PATCH 038/106] Administration: Fix misaligned icon in user profile password field. This changeset corrects a misalignment issue affecting the show/hide button next to the password field. Props piyushpatel123, rajdiptank111, ankitkumarshah, andrewssanya, jdahir0789, gautammkgarg, gaurangsondagar, gaisma22, ugyensupport, abduremon, ankitmaru, darshitrajyaguru97, khushdoms, monzuralam. Fixes #65031. git-svn-id: https://develop.svn.wordpress.org/trunk@62262 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/forms.css | 5 +++++ src/wp-admin/user-edit.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/css/forms.css b/src/wp-admin/css/forms.css index e4e09ca1b6023..aa049e9df14f0 100644 --- a/src/wp-admin/css/forms.css +++ b/src/wp-admin/css/forms.css @@ -583,6 +583,11 @@ input[type="number"].tiny-text { vertical-align: middle; } +.button.wp-hide-pw.user-new-password-toggle > .dashicons { + line-height: 1.85; + vertical-align: top; +} + .wp-cancel-pw .dashicons-no { display: none; } diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php index cfad6afbab8dc..c25380a93ee91 100644 --- a/src/wp-admin/user-edit.php +++ b/src/wp-admin/user-edit.php @@ -695,7 +695,7 @@ - From f695caa05a6c065ab4f87bd82e1482536f1d056b Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Sun, 26 Apr 2026 23:04:23 +0000 Subject: [PATCH 039/106] Administration: Resize classic editor slug field for new theme. Reduces the size and improves the alignment of the post slug field following the re-design of form elements as part of the new admin theme. Props wildworks, sabernhardt, audrasjb, dhruvang21, shailu25, joedolson, khushdoms, tusharaddweb. Fixes #65063. git-svn-id: https://develop.svn.wordpress.org/trunk@62263 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/admin/post.js | 2 +- src/wp-admin/css/edit.css | 7 +++++-- src/wp-includes/css/buttons.css | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/js/_enqueues/admin/post.js b/src/js/_enqueues/admin/post.js index 1dde10ffc8aae..d50fe6007d33b 100644 --- a/src/js/_enqueues/admin/post.js +++ b/src/js/_enqueues/admin/post.js @@ -1028,7 +1028,7 @@ jQuery( function($) { revert_e = $el.html(); buttons.html( - ' ' + + ' ' + '' ); diff --git a/src/wp-admin/css/edit.css b/src/wp-admin/css/edit.css index b98dd889c59fe..133616d335a6d 100644 --- a/src/wp-admin/css/edit.css +++ b/src/wp-admin/css/edit.css @@ -121,7 +121,6 @@ input#link_url { #edit-slug-box .cancel { margin-right: 10px; padding: 0; - font-size: 11px; } #comment-link-box { @@ -140,7 +139,7 @@ input#link_url { #editable-post-name input { font-size: 13px; font-weight: 400; - height: 24px; + min-height: 32px; margin: 0; width: 16em; } @@ -1068,6 +1067,10 @@ form#tags-filter { #edit-slug-box { padding: 0; } + + #editable-post-name input { + min-height: 40px; + } } @media only screen and (max-width: 1004px) { diff --git a/src/wp-includes/css/buttons.css b/src/wp-includes/css/buttons.css index e092764121b11..cb6e18dbffcb8 100644 --- a/src/wp-includes/css/buttons.css +++ b/src/wp-includes/css/buttons.css @@ -380,6 +380,7 @@ TABLE OF CONTENTS: .wp-core-ui .button, .wp-core-ui .button.button-large, + .wp-core-ui .button.button-compact, .wp-core-ui .button.button-small, input#publish, input#save-post, From 7ce10948ecc69c068725012d8be5400feaa85ab5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 26 Apr 2026 23:49:04 +0000 Subject: [PATCH 040/106] Tests: Move `@covers` tags to the class-level DocBlock in some block-related tests. See #64225. git-svn-id: https://develop.svn.wordpress.org/trunk@62264 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/blocks/getHookedBlocks.php | 9 ++------- tests/phpunit/tests/blocks/insertHookedBlocks.php | 13 ++----------- ...ookedBlocksAndSetIgnoredHookedBlocksMetadata.php | 1 + 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/tests/phpunit/tests/blocks/getHookedBlocks.php b/tests/phpunit/tests/blocks/getHookedBlocks.php index 8301aed0e3a09..83a741b4d0771 100644 --- a/tests/phpunit/tests/blocks/getHookedBlocks.php +++ b/tests/phpunit/tests/blocks/getHookedBlocks.php @@ -9,6 +9,8 @@ * * @group blocks * @group block-hooks + * + * @covers ::get_hooked_blocks */ class Tests_Blocks_GetHookedBlocks extends WP_UnitTestCase { @@ -58,8 +60,6 @@ private function switch_to_block_theme_hooked_blocks() { /** * @ticket 59383 - * - * @covers ::get_hooked_blocks */ public function test_get_hooked_blocks_no_match_found() { $result = get_hooked_blocks(); @@ -69,8 +69,6 @@ public function test_get_hooked_blocks_no_match_found() { /** * @ticket 59383 - * - * @covers ::get_hooked_blocks */ public function test_get_hooked_blocks_matches_found() { register_block_type( @@ -138,7 +136,6 @@ public function test_get_hooked_blocks_matches_found() { * @ticket 60008 * @ticket 60506 * - * @covers ::get_hooked_blocks * @covers ::get_block_file_template */ public function test_loading_template_with_hooked_blocks() { @@ -170,7 +167,6 @@ public function test_loading_template_with_hooked_blocks() { * @ticket 60008 * @ticket 60506 * - * @covers ::get_hooked_blocks * @covers ::get_block_file_template */ public function test_loading_template_part_with_hooked_blocks() { @@ -202,7 +198,6 @@ public function test_loading_template_part_with_hooked_blocks() { * @ticket 60008 * @ticket 60506 * - * @covers ::get_hooked_blocks * @covers WP_Block_Patterns_Registry::get_registered */ public function test_loading_pattern_with_hooked_blocks() { diff --git a/tests/phpunit/tests/blocks/insertHookedBlocks.php b/tests/phpunit/tests/blocks/insertHookedBlocks.php index cf99b213e518c..552e04f86102d 100644 --- a/tests/phpunit/tests/blocks/insertHookedBlocks.php +++ b/tests/phpunit/tests/blocks/insertHookedBlocks.php @@ -9,6 +9,8 @@ * * @group blocks * @group block-hooks + * + * @covers ::insert_hooked_blocks */ class Tests_Blocks_InsertHookedBlocks extends WP_UnitTestCase { const ANCHOR_BLOCK_TYPE = 'tests/anchor-block'; @@ -26,8 +28,6 @@ class Tests_Blocks_InsertHookedBlocks extends WP_UnitTestCase { * @ticket 59572 * @ticket 60126 * @ticket 60506 - * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_returns_correct_markup() { $anchor_block = array( @@ -46,8 +46,6 @@ public function test_insert_hooked_blocks_returns_correct_markup() { * @ticket 59572 * @ticket 60126 * @ticket 60506 - * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_if_block_is_ignored() { $anchor_block = array( @@ -71,8 +69,6 @@ public function test_insert_hooked_blocks_if_block_is_ignored() { * @ticket 59572 * @ticket 60126 * @ticket 60506 - * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_if_other_block_is_ignored() { $anchor_block = array( @@ -96,8 +92,6 @@ public function test_insert_hooked_blocks_if_other_block_is_ignored() { * @ticket 59572 * @ticket 60126 * @ticket 60506 - * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_filter_can_set_attributes() { $anchor_block = array( @@ -139,8 +133,6 @@ public function test_insert_hooked_blocks_filter_can_set_attributes() { * @ticket 59572 * @ticket 60126 * @ticket 60506 - * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_filter_can_wrap_block() { $anchor_block = array( @@ -184,7 +176,6 @@ public function test_insert_hooked_blocks_filter_can_wrap_block() { /** * @ticket 60580 * - * @covers ::insert_hooked_blocks */ public function test_insert_hooked_blocks_filter_can_suppress_hooked_block() { $anchor_block = array( diff --git a/tests/phpunit/tests/blocks/insertHookedBlocksAndSetIgnoredHookedBlocksMetadata.php b/tests/phpunit/tests/blocks/insertHookedBlocksAndSetIgnoredHookedBlocksMetadata.php index 8e88719fee262..ee3d8eb469d2f 100644 --- a/tests/phpunit/tests/blocks/insertHookedBlocksAndSetIgnoredHookedBlocksMetadata.php +++ b/tests/phpunit/tests/blocks/insertHookedBlocksAndSetIgnoredHookedBlocksMetadata.php @@ -9,6 +9,7 @@ * * @group blocks * @group block-hooks + * * @covers ::insert_hooked_blocks_and_set_ignored_hooked_blocks_metadata */ class Tests_Blocks_InsertHookedBlocksAndSetIgnoredHookedBlocksMetadata extends WP_UnitTestCase { From d3474a5c2f6fbdfd18c7eb2807430b4d9ebc7c18 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Mon, 27 Apr 2026 02:10:15 +0000 Subject: [PATCH 041/106] Administration: Widen screen options number of items field. Modifies the Screen Options > Number of items per page field to avoid cropping of three digit numbers when setting a list view to display a lot of items. Props apermo, audrasjb, darshitrajyaguru97, ekla, gaurangsondagar, jigarkahar, juanmaguitar, khushdoms, peterwilsoncc, sabernhardt, shailu25, shatrumyatra, yusufmudagal. Fixes #65104. git-svn-id: https://develop.svn.wordpress.org/trunk@62268 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-screen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/includes/class-wp-screen.php b/src/wp-admin/includes/class-wp-screen.php index 838f0795cd5d3..227fda90c6273 100644 --- a/src/wp-admin/includes/class-wp-screen.php +++ b/src/wp-admin/includes/class-wp-screen.php @@ -1280,7 +1280,7 @@ public function render_per_page_options() { - From dce66cfe3b6a4523ea27117ef4e3716529981d1b Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Mon, 27 Apr 2026 03:39:06 +0000 Subject: [PATCH 042/106] Security: Update `composer/ca-bundle` to version `1.5.11`. This update adds 1 certificate to the bundle. Props desrosj. Fixes #64245. git-svn-id: https://develop.svn.wordpress.org/trunk@62271 602fd350-edb4-49c9-b593-d223f7449a82 --- composer.json | 2 +- src/wp-includes/certificates/ca-bundle.crt | 28 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index ee5c5d0c0aa03..59df0a7af3770 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "ext-dom": "*" }, "require-dev": { - "composer/ca-bundle": "1.5.10", + "composer/ca-bundle": "1.5.11", "squizlabs/php_codesniffer": "3.13.5", "wp-coding-standards/wpcs": "~3.3.0", "phpcompatibility/phpcompatibility-wp": "~2.1.3", diff --git a/src/wp-includes/certificates/ca-bundle.crt b/src/wp-includes/certificates/ca-bundle.crt index 65be891eea878..a78e1dd471fa9 100644 --- a/src/wp-includes/certificates/ca-bundle.crt +++ b/src/wp-includes/certificates/ca-bundle.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Dec 2 04:12:02 2025 GMT +## Certificate data from Mozilla last updated on: Wed Feb 11 18:26:30 2026 GMT ## ## Find updated versions here: https://curl.se/docs/caextract.html ## @@ -15,8 +15,8 @@ ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## -## Conversion done with mk-ca-bundle.pl version 1.30. -## SHA256: a903b3cd05231e39332515ef7ebe37e697262f39515a52015c23c62805b73cd0 +## Conversion done with mk-ca-bundle.pl version 1.32. +## SHA256: 3b98d4e3ff57a326d9587c33633039c8c3a9cf0b55f7ca581d7598ff329eb1f3 ## @@ -3480,8 +3480,8 @@ SM49BAMDA2kAMGYCMQCpKjAd0MKfkFFRQD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxg ZzFDJe0CMQCSia7pXGKDYmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= -----END CERTIFICATE----- - OISTE Server Root RSA G1 -========================= +OISTE Server Root RSA G1 +======================== -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBLMQswCQYDVQQG EwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwYT0lTVEUgU2VydmVyIFJv @@ -3509,3 +3509,21 @@ msuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3J8tRd/iWkx7P8nd9H0aT olkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2wq1yVAb+axj5d9spLFKebXd7Yv0PTY6Y MjAwcRLWJTXjn/hvnLXrahut6hDTlhZyBiElxky8j3C7DOReIoMt0r7+hVu05L0= -----END CERTIFICATE----- + +e-Szigno TLS Root CA 2023 +========================= +-----BEGIN CERTIFICATE----- +MIICzzCCAjGgAwIBAgINAOhvGHvWOWuYSkmYCjAKBggqhkjOPQQDBDB1MQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xFzAVBgNVBGEMDlZBVEhV +LTIzNTg0NDk3MSIwIAYDVQQDDBllLVN6aWdubyBUTFMgUm9vdCBDQSAyMDIzMB4XDTIzMDcxNzE0 +MDAwMFoXDTM4MDcxNzE0MDAwMFowdTELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRYw +FAYDVQQKDA1NaWNyb3NlYyBMdGQuMRcwFQYDVQRhDA5WQVRIVS0yMzU4NDQ5NzEiMCAGA1UEAwwZ +ZS1Temlnbm8gVExTIFJvb3QgQ0EgMjAyMzCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAGgP36J8 +PKp0iGEKjcJMpQEiFNT3YHdCnAo4YKGMZz6zY+n6kbCLS+Y53wLCMAFSAL/fjO1ZrTJlqwlZULUZ +wmgcAOAFX9pQJhzDrAQixTpN7+lXWDajwRlTEArRzT/vSzUaQ49CE0y5LBqcvjC2xN7cS53kpDzL +Ltmt3999Cd8ukv+ho2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E +FgQUWYQCYlpGePVd3I8KECgj3NXW+0UwHwYDVR0jBBgwFoAUWYQCYlpGePVd3I8KECgj3NXW+0Uw +CgYIKoZIzj0EAwQDgYsAMIGHAkIBLdqu9S54tma4n7Zwf2Z0z+yOfP7AAXmazlIC58PRDHpty7Ve +7hekm9sEdu4pKeiv+62sUvTXK9Z3hBC9xdIoaDQCQTV2WnXzkoYI9bIeCvZlC9p2x1L/Cx6AcCIw +wzPbGO2E14vs7dOoY4G1VnxHx1YwlGhza9IuqbnZLBwpvQy6uWWL +-----END CERTIFICATE----- From 4b343a7eab821b617431d6c6ac985a4e7e783f1f Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Mon, 27 Apr 2026 04:36:06 +0000 Subject: [PATCH 043/106] Administration: Fix misaligned icon in user profile password field on mobile. In [62262], the show/hide button next to the password field was aligned using `line-height` and `vertical-align`. This approach left the icon misaligned on mobile viewports. Follow-up to [62262]. Props mukesh27, wildworks. Fixes #65031. git-svn-id: https://develop.svn.wordpress.org/trunk@62272 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/forms.css | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/css/forms.css b/src/wp-admin/css/forms.css index aa049e9df14f0..b48825a1ef5a3 100644 --- a/src/wp-admin/css/forms.css +++ b/src/wp-admin/css/forms.css @@ -583,9 +583,10 @@ input[type="number"].tiny-text { vertical-align: middle; } -.button.wp-hide-pw.user-new-password-toggle > .dashicons { - line-height: 1.85; - vertical-align: top; +.button.wp-hide-pw.user-new-password-toggle { + display: inline-flex; + align-items: center; + column-gap: 4px; } .wp-cancel-pw .dashicons-no { From 8270db8c06e89784c63350dff374c4cd237cf924 Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Mon, 27 Apr 2026 05:58:14 +0000 Subject: [PATCH 044/106] Revisions: Fix misplaced buttons in comparison UI. Align the Previous, Next, and Restore This Revision buttons consistently across viewports on the revisions comparison screen. Props audrasjb, mokshasharmila13, peterwilsoncc, presskopp, shailu25, wildworks. Fixes #65062. git-svn-id: https://develop.svn.wordpress.org/trunk@62273 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/revisions.css | 5 ----- src/wp-admin/includes/revision.php | 8 ++++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/wp-admin/css/revisions.css b/src/wp-admin/css/revisions.css index 4cb824c8574c2..da238456178fc 100644 --- a/src/wp-admin/css/revisions.css +++ b/src/wp-admin/css/revisions.css @@ -309,7 +309,6 @@ table.diff .diff-addedline ins { float: right; margin-left: 6px; margin-right: 6px; - margin-top: 2px; } .diff-meta-from { @@ -632,8 +631,4 @@ div.revisions-controls > .wp-slider > .ui-slider-handle { word-break: break-all; word-wrap: break-word; } - - .diff-meta input.restore-revision { - margin-top: 0; - } } diff --git a/src/wp-admin/includes/revision.php b/src/wp-admin/includes/revision.php index 979576ecde92c..2f15f1c9e2faf 100644 --- a/src/wp-admin/includes/revision.php +++ b/src/wp-admin/includes/revision.php @@ -370,11 +370,11 @@ function wp_print_revision_templates() { @@ -454,9 +454,9 @@ function wp_print_revision_templates() { <# } #> <# if ( data.attributes.autosave ) { #> - type="button" class="restore-revision button button-primary" value="" /> + type="button" class="restore-revision button button-primary button-compact" value="" /> <# } else { #> - type="button" class="restore-revision button button-primary" value="" /> + type="button" class="restore-revision button button-primary button-compact" value="" /> <# } #> <# } #> From 93d77a26f115d42fb9193674d0e6702721f1368b Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 27 Apr 2026 18:29:17 +0000 Subject: [PATCH 045/106] I18N: Add translation support for script modules. Add automatic translation loading for script modules (ES modules), so strings using `__()` and friends from `@wordpress/i18n` can be translated at runtime. This brings classic script i18n parity to script modules registered via `wp_register_script_module()`, which previously had no way to load translation data, leaving strings untranslated on screens like Connectors and Fonts that are built as script modules. At the `admin_print_footer_scripts` and `wp_footer` actions, every enqueued script module and its dependencies are walked, the translation chunk is loaded for each, and an inline ` diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php index 961910e011d12..381d1db600c0e 100644 --- a/src/wp-includes/class-wp-customize-manager.php +++ b/src/wp-includes/class-wp-customize-manager.php @@ -4333,7 +4333,7 @@ public function render_control_templates() { <# if ( data.returnUrl !== data.previewUrl ) { #> <# } #> - + <# if ( data.allowOverride ) { #> <# } #> diff --git a/src/wp-includes/class-wp-editor.php b/src/wp-includes/class-wp-editor.php index 7ddd60fe871b4..16884bdd4b02a 100644 --- a/src/wp-includes/class-wp-editor.php +++ b/src/wp-includes/class-wp-editor.php @@ -1252,7 +1252,7 @@ private static function get_translation() { 'Nonbreaking space' => __( 'Nonbreaking space' ), 'Page break' => __( 'Page break' ), 'Paste as text' => __( 'Paste as text' ), - 'Preview' => __( 'Preview' ), + 'Preview' => _x( 'Preview', 'verb' ), 'Print' => __( 'Print' ), 'Save' => __( 'Save' ), 'Fullscreen' => __( 'Fullscreen' ), From 83d68ceed97902e4b3fb15e5ffba063a97166260 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 13 May 2026 08:38:27 +0000 Subject: [PATCH 089/106] Tests: Add unit tests for `wp_refresh_heartbeat_nonces()`. Follow-up to [44275]. Props pbearne. Fixes #65199. git-svn-id: https://develop.svn.wordpress.org/trunk@62356 602fd350-edb4-49c9-b593-d223f7449a82 --- .../misc/WpRefreshHeartbeatNonces_Test.php | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/WpRefreshHeartbeatNonces_Test.php diff --git a/tests/phpunit/tests/admin/includes/misc/WpRefreshHeartbeatNonces_Test.php b/tests/phpunit/tests/admin/includes/misc/WpRefreshHeartbeatNonces_Test.php new file mode 100644 index 0000000000000..785c14a16d4be --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/WpRefreshHeartbeatNonces_Test.php @@ -0,0 +1,47 @@ + 'value' ); + + $result = wp_refresh_heartbeat_nonces( $response ); + + $this->assertArrayHasKey( 'rest_nonce', $result, 'The response should contain the rest_nonce.' ); + $this->assertArrayHasKey( 'heartbeat_nonce', $result, 'The response should contain the heartbeat_nonce.' ); + $this->assertSame( 'value', $result['some_data'], 'Existing data in the response should be preserved.' ); + + $this->assertNotFalse( wp_verify_nonce( $result['rest_nonce'], 'wp_rest' ), 'The rest_nonce should be valid for "wp_rest".' ); + $this->assertNotFalse( wp_verify_nonce( $result['heartbeat_nonce'], 'heartbeat-nonce' ), 'The heartbeat_nonce should be valid for "heartbeat-nonce".' ); + } + + /** + * Tests that wp_refresh_heartbeat_nonces() overwrites existing nonces if they are already present. + * + * @ticket 65199 + */ + public function test_wp_refresh_heartbeat_nonces_overwrites_existing() { + $response = array( + 'rest_nonce' => 'old_rest_nonce', + 'heartbeat_nonce' => 'old_heartbeat_nonce', + ); + + $result = wp_refresh_heartbeat_nonces( $response ); + + $this->assertNotEquals( 'old_rest_nonce', $result['rest_nonce'], 'The rest_nonce should be updated.' ); + $this->assertNotEquals( 'old_heartbeat_nonce', $result['heartbeat_nonce'], 'The heartbeat_nonce should be updated.' ); + + $this->assertNotFalse( wp_verify_nonce( $result['rest_nonce'], 'wp_rest' ), 'The rest_nonce should be valid for "wp_rest".' ); + $this->assertNotFalse( wp_verify_nonce( $result['heartbeat_nonce'], 'heartbeat-nonce' ), 'The heartbeat_nonce should be valid for "heartbeat-nonce".' ); + } +} From 860e5faee16b3a6c06c97e2a5652ad3636a04ce4 Mon Sep 17 00:00:00 2001 From: Aki Hamano Date: Wed, 13 May 2026 11:59:24 +0000 Subject: [PATCH 090/106] Taxonomy: Fix delete button alignment on Edit Tag screen. The delete button on the Edit Tag screen was misaligned after the form control updates in [61645]. Switch the action buttons row to a flexbox layout for stable alignment. Follow-up to [61645]. Props mukesh27, tusharbharti, wildworks. Fixes #65233. git-svn-id: https://develop.svn.wordpress.org/trunk@62357 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/common.css | 7 ------- src/wp-admin/css/edit.css | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index fa7180874250f..55b721e7f12da 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -942,13 +942,6 @@ a#remove-post-thumbnail:hover, line-height: 2.30769231; /* 30px */ } -#delete-link { - line-height: 2.30769231; /* 30px */ - vertical-align: middle; - text-align: left; - margin-left: 8px; -} - #delete-link a { text-decoration: none; } diff --git a/src/wp-admin/css/edit.css b/src/wp-admin/css/edit.css index aa0ecc69943cb..0a38c708341ee 100644 --- a/src/wp-admin/css/edit.css +++ b/src/wp-admin/css/edit.css @@ -1542,6 +1542,9 @@ p.popular-tags a { } .edit-tag-actions { + display: flex; + align-items: center; + gap: 8px; margin-top: 20px; } From a1f2b4288369a780bdb7d48ab3d6a6031d42eb2b Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Wed, 13 May 2026 17:03:40 +0000 Subject: [PATCH 091/106] Build/Test Tools: Test against `7.0-RC3`. This updates the upgrade testing workflows to test against RC3. After 7.0 final release, this should be updated to test `7.0` proper. Fixes #64966. git-svn-id: https://develop.svn.wordpress.org/trunk@62358 602fd350-edb4-49c9-b593-d223f7449a82 --- .github/workflows/upgrade-develop-testing.yml | 4 ++-- .github/workflows/upgrade-testing.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/upgrade-develop-testing.yml b/.github/workflows/upgrade-develop-testing.yml index 7dfe96271f459..5f86e170fcdae 100644 --- a/.github/workflows/upgrade-develop-testing.yml +++ b/.github/workflows/upgrade-develop-testing.yml @@ -75,7 +75,7 @@ jobs: db-type: [ 'mysql' ] db-version: [ '5.7', '8.4' ] # WordPress 5.3 is the oldest version that supports PHP 7.4. - wp: [ '5.3', '6.8', '6.9', '7.0-RC2' ] + wp: [ '5.3', '6.8', '6.9', '7.0-RC3' ] multisite: [ false, true ] with: os: ${{ matrix.os }} @@ -101,7 +101,7 @@ jobs: php: [ '7.4', '8.4' ] db-type: [ 'mysql' ] db-version: [ '8.4' ] - wp: [ '6.8', '6.9', '7.0-RC2' ] + wp: [ '6.8', '6.9', '7.0-RC3' ] multisite: [ false, true ] with: os: ${{ matrix.os }} diff --git a/.github/workflows/upgrade-testing.yml b/.github/workflows/upgrade-testing.yml index b8953bad20def..1e54a946c03eb 100644 --- a/.github/workflows/upgrade-testing.yml +++ b/.github/workflows/upgrade-testing.yml @@ -71,7 +71,7 @@ jobs: php: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5' ] db-type: [ 'mysql' ] db-version: [ '5.7', '8.0', '8.4', '9.6' ] - wp: [ '6.8', '6.9', '7.0-RC2' ] + wp: [ '6.8', '6.9', '7.0-RC3' ] multisite: [ false, true ] with: os: ${{ matrix.os }} From 20b5d10910b0d598b99313bc27f16a52cfb8f476 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 13 May 2026 19:29:31 +0000 Subject: [PATCH 092/106] Block Supports: Improve performance and hardening of block-level custom CSS rendering. Short-circuits the custom CSS support filter before the more expensive lookups so blocks without custom CSS return faster. Replaces the regex class name parsing in `wp_render_custom_css_class_name()` with a cheap `str_contains()` guard followed by an HTML spec-compliant `strtok()` walk over the className tokens. This avoids the regex engine for the common case where no `wp-custom-css-` class is present, and correctly handles tab/form-feed/CR/LF separators as well as classes such as `my-wp-custom-css-*` that merely contain the prefix as a substring after a hyphen. Also hardens both functions against malformed parsed blocks (non-string `className`, missing keys), tightens `@phpstan-param` array shapes, and corrects the `block_has_support()` `@param` to allow `WP_Block_Type|null`. Lastly, a `@return Generator` phpdoc tag is added to `WP_HTML_Tag_Processor::class_list()`. Developed in https://github.com/WordPress/wordpress-develop/pull/11686 and https://github.com/WordPress/gutenberg/pull/78217 Follow-up to r61678. Props mukesh27, westonruter, ramonopoly, jonsurrell. See #64544, #64238. git-svn-id: https://develop.svn.wordpress.org/trunk@62359 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/custom-css.php | 62 ++++++++++++++----- src/wp-includes/blocks.php | 6 +- .../html-api/class-wp-html-tag-processor.php | 2 + .../wpRenderCustomCssClassName.php | 32 +++++++++- 4 files changed, 83 insertions(+), 19 deletions(-) diff --git a/src/wp-includes/block-supports/custom-css.php b/src/wp-includes/block-supports/custom-css.php index 2cd7644ed54b1..d4331ae3706ae 100644 --- a/src/wp-includes/block-supports/custom-css.php +++ b/src/wp-includes/block-supports/custom-css.php @@ -12,17 +12,28 @@ * * @param array $parsed_block The parsed block. * @return array The same parsed block with custom CSS class name added if appropriate. + * + * @phpstan-param array{ + * blockName: string|null, + * attrs: array{ + * className?: string, + * style?: array{ + * css?: string, + * ... + * }, + * ... + * }, + * ... + * } $parsed_block */ function wp_render_custom_css_support_styles( $parsed_block ) { - $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $parsed_block['blockName'] ); - - if ( ! block_has_support( $block_type, 'customCSS', true ) ) { + $custom_css = $parsed_block['attrs']['style']['css'] ?? null; + if ( ! is_string( $custom_css ) || '' === trim( $custom_css ) ) { return $parsed_block; } - $custom_css = trim( $parsed_block['attrs']['style']['css'] ?? '' ); - - if ( empty( $custom_css ) ) { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $parsed_block['blockName'] ); + if ( ! block_has_support( $block_type, 'customCSS', true ) ) { return $parsed_block; } @@ -32,9 +43,10 @@ function wp_render_custom_css_support_styles( $parsed_block ) { } // Generate a unique class name for this block instance. - $class_name = wp_unique_id_from_values( $parsed_block, 'wp-custom-css-' ); - $updated_class_name = isset( $parsed_block['attrs']['className'] ) - ? $parsed_block['attrs']['className'] . " $class_name" + $class_name = wp_unique_id_from_values( $parsed_block, 'wp-custom-css-' ); + $existing_class_name = $parsed_block['attrs']['className'] ?? null; + $updated_class_name = is_string( $existing_class_name ) + ? "$existing_class_name $class_name" : $class_name; _wp_array_set( $parsed_block, array( 'attrs', 'className' ), $updated_class_name ); @@ -68,7 +80,7 @@ function wp_enqueue_block_custom_css() { /** * Applies the custom CSS class name to the block's rendered HTML. * - * The class name is generated in `wp_render_custom_css_support_styles` + * The class name is generated in {@see wp_render_custom_css_support_styles()} * and stored in block attributes. This filter adds it to the actual markup. * * @since 7.0.0 @@ -76,12 +88,34 @@ function wp_enqueue_block_custom_css() { * @param string $block_content Rendered block content. * @param array $block Block object. * @return string Filtered block content. + * + * @phpstan-param array{ + * attrs: array{ + * className?: string, + * ... + * }, + * ... + * } $block */ function wp_render_custom_css_class_name( $block_content, $block ) { - $class_string = $block['attrs']['className'] ?? ''; - preg_match( '/\bwp-custom-css-\S+\b/', $class_string, $matches ); + $class_name_attr = $block['attrs']['className'] ?? null; + + if ( ! is_string( $class_name_attr ) || ! str_contains( $class_name_attr, 'wp-custom-css-' ) ) { + return $block_content; + } - if ( empty( $matches ) ) { + // Parse out the 'wp-custom-css-*' class name added by wp_render_custom_css_support_styles(). + $custom_class_name = null; + $token_delimiter = " \t\f\r\n"; + $class_token = strtok( $class_name_attr, $token_delimiter ); + while ( false !== $class_token ) { + if ( str_starts_with( $class_token, 'wp-custom-css-' ) ) { + $custom_class_name = $class_token; + break; + } + $class_token = strtok( $token_delimiter ); + } + if ( null === $custom_class_name ) { return $block_content; } @@ -89,7 +123,7 @@ function wp_render_custom_css_class_name( $block_content, $block ) { if ( $tags->next_tag() ) { $tags->add_class( 'has-custom-css' ); - $tags->add_class( $matches[0] ); + $tags->add_class( $custom_class_name ); } return $tags->get_updated_html(); diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index cc1ac60667773..6a6418d966457 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -2604,9 +2604,9 @@ function unregister_block_style( $block_name, $block_style_name ) { * @since 5.8.0 * @since 6.4.0 The `$feature` parameter now supports a string. * - * @param WP_Block_Type $block_type Block type to check for support. - * @param string|array $feature Feature slug, or path to a specific feature to check support for. - * @param mixed $default_value Optional. Fallback value for feature support. Default false. + * @param WP_Block_Type|null $block_type Block type to check for support. + * @param string|array $feature Feature slug, or path to a specific feature to check support for. + * @param mixed $default_value Optional. Fallback value for feature support. Default false. * @return bool Whether the feature is supported. */ function block_has_support( $block_type, $feature, $default_value = false ) { 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 8397ecf520fa2..4015b352c153c 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 @@ -1175,6 +1175,8 @@ public function paused_at_incomplete_token(): bool { * // Outputs: "free lang-en " * * @since 6.4.0 + * + * @return Generator */ public function class_list() { if ( self::STATE_MATCHED_TAG !== $this->parser_state ) { diff --git a/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php b/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php index 0bcbc6c708468..1247ca65a1a33 100644 --- a/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php +++ b/tests/phpunit/tests/block-supports/wpRenderCustomCssClassName.php @@ -29,9 +29,18 @@ public function test_adds_class_to_content( $block_content, $block, $expected_cl /** * Data provider. * - * @return array + * @return array */ - public function data_adds_class_to_content() { + public function data_adds_class_to_content(): array { return array( 'class is added to block content' => array( 'block_content' => '
Test content
', @@ -53,6 +62,16 @@ public function data_adds_class_to_content() { ), 'expected_class' => 'wp-custom-css-mixed123', ), + 'class between whitespace is added' => array( + 'block_content' => '
Test content
', + 'block' => array( + 'blockName' => 'core/paragraph', + 'attrs' => array( + 'className' => "\twp-custom-css-123abc\t", + ), + ), + 'expected_class' => 'wp-custom-css-123abc', + ), ); } @@ -113,6 +132,15 @@ public function data_returns_unchanged_content() { ), ), ), + 'prefixed custom CSS class' => array( + 'block_content' => '
Test content
', + 'block' => array( + 'blockName' => 'core/paragraph', + 'attrs' => array( + 'className' => 'my-wp-custom-css-456def', + ), + ), + ), 'className is not set in attrs' => array( 'block_content' => '
Test content
', 'block' => array( From fd3c7d56c1cb7790c28f86da99adb37828b99983 Mon Sep 17 00:00:00 2001 From: Jonathan Desrosiers Date: Thu, 14 May 2026 13:48:53 +0000 Subject: [PATCH 093/106] Editor: Bump pinned hash for the Gutenberg repository. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This updates the pinned hash from the `gutenberg` from `c15cef1d6b07f666df28dac0383bafb0edfe0914 ` to `3a4e8d1418d25da83b70158bcaabf65580690b6b`. The following changes are included: - [WP.7.0] Admin UI: Backport accessibility fixes (https://github.com/WordPress/gutenberg/pull/77617, https://github.com/WordPress/gutenberg/pull/78001) (https://github.com/WordPress/gutenberg/pull/78002) - Fix: Shortcode block does not render in Navigation Overlay (https://github.com/WordPress/gutenberg/pull/77511) - feat: Enhance Connectors page on read-only file system (https://github.com/WordPress/gutenberg/pull/77521) - Connectors: Avoid using centered text (https://github.com/WordPress/gutenberg/pull/78125) - Revisions: Add tooltip to diff marker buttons (https://github.com/WordPress/gutenberg/pull/77690) - Add backport for WP_ALLOW_COLLABORATION (https://github.com/WordPress/gutenberg/pull/78160) - Add aria-label to Revisions button in Post Summary sidebar (https://github.com/WordPress/gutenberg/pull/78140) - Revisions diff markers: enforce 24×24px minimum target size (WCAG 2.5.8) (https://github.com/WordPress/gutenberg/pull/77671) - Connectors: Replace @wordpress/ui Link and Notice usage (https://github.com/WordPress/gutenberg/pull/78117) - Connectors: Increase right padding of callout for mobile layout (https://github.com/WordPress/gutenberg/pull/78126) - isFulfilled: don't change resolution state, call in resolveSelect (https://github.com/WordPress/gutenberg/pull/78201) - Connectors: Restyle AI plugin callout with pastel background and beaker decoration (https://github.com/WordPress/gutenberg/pull/78243) - Block supports: Optimize custom CSS class rendering and parsing (https://github.com/WordPress/gutenberg/pull/78217) - Block Inspector: Hide Styles tab in preview mode (https://github.com/WordPress/gutenberg/pull/78230) - Navigation Link: Preserve custom labels during link updates (https://github.com/WordPress/gutenberg/pull/77186) - Editor: Fix Visual Revisions meta keys overlap (https://github.com/WordPress/gutenberg/pull/78156) - Editor: Disable Visual Revisions when classic meta boxes are present (https://github.com/WordPress/gutenberg/pull/78249) (https://github.com/WordPress/gutenberg/pull/78286) - Revisions: Scale diff markers width with user text-size preference (https://github.com/WordPress/gutenberg/pull/78273) A full list of changes can be found on GitHub: https://github.com/WordPress/gutenberg/compare/c15cef1d6b07f666df28dac0383bafb0edfe0914…3a4e8d1418d25da83b70158bcaabf65580690b6b. Log created with: `git log --reverse --format="- %s" c15cef1d6b07f666df28dac0383bafb0edfe0914..3a4e8d1418d25da83b70158bcaabf65580690b6b | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy` Reviewed by desrosj. Merges [62360] to `trunk`. See #64595. git-svn-id: https://develop.svn.wordpress.org/trunk@62361 602fd350-edb4-49c9-b593-d223f7449a82 --- package.json | 2 +- .../assets/script-loader-packages.php | 12 +- .../assets/script-modules-packages.php | 2 +- src/wp-includes/blocks/navigation.php | 12 +- .../build/routes/connectors-home/content.js | 429 +++++++++++++----- .../connectors-home/content.min.asset.php | 2 +- .../routes/connectors-home/content.min.js | 2 +- .../build/routes/font-list/content.js | 68 ++- .../routes/font-list/content.min.asset.php | 2 +- .../build/routes/font-list/content.min.js | 6 +- 10 files changed, 382 insertions(+), 155 deletions(-) diff --git a/package.json b/package.json index bcfc78d49508a..724335a2c4ee8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "url": "https://develop.svn.wordpress.org/trunk" }, "gutenberg": { - "sha": "c15cef1d6b07f666df28dac0383bafb0edfe0914", + "sha": "3a4e8d1418d25da83b70158bcaabf65580690b6b", "ghcrRepo": "WordPress/gutenberg/gutenberg-wp-develop-build" }, "engines": { diff --git a/src/wp-includes/assets/script-loader-packages.php b/src/wp-includes/assets/script-loader-packages.php index 840f4ba1c8b31..143f871840afa 100644 --- a/src/wp-includes/assets/script-loader-packages.php +++ b/src/wp-includes/assets/script-loader-packages.php @@ -100,7 +100,7 @@ 'wp-url', 'wp-warning' ), - 'version' => '7e969d1c58fd6b032753' + 'version' => '93c3566b7f24c15b7e17' ), 'block-library.js' => array( 'dependencies' => array( @@ -142,7 +142,7 @@ 'import' => 'dynamic' ) ), - 'version' => 'bbcc73335599ce2b8d51' + 'version' => '2dffdfe77b9c5cba960e' ), 'block-serialization-default-parser.js' => array( 'dependencies' => array( @@ -304,7 +304,7 @@ 'wp-private-apis', 'wp-redux-routine' ), - 'version' => 'dc7feb6ad8da53887680' + 'version' => '1756b6a2676c1b3369ab' ), 'data-controls.js' => array( 'dependencies' => array( @@ -381,7 +381,7 @@ 'import' => 'static' ) ), - 'version' => '69ec189de328df478ab5' + 'version' => '1975171eba5481ff37cd' ), 'edit-site.js' => array( 'dependencies' => array( @@ -428,7 +428,7 @@ 'import' => 'static' ) ), - 'version' => '34fbf7f8c7d55055d9cd' + 'version' => 'dfd078032a67983c4d32' ), 'edit-widgets.js' => array( 'dependencies' => array( @@ -519,7 +519,7 @@ 'import' => 'static' ) ), - 'version' => 'f8cdc22abc621b3f9409' + 'version' => '77209b33a51951b61574' ), 'element.js' => array( 'dependencies' => array( diff --git a/src/wp-includes/assets/script-modules-packages.php b/src/wp-includes/assets/script-modules-packages.php index a3f51229f1e63..d8238c74e65a0 100644 --- a/src/wp-includes/assets/script-modules-packages.php +++ b/src/wp-includes/assets/script-modules-packages.php @@ -166,7 +166,7 @@ 'import' => 'static' ) ), - 'version' => '42d3f09bba14cce3054d' + 'version' => '54bb5a420026a61c7e4f' ), 'connectors/index.js' => array( 'dependencies' => array( diff --git a/src/wp-includes/blocks/navigation.php b/src/wp-includes/blocks/navigation.php index 7863f80a9bdc4..71e8d85b035dc 100644 --- a/src/wp-includes/blocks/navigation.php +++ b/src/wp-includes/blocks/navigation.php @@ -425,7 +425,11 @@ private static function get_overlay_blocks_from_template_part( $overlay_template $full_template_part_id = $theme . '//' . $slug; $block_template = get_block_file_template( $full_template_part_id, 'wp_template_part' ); if ( isset( $block_template->content ) ) { - $parsed_blocks = parse_blocks( $block_template->content ); + // Expand shortcodes before parsing blocks, matching the order in + // `render_block_core_template_part()`. + $content = shortcode_unautop( $block_template->content ); + $content = do_shortcode( $content ); + $parsed_blocks = parse_blocks( $content ); $blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks ); // Disable overlay menu for any navigation blocks within the overlay to prevent nested overlays. $blocks = static::disable_overlay_menu_for_nested_navigation_blocks( $blocks ); @@ -449,6 +453,12 @@ private static function get_overlay_blocks_from_template_part( $overlay_template // Re-serialize, and run Block Hooks algorithm to inject hooked blocks. $markup = serialize_blocks( $blocks ); $markup = apply_block_hooks_to_content_from_post_object( $markup, $template_part_post ); + + // Expand shortcodes before parsing blocks, matching the order in + // `render_block_core_template_part()`. + $markup = shortcode_unautop( $markup ); + $markup = do_shortcode( $markup ); + $blocks = parse_blocks( $markup ); // Disable overlay menu for any navigation blocks within the overlay to prevent nested overlays. diff --git a/src/wp-includes/build/routes/connectors-home/content.js b/src/wp-includes/build/routes/connectors-home/content.js index dc250c11ac176..f248d626abc2d 100644 --- a/src/wp-includes/build/routes/connectors-home/content.js +++ b/src/wp-includes/build/routes/connectors-home/content.js @@ -7,6 +7,10 @@ var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) @@ -59,6 +63,13 @@ var require_react = __commonJS({ } }); +// package-external:@wordpress/primitives +var require_primitives = __commonJS({ + "package-external:@wordpress/primitives"(exports, module) { + module.exports = window.wp.primitives; + } +}); + // package-external:@wordpress/private-apis var require_private_apis = __commonJS({ "package-external:@wordpress/private-apis"(exports, module) { @@ -543,8 +554,46 @@ var Badge = (0, import_element2.forwardRef)(function Badge2({ children, intent = return element; }); -// packages/ui/build-module/stack/stack.mjs +// packages/ui/build-module/icon/icon.mjs var import_element3 = __toESM(require_element(), 1); +var import_primitives = __toESM(require_primitives(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var Icon = (0, import_element3.forwardRef)(function Icon2({ icon, size = 24, ...restProps }, ref) { + return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( + import_primitives.SVG, + { + ref, + fill: "currentColor", + ...icon.props, + ...restProps, + width: size, + height: size + } + ); +}); + +// packages/icons/build-module/library/caution.mjs +var import_primitives2 = __toESM(require_primitives(), 1); +var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var caution_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives2.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-.75 12v-1.5h1.5V16h-1.5Zm0-8v5h1.5V8h-1.5Z" }) }); + +// packages/icons/build-module/library/error.mjs +var import_primitives3 = __toESM(require_primitives(), 1); +var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var error_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives3.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); + +// packages/icons/build-module/library/info.mjs +var import_primitives4 = __toESM(require_primitives(), 1); +var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); +var info_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives4.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm.75 4v1.5h-1.5V8h1.5Zm0 8v-5h-1.5v5h1.5Z" }) }); + +// packages/icons/build-module/library/published.mjs +var import_primitives5 = __toESM(require_primitives(), 1); +var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); +var published_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives5.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm11.53-1.47-1.06-1.06L11 12.94l-1.47-1.47-1.06 1.06L11 15.06l4.53-4.53Z" }) }); + +// packages/ui/build-module/stack/stack.mjs +var import_element4 = __toESM(require_element(), 1); if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { const style = document.createElement("style"); style.setAttribute("data-wp-hash", "71d20935c2"); @@ -561,7 +610,7 @@ var gapTokens = { "2xl": "var(--wpds-dimension-gap-2xl, 32px)", "3xl": "var(--wpds-dimension-gap-3xl, 40px)" }; -var Stack = (0, import_element3.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) { +var Stack = (0, import_element4.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) { const style = { gap: gap && gapTokens[gap], alignItems: align, @@ -577,14 +626,157 @@ var Stack = (0, import_element3.forwardRef)(function Stack2({ direction, gap, al return element; }); +// packages/ui/build-module/notice/index.mjs +var notice_exports = {}; +__export(notice_exports, { + Description: () => Description, + Root: () => Root +}); + +// packages/ui/build-module/notice/root.mjs +var import_element5 = __toESM(require_element(), 1); +import { speak } from "@wordpress/a11y"; +var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='671ebfc62d']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "671ebfc62d"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}")); + document.head.appendChild(style); +} +var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='a66a881fc5']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "a66a881fc5"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._4145abab73d17514__notice{--icon-height:24px;--text-vertical-padding:calc((var(--icon-height) - var(--wpds-font-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#d8d8d8);--wp-ui-notice-text-color:var(--wpds-color-fg-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description{text-wrap:pretty;color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-info-weak,#f2f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#9fbcdc);--wp-ui-notice-text-color:var(--wpds-color-fg-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-warning-weak,#fff7e0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#d0b381);--wp-ui-notice-text-color:var(--wpds-color-fg-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-warning-weak,#926300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-success-weak,#eaffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#8ac894);--wp-ui-notice-text-color:var(--wpds-color-fg-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-success-weak,#007f30)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-error-weak,#fff6f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#daa39b);--wp-ui-notice-text-color:var(--wpds-color-fg-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-error-weak,#cc1818)}}")); + document.head.appendChild(style); +} +var style_default3 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "description": "_1904b570a89bb815__description", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error" }; +var icons = { + neutral: null, + info: info_default, + warning: caution_default, + success: published_default, + error: error_default +}; +function getDefaultPoliteness(intent) { + return intent === "error" ? "assertive" : "polite"; +} +function safeRenderToString(message) { + if (!message) { + return void 0; + } + if (typeof message === "string") { + return message; + } + try { + return (0, import_element5.renderToString)(message); + } catch { + return void 0; + } +} +function useSpokenMessage(message, politeness) { + const spokenMessage = safeRenderToString(message); + (0, import_element5.useEffect)(() => { + if (spokenMessage) { + speak(spokenMessage, politeness); + } + }, [spokenMessage, politeness]); +} +var Root = (0, import_element5.forwardRef)(function Notice({ + intent = "neutral", + children, + icon, + spokenMessage = children, + politeness = getDefaultPoliteness(intent), + render, + ...restProps +}, ref) { + useSpokenMessage(spokenMessage, politeness); + const iconElement = icon === null ? null : icon ?? icons[intent]; + const mergedClassName = clsx_default( + style_default3.notice, + style_default3[`is-${intent}`], + resets_default["box-sizing"] + ); + const element = useRender({ + defaultTagName: "div", + render, + ref, + props: mergeProps( + { + className: mergedClassName, + children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [ + children, + iconElement && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( + Icon, + { + className: style_default3.icon, + icon: iconElement + } + ) + ] }) + }, + restProps + ) + }); + return element; +}); + +// packages/ui/build-module/notice/description.mjs +var import_element7 = __toESM(require_element(), 1); + +// packages/ui/build-module/text/text.mjs +var import_element6 = __toESM(require_element(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='6675f7d310']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "6675f7d310"); + style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._83ed8a8da5dd50ea__text{margin:0}._14437cfb77831647__heading-2xl{font-size:var(--wpds-font-size-2xl,32px);line-height:var(--wpds-font-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-medium,499)}._3c78b7fa9b4072dd__heading-xl{font-size:var(--wpds-font-size-xl,20px);line-height:var(--wpds-font-line-height-md,24px)}.aa58f227716bcde2__heading-lg{font-size:var(--wpds-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-medium,499);line-height:var(--wpds-font-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{font-size:var(--wpds-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-xs,11px);font-weight:var(--wpds-font-weight-medium,499);line-height:var(--wpds-font-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{font-size:var(--wpds-font-size-xl,20px);line-height:var(--wpds-font-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-regular,400)}.ca1aa3fc2029e958__body-lg{font-size:var(--wpds-font-size-lg,15px);line-height:var(--wpds-font-line-height-md,24px)}._131101940be12424__body-md{font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-regular,400)}._0e8d87a42c1f75fa__body-sm{font-size:var(--wpds-font-size-sm,12px);line-height:var(--wpds-font-line-height-xs,16px)}}')); + document.head.appendChild(style); +} +var style_default4 = { "text": "_83ed8a8da5dd50ea__text", "heading-2xl": "_14437cfb77831647__heading-2xl", "heading-xl": "_3c78b7fa9b4072dd__heading-xl", "heading-lg": "aa58f227716bcde2__heading-lg", "heading-md": "fc4da56d8dfe52c4__heading-md", "heading-sm": "a9b78c7c82e8dff7__heading-sm", "body-xl": "_305ff559e52180d5__body-xl", "body-lg": "ca1aa3fc2029e958__body-lg", "body-md": "_131101940be12424__body-md", "body-sm": "_0e8d87a42c1f75fa__body-sm" }; +var Text = (0, import_element6.forwardRef)(function Text2({ variant = "body-md", render, className, ...props }, ref) { + const element = useRender({ + render, + defaultTagName: "span", + ref, + props: mergeProps(props, { + className: clsx_default(style_default4.text, style_default4[variant], className) + }) + }); + return element; +}); + +// packages/ui/build-module/notice/description.mjs +var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='a66a881fc5']")) { + const style = document.createElement("style"); + style.setAttribute("data-wp-hash", "a66a881fc5"); + style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._4145abab73d17514__notice{--icon-height:24px;--text-vertical-padding:calc((var(--icon-height) - var(--wpds-font-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#d8d8d8);--wp-ui-notice-text-color:var(--wpds-color-fg-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description{text-wrap:pretty;color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-info-weak,#f2f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#9fbcdc);--wp-ui-notice-text-color:var(--wpds-color-fg-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-warning-weak,#fff7e0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#d0b381);--wp-ui-notice-text-color:var(--wpds-color-fg-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-warning-weak,#926300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-success-weak,#eaffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#8ac894);--wp-ui-notice-text-color:var(--wpds-color-fg-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-success-weak,#007f30)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-error-weak,#fff6f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#daa39b);--wp-ui-notice-text-color:var(--wpds-color-fg-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-error-weak,#cc1818)}}")); + document.head.appendChild(style); +} +var style_default5 = { "notice": "_4145abab73d17514__notice", "icon": "d0a25570cb528528__icon", "description": "_1904b570a89bb815__description", "is-info": "_531c140826094795__is-info", "is-warning": "ae2e1004697cce95__is-warning", "is-success": "_2e614a76af494837__is-success", "is-error": "af00331ae17a0065__is-error" }; +var Description = (0, import_element7.forwardRef)( + function NoticeDescription({ className, ...props }, ref) { + return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)( + Text, + { + ref, + variant: "body-md", + className: clsx_default(style_default5.description, className), + ...props + } + ); + } +); + // packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs var import_components = __toESM(require_components(), 1); var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); // packages/admin-ui/build-module/page/header.mjs -var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); +var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); function Header({ - headingLevel = 2, + headingLevel = 1, breadcrumbs, badges, title, @@ -593,46 +785,38 @@ function Header({ showSidebarToggle = true }) { const HeadingTag = `h${headingLevel}`; - return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)( - Stack, - { - direction: "column", - className: "admin-ui-page__header", - render: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("header", {}), - children: [ - /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Stack, { direction: "row", justify: "space-between", gap: "sm", children: [ - /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Stack, { direction: "row", gap: "sm", align: "center", justify: "start", children: [ - showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( - SidebarToggleSlot, - { - bubblesVirtually: true, - className: "admin-ui-page__sidebar-toggle-slot" - } - ), - title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(HeadingTag, { className: "admin-ui-page__header-title", children: title }), - breadcrumbs, - badges - ] }), - /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( - Stack, - { - direction: "row", - gap: "sm", - style: { width: "auto", flexShrink: 0 }, - className: "admin-ui-page__header-actions", - align: "center", - children: actions - } - ) - ] }), - subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) - ] - } - ); + return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Stack, { direction: "column", className: "admin-ui-page__header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Stack, { direction: "row", justify: "space-between", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Stack, { direction: "row", gap: "sm", align: "center", justify: "start", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(HeadingTag, { className: "admin-ui-page__header-title", children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime9.jsx)( + Stack, + { + direction: "row", + gap: "sm", + style: { width: "auto", flexShrink: 0 }, + className: "admin-ui-page__header-actions", + align: "center", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); } // packages/admin-ui/build-module/page/index.mjs -var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); +var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); function Page({ headingLevel, breadcrumbs, @@ -646,8 +830,8 @@ function Page({ showSidebarToggle = true }) { const classes = clsx_default("admin-ui-page", className); - return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ - (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( + return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ + (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( Header, { headingLevel, @@ -659,7 +843,7 @@ function Page({ showSidebarToggle } ), - hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children + hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children ] }); } Page.SidebarToggleFill = SidebarToggleFill; @@ -668,7 +852,7 @@ var page_default = Page; // routes/connectors-home/stage.tsx var import_components4 = __toESM(require_components()); var import_data4 = __toESM(require_data()); -var import_element7 = __toESM(require_element()); +var import_element11 = __toESM(require_element()); var import_i18n4 = __toESM(require_i18n()); var import_core_data3 = __toESM(require_core_data()); import { @@ -676,10 +860,10 @@ import { } from "@wordpress/connectors"; // routes/connectors-home/style.scss -if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='1b00f16b8d']")) { +if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='eb5f96e519']")) { const style = document.createElement("style"); - style.setAttribute("data-wp-hash", "1b00f16b8d"); - style.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px;scroll-margin-top:120px}.connectors-page .connector-settings__error{color:#cc1818}.connectors-page .connector-settings .components-text-control__input{font-family:monospace;scroll-margin-top:120px}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background:linear-gradient(90deg,#fff9,#fff9),linear-gradient(90deg,#89dcdc,#c7eb5c 46.15%,#a920c1);border-radius:8px;overflow:hidden;padding:24px;padding-inline-end:220px;position:relative}[dir=rtl] .connectors-page .ai-plugin-callout{background:linear-gradient(270deg,#fff9,#fff9),linear-gradient(270deg,#89dcdc,#c7eb5c 46.15%,#a920c1)}.connectors-page .ai-plugin-callout__content{align-items:flex-start;display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__decoration{height:248px;inset-inline-end:8px;position:absolute;top:-15px;width:248px}.connectors-page>p{color:#949494;text-align:center}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px;padding-inline-end:84px}.connectors-page .ai-plugin-callout__decoration{height:134px;inset-inline-end:4px;top:-8px;width:134px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")); + style.setAttribute("data-wp-hash", "eb5f96e519"); + style.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px;scroll-margin-top:120px}.connectors-page .connector-settings__error{color:#cc1818}.connectors-page .connector-settings .components-text-control__input{font-family:monospace;scroll-margin-top:120px}.connectors-page__file-mods-notice{margin-bottom:16px}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background-color:#e7d4e4;background-image:radial-gradient(ellipse 70% 120% at 18% 115%,#ca9ec6bf 0,#ca9ec600 60%),radial-gradient(ellipse 55% 110% at 92% -15%,#d0afd9b3 0,#d0afd900 65%),radial-gradient(ellipse 40% 85% at 58% -10%,#aa82b873 0,#aa82b800 70%);border-radius:8px;overflow:hidden;padding:24px;padding-inline-end:150px;position:relative}[dir=rtl] .connectors-page .ai-plugin-callout{background-image:radial-gradient(ellipse 70% 120% at 82% 115%,#ca9ec6bf 0,#ca9ec600 60%),radial-gradient(ellipse 55% 110% at 8% -15%,#d0afd9b3 0,#d0afd900 65%),radial-gradient(ellipse 40% 85% at 42% -10%,#aa82b873 0,#aa82b800 70%)}.connectors-page .ai-plugin-callout__content{align-items:flex-start;display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__decoration{height:110px;inset-inline-end:16px;position:absolute;top:12px;width:110px}.connectors-page>p{color:#949494}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px;padding-inline-end:100px}.connectors-page .ai-plugin-callout__decoration{height:75px;inset-inline-end:8px;top:8px;width:75px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .ai-plugin-callout{padding-inline-end:130px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")); document.head.appendChild(style); } @@ -687,14 +871,14 @@ if (typeof document !== "undefined" && !document.head.querySelector("style[data- var import_components3 = __toESM(require_components()); var import_core_data2 = __toESM(require_core_data()); var import_data3 = __toESM(require_data()); -var import_element6 = __toESM(require_element()); +var import_element10 = __toESM(require_element()); var import_i18n3 = __toESM(require_i18n()); var import_notices2 = __toESM(require_notices()); var import_url = __toESM(require_url()); // routes/connectors-home/default-connectors.tsx var import_components2 = __toESM(require_components()); -var import_element5 = __toESM(require_element()); +var import_element9 = __toESM(require_element()); var import_data2 = __toESM(require_data()); var import_i18n2 = __toESM(require_i18n()); import { @@ -714,7 +898,7 @@ var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnl // routes/connectors-home/use-connector-plugin.ts var import_core_data = __toESM(require_core_data()); var import_data = __toESM(require_data()); -var import_element4 = __toESM(require_element()); +var import_element8 = __toESM(require_element()); var import_i18n = __toESM(require_i18n()); var import_notices = __toESM(require_notices()); function useConnectorPlugin({ @@ -726,10 +910,10 @@ function useConnectorPlugin({ keySource = "none", initialIsConnected = false }) { - const [isExpanded, setIsExpanded] = (0, import_element4.useState)(false); - const [isBusy, setIsBusy] = (0, import_element4.useState)(false); - const [connectedState, setConnectedState] = (0, import_element4.useState)(initialIsConnected); - const [pluginStatusOverride, setPluginStatusOverride] = (0, import_element4.useState)(null); + const [isExpanded, setIsExpanded] = (0, import_element8.useState)(false); + const [isBusy, setIsBusy] = (0, import_element8.useState)(false); + const [connectedState, setConnectedState] = (0, import_element8.useState)(initialIsConnected); + const [pluginStatusOverride, setPluginStatusOverride] = (0, import_element8.useState)(null); const pluginBasename = pluginFileFromServer?.replace(/\.php$/, ""); const pluginSlug = pluginBasename?.includes("/") ? pluginBasename.split("/")[0] : pluginBasename; const { @@ -1177,18 +1361,23 @@ var GeminiLogo = () => /* @__PURE__ */ React.createElement( // routes/connectors-home/default-connectors.tsx var { store: connectorsStore } = unlock(connectorsPrivateApis); -function getConnectorData() { +function getConnectorScriptModuleData() { try { - const parsed = JSON.parse( + return JSON.parse( document.getElementById( "wp-script-module-data-options-connectors-wp-admin" - )?.textContent ?? "" + )?.textContent ?? "{}" ); - return parsed?.connectors ?? {}; } catch { return {}; } } +function getConnectorData() { + return getConnectorScriptModuleData().connectors ?? {}; +} +function getIsFileModDisabled() { + return !!getConnectorScriptModuleData().isFileModDisabled; +} var CONNECTOR_LOGOS = { google: GeminiLogo, openai: OpenAILogo, @@ -1220,6 +1409,17 @@ var ConnectedBadge = () => /* @__PURE__ */ React.createElement( }, (0, import_i18n2.__)("Connected") ); +var PluginDirectoryLink = ({ slug }) => /* @__PURE__ */ React.createElement( + import_components2.ExternalLink, + { + href: (0, import_i18n2.sprintf)( + /* translators: %s: plugin slug. */ + (0, import_i18n2.__)("https://wordpress.org/plugins/%s/"), + slug + ) + }, + (0, import_i18n2.__)("Learn more") +); var UnavailableActionBadge = () => /* @__PURE__ */ React.createElement(Badge, null, (0, import_i18n2.__)("Not available")); function ApiKeyConnector({ name, @@ -1266,7 +1466,7 @@ function ApiKeyConnector({ const isExternallyConfigured = keySource === "env" || keySource === "constant"; const showUnavailableBadge = pluginStatus === "not-installed" && canInstallPlugins === false || pluginStatus === "inactive" && canActivatePlugins === false; const showActionButton = !showUnavailableBadge; - const actionButtonRef = (0, import_element5.useRef)(null); + const actionButtonRef = (0, import_element9.useRef)(null); return /* @__PURE__ */ React.createElement( ConnectorItem, { @@ -1274,7 +1474,7 @@ function ApiKeyConnector({ logo, name, description, - actionArea: /* @__PURE__ */ React.createElement(import_components2.__experimentalHStack, { spacing: 3, expanded: false }, isConnected && /* @__PURE__ */ React.createElement(ConnectedBadge, null), showUnavailableBadge && /* @__PURE__ */ React.createElement(UnavailableActionBadge, null), showActionButton && /* @__PURE__ */ React.createElement( + actionArea: /* @__PURE__ */ React.createElement(import_components2.__experimentalHStack, { spacing: 3, expanded: false }, isConnected && /* @__PURE__ */ React.createElement(ConnectedBadge, null), showUnavailableBadge && (pluginSlug ? /* @__PURE__ */ React.createElement(PluginDirectoryLink, { slug: pluginSlug }) : /* @__PURE__ */ React.createElement(UnavailableActionBadge, null)), showActionButton && /* @__PURE__ */ React.createElement( import_components2.Button, { ref: actionButtonRef, @@ -1351,30 +1551,12 @@ function WpLogoDecoration() { /* @__PURE__ */ React.createElement( "image", { - href: "data:image/png;base64,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", + href: "data:image/png;base64,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", width: "248", height: "248", style: { mixBlendMode: "multiply" } } - ), - /* @__PURE__ */ React.createElement("rect", { x: "184.055", y: "54.995", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "170.059", y: "44.06", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "200.238", y: "77.302", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "212.048", y: "87.8", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "206.799", y: "83.425", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "204.175", y: "85.612", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "219.046", y: "103.108", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "154.751", y: "30.064", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "188.866", y: "63.742", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "148.189", y: "34", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "134.051", y: "31.707", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "126.124", y: "24.771", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "115.385", y: "29.19", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "95.702", y: "31.376", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "91.766", y: "27.002", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "90.454", y: "32.688", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "184.389", y: "45.58", width: "2.187", height: "2.187" }), - /* @__PURE__ */ React.createElement("rect", { x: "162.185", y: "41.873", width: "2.187", height: "2.187" }) + ) )); } @@ -1394,15 +1576,15 @@ for (const c of connectorDataValues) { } } function AiPluginCallout() { - const [isBusy, setIsBusy] = (0, import_element6.useState)(false); - const [justActivated, setJustActivated] = (0, import_element6.useState)(false); - const actionButtonRef = (0, import_element6.useRef)(null); - (0, import_element6.useEffect)(() => { + const [isBusy, setIsBusy] = (0, import_element10.useState)(false); + const [justActivated, setJustActivated] = (0, import_element10.useState)(false); + const actionButtonRef = (0, import_element10.useRef)(null); + (0, import_element10.useEffect)(() => { if (justActivated) { actionButtonRef.current?.focus(); } }, [justActivated]); - const initialHasConnectedProvider = (0, import_element6.useRef)( + const initialHasConnectedProvider = (0, import_element10.useRef)( connectorDataValues.some( (c) => c.type === "ai_provider" && c.authentication.method === "api_key" && c.authentication.isConnected ) @@ -1515,15 +1697,13 @@ function AiPluginCallout() { if (pluginStatus === "active" && initialHasConnectedProvider && !justActivated) { return null; } - if (pluginStatus === "not-installed" && canInstallPlugins === false) { - return null; - } if (pluginStatus === "inactive" && canManagePlugins === false) { return null; } const isActiveNoProvider = pluginStatus === "active" && !hasConnectedProvider; const isJustConnected = pluginStatus === "active" && hasConnectedProvider && (!initialHasConnectedProvider || justActivated); const showInstallActivate = pluginStatus === "not-installed" || pluginStatus === "inactive"; + const hideButtons = pluginStatus === "not-installed" && canInstallPlugins === false; const getMessage = () => { if (isJustConnected) { return (0, import_i18n3.__)( @@ -1553,11 +1733,11 @@ function AiPluginCallout() { onClick: isBusy ? void 0 : activatePlugin }; }; - return /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout" }, /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout__content" }, /* @__PURE__ */ React.createElement("p", null, (0, import_element6.createInterpolateElement)(getMessage(), { + return /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout" }, /* @__PURE__ */ React.createElement("div", { className: "ai-plugin-callout__content" }, /* @__PURE__ */ React.createElement("p", null, (0, import_element10.createInterpolateElement)(getMessage(), { strong: /* @__PURE__ */ React.createElement("strong", null), // @ts-ignore children are injected by createInterpolateElement at runtime. a: /* @__PURE__ */ React.createElement(import_components3.ExternalLink, { href: AI_PLUGIN_URL }) - })), showInstallActivate ? /* @__PURE__ */ React.createElement( + })), !hideButtons && (showInstallActivate ? /* @__PURE__ */ React.createElement( import_components3.Button, { variant: "primary", @@ -1579,32 +1759,69 @@ function AiPluginCallout() { }) }, (0, import_i18n3.__)("Control features in the AI plugin") - )), /* @__PURE__ */ React.createElement(WpLogoDecoration, null)); + ))), /* @__PURE__ */ React.createElement(WpLogoDecoration, null)); } // routes/connectors-home/stage.tsx var { store } = unlock(connectorsPrivateApis2); registerDefaultConnectors(); function ConnectorsPage() { - const { connectors, canInstallPlugins } = (0, import_data4.useSelect)( - (select2) => ({ - connectors: unlock(select2(store)).getConnectors(), - canInstallPlugins: select2(import_core_data3.store).canUser("create", { - kind: "root", - name: "plugin" - }) - }), + const isFileModDisabled = getIsFileModDisabled(); + const { connectors, canInstallPlugins, isAiPluginInstalled } = (0, import_data4.useSelect)( + (select2) => { + const coreSelect = select2(import_core_data3.store); + const aiPlugin = coreSelect.getEntityRecord( + "root", + "plugin", + "ai/ai" + ); + return { + connectors: unlock(select2(store)).getConnectors(), + canInstallPlugins: coreSelect.canUser("create", { + kind: "root", + name: "plugin" + }), + isAiPluginInstalled: !!aiPlugin + }; + }, [] ); const renderableConnectors = connectors.filter( (connector) => connector.render ); + const aiProviderPluginSlugs = Array.from( + new Set( + connectors.filter( + (connector) => connector.type === "ai_provider" + ).map( + (connector) => connector.plugin?.file?.split("/")[0] + ).filter((slug) => !!slug) + ) + ).sort(); + const installedPluginSlugs = new Set( + connectors.filter( + (connector) => connector.plugin?.isInstalled + ).map( + (connector) => connector.plugin?.file?.split("/")[0] + ).filter((slug) => !!slug) + ); + if (isAiPluginInstalled) { + installedPluginSlugs.add("ai"); + } + const manualInstallPluginSlugs = ["ai", ...aiProviderPluginSlugs].filter( + (slug) => !installedPluginSlugs.has(slug) + ); const isEmpty = renderableConnectors.length === 0; + const showFileModsNotice = manualInstallPluginSlugs.length > 0 && (isFileModDisabled || !canInstallPlugins); + const fileModsNoticeMessage = isFileModDisabled ? (0, import_i18n4.__)( + "Plugins cannot be installed here due to your site configuration. Install them manually using your normal deployment workflow." + ) : (0, import_i18n4.__)( + "You do not have permission to install plugins. Please ask a site administrator to install them for you." + ); return /* @__PURE__ */ React.createElement( page_default, { title: (0, import_i18n4.__)("Connectors"), - headingLevel: 1, subTitle: (0, import_i18n4.__)( "All of your API keys and credentials are stored here and shared across plugins. Configure once and use everywhere." ) @@ -1614,6 +1831,14 @@ function ConnectorsPage() { { className: `connectors-page${isEmpty ? " connectors-page--empty" : ""}` }, + showFileModsNotice && /* @__PURE__ */ React.createElement( + notice_exports.Root, + { + intent: "info", + className: "connectors-page__file-mods-notice" + }, + /* @__PURE__ */ React.createElement(notice_exports.Description, null, fileModsNoticeMessage) + ), isEmpty ? /* @__PURE__ */ React.createElement( import_components4.__experimentalVStack, { @@ -1645,7 +1870,7 @@ function ConnectorsPage() { return null; } ))), - canInstallPlugins && /* @__PURE__ */ React.createElement("p", null, (0, import_element7.createInterpolateElement)( + canInstallPlugins && !isFileModDisabled && /* @__PURE__ */ React.createElement("p", null, (0, import_element11.createInterpolateElement)( (0, import_i18n4.__)( "If the connector you need is not listed, search the plugin directory to see if a connector is available." ), diff --git a/src/wp-includes/build/routes/connectors-home/content.min.asset.php b/src/wp-includes/build/routes/connectors-home/content.min.asset.php index 51b66e2ebcfe1..6580252cd27a6 100644 --- a/src/wp-includes/build/routes/connectors-home/content.min.asset.php +++ b/src/wp-includes/build/routes/connectors-home/content.min.asset.php @@ -1 +1 @@ - array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-url'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/connectors', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '8a0e3b7671b73b29d3ab'); \ No newline at end of file + array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-url'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/connectors', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'b614fcaf0d408b3eff9d'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/connectors-home/content.min.js b/src/wp-includes/build/routes/connectors-home/content.min.js index 67a6da86d5d31..1cedc12752760 100644 --- a/src/wp-includes/build/routes/connectors-home/content.min.js +++ b/src/wp-includes/build/routes/connectors-home/content.min.js @@ -1 +1 @@ -var Nt=Object.create;var Be=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Yt=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,Zt=Object.prototype.hasOwnProperty;var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var At=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Yt(t))!Zt.call(e,o)&&o!==n&&Be(e,o,{get:()=>t[o],enumerable:!(r=Xt(t,o))||r.enumerable});return e};var s=(e,t,n)=>(n=e!=null?Nt(St(e)):{},At(t||!e||!e.__esModule?Be(n,"default",{value:e,enumerable:!0}):n,e));var I=y((Bn,je)=>{je.exports=window.wp.i18n});var U=y((jn,He)=>{He.exports=window.wp.components});var ae=y((Hn,Re)=>{Re.exports=window.ReactJSXRuntime});var j=y((qn,Te)=>{Te.exports=window.wp.element});var A=y((Nn,Se)=>{Se.exports=window.React});var ot=y((ho,nt)=>{nt.exports=window.wp.privateApis});var $=y((qo,dt)=>{dt.exports=window.wp.data});var ce=y((To,ut)=>{ut.exports=window.wp.coreData});var ye=y((Vo,ft)=>{ft.exports=window.wp.notices});var gt=y((No,pt)=>{pt.exports=window.wp.url});function qe(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t(0,Ne.jsx)(r,{ref:a,className:Z("admin-ui-navigable-region",t),"aria-label":n,role:"region",tabIndex:"-1",...o,children:e}));Xe.displayName="NavigableRegion";var Ye=Xe;var Ae=s(A(),1),Ze={};function pe(e,t){let n=Ae.useRef(Ze);return n.current===Ze&&(n.current=e(t)),n}function ge(e,...t){let n=new URL(`https://base-ui.com/production-error/${e}`);return t.forEach(r=>n.searchParams.append("args[]",r)),`Base UI error #${e}; visit ${n} for the full message.`}var ie=s(A(),1);function me(e,t,n,r){let o=pe(Ee).current;return Et(o,e,t,n,r)&&We(o,[e,t,n,r]),o.callback}function Ce(e){let t=pe(Ee).current;return Wt(t,e)&&We(t,e),t.callback}function Ee(){return{callback:null,cleanup:null,refs:[]}}function Et(e,t,n,r,o){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==o}function Wt(e,t){return e.refs.length!==t.length||e.refs.some((n,r)=>n!==t[r])}function We(e,t){if(e.refs=t,t.every(n=>n==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),n!=null){let r=Array(t.length).fill(null);for(let o=0;o{for(let o=0;o=e}function ve(e){if(!Ie.isValidElement(e))return null;let t=e,n=t.props;return(Ke(19)?n?.ref:t.ref)??null}function Q(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}function Ue(e,t){let n={};for(let r in e){let o=e[r];if(t?.hasOwnProperty(r)){let a=t[r](o);a!=null&&Object.assign(n,a);continue}o===!0?n[`data-${r.toLowerCase()}`]="":o&&(n[`data-${r.toLowerCase()}`]=o.toString())}return n}function Qe(e,t){return typeof e=="function"?e(t):e}function Je(e,t){return typeof e=="function"?e(t):e}var F={};function C(e,t,n,r,o){let a={...he(e,F)};return t&&(a=J(a,t)),n&&(a=J(a,n)),r&&(a=J(a,r)),o&&(a=J(a,o)),a}function Fe(e){if(e.length===0)return F;if(e.length===1)return he(e[0],F);let t={...he(e[0],F)};for(let n=1;n=65&&o<=90&&(typeof t=="function"||typeof t>"u")}function _e(e){return typeof e=="function"}function he(e,t){return _e(e)?e(t):e??F}function Ut(e,t){return t?e?n=>{if(Jt(n)){let o=n;Qt(o);let a=t(o);return o.baseUIHandlerPrevented||e?.(o),a}let r=t(n);return e?.(n),r}:t:e}function Qt(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function be(e,t){return t?e?t+" "+e:t:e}function Jt(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}var Ft=Object.freeze([]),H=Object.freeze({});var Pe=s(A(),1);function $e(e,t,n={}){let r=t.render,o=_t(t,n);if(n.enabled===!1)return null;let a=n.state??H;return $t(e,r,o,a)}function _t(e,t={}){let{className:n,style:r,render:o}=e,{state:a=H,ref:i,props:l,stateAttributesMapping:u,enabled:d=!0}=t,f=d?Qe(n,a):void 0,v=d?Je(r,a):void 0,z=d?Ue(a,u):H,p=d?Q(z,Array.isArray(l)?Fe(l):l)??H:H;return typeof document<"u"&&(d?Array.isArray(i)?p.ref=Ce([p.ref,ve(o),...i]):p.ref=me(p.ref,ve(o),i):me(null,null)),d?(f!==void 0&&(p.className=be(p.className,f)),v!==void 0&&(p.style=Q(p.style,v)),p):H}function $t(e,t,n,r){if(t){if(typeof t=="function")return t(n,r);let o=C(n,t.props);return o.ref=n.ref,ie.cloneElement(t,o)}if(e&&typeof e=="string")return en(e,n);throw new Error(ge(8))}function en(e,t){return e==="button"?(0,Pe.createElement)("button",{type:"button",...t,key:t.key}):e==="img"?(0,Pe.createElement)("img",{alt:"",...t,key:t.key}):ie.createElement(e,t)}function se(e){return $e(e.defaultTagName??"div",e,e)}var tt=s(j(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='244b5c59c0']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","244b5c59c0"),e.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._96e6251aad1a6136__badge{border-radius:var(--wpds-border-radius-lg,8px);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-sm,12px);font-weight:var(--wpds-font-weight-regular,400);line-height:var(--wpds-font-line-height-xs,16px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wpds-dimension-padding-sm,8px)}._99f7158cb520f750__is-high-intent{background-color:var(--wpds-color-bg-surface-error,#f6e6e3);color:var(--wpds-color-fg-content-error,#470000)}.c20ebef2365bc8b7__is-medium-intent{background-color:var(--wpds-color-bg-surface-warning,#fde6bd);color:var(--wpds-color-fg-content-warning,#2e1900)}._365e1626c6202e52__is-low-intent{background-color:var(--wpds-color-bg-surface-caution,#fee994);color:var(--wpds-color-fg-content-caution,#281d00)}._33f8198127ddf4ef__is-stable-intent{background-color:var(--wpds-color-bg-surface-success,#c5f7cc);color:var(--wpds-color-fg-content-success,#002900)}._04c1aca8fc449412__is-informational-intent{background-color:var(--wpds-color-bg-surface-info,#deebfa);color:var(--wpds-color-fg-content-info,#001b4f)}._90726e69d495ec19__is-draft-intent{background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}._898f4a544993bd39__is-none-intent{background-color:var(--wpds-color-bg-surface-neutral,#f8f8f8);color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}}')),document.head.appendChild(e)}var et={badge:"_96e6251aad1a6136__badge","is-high-intent":"_99f7158cb520f750__is-high-intent","is-medium-intent":"c20ebef2365bc8b7__is-medium-intent","is-low-intent":"_365e1626c6202e52__is-low-intent","is-stable-intent":"_33f8198127ddf4ef__is-stable-intent","is-informational-intent":"_04c1aca8fc449412__is-informational-intent","is-draft-intent":"_90726e69d495ec19__is-draft-intent","is-none-intent":"_898f4a544993bd39__is-none-intent"},we=(0,tt.forwardRef)(function({children:t,intent:n="none",render:r,className:o,...a},i){return se({render:r,defaultTagName:"span",ref:i,props:C(a,{className:Z(et.badge,et[`is-${n}-intent`],o),children:t})})});var rt=s(j(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='71d20935c2']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","71d20935c2"),e.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")),document.head.appendChild(e)}var tn={stack:"_19ce0419607e1896__stack"},nn={xs:"var(--wpds-dimension-gap-xs, 4px)",sm:"var(--wpds-dimension-gap-sm, 8px)",md:"var(--wpds-dimension-gap-md, 12px)",lg:"var(--wpds-dimension-gap-lg, 16px)",xl:"var(--wpds-dimension-gap-xl, 24px)","2xl":"var(--wpds-dimension-gap-2xl, 32px)","3xl":"var(--wpds-dimension-gap-3xl, 40px)"},E=(0,rt.forwardRef)(function({direction:t,gap:n,align:r,justify:o,wrap:a,render:i,...l},u){let d={gap:n&&nn[n],alignItems:r,justifyContent:o,flexDirection:t,flexWrap:a};return se({render:i,ref:u,props:C(l,{style:d,className:tn.stack})})});var at=s(U(),1),{Fill:it,Slot:st}=(0,at.createSlotFill)("SidebarToggle");var x=s(ae(),1);function ct({headingLevel:e=2,breadcrumbs:t,badges:n,title:r,subTitle:o,actions:a,showSidebarToggle:i=!0}){let l=`h${e}`;return(0,x.jsxs)(E,{direction:"column",className:"admin-ui-page__header",render:(0,x.jsx)("header",{}),children:[(0,x.jsxs)(E,{direction:"row",justify:"space-between",gap:"sm",children:[(0,x.jsxs)(E,{direction:"row",gap:"sm",align:"center",justify:"start",children:[i&&(0,x.jsx)(st,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),r&&(0,x.jsx)(l,{className:"admin-ui-page__header-title",children:r}),t,n]}),(0,x.jsx)(E,{direction:"row",gap:"sm",style:{width:"auto",flexShrink:0},className:"admin-ui-page__header-actions",align:"center",children:a})]}),o&&(0,x.jsx)("p",{className:"admin-ui-page__header-subtitle",children:o})]})}var _=s(ae(),1);function lt({headingLevel:e,breadcrumbs:t,badges:n,title:r,subTitle:o,children:a,className:i,actions:l,hasPadding:u=!1,showSidebarToggle:d=!0}){let f=Z("admin-ui-page",i);return(0,_.jsxs)(Ye,{className:f,ariaLabel:r,children:[(r||t||n)&&(0,_.jsx)(ct,{headingLevel:e,breadcrumbs:t,badges:n,title:r,subTitle:o,actions:l,showSidebarToggle:d}),u?(0,_.jsx)("div",{className:"admin-ui-page__content has-padding",children:a}):a]})}lt.SidebarToggleFill=it;var Le=lt;var w=s(U()),Ht=s($()),Rt=s(j()),Y=s(I()),qt=s(ce());import{privateApis as bn}from"@wordpress/connectors";if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='1b00f16b8d']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","1b00f16b8d"),e.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px;scroll-margin-top:120px}.connectors-page .connector-settings__error{color:#cc1818}.connectors-page .connector-settings .components-text-control__input{font-family:monospace;scroll-margin-top:120px}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background:linear-gradient(90deg,#fff9,#fff9),linear-gradient(90deg,#89dcdc,#c7eb5c 46.15%,#a920c1);border-radius:8px;overflow:hidden;padding:24px;padding-inline-end:220px;position:relative}[dir=rtl] .connectors-page .ai-plugin-callout{background:linear-gradient(270deg,#fff9,#fff9),linear-gradient(270deg,#89dcdc,#c7eb5c 46.15%,#a920c1)}.connectors-page .ai-plugin-callout__content{align-items:flex-start;display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__decoration{height:248px;inset-inline-end:8px;position:absolute;top:-15px;width:248px}.connectors-page>p{color:#949494;text-align:center}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px;padding-inline-end:84px}.connectors-page .ai-plugin-callout__decoration{height:134px;inset-inline-end:4px;top:-8px;width:134px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")),document.head.appendChild(e)}var ne=s(U()),Oe=s(ce()),oe=s($()),G=s(j()),m=s(I()),Ot=s(ye()),Dt=s(gt());var le=s(U()),xt=s(j()),Gt=s($()),Ge=s(I());import{__experimentalRegisterConnector as on,__experimentalConnectorItem as rn,__experimentalDefaultConnectorSettings as an,privateApis as sn}from"@wordpress/connectors";var mt=s(ot()),{lock:Xo,unlock:W}=(0,mt.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var xe=s(ce()),te=s($()),ee=s(j()),c=s(I()),vt=s(ye());function ht({file:e,settingName:t,connectorName:n,isInstalled:r,isActivated:o,keySource:a="none",initialIsConnected:i=!1}){let[l,u]=(0,ee.useState)(!1),[d,f]=(0,ee.useState)(!1),[v,z]=(0,ee.useState)(i),[p,R]=(0,ee.useState)(null),b=e?.replace(/\.php$/,""),q=b?.includes("/")?b.split("/")[0]:b,{derivedPluginStatus:D,canManagePlugins:k,currentApiKey:P,canInstallPlugins:L}=(0,te.useSelect)(V=>{let N=V(xe.store),K=N.getEntityRecord("root","site")?.[t]??"",X=!!N.canUser("create",{kind:"root",name:"plugin"});if(!e)return{derivedPluginStatus:N.hasFinishedResolution("getEntityRecord",["root","site"])?"active":"checking",canManagePlugins:void 0,currentApiKey:K,canInstallPlugins:X};let ue=N.getEntityRecord("root","plugin",b);if(!N.hasFinishedResolution("getEntityRecord",["root","plugin",b]))return{derivedPluginStatus:"checking",canManagePlugins:void 0,currentApiKey:K,canInstallPlugins:X};if(ue)return{derivedPluginStatus:ue.status==="active"||ue.status==="network-active"?"active":"inactive",canManagePlugins:!0,currentApiKey:K,canInstallPlugins:X};let fe="not-installed";return o?fe="active":r&&(fe="inactive"),{derivedPluginStatus:fe,canManagePlugins:!1,currentApiKey:K,canInstallPlugins:X}},[b,t,r,o]),g=p??D,M=k,S=g==="active"&&v||p==="active"&&!!P,{saveEntityRecord:h,invalidateResolution:B}=(0,te.useDispatch)(xe.store),{createSuccessNotice:T,createErrorNotice:O}=(0,te.useDispatch)(vt.store),de=async()=>{if(q){f(!0);try{await h("root","plugin",{slug:q,status:"active"},{throwOnError:!0}),R("active"),B("getEntityRecord",["root","site"]),u(!0),T((0,c.sprintf)((0,c.__)("Plugin for %s installed and activated successfully."),n),{id:"connector-plugin-install-success",type:"snackbar"})}catch{O((0,c.sprintf)((0,c.__)("Failed to install plugin for %s."),n),{id:"connector-plugin-install-error",type:"snackbar"})}finally{f(!1)}}},Tt=async()=>{if(e){f(!0);try{await h("root","plugin",{plugin:b,status:"active"},{throwOnError:!0}),R("active"),B("getEntityRecord",["root","site"]),u(!0),T((0,c.sprintf)((0,c.__)("Plugin for %s activated successfully."),n),{id:"connector-plugin-activate-success",type:"snackbar"})}catch{O((0,c.sprintf)((0,c.__)("Failed to activate plugin for %s."),n),{id:"connector-plugin-activate-error",type:"snackbar"})}finally{f(!1)}}};return{pluginStatus:g,canInstallPlugins:L,canActivatePlugins:M,isExpanded:l,setIsExpanded:u,isBusy:d,isConnected:S,currentApiKey:P,keySource:a,handleButtonClick:()=>{if(g==="not-installed"){if(L===!1)return;de()}else if(g==="inactive"){if(M===!1)return;Tt()}else u(!l)},getButtonLabel:()=>{if(d)return g==="not-installed"?(0,c.__)("Installing\u2026"):(0,c.__)("Activating\u2026");if(l)return(0,c.__)("Cancel");if(S)return(0,c.__)("Edit");switch(g){case"checking":return(0,c.__)("Checking\u2026");case"not-installed":return(0,c.__)("Install");case"inactive":return(0,c.__)("Activate");case"active":return(0,c.__)("Set up")}},saveApiKey:async V=>{let N=P;try{let X=(await h("root","site",{[t]:V},{throwOnError:!0}))?.[t];if(V&&(X===N||!X))throw new Error("It was not possible to connect to the provider using this key.");z(!0),T((0,c.sprintf)((0,c.__)("%s connected successfully."),n),{id:"connector-connect-success",type:"snackbar"})}catch(re){throw console.error("Failed to save API key:",re),re}},removeApiKey:async()=>{try{await h("root","site",{[t]:""},{throwOnError:!0}),z(!1),T((0,c.sprintf)((0,c.__)("%s disconnected."),n),{id:"connector-disconnect-success",type:"snackbar"})}catch(V){throw console.error("Failed to remove API key:",V),O((0,c.sprintf)((0,c.__)("Failed to disconnect %s."),n),{id:"connector-disconnect-error",type:"snackbar"}),V}}}}var bt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364l2.0201-1.1685a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4043-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z",fill:"currentColor"})),Pt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M6.2 21.024L12.416 17.536L12.52 17.232L12.416 17.064H12.112L11.072 17L7.52 16.904L4.44 16.776L1.456 16.616L0.704 16.456L0 15.528L0.072 15.064L0.704 14.64L1.608 14.72L3.608 14.856L6.608 15.064L8.784 15.192L12.008 15.528H12.52L12.592 15.32L12.416 15.192L12.28 15.064L9.176 12.96L5.816 10.736L4.056 9.456L3.104 8.808L2.624 8.2L2.416 6.872L3.28 5.92L4.44 6L4.736 6.08L5.912 6.984L8.424 8.928L11.704 11.344L12.184 11.744L12.376 11.608L12.4 11.512L12.184 11.152L10.4 7.928L8.496 4.648L7.648 3.288L7.424 2.472C7.344 2.136 7.288 1.856 7.288 1.512L8.272 0.176L8.816 0L10.128 0.176L10.68 0.656L11.496 2.52L12.816 5.456L14.864 9.448L15.464 10.632L15.784 11.728L15.904 12.064H16.112V11.872L16.28 9.624L16.592 6.864L16.896 3.312L17 2.312L17.496 1.112L18.48 0.464L19.248 0.832L19.88 1.736L19.792 2.32L19.416 4.76L18.68 8.584L18.2 11.144H18.48L18.8 10.824L20.096 9.104L22.272 6.384L23.232 5.304L24.352 4.112L25.072 3.544H26.432L27.432 5.032L26.984 6.568L25.584 8.344L24.424 9.848L22.76 12.088L21.72 13.88L21.816 14.024L22.064 14L25.824 13.2L27.856 12.832L30.28 12.416L31.376 12.928L31.496 13.448L31.064 14.512L28.472 15.152L25.432 15.76L20.904 16.832L20.848 16.872L20.912 16.952L22.952 17.144L23.824 17.192H25.96L29.936 17.488L30.976 18.176L31.6 19.016L31.496 19.656L29.896 20.472L27.736 19.96L22.696 18.76L20.968 18.328H20.728V18.472L22.168 19.88L24.808 22.264L28.112 25.336L28.28 26.096L27.856 26.696L27.408 26.632L24.504 24.448L23.384 23.464L20.848 21.328H20.68V21.552L21.264 22.408L24.352 27.048L24.512 28.472L24.288 28.936L23.488 29.216L22.608 29.056L20.8 26.52L18.936 23.664L17.432 21.104L17.248 21.208L16.36 30.768L15.944 31.256L14.984 31.624L14.184 31.016L13.76 30.032L14.184 28.088L14.696 25.552L15.112 23.536L15.488 21.032L15.712 20.2L15.696 20.144L15.512 20.168L13.624 22.76L10.752 26.64L8.48 29.072L7.936 29.288L6.992 28.8L7.08 27.928L7.608 27.152L10.752 23.152L12.648 20.672L13.872 19.24L13.864 19.032H13.792L5.44 24.456L3.952 24.648L3.312 24.048L3.392 23.064L3.696 22.744L6.208 21.016L6.2 21.024Z",fill:"#D97757"})),wt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M0 4C0 1.79086 1.79086 0 4 0H28C30.2091 0 32 1.79086 32 4V28C32 30.2091 30.2091 32 28 32H4C1.79086 32 0 30.2091 0 28V4Z",fill:"#F0F0F0"}),React.createElement("path",{d:"M14.5 8V12H17.5V8H19V12H20.5C20.7652 12 21.0196 12.1054 21.2071 12.2929C21.3946 12.4804 21.5 12.7348 21.5 13V17L18.5 21V23C18.5 23.2652 18.3946 23.5196 18.2071 23.7071C18.0196 23.8946 17.7652 24 17.5 24H14.5C14.2348 24 13.9804 23.8946 13.7929 23.7071C13.6054 23.5196 13.5 23.2652 13.5 23V21L10.5 17V13C10.5 12.7348 10.6054 12.4804 10.7929 12.2929C10.9804 12.1054 11.2348 12 11.5 12H13V8H14.5ZM15 20.5V22.5H17V20.5L20 16.5V13.5H12V16.5L15 20.5Z",fill:"#949494"})),Lt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("rect",{width:"44",height:"44",fill:"#357B49",rx:"6"}),React.createElement("path",{fill:"#fff",fillRule:"evenodd",d:"m29.746 28.31-6.392-16.797c-.152-.397-.305-.672-.789-.675-.673 0-1.408.611-1.746 1.316l-7.378 16.154c-.072.16-.143.311-.214.454-.5.995-1.045 1.546-2.357 1.626a.399.399 0 0 0-.16.033l-.01.004a.399.399 0 0 0-.23.392v.01c0 .054.01.106.03.155l.004.01a.416.416 0 0 0 .394.252h6.212a.417.417 0 0 0 .307-.12.416.416 0 0 0 .124-.305.398.398 0 0 0-.105-.302.399.399 0 0 0-.294-.127c-.757 0-2.197-.062-2.197-1.164.02-.318.103-.63.245-.916l1.399-3.152c.52-1.163 1.654-1.163 2.572-1.163h5.843c.023 0 .044 0 .062.003.13.014.16.081.214.242l1.534 4.07a2.857 2.857 0 0 1 .216 1.04c0 .054-.003.104-.01.153-.09.726-.831.887-1.49.887a.4.4 0 0 0-.294.127l-.007.008-.007.008a.401.401 0 0 0-.092.286v.01c0 .054.01.106.03.155l.005.01a.42.42 0 0 0 .395.252h7.011a.413.413 0 0 0 .279-.13.412.412 0 0 0 .11-.297.387.387 0 0 0-.09-.294.388.388 0 0 0-.277-.135c-1.448-.122-2.295-.643-2.847-2.08Zm-11.985-5.844 2.847-6.304c.361-.728.659-1.486.889-2.265 0-.06.03-.092.06-.092s.061.032.061.091c.02.122.045.247.073.374.197.888.584 1.878.914 2.723l.176.453 1.684 4.529a.927.927 0 0 1 .092.4.473.473 0 0 1-.009.094c-.041.202-.228.272-.602.272h-6.063c-.122 0-.184-.03-.184-.092a.36.36 0 0 1 .062-.183Zm17.107-.721c0 .786-.446 1.231-1.25 1.231-.806 0-1.125-.409-1.125-1.034 0-.786.465-1.231 1.25-1.231.785 0 1.125.427 1.125 1.034ZM9.629 23.002c.803 0 1.25-.447 1.25-1.231 0-.607-.343-1.036-1.128-1.036-.785 0-1.25.447-1.25 1.231 0 .625.325 1.036 1.128 1.036Z",clipRule:"evenodd"})),yt=()=>React.createElement("svg",{width:"40",height:"40",style:{flex:"none",lineHeight:1},viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"#3186FF"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-0)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-1)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-2)"}),React.createElement("defs",null,React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-0",x1:"7",x2:"11",y1:"15.5",y2:"12"},React.createElement("stop",{stopColor:"#08B962"}),React.createElement("stop",{offset:"1",stopColor:"#08B962",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-1",x1:"8",x2:"11.5",y1:"5.5",y2:"11"},React.createElement("stop",{stopColor:"#F94543"}),React.createElement("stop",{offset:"1",stopColor:"#F94543",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-2",x1:"3.5",x2:"17.5",y1:"13.5",y2:"12"},React.createElement("stop",{stopColor:"#FABC12"}),React.createElement("stop",{offset:".46",stopColor:"#FABC12",stopOpacity:"0"}))));var{store:cn}=W(sn);function ze(){try{return JSON.parse(document.getElementById("wp-script-module-data-options-connectors-wp-admin")?.textContent??"")?.connectors??{}}catch{return{}}}var ln={google:yt,openai:bt,anthropic:Pt,akismet:Lt};function dn(e,t){if(t)return React.createElement("img",{src:t,alt:"",width:40,height:40});let n=ln[e];return React.createElement(n||wt,null)}var un=()=>React.createElement("span",{style:{color:"#345b37",backgroundColor:"#eff8f0",padding:"4px 12px",borderRadius:"2px",fontSize:"13px",fontWeight:500,whiteSpace:"nowrap"}},(0,Ge.__)("Connected")),fn=()=>React.createElement(we,null,(0,Ge.__)("Not available"));function pn({name:e,description:t,logo:n,authentication:r,plugin:o}){let a=r?.method==="api_key"?r:void 0,i=a?.settingName??"",l=a?.credentialsUrl??void 0,u=o?.file?.replace(/\.php$/,""),d=u?.includes("/")?u.split("/")[0]:u,f;try{l&&(f=new URL(l).hostname)}catch{}let{pluginStatus:v,canInstallPlugins:z,canActivatePlugins:p,isExpanded:R,setIsExpanded:b,isBusy:q,isConnected:D,currentApiKey:k,keySource:P,handleButtonClick:L,getButtonLabel:g,saveApiKey:M,removeApiKey:S}=ht({file:o?.file,settingName:i,connectorName:e,isInstalled:o?.isInstalled,isActivated:o?.isActivated,keySource:a?.keySource,initialIsConnected:a?.isConnected}),h=P==="env"||P==="constant",B=v==="not-installed"&&z===!1||v==="inactive"&&p===!1,T=!B,O=(0,xt.useRef)(null);return React.createElement(rn,{className:d?`connector-item--${d}`:void 0,logo:n,name:e,description:t,actionArea:React.createElement(le.__experimentalHStack,{spacing:3,expanded:!1},D&&React.createElement(un,null),B&&React.createElement(fn,null),T&&React.createElement(le.Button,{ref:O,variant:R||D?"tertiary":"secondary",size:"compact",onClick:L,disabled:v==="checking"||q,isBusy:q,accessibleWhenDisabled:!0},g()))},R&&v==="active"&&React.createElement(an,{key:D?"connected":"setup",initialValue:h?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":k,helpUrl:l,helpLabel:f,readOnly:D||h,keySource:P,onRemove:h?void 0:async()=>{await S(),O.current?.focus()},onSave:async de=>{await M(de),b(!1),O.current?.focus()}}))}function zt(){let e=ze(),t=n=>n.replace(/[^a-z0-9-_]/gi,"-");for(let[n,r]of Object.entries(e)){if(n==="akismet"&&!r.plugin?.isInstalled)continue;let{authentication:o}=r,a=t(n),i={name:r.name,description:r.description,type:r.type,logo:dn(n,r.logoUrl),authentication:o,plugin:r.plugin},l=W((0,Gt.select)(cn)).getConnector(a);o.method==="api_key"&&!l?.render&&(i.render=pn),on(a,i)}}function Mt(){return React.createElement("div",{className:"ai-plugin-callout__decoration","aria-hidden":"true"},React.createElement("svg",{viewBox:"0 0 248 248",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",focusable:"false",style:{width:"100%",height:"100%"}},React.createElement("image",{href:"data:image/png;base64,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",width:"248",height:"248",style:{mixBlendMode:"multiply"}}),React.createElement("rect",{x:"184.055",y:"54.995",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"170.059",y:"44.06",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"200.238",y:"77.302",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"212.048",y:"87.8",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"206.799",y:"83.425",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"204.175",y:"85.612",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"219.046",y:"103.108",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"154.751",y:"30.064",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"188.866",y:"63.742",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"148.189",y:"34",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"134.051",y:"31.707",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"126.124",y:"24.771",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"115.385",y:"29.19",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"95.702",y:"31.376",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"91.766",y:"27.002",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"90.454",y:"32.688",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"184.389",y:"45.58",width:"2.187",height:"2.187"}),React.createElement("rect",{x:"162.185",y:"41.873",width:"2.187",height:"2.187"})))}var gn="ai",mn="ai-wp-admin",Me="ai/ai",vn="https://wordpress.org/plugins/ai/",De=Object.values(ze()),hn=De.some(e=>e.type==="ai_provider"),Bt=[];for(let e of De)e.type==="ai_provider"&&e.authentication.method==="api_key"&&Bt.push(e.authentication.settingName);function jt(){let[e,t]=(0,G.useState)(!1),[n,r]=(0,G.useState)(!1),o=(0,G.useRef)(null);(0,G.useEffect)(()=>{n&&o.current?.focus()},[n]);let a=(0,G.useRef)(De.some(L=>L.type==="ai_provider"&&L.authentication.method==="api_key"&&L.authentication.isConnected)).current,{pluginStatus:i,canInstallPlugins:l,canManagePlugins:u,hasConnectedProvider:d}=(0,oe.useSelect)(L=>{let g=L(Oe.store),M=!!g.canUser("create",{kind:"root",name:"plugin"}),S=g.getEntityRecord("root","site"),h=a||Bt.some(O=>!!S?.[O]),B=g.getEntityRecord("root","plugin",Me);return g.hasFinishedResolution("getEntityRecord",["root","plugin",Me])?B?{pluginStatus:B.status==="active"?"active":"inactive",canInstallPlugins:M,canManagePlugins:!0,hasConnectedProvider:h}:{pluginStatus:"not-installed",canInstallPlugins:M,canManagePlugins:M,hasConnectedProvider:h}:{pluginStatus:"checking",canInstallPlugins:M,canManagePlugins:void 0,hasConnectedProvider:h}},[]),{saveEntityRecord:f}=(0,oe.useDispatch)(Oe.store),{createSuccessNotice:v,createErrorNotice:z}=(0,oe.useDispatch)(Ot.store),p=async()=>{t(!0);try{await f("root","plugin",{slug:gn,status:"active"},{throwOnError:!0}),r(!0),v((0,m.__)("AI plugin installed and activated successfully."),{id:"ai-plugin-install-success",type:"snackbar"})}catch{z((0,m.__)("Failed to install the AI plugin."),{id:"ai-plugin-install-error",type:"snackbar"})}finally{t(!1)}},R=async()=>{t(!0);try{await f("root","plugin",{plugin:Me,status:"active"},{throwOnError:!0}),r(!0),v((0,m.__)("AI plugin activated successfully."),{id:"ai-plugin-activate-success",type:"snackbar"})}catch{z((0,m.__)("Failed to activate the AI plugin."),{id:"ai-plugin-activate-error",type:"snackbar"})}finally{t(!1)}};if(!hn||i==="checking"||i==="active"&&a&&!n||i==="not-installed"&&l===!1||i==="inactive"&&u===!1)return null;let b=i==="active"&&!d,q=i==="active"&&d&&(!a||n),D=i==="not-installed"||i==="inactive",k=()=>q?(0,m.__)("The AI plugin is ready to use. You can use it to generate featured images, alt text, titles, excerpts and more. Learn more"):b?(0,m.__)("The AI plugin is installed. Connect an AI provider below to generate featured images, alt text, titles, excerpts, and more. Learn more"):(0,m.__)("The AI plugin can use your AI connectors to generate featured images, alt text, titles, excerpts and more. Learn more"),P=()=>i==="not-installed"?{label:e?(0,m.__)("Installing\u2026"):(0,m.__)("Install the AI plugin"),disabled:e,onClick:e?void 0:p}:{label:e?(0,m.__)("Activating\u2026"):(0,m.__)("Activate the AI plugin"),disabled:e,onClick:e?void 0:R};return React.createElement("div",{className:"ai-plugin-callout"},React.createElement("div",{className:"ai-plugin-callout__content"},React.createElement("p",null,(0,G.createInterpolateElement)(k(),{strong:React.createElement("strong",null),a:React.createElement(ne.ExternalLink,{href:vn})})),D?React.createElement(ne.Button,{variant:"primary",size:"compact",isBusy:e,disabled:P().disabled,accessibleWhenDisabled:!0,onClick:P().onClick},P().label):React.createElement(ne.Button,{ref:o,variant:"secondary",size:"compact",href:(0,Dt.addQueryArgs)("options-general.php",{page:mn})},(0,m.__)("Control features in the AI plugin"))),React.createElement(Mt,null))}var{store:Pn}=W(bn);zt();function wn(){let{connectors:e,canInstallPlugins:t}=(0,Ht.useSelect)(o=>({connectors:W(o(Pn)).getConnectors(),canInstallPlugins:o(qt.store).canUser("create",{kind:"root",name:"plugin"})}),[]),r=e.filter(o=>o.render).length===0;return React.createElement(Le,{title:(0,Y.__)("Connectors"),headingLevel:1,subTitle:(0,Y.__)("All of your API keys and credentials are stored here and shared across plugins. Configure once and use everywhere.")},React.createElement("div",{className:`connectors-page${r?" connectors-page--empty":""}`},r?React.createElement(w.__experimentalVStack,{alignment:"center",spacing:3,style:{maxWidth:480}},React.createElement(w.__experimentalVStack,{alignment:"center",spacing:2},React.createElement(w.__experimentalHeading,{level:2,size:15,weight:600},(0,Y.__)("No connectors yet")),React.createElement(w.__experimentalText,{size:12},(0,Y.__)("Connectors appear here when you install plugins that use external services. Each plugin registers the API keys it needs, and you manage them all in one place."))),React.createElement(w.Button,{variant:"secondary",href:"plugin-install.php"},(0,Y.__)("Learn more"))):React.createElement(w.__experimentalVStack,{spacing:3},React.createElement(jt,null),React.createElement(w.__experimentalVStack,{spacing:3,role:"list"},e.map(o=>o.render?React.createElement(o.render,{key:o.slug,slug:o.slug,name:o.name,description:o.description,type:o.type,logo:o.logo,authentication:o.authentication,plugin:o.plugin}):null))),t&&React.createElement("p",null,(0,Rt.createInterpolateElement)((0,Y.__)("If the connector you need is not listed, search the plugin directory to see if a connector is available."),{a:React.createElement("a",{href:"plugin-install.php?s=connector&tab=search&type=tag"})}))))}function Ln(){return React.createElement(wn,null)}var yn=Ln;export{yn as stage}; +var pa=Object.create;var Ae=Object.defineProperty;var ma=Object.getOwnPropertyDescriptor;var ga=Object.getOwnPropertyNames;var wa=Object.getPrototypeOf,ha=Object.prototype.hasOwnProperty;var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),va=(e,t)=>{for(var a in t)Ae(e,a,{get:t[a],enumerable:!0})},xa=(e,t,a,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ga(t))!ha.call(e,r)&&r!==a&&Ae(e,r,{get:()=>t[r],enumerable:!(o=ma(t,r))||o.enumerable});return e};var i=(e,t,a)=>(a=e!=null?pa(wa(e)):{},xa(t||!e||!e.__esModule?Ae(a,"default",{value:e,enumerable:!0}):a,e));var te=y((go,qe)=>{qe.exports=window.wp.i18n});var ae=y((wo,Ue)=>{Ue.exports=window.wp.components});var A=y((ho,Qe)=>{Qe.exports=window.ReactJSXRuntime});var x=y((xo,$e)=>{$e.exports=window.wp.element});var G=y((Ao,rt)=>{rt.exports=window.React});var Z=y((ar,yt)=>{yt.exports=window.wp.primitives});var Bt=y((gr,Nt)=>{Nt.exports=window.wp.privateApis});var le=y((as,jt)=>{jt.exports=window.wp.data});var xe=y((os,Yt)=>{Yt.exports=window.wp.coreData});var Ve=y((rs,Rt)=>{Rt.exports=window.wp.notices});var Vt=y((ss,Wt)=>{Wt.exports=window.wp.url});function Je(e){var t,a,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var r=e.length;for(t=0;t(0,tt.jsx)(o,{ref:s,className:v("admin-ui-navigable-region",t),"aria-label":a,role:"region",tabIndex:"-1",...r,children:e}));at.displayName="NavigableRegion";var ot=at;var it=i(G(),1),st={};function Pe(e,t){let a=it.useRef(st);return a.current===st&&(a.current=e(t)),a}function Le(e,...t){let a=new URL(`https://base-ui.com/production-error/${e}`);return t.forEach(o=>a.searchParams.append("args[]",o)),`Base UI error #${e}; visit ${a} for the full message.`}var me=i(G(),1);function Ne(e,t,a,o){let r=Pe(lt).current;return ya(r,e,t,a,o)&&ft(r,[e,t,a,o]),r.callback}function nt(e){let t=Pe(lt).current;return Aa(t,e)&&ft(t,e),t.callback}function lt(){return{callback:null,cleanup:null,refs:[]}}function ya(e,t,a,o,r){return e.refs[0]!==t||e.refs[1]!==a||e.refs[2]!==o||e.refs[3]!==r}function Aa(e,t){return e.refs.length!==t.length||e.refs.some((a,o)=>a!==t[o])}function ft(e,t){if(e.refs=t,t.every(a=>a==null)){e.callback=null;return}e.callback=a=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),a!=null){let o=Array(t.length).fill(null);for(let r=0;r{for(let r=0;r=e}function Be(e){if(!ct.isValidElement(e))return null;let t=e,a=t.props;return(ut(19)?a?.ref:t.ref)??null}function oe(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}function pt(e,t){let a={};for(let o in e){let r=e[o];if(t?.hasOwnProperty(o)){let s=t[o](r);s!=null&&Object.assign(a,s);continue}r===!0?a[`data-${o.toLowerCase()}`]="":r&&(a[`data-${o.toLowerCase()}`]=r.toString())}return a}function mt(e,t){return typeof e=="function"?e(t):e}function gt(e,t){return typeof e=="function"?e(t):e}var se={};function N(e,t,a,o,r){let s={...Ce(e,se)};return t&&(s=re(s,t)),a&&(s=re(s,a)),o&&(s=re(s,o)),r&&(s=re(s,r)),s}function wt(e){if(e.length===0)return se;if(e.length===1)return Ce(e[0],se);let t={...Ce(e[0],se)};for(let a=1;a=65&&r<=90&&(typeof t=="function"||typeof t>"u")}function ht(e){return typeof e=="function"}function Ce(e,t){return ht(e)?e(t):e??se}function Ba(e,t){return t?e?a=>{if(Ha(a)){let r=a;Ca(r);let s=t(r);return r.baseUIHandlerPrevented||e?.(r),s}let o=t(a);return e?.(a),o}:t:e}function Ca(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function He(e,t){return t?e?t+" "+e:t:e}function Ha(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}var Oa=Object.freeze([]),I=Object.freeze({});var Oe=i(G(),1);function vt(e,t,a={}){let o=t.render,r=Da(t,a);if(a.enabled===!1)return null;let s=a.state??I;return Ta(e,o,r,s)}function Da(e,t={}){let{className:a,style:o,render:r}=e,{state:s=I,ref:l,props:f,stateAttributesMapping:c,enabled:d=!0}=t,p=d?mt(a,s):void 0,n=d?gt(o,s):void 0,h=d?pt(s,c):I,m=d?oe(h,Array.isArray(f)?wt(f):f)??I:I;return typeof document<"u"&&(d?Array.isArray(l)?m.ref=nt([m.ref,Be(r),...l]):m.ref=Ne(m.ref,Be(r),l):Ne(null,null)),d?(p!==void 0&&(m.className=He(m.className,p)),n!==void 0&&(m.style=oe(m.style,n)),m):I}function Ta(e,t,a,o){if(t){if(typeof t=="function")return t(a,o);let r=N(a,t.props);return r.ref=a.ref,me.cloneElement(t,r)}if(e&&typeof e=="string")return za(e,a);throw new Error(Le(8))}function za(e,t){return e==="button"?(0,Oe.createElement)("button",{type:"button",...t,key:t.key}):e==="img"?(0,Oe.createElement)("img",{alt:"",...t,key:t.key}):me.createElement(e,t)}function M(e){return vt(e.defaultTagName??"div",e,e)}var bt=i(x(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='244b5c59c0']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","244b5c59c0"),e.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._96e6251aad1a6136__badge{border-radius:var(--wpds-border-radius-lg,8px);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-sm,12px);font-weight:var(--wpds-font-weight-regular,400);line-height:var(--wpds-font-line-height-xs,16px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wpds-dimension-padding-sm,8px)}._99f7158cb520f750__is-high-intent{background-color:var(--wpds-color-bg-surface-error,#f6e6e3);color:var(--wpds-color-fg-content-error,#470000)}.c20ebef2365bc8b7__is-medium-intent{background-color:var(--wpds-color-bg-surface-warning,#fde6bd);color:var(--wpds-color-fg-content-warning,#2e1900)}._365e1626c6202e52__is-low-intent{background-color:var(--wpds-color-bg-surface-caution,#fee994);color:var(--wpds-color-fg-content-caution,#281d00)}._33f8198127ddf4ef__is-stable-intent{background-color:var(--wpds-color-bg-surface-success,#c5f7cc);color:var(--wpds-color-fg-content-success,#002900)}._04c1aca8fc449412__is-informational-intent{background-color:var(--wpds-color-bg-surface-info,#deebfa);color:var(--wpds-color-fg-content-info,#001b4f)}._90726e69d495ec19__is-draft-intent{background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}._898f4a544993bd39__is-none-intent{background-color:var(--wpds-color-bg-surface-neutral,#f8f8f8);color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}}')),document.head.appendChild(e)}var xt={badge:"_96e6251aad1a6136__badge","is-high-intent":"_99f7158cb520f750__is-high-intent","is-medium-intent":"c20ebef2365bc8b7__is-medium-intent","is-low-intent":"_365e1626c6202e52__is-low-intent","is-stable-intent":"_33f8198127ddf4ef__is-stable-intent","is-informational-intent":"_04c1aca8fc449412__is-informational-intent","is-draft-intent":"_90726e69d495ec19__is-draft-intent","is-none-intent":"_898f4a544993bd39__is-none-intent"},De=(0,bt.forwardRef)(function({children:t,intent:a="none",render:o,className:r,...s},l){return M({render:o,defaultTagName:"span",ref:l,props:N(s,{className:v(xt.badge,xt[`is-${a}-intent`],r),children:t})})});var At=i(x(),1),Pt=i(Z(),1),Lt=i(A(),1),Te=(0,At.forwardRef)(function({icon:t,size:a=24,...o},r){return(0,Lt.jsx)(Pt.SVG,{ref:r,fill:"currentColor",...t.props,...o,width:a,height:a})});var ge=i(Z(),1),ze=i(A(),1),ke=(0,ze.jsx)(ge.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,ze.jsx)(ge.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-.75 12v-1.5h1.5V16h-1.5Zm0-8v5h1.5V8h-1.5Z"})});var we=i(Z(),1),Se=i(A(),1),_e=(0,Se.jsx)(we.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Se.jsx)(we.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z"})});var he=i(Z(),1),Ee=i(A(),1),Ie=(0,Ee.jsx)(he.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Ee.jsx)(he.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm.75 4v1.5h-1.5V8h1.5Zm0 8v-5h-1.5v5h1.5Z"})});var ve=i(Z(),1),Me=i(A(),1),je=(0,Me.jsx)(ve.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Me.jsx)(ve.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm11.53-1.47-1.06-1.06L11 12.94l-1.47-1.47-1.06 1.06L11 15.06l4.53-4.53Z"})});var Ct=i(x(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='71d20935c2']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","71d20935c2"),e.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")),document.head.appendChild(e)}var ka={stack:"_19ce0419607e1896__stack"},Sa={xs:"var(--wpds-dimension-gap-xs, 4px)",sm:"var(--wpds-dimension-gap-sm, 8px)",md:"var(--wpds-dimension-gap-md, 12px)",lg:"var(--wpds-dimension-gap-lg, 16px)",xl:"var(--wpds-dimension-gap-xl, 24px)","2xl":"var(--wpds-dimension-gap-2xl, 32px)","3xl":"var(--wpds-dimension-gap-3xl, 40px)"},X=(0,Ct.forwardRef)(function({direction:t,gap:a,align:o,justify:r,wrap:s,render:l,...f},c){let d={gap:a&&Sa[a],alignItems:o,justifyContent:r,flexDirection:t,flexWrap:s};return M({render:l,ref:c,props:N(f,{style:d,className:ka.stack})})});var ie={};va(ie,{Description:()=>kt,Root:()=>Ht});var K=i(x(),1);import{speak as _a}from"@wordpress/a11y";var q=i(A(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='671ebfc62d']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","671ebfc62d"),e.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}")),document.head.appendChild(e)}var Ea={"box-sizing":"_336cd3e4e743482f__box-sizing"};if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='a66a881fc5']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","a66a881fc5"),e.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._4145abab73d17514__notice{--icon-height:24px;--text-vertical-padding:calc((var(--icon-height) - var(--wpds-font-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#d8d8d8);--wp-ui-notice-text-color:var(--wpds-color-fg-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description{text-wrap:pretty;color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-info-weak,#f2f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#9fbcdc);--wp-ui-notice-text-color:var(--wpds-color-fg-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-warning-weak,#fff7e0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#d0b381);--wp-ui-notice-text-color:var(--wpds-color-fg-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-warning-weak,#926300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-success-weak,#eaffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#8ac894);--wp-ui-notice-text-color:var(--wpds-color-fg-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-success-weak,#007f30)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-error-weak,#fff6f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#daa39b);--wp-ui-notice-text-color:var(--wpds-color-fg-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-error-weak,#cc1818)}}")),document.head.appendChild(e)}var Ye={notice:"_4145abab73d17514__notice",icon:"d0a25570cb528528__icon",description:"_1904b570a89bb815__description","is-info":"_531c140826094795__is-info","is-warning":"ae2e1004697cce95__is-warning","is-success":"_2e614a76af494837__is-success","is-error":"af00331ae17a0065__is-error"},Ia={neutral:null,info:Ie,warning:ke,success:je,error:_e};function Ma(e){return e==="error"?"assertive":"polite"}function ja(e){if(e){if(typeof e=="string")return e;try{return(0,K.renderToString)(e)}catch{return}}}function Ya(e,t){let a=ja(e);(0,K.useEffect)(()=>{a&&_a(a,t)},[a,t])}var Ht=(0,K.forwardRef)(function({intent:t="neutral",children:a,icon:o,spokenMessage:r=a,politeness:s=Ma(t),render:l,...f},c){Ya(r,s);let d=o===null?null:o??Ia[t],p=v(Ye.notice,Ye[`is-${t}`],Ea["box-sizing"]);return M({defaultTagName:"div",render:l,ref:c,props:N({className:p,children:(0,q.jsxs)(q.Fragment,{children:[a,d&&(0,q.jsx)(Te,{className:Ye.icon,icon:d})]})},f)})});var Tt=i(x(),1);var Dt=i(x(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='6675f7d310']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","6675f7d310"),e.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._83ed8a8da5dd50ea__text{margin:0}._14437cfb77831647__heading-2xl{font-size:var(--wpds-font-size-2xl,32px);line-height:var(--wpds-font-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-medium,499)}._3c78b7fa9b4072dd__heading-xl{font-size:var(--wpds-font-size-xl,20px);line-height:var(--wpds-font-line-height-md,24px)}.aa58f227716bcde2__heading-lg{font-size:var(--wpds-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-medium,499);line-height:var(--wpds-font-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{font-size:var(--wpds-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{font-family:var(--wpds-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-xs,11px);font-weight:var(--wpds-font-weight-medium,499);line-height:var(--wpds-font-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{font-size:var(--wpds-font-size-xl,20px);line-height:var(--wpds-font-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-regular,400)}.ca1aa3fc2029e958__body-lg{font-size:var(--wpds-font-size-lg,15px);line-height:var(--wpds-font-line-height-md,24px)}._131101940be12424__body-md{font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-font-weight-regular,400)}._0e8d87a42c1f75fa__body-sm{font-size:var(--wpds-font-size-sm,12px);line-height:var(--wpds-font-line-height-xs,16px)}}')),document.head.appendChild(e)}var Ot={text:"_83ed8a8da5dd50ea__text","heading-2xl":"_14437cfb77831647__heading-2xl","heading-xl":"_3c78b7fa9b4072dd__heading-xl","heading-lg":"aa58f227716bcde2__heading-lg","heading-md":"fc4da56d8dfe52c4__heading-md","heading-sm":"a9b78c7c82e8dff7__heading-sm","body-xl":"_305ff559e52180d5__body-xl","body-lg":"ca1aa3fc2029e958__body-lg","body-md":"_131101940be12424__body-md","body-sm":"_0e8d87a42c1f75fa__body-sm"},Re=(0,Dt.forwardRef)(function({variant:t="body-md",render:a,className:o,...r},s){return M({render:a,defaultTagName:"span",ref:s,props:N(r,{className:v(Ot.text,Ot[t],o)})})});var zt=i(A(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='a66a881fc5']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","a66a881fc5"),e.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._4145abab73d17514__notice{--icon-height:24px;--text-vertical-padding:calc((var(--icon-height) - var(--wpds-font-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-bg-surface-neutral-weak,#f0f0f0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#d8d8d8);--wp-ui-notice-text-color:var(--wpds-color-fg-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;padding:var(--wpds-dimension-padding-md,12px)}.d0a25570cb528528__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._1904b570a89bb815__description{text-wrap:pretty;color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._531c140826094795__is-info{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-info-weak,#f2f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#9fbcdc);--wp-ui-notice-text-color:var(--wpds-color-fg-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-info-weak,#006bd7)}.ae2e1004697cce95__is-warning{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-warning-weak,#fff7e0);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#d0b381);--wp-ui-notice-text-color:var(--wpds-color-fg-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-warning-weak,#926300)}._2e614a76af494837__is-success{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-success-weak,#eaffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#8ac894);--wp-ui-notice-text-color:var(--wpds-color-fg-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-success-weak,#007f30)}.af00331ae17a0065__is-error{--wp-ui-notice-background-color:var(--wpds-color-bg-surface-error-weak,#fff6f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#daa39b);--wp-ui-notice-text-color:var(--wpds-color-fg-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-fg-content-error-weak,#cc1818)}}")),document.head.appendChild(e)}var Ra={notice:"_4145abab73d17514__notice",icon:"d0a25570cb528528__icon",description:"_1904b570a89bb815__description","is-info":"_531c140826094795__is-info","is-warning":"ae2e1004697cce95__is-warning","is-success":"_2e614a76af494837__is-success","is-error":"af00331ae17a0065__is-error"},kt=(0,Tt.forwardRef)(function({className:t,...a},o){return(0,zt.jsx)(Re,{ref:o,variant:"body-md",className:v(Ra.description,t),...a})});var St=i(ae(),1),{Fill:_t,Slot:Et}=(0,St.createSlotFill)("SidebarToggle");var z=i(A(),1);function It({headingLevel:e=1,breadcrumbs:t,badges:a,title:o,subTitle:r,actions:s,showSidebarToggle:l=!0}){let f=`h${e}`;return(0,z.jsxs)(X,{direction:"column",className:"admin-ui-page__header",children:[(0,z.jsxs)(X,{direction:"row",justify:"space-between",gap:"sm",children:[(0,z.jsxs)(X,{direction:"row",gap:"sm",align:"center",justify:"start",children:[l&&(0,z.jsx)(Et,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),o&&(0,z.jsx)(f,{className:"admin-ui-page__header-title",children:o}),t,a]}),(0,z.jsx)(X,{direction:"row",gap:"sm",style:{width:"auto",flexShrink:0},className:"admin-ui-page__header-actions",align:"center",children:s})]}),r&&(0,z.jsx)("p",{className:"admin-ui-page__header-subtitle",children:r})]})}var ne=i(A(),1);function Mt({headingLevel:e,breadcrumbs:t,badges:a,title:o,subTitle:r,children:s,className:l,actions:f,hasPadding:c=!1,showSidebarToggle:d=!0}){let p=v("admin-ui-page",l);return(0,ne.jsxs)(ot,{className:p,ariaLabel:o,children:[(o||t||a)&&(0,ne.jsx)(It,{headingLevel:e,breadcrumbs:t,badges:a,title:o,subTitle:r,actions:f,showSidebarToggle:d}),c?(0,ne.jsx)("div",{className:"admin-ui-page__content has-padding",children:s}):s]})}Mt.SidebarToggleFill=_t;var We=Mt;var P=i(ae()),la=i(le()),fa=i(x()),k=i(te()),da=i(xe());import{privateApis as oo}from"@wordpress/connectors";if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='eb5f96e519']")){let e=document.createElement("style");e.setAttribute("data-wp-hash","eb5f96e519"),e.appendChild(document.createTextNode(".connectors-page{box-sizing:border-box;margin:0 auto;max-width:680px;padding:24px;width:100%}.connectors-page .components-item{background:#fff;border:1px solid #ddd;border-radius:8px;overflow:hidden;padding:20px;scroll-margin-top:120px}.connectors-page .connector-settings__error{color:#cc1818}.connectors-page .connector-settings .components-text-control__input{font-family:monospace;scroll-margin-top:120px}.connectors-page__file-mods-notice{margin-bottom:16px}.connectors-page--empty{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:32px;justify-content:center;text-align:center}.connectors-page .ai-plugin-callout{background-color:#e7d4e4;background-image:radial-gradient(ellipse 70% 120% at 18% 115%,#ca9ec6bf 0,#ca9ec600 60%),radial-gradient(ellipse 55% 110% at 92% -15%,#d0afd9b3 0,#d0afd900 65%),radial-gradient(ellipse 40% 85% at 58% -10%,#aa82b873 0,#aa82b800 70%);border-radius:8px;overflow:hidden;padding:24px;padding-inline-end:150px;position:relative}[dir=rtl] .connectors-page .ai-plugin-callout{background-image:radial-gradient(ellipse 70% 120% at 82% 115%,#ca9ec6bf 0,#ca9ec600 60%),radial-gradient(ellipse 55% 110% at 8% -15%,#d0afd9b3 0,#d0afd900 65%),radial-gradient(ellipse 40% 85% at 42% -10%,#aa82b873 0,#aa82b800 70%)}.connectors-page .ai-plugin-callout__content{align-items:flex-start;display:flex;flex-direction:column;gap:12px;padding-top:2px}.connectors-page .ai-plugin-callout__content p{font-size:13px;line-height:20px;margin:0}.connectors-page .ai-plugin-callout__decoration{height:110px;inset-inline-end:16px;position:absolute;top:12px;width:110px}.connectors-page>p{color:#949494}@media (max-width:680px){.connectors-page .ai-plugin-callout{padding:12px;padding-inline-end:100px}.connectors-page .ai-plugin-callout__decoration{height:75px;inset-inline-end:8px;top:8px;width:75px}}@media (max-width:480px){.connectors-page{padding:8px}.connectors-page .ai-plugin-callout{padding-inline-end:130px}.connectors-page .components-item{padding:12px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child svg{height:32px;width:32px}.connectors-page .components-item>.components-v-stack>.components-h-stack:first-child>.components-h-stack:last-child{align-items:flex-end;flex-direction:column}}")),document.head.appendChild(e)}var ue=i(ae()),Xe=i(xe()),ce=i(le()),B=i(x()),w=i(te()),ra=i(Ve()),sa=i(Vt());var Q=i(ae()),Jt=i(x()),$t=i(le()),F=i(te());import{__experimentalRegisterConnector as Wa,__experimentalConnectorItem as Va,__experimentalDefaultConnectorSettings as Fa,privateApis as Ga}from"@wordpress/connectors";var Ft=i(Bt()),{lock:is,unlock:U}=(0,Ft.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/routes");var Fe=i(xe()),de=i(le()),fe=i(x()),u=i(te()),Gt=i(Ve());function Zt({file:e,settingName:t,connectorName:a,isInstalled:o,isActivated:r,keySource:s="none",initialIsConnected:l=!1}){let[f,c]=(0,fe.useState)(!1),[d,p]=(0,fe.useState)(!1),[n,h]=(0,fe.useState)(l),[m,j]=(0,fe.useState)(null),b=e?.replace(/\.php$/,""),Y=b?.includes("/")?b.split("/")[0]:b,{derivedPluginStatus:S,canManagePlugins:J,currentApiKey:C,canInstallPlugins:_}=(0,de.useSelect)(R=>{let W=R(Fe.store),ee=W.getEntityRecord("root","site")?.[t]??"",V=!!W.canUser("create",{kind:"root",name:"plugin"});if(!e)return{derivedPluginStatus:W.hasFinishedResolution("getEntityRecord",["root","site"])?"active":"checking",canManagePlugins:void 0,currentApiKey:ee,canInstallPlugins:V};let be=W.getEntityRecord("root","plugin",b);if(!W.hasFinishedResolution("getEntityRecord",["root","plugin",b]))return{derivedPluginStatus:"checking",canManagePlugins:void 0,currentApiKey:ee,canInstallPlugins:V};if(be)return{derivedPluginStatus:be.status==="active"||be.status==="network-active"?"active":"inactive",canManagePlugins:!0,currentApiKey:ee,canInstallPlugins:V};let ye="not-installed";return r?ye="active":o&&(ye="inactive"),{derivedPluginStatus:ye,canManagePlugins:!1,currentApiKey:ee,canInstallPlugins:V}},[b,t,o,r]),g=m??S,H=J,O=g==="active"&&n||m==="active"&&!!C,{saveEntityRecord:L,invalidateResolution:D}=(0,de.useDispatch)(Fe.store),{createSuccessNotice:T,createErrorNotice:E}=(0,de.useDispatch)(Gt.store),$=async()=>{if(Y){p(!0);try{await L("root","plugin",{slug:Y,status:"active"},{throwOnError:!0}),j("active"),D("getEntityRecord",["root","site"]),c(!0),T((0,u.sprintf)((0,u.__)("Plugin for %s installed and activated successfully."),a),{id:"connector-plugin-install-success",type:"snackbar"})}catch{E((0,u.sprintf)((0,u.__)("Failed to install plugin for %s."),a),{id:"connector-plugin-install-error",type:"snackbar"})}finally{p(!1)}}},ua=async()=>{if(e){p(!0);try{await L("root","plugin",{plugin:b,status:"active"},{throwOnError:!0}),j("active"),D("getEntityRecord",["root","site"]),c(!0),T((0,u.sprintf)((0,u.__)("Plugin for %s activated successfully."),a),{id:"connector-plugin-activate-success",type:"snackbar"})}catch{E((0,u.sprintf)((0,u.__)("Failed to activate plugin for %s."),a),{id:"connector-plugin-activate-error",type:"snackbar"})}finally{p(!1)}}};return{pluginStatus:g,canInstallPlugins:_,canActivatePlugins:H,isExpanded:f,setIsExpanded:c,isBusy:d,isConnected:O,currentApiKey:C,keySource:s,handleButtonClick:()=>{if(g==="not-installed"){if(_===!1)return;$()}else if(g==="inactive"){if(H===!1)return;ua()}else c(!f)},getButtonLabel:()=>{if(d)return g==="not-installed"?(0,u.__)("Installing\u2026"):(0,u.__)("Activating\u2026");if(f)return(0,u.__)("Cancel");if(O)return(0,u.__)("Edit");switch(g){case"checking":return(0,u.__)("Checking\u2026");case"not-installed":return(0,u.__)("Install");case"inactive":return(0,u.__)("Activate");case"active":return(0,u.__)("Set up")}},saveApiKey:async R=>{let W=C;try{let V=(await L("root","site",{[t]:R},{throwOnError:!0}))?.[t];if(R&&(V===W||!V))throw new Error("It was not possible to connect to the provider using this key.");h(!0),T((0,u.sprintf)((0,u.__)("%s connected successfully."),a),{id:"connector-connect-success",type:"snackbar"})}catch(pe){throw console.error("Failed to save API key:",pe),pe}},removeApiKey:async()=>{try{await L("root","site",{[t]:""},{throwOnError:!0}),h(!1),T((0,u.sprintf)((0,u.__)("%s disconnected."),a),{id:"connector-disconnect-success",type:"snackbar"})}catch(R){throw console.error("Failed to remove API key:",R),E((0,u.sprintf)((0,u.__)("Failed to disconnect %s."),a),{id:"connector-disconnect-error",type:"snackbar"}),R}}}}var Xt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364l2.0201-1.1685a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4043-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z",fill:"currentColor"})),Kt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M6.2 21.024L12.416 17.536L12.52 17.232L12.416 17.064H12.112L11.072 17L7.52 16.904L4.44 16.776L1.456 16.616L0.704 16.456L0 15.528L0.072 15.064L0.704 14.64L1.608 14.72L3.608 14.856L6.608 15.064L8.784 15.192L12.008 15.528H12.52L12.592 15.32L12.416 15.192L12.28 15.064L9.176 12.96L5.816 10.736L4.056 9.456L3.104 8.808L2.624 8.2L2.416 6.872L3.28 5.92L4.44 6L4.736 6.08L5.912 6.984L8.424 8.928L11.704 11.344L12.184 11.744L12.376 11.608L12.4 11.512L12.184 11.152L10.4 7.928L8.496 4.648L7.648 3.288L7.424 2.472C7.344 2.136 7.288 1.856 7.288 1.512L8.272 0.176L8.816 0L10.128 0.176L10.68 0.656L11.496 2.52L12.816 5.456L14.864 9.448L15.464 10.632L15.784 11.728L15.904 12.064H16.112V11.872L16.28 9.624L16.592 6.864L16.896 3.312L17 2.312L17.496 1.112L18.48 0.464L19.248 0.832L19.88 1.736L19.792 2.32L19.416 4.76L18.68 8.584L18.2 11.144H18.48L18.8 10.824L20.096 9.104L22.272 6.384L23.232 5.304L24.352 4.112L25.072 3.544H26.432L27.432 5.032L26.984 6.568L25.584 8.344L24.424 9.848L22.76 12.088L21.72 13.88L21.816 14.024L22.064 14L25.824 13.2L27.856 12.832L30.28 12.416L31.376 12.928L31.496 13.448L31.064 14.512L28.472 15.152L25.432 15.76L20.904 16.832L20.848 16.872L20.912 16.952L22.952 17.144L23.824 17.192H25.96L29.936 17.488L30.976 18.176L31.6 19.016L31.496 19.656L29.896 20.472L27.736 19.96L22.696 18.76L20.968 18.328H20.728V18.472L22.168 19.88L24.808 22.264L28.112 25.336L28.28 26.096L27.856 26.696L27.408 26.632L24.504 24.448L23.384 23.464L20.848 21.328H20.68V21.552L21.264 22.408L24.352 27.048L24.512 28.472L24.288 28.936L23.488 29.216L22.608 29.056L20.8 26.52L18.936 23.664L17.432 21.104L17.248 21.208L16.36 30.768L15.944 31.256L14.984 31.624L14.184 31.016L13.76 30.032L14.184 28.088L14.696 25.552L15.112 23.536L15.488 21.032L15.712 20.2L15.696 20.144L15.512 20.168L13.624 22.76L10.752 26.64L8.48 29.072L7.936 29.288L6.992 28.8L7.08 27.928L7.608 27.152L10.752 23.152L12.648 20.672L13.872 19.24L13.864 19.032H13.792L5.44 24.456L3.952 24.648L3.312 24.048L3.392 23.064L3.696 22.744L6.208 21.016L6.2 21.024Z",fill:"#D97757"})),qt=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M0 4C0 1.79086 1.79086 0 4 0H28C30.2091 0 32 1.79086 32 4V28C32 30.2091 30.2091 32 28 32H4C1.79086 32 0 30.2091 0 28V4Z",fill:"#F0F0F0"}),React.createElement("path",{d:"M14.5 8V12H17.5V8H19V12H20.5C20.7652 12 21.0196 12.1054 21.2071 12.2929C21.3946 12.4804 21.5 12.7348 21.5 13V17L18.5 21V23C18.5 23.2652 18.3946 23.5196 18.2071 23.7071C18.0196 23.8946 17.7652 24 17.5 24H14.5C14.2348 24 13.9804 23.8946 13.7929 23.7071C13.6054 23.5196 13.5 23.2652 13.5 23V21L10.5 17V13C10.5 12.7348 10.6054 12.4804 10.7929 12.2929C10.9804 12.1054 11.2348 12 11.5 12H13V8H14.5ZM15 20.5V22.5H17V20.5L20 16.5V13.5H12V16.5L15 20.5Z",fill:"#949494"})),Ut=()=>React.createElement("svg",{width:"40",height:"40",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("rect",{width:"44",height:"44",fill:"#357B49",rx:"6"}),React.createElement("path",{fill:"#fff",fillRule:"evenodd",d:"m29.746 28.31-6.392-16.797c-.152-.397-.305-.672-.789-.675-.673 0-1.408.611-1.746 1.316l-7.378 16.154c-.072.16-.143.311-.214.454-.5.995-1.045 1.546-2.357 1.626a.399.399 0 0 0-.16.033l-.01.004a.399.399 0 0 0-.23.392v.01c0 .054.01.106.03.155l.004.01a.416.416 0 0 0 .394.252h6.212a.417.417 0 0 0 .307-.12.416.416 0 0 0 .124-.305.398.398 0 0 0-.105-.302.399.399 0 0 0-.294-.127c-.757 0-2.197-.062-2.197-1.164.02-.318.103-.63.245-.916l1.399-3.152c.52-1.163 1.654-1.163 2.572-1.163h5.843c.023 0 .044 0 .062.003.13.014.16.081.214.242l1.534 4.07a2.857 2.857 0 0 1 .216 1.04c0 .054-.003.104-.01.153-.09.726-.831.887-1.49.887a.4.4 0 0 0-.294.127l-.007.008-.007.008a.401.401 0 0 0-.092.286v.01c0 .054.01.106.03.155l.005.01a.42.42 0 0 0 .395.252h7.011a.413.413 0 0 0 .279-.13.412.412 0 0 0 .11-.297.387.387 0 0 0-.09-.294.388.388 0 0 0-.277-.135c-1.448-.122-2.295-.643-2.847-2.08Zm-11.985-5.844 2.847-6.304c.361-.728.659-1.486.889-2.265 0-.06.03-.092.06-.092s.061.032.061.091c.02.122.045.247.073.374.197.888.584 1.878.914 2.723l.176.453 1.684 4.529a.927.927 0 0 1 .092.4.473.473 0 0 1-.009.094c-.041.202-.228.272-.602.272h-6.063c-.122 0-.184-.03-.184-.092a.36.36 0 0 1 .062-.183Zm17.107-.721c0 .786-.446 1.231-1.25 1.231-.806 0-1.125-.409-1.125-1.034 0-.786.465-1.231 1.25-1.231.785 0 1.125.427 1.125 1.034ZM9.629 23.002c.803 0 1.25-.447 1.25-1.231 0-.607-.343-1.036-1.128-1.036-.785 0-1.25.447-1.25 1.231 0 .625.325 1.036 1.128 1.036Z",clipRule:"evenodd"})),Qt=()=>React.createElement("svg",{width:"40",height:"40",style:{flex:"none",lineHeight:1},viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"#3186FF"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-0)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-1)"}),React.createElement("path",{d:"M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z",fill:"url(#lobe-icons-gemini-fill-2)"}),React.createElement("defs",null,React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-0",x1:"7",x2:"11",y1:"15.5",y2:"12"},React.createElement("stop",{stopColor:"#08B962"}),React.createElement("stop",{offset:"1",stopColor:"#08B962",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-1",x1:"8",x2:"11.5",y1:"5.5",y2:"11"},React.createElement("stop",{stopColor:"#F94543"}),React.createElement("stop",{offset:"1",stopColor:"#F94543",stopOpacity:"0"})),React.createElement("linearGradient",{gradientUnits:"userSpaceOnUse",id:"lobe-icons-gemini-fill-2",x1:"3.5",x2:"17.5",y1:"13.5",y2:"12"},React.createElement("stop",{stopColor:"#FABC12"}),React.createElement("stop",{offset:".46",stopColor:"#FABC12",stopOpacity:"0"}))));var{store:Za}=U(Ga);function ea(){try{return JSON.parse(document.getElementById("wp-script-module-data-options-connectors-wp-admin")?.textContent??"{}")}catch{return{}}}function Ge(){return ea().connectors??{}}function ta(){return!!ea().isFileModDisabled}var Xa={google:Qt,openai:Xt,anthropic:Kt,akismet:Ut};function Ka(e,t){if(t)return React.createElement("img",{src:t,alt:"",width:40,height:40});let a=Xa[e];return React.createElement(a||qt,null)}var qa=()=>React.createElement("span",{style:{color:"#345b37",backgroundColor:"#eff8f0",padding:"4px 12px",borderRadius:"2px",fontSize:"13px",fontWeight:500,whiteSpace:"nowrap"}},(0,F.__)("Connected")),Ua=({slug:e})=>React.createElement(Q.ExternalLink,{href:(0,F.sprintf)((0,F.__)("https://wordpress.org/plugins/%s/"),e)},(0,F.__)("Learn more")),Qa=()=>React.createElement(De,null,(0,F.__)("Not available"));function Ja({name:e,description:t,logo:a,authentication:o,plugin:r}){let s=o?.method==="api_key"?o:void 0,l=s?.settingName??"",f=s?.credentialsUrl??void 0,c=r?.file?.replace(/\.php$/,""),d=c?.includes("/")?c.split("/")[0]:c,p;try{f&&(p=new URL(f).hostname)}catch{}let{pluginStatus:n,canInstallPlugins:h,canActivatePlugins:m,isExpanded:j,setIsExpanded:b,isBusy:Y,isConnected:S,currentApiKey:J,keySource:C,handleButtonClick:_,getButtonLabel:g,saveApiKey:H,removeApiKey:O}=Zt({file:r?.file,settingName:l,connectorName:e,isInstalled:r?.isInstalled,isActivated:r?.isActivated,keySource:s?.keySource,initialIsConnected:s?.isConnected}),L=C==="env"||C==="constant",D=n==="not-installed"&&h===!1||n==="inactive"&&m===!1,T=!D,E=(0,Jt.useRef)(null);return React.createElement(Va,{className:d?`connector-item--${d}`:void 0,logo:a,name:e,description:t,actionArea:React.createElement(Q.__experimentalHStack,{spacing:3,expanded:!1},S&&React.createElement(qa,null),D&&(d?React.createElement(Ua,{slug:d}):React.createElement(Qa,null)),T&&React.createElement(Q.Button,{ref:E,variant:j||S?"tertiary":"secondary",size:"compact",onClick:_,disabled:n==="checking"||Y,isBusy:Y,accessibleWhenDisabled:!0},g()))},j&&n==="active"&&React.createElement(Fa,{key:S?"connected":"setup",initialValue:L?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":J,helpUrl:f,helpLabel:p,readOnly:S||L,keySource:C,onRemove:L?void 0:async()=>{await O(),E.current?.focus()},onSave:async $=>{await H($),b(!1),E.current?.focus()}}))}function aa(){let e=Ge(),t=a=>a.replace(/[^a-z0-9-_]/gi,"-");for(let[a,o]of Object.entries(e)){if(a==="akismet"&&!o.plugin?.isInstalled)continue;let{authentication:r}=o,s=t(a),l={name:o.name,description:o.description,type:o.type,logo:Ka(a,o.logoUrl),authentication:r,plugin:o.plugin},f=U((0,$t.select)(Za)).getConnector(s);r.method==="api_key"&&!f?.render&&(l.render=Ja),Wa(s,l)}}function oa(){return React.createElement("div",{className:"ai-plugin-callout__decoration","aria-hidden":"true"},React.createElement("svg",{viewBox:"0 0 248 248",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",focusable:"false",style:{width:"100%",height:"100%"}},React.createElement("image",{href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAQAElEQVR4AezdC3ojWW5tYflOzPbIbI/M9sh8+WdrdZ+KpiiKL5FB5KedwN7AeSFIpHRYmfX/PubXVGAqMBV4kQpMw3qRBzXbnApMBT4+pmHNq2AqMBV4mQpMw3qZR3X9RmeGqcCrV2Aa1qs/wdn/VOCNKjAN640e9hx1KvDqFZiG9epPcPY/FThWgZ1q07B2+mDnWFOBPVZgGtYen+qcaSqw0wpMw9rpg51jTQX2WIFpWMee6mhTganAU1ZgGtZTPpbZ1FRgKnCsAtOwjlVltKnAVOApKzAN6ykfy2zqcRWYlV6pAtOwXulpzV6nAm9egWlYb/4CmONPBV6pAtOwXulpve9e//Nw9P/7xL8d7Hy9aQWubFhvWrU59qMr8D+HBcPBna93rcA0rHd98q91bs3q3w9bBv7Bna93rMA0rHd86nPmqcCLVmAa1os+uF/Y9m8u6Q7rvw8bgLnDOhTiXb+mYb3rk3+tc//rYbsaVTjQP18amct4+h9hftt3BaZh7fv57v107rNg7+ec831WYBrWZyHGPHUF/vewu//6xNqg+HMRfyjMrb+edb5pWM/6ZGZfawX86Bc0qTU2/htVYBrWGz3sOepU4NUrMA3r1Z/g7H8q8EYVmIZ1h4c9U04FpgL3qcA0rPvUdWadCkwF7lCBaVh3KOpMORWYCtynAtOw7lPXmfVdKjDnfGgFpmE9tNyz2FRgKnBNBaZhXVO9GTsVmAo8tALTsB5a7llsKjAVuKYCv9uwrtn5jJ0KTAXergLTsN7ukc+BpwKvW4FpWK/77GbnU4G3q8A0rLd75L914Fl3KnB9BaZhXV/DmWEqMBV4UAWmYT2o0LPMVGAqcH0FpmFdX8OZYSowFfhrBe7GpmHdrbQz8VRgKnDrCkzDunVFZ76pwFTgbhWYhnW30s7EU4GpwK0rMA3r1hW9fr6ZYSowFfiiAtOwvijMyFOBqcDzVWAa1vM9k9nRVGAq8EUFpmF9UZiRpwKPqMCs8bMKTMP6Wb0meyowFfjFCkzD+sXiz9JTganAzyowDetn9ZrsqcBU4Bcr8NIN6xfrNktPBaYCv1CBaVi/UPRZciowFbisAtOwLqvbjJoKTAV+oQLTsH6h6LPkBRWYIVOBQwWmYR2KMF9TganAa1RgGtZrPKfZ5VRgKnCowDSsQxHmayowFXimCny9l2lYX9dmIlOBqcCTVWAa1pM9kNnOVGAq8HUFpmF9XZuJTAWmAk9WgWlYT/ZArt/OzDAV2G8FpmHt99nOyaYCu6vANKzdPdK7HOjfDrP+9yf4B/fP138efoeDma+pwP0rMA3r/jXewwqaVFjP8x8HAmIHd74eXIG3W24a1ts98pse+H8Os8HBzNdU4P4VmIZ1/xrvYQU/9v3L4SCwNqh/P2iwagdpvqYC96nANKz71HVmnQpMBe5QgXduWHco526n9B3W9tJ91fi7Pfwc7HkqMA3reZ7FM+/kXw+bc7EeDvTPV1z8jzC/TQXuWYFpWPes7sw9FZgK3LQC07BuWs7dTva/h5P91ye6YGfT2EP4eb9mZ/uowDSsfTzHe5/CHVXQqKzHbjX6YCpwtwpMw7pbaX808f8dsoN7oQOdr6nAVGBbgWlY24o8hvvEzXcnp1YTl3cq51ExTdRe7GldE6ev2vhTgbtV4KyGdbfV33diDeC7T9bE5T1LlezFntb94PRVG38qcLcKTMO6W2lPTuy/GPdfiJfED+6G6Lg8/m/Dnuxne7lOe5Y9/naNZv0HVGAa1gOKfMYSGkI4I/1XUp59f79SlFn0sRWYhvXYereaex/3PyunQT9iiePlPMbOKlOBJ67ANKzfeTiakvufVsdDmjgtPnYq8PYVmIb1Oy8B9z7uf06tLi7vVM7EpgJvVYFpWM/xuF1mB3dFz7Gr2cXOK/B6x5uG9RzPzH1VeI4dzS6mAk9YgWlYT/hQZktTganA8QpMwzpel1GnAlOBJ6zANKyLH8oMnApMBR5dgWlYj674rDcVmApcXIFpWBeXbgZOBaYCj67ANKxHV3zWe8UKzJ6fpALTsJ7kQcw2pgJTge8rMA3r+xpNxlRgKvAkFZiG9SQPYrYxFZgKfF+BRzSs73cxGVOBqcBU4IwKTMM6o0iTMhWYCjxHBaZhPcdzmF1MBaYCZ1RgGtYZRXrSFP9Wln/gD/htEwd/mTqNT4Nyj2ny+7/3sDgYh4NxNBYHcdrH4Tc8HOifL/E044hsmjgN0tj2Ko6DcfLE8EADcfmAg1w64IMXrcA0rNd5cN6Y3njrjnE4pvkHANP58iCNxQO+B3x11v84HA6c9+DO1ytWYBrW6zw1/6Df/FtZlz8vtYPLZ5iRv16BaVi//gjO3sD2zYb7F0mB30Q4aHBpfBqU68cjHPjl4iHNPy5oDljH4yBeLh7SxNN+Mr7cY+PFmpNtLf52/2suv9yx11TgF8ZOw/qFor/gkt7kKzrCJZox9xzf3GN3WIFpWK/xUN27hHbsuyIXyyBGZ/FAgzgrh7aO59PE5AQaiKfJ2WriNCiPPZabxsqBa8ebw9rAD9agmX+r0QcvVoFpWK/xwLzxvOFcGq87pof0OHtKE5MDLqpxwAMO4mksDfggjgMecBBPY2lsEKdBGouDOB5oEGdx4Ac8pLFpY1+sAtOwfuuBXb+uN/H1s9x2hm0zWH/8u+1KM9tbVmAa1ms8dj/SuEh2odyOXUSHtTGksadyjZETjuWm/e/BKc+4A/1g09iPw69j2kH+OHe8XHMF89GOjaeXx+LAD41nt5rcwYtVYBrWiz2wZbvehBoZ8IVYPNAgzuKw5vK32prLD8dy08xRHosDP5TLbrVtLg7lscbRWDzQIM7isObyaYMXrMA0rBd8aN9s2Y9lodQ4m/ZK1r7Duu80Np0f0n7ZzvK3qsA0rFtV8vHzeFP6r9+Bbwesy/lAgzgrh8YaC+t3I3SclRdoEGflbDU6TYwfaBBn5Ww1fN2nPB820ECcZiweaLDmyqGBcSunDV6sAtOwXuyBPWC73tTe9NulaNuLfhqsuY1nV13eOeONMRb4t4Q93HK+mevBFZiG9eCC33i5ay+S3efAui3fibjc3+o06625OH3VjKOZZ9V9aCB/1XC5q2YczTyrfq7vgt5YWMc076qN/2IVeIGG9WIVfdx2vSG9CaFVaRpDSI+zcuisxgDrHMXYFfLhO018m0eDrY6D2AoapNmjvUN7FcdDueLyQU762B1UYBrWDh7iHGEq8C4VmIa1vyfdJbTvNDqdi/Ww3g3JgfKe1TpT+2+/zpHGtne6HEgbu5MKTMPayYNcjuENC9sL7iXl765LaPi78MvOLZZ3dmc65/y3WG/meGAFpmE9sNhPuJQ7HhffT7i1i7fkTODy/eJJZuBzVmAa1nM+l2t21SW0S+fm4Qdv5lV/hR+dNNXt/p0jje1M6a9wrvY89swKTMM6s1AvnuZNHF7xKO092xnibNrYF6nAJduchnVJ1Z57jO8sQjt1aR3c8aS/inWe7f6dI43tLPSQNnYnFZiGtZMHuRzDhTOsl869gdkl9cOna7Bqz+g7i72H9hhnV00DU4O0sTupwDSsnTzIOcZU4B0qMA3rRZ/yiW27gAYX1aXxw3rf0wV9ec9qfeJ3bP9pbHv346NzqUHa2J1UYBrWTh7kcgwNKSR7E4e0V7LtnXU2e2fxQBvsvALTsHb+gD+P544nfEovZdo7u24cD6s+/k4rMA1rfw/WJTq4eO50/OANvtXjz2pdoLd/31HZp3OksTQQx1n89TEn+HsFpmH9vRRv6XjTw94O70w+Wdzbud7+PNOw9vcScLcDLqq/O52Lafgu75Xizu5M60X8K+1/9nqiAtOwThTnRUPerLD+SORTs+AN3dH4EH9W6zztv3PZdxrb3ukhbexOKrD/hrWTBzXHmApMBT4+pmHt71Xgwhn6TsQJXcIH9zs04AP/meE87b9z2Xca2/7pciBt7E4qMA1rJw9yOYY3LJxz6awRwDL85V1n96niOed/+cO+2wGmYb3bE//reXd21/PncJ3pnA8d/gyY316nAtOwXudZnbvTfzkkgovqg/vnix+8of+Ih9/SDu5Tf/nEr722fzaN7QDp8yNhFdmRnYa1o4d54ijexOFE2tOG2nu2jcbZtLE7rsA0rP09XN9ZhE7nniq440l/Fes82/07Rxr7KmeZfV5RgaVhXTHLDH2mCrhwhvXS2Zs7rHutEazaM/rO0v7Z9sgPac7kU8NpYlVkR3Ya1o4e5hzlLxWYS/e/lGMfZBrWPp7jeoouqNl0fljve3w3sl5Yl/9sVvM5tv80tj07kw8d2LSxO6nANKydPMjlGN6omhIk0wLt1dDe2c7F4uHVzjT7vaAC07AuKNoLDumeh33B7X/Yd/hYfqWxizzuXiswDWt/T9aFM6yXzvywvrnTnr0KPkRor76jsl/nSGNpII6z+GBHFZiGtaOHecFRvOnhgqFPPcSZfLL41Jt81Ob2tM40rD09zb+dxd0OuKj+m/L17y7c4euM14v4zsqZ1ov41zvF7PhoBaZhHS3LS4verOCN20F8ahY0s3Q+xJ/VOk/771z2ncauexeDVRt/BxWYhrWDhzhHmAq8SwWmYX3zpF8w7MIZ+k7EEVzCB/c7NOAD/5nhPO2/c9l3Gtv+6XIgbexOKjANaycPcjmGNyycc+msEcAy/OVdZ/ep4jnnf/nDvtsBpmG92xP/63nd88Bf1ddmzgPnfOjw2id9w91Pw9rfQ3cBDS6qOx0/eDNv9fizWp/4bffvHGlse0//+Y+EzTD2aSswDetpH81NN+ZNHG468YMma+/Zlo2zaWN3XIFpWPt7uL6zCJ0uzrrjSX+Utaa1gW9dFg+0r7Dm8strLJs2dscVmIa1v4frwhnWS2c8rCf26Rqs2j381mZrOCwO617pPghg24uckM6mseVqXs5kjrSxO6nA7RrWTgoyx3iaCmhIT7OZ2chzVGAa1nM8h1vuwgV1aN44u973uJyH8u5lfWJnbWh9Fg+tTXeJ7jultGPjxRrL4mCcM5kDH+yoAtOwdvQwP4/iDQve+J/SBx4+fuFXa7Pti8WBf2pbckK5bBp7avzEdlKBaVg7eZDfHMOPV+Gb1HPCP85pbbbB/BXpx+xXeV/px+YYbQcVmIa1g4e4OYILZ1gvnfnBm7wh8mDVil1jfcezzulSvPXFzC2eJk4DcTqLgzgN0tfxdHkgjrP4YEcVmIa1o4f5w6N4w/9wyFnp5tVgzkr+Iskc6yeHX6R9KV87/suJJ/C7FZiG9bv1v8fq7nbARfWp+eW4rIZTeT+NmdeFN/vTsfKNsyfAf4prx/90vb3nP9X5pmE91eO4yWY0C1h/JPKpWfCGbiE5sGrFrrHb+eyn9a1nbjZNnAbGirE4iJcrRhNPY2lAl8Pigx1VYBrWjh7mHGUqsPcKTMPa3xN24Qy+y+h0LtaD+x06Kwfwe8Ia9gTWtRaLgzjtK8hpoPtu7gAAEABJREFU/+Uan8Y2li4H0sbupALTsO77IH9jdm9YOOfS2uU4yL/3Xq0B6zo4nLPXddwp33zOdMs5T603sQdWYBrWA4s9Sz2kAu6u4LsPHR6ymVnkthWYhnXbej7DbC6gwUV1++EHb2Y6Kw/4tHvBj2fWgdZi29N3nwiKl2ucfbJpLA3SrYkPdlSBaVg7epgnjuJNHE6kPTzUnthTi4uvKPeYVuzhdha8fwWmYd2/xo9ewR0OrN9h8INYe+JD/FmtPR7bfxr7rHuffd2wAtOwbljMJ5nKJ2qwXjq7hA5tUxOQB/z0Z7TtnW2vLB7at+blU0PnShu7kwpMw9rJg5xjTAXeoQJP07DeodgPOqML6tCSx+56aC6rgV/uM1qf+NkjrPvDQ7rvsJxJDdLG7qQC07B28iCXY3jDgjdysjdwWHU+lPes1nnaP98+7TuNpQUxiI/dSQWmYe3kQX5zDPc94ZvUpwy3d3bdIB5WffydVmAa1v4erAtnWC+d+cEb3KlZecCnPQY/X8XFevvvOyx7TmObVRxn08bupALTsHbyIOcYf6mAZrZ+SvqX4JDXrcA0rNd9dl/t3N0NuKj+Kocux8U04HvBXs+1l+dz1TmmYV1Vvqcc7AIa1h+J/JWY4A3dxuXAqhV7Jus87d9+7c2e01ga0OWw+OBXK3Dbxadh3baeM9tUYCpwxwpMw7pjcR8wtbsaaCm+S/SQHmflpL+K9R2Ti3Ro/6zzhM4iJ8hJH7uDCkzDeu2H2Bvz0lNoBHDp+EeO03zCqXXLYU/lTewFKzAN66kf2rebc08D3yZ+kaBZXTP+i2lHngrcpwLTsO5T10fN6jIaWk/zwUN6nJWTzm457dmgsdo7tF8WD+05zspJH7uDCkzD2sFD3BzBmzQUirNpr2btPbT3OHtKKzb2xSswDet1H6A7Gt95AL+T4CFNPKTtwXZOtvPwgzNv9VUr9gx29nBGBaZhnVGkJ03xxvNXVoBvmyweaEC/9oLePM8EZ+qc63/Vnsa2Xw0MB+PSx75YBaZhvdgDm+1OBd65AtOwXvfpu7cJ6ynS2HTfYbiEhrQ9WH+tKHQe515Bx8vj0wYvWIG9NKwXLP3VW/bG04BAQzLhqtFpQQzir26dxbmB33mcO6SJywN++tgXq8A0rBd7YMt23cWERf5IYz/u+Mv8K1rqmFbsEfbY+se0R+xl1rhxBaZh3bigd5rOhfn2r6B4E9LBdw6WXjU67RZo3tYxZ5p1XGbTAA84GNf+jaMBH/iXwFhzs41vbTadxUF+uXScTRv7xBWYhvXED+fJtuZNvX4ad4vtmVMT+dFcS7Lxa7NcQme5144/a5FJul0FpmHdrpb3nMm/beXuBe65zqm5u7Q+lXMqZu+w5vjuZv2nYdbYOb753Fex5+Rvc6x/zfjtfMPvXIFpWHcu8I2m743lzdWUNG924NO9cfFAuwXMaw22+fDWWfeVxq65cmCdo/il1lywjrduKLbulb/ml7Nq4z9pBaZhPemDmW1NBaYCHx8fmyJMw9oU5AmoexXfBbBtpwtrNl2O+x9IK/8aay5Y57CGtcG6YiwO4jTAAw7iacbRrEGHNPq1MJc5oblop9Zfcxsz9gkrMA3r+R6KS2Twhv5ud3JCubg3aPyn1nhvYPanY3+abw245WW+ucwJ3+1HTvgud+JPUIFpWE/wEDZb6IJ9I59N3cnA2QM2ica6YGc3oaFTgd+twDSs363/sdV9d+Rymi2OhxqJ+FYr/285sZ9ZY829jtLAtmvJSRMvP41NE8fB/HQWB3HaLWAuc0LzrXu1Lp2VE2iDJ6/ANKwnf0Cf2/PmCp/SH5PG/hHu9Jv5V7TMJZoxp8YXu9SaP6xzpLHp/JA29okrMA3r+R6O7wZCu4uz7lzS+RC/hbVGaD5rpPHpbBpLA37AYc3lbzX5tHvBmtYAfuvgIU08jZ8+9gkqMA3rdx+CNwS0C74L95AeZ9PkuhwHfvq11hqhueJsa7E4uOg+lntMM47OGgvrePqtz2RO6wB/uz6dBvyAvwjeY5vTsH73OXvzwLFd+FHlmH5P7au93HPNY3PbBxyLjfbGFZiG9bsPvx891l1oVODTwnQ8rFoXxmLp11qX1qG57MUakMYP4sf0NPFy0+Ks+Kr7L9XVJu1aa43OxG8+fkizl2O5xcf+YgWmYf1i8Y8s7c1TE1rfsGmsnIbyIX6tNZd1Q/Ph1gY+XS4OaXQ84CCexqd9NV7s1rCWdYFvfrY9sTSQE/DBE1VgGtafh/FUv/lRKLSxOJt2L2uN0Bpx9pj2lX4q15gV5T7SHlv/mPbIPc1aJyowDetEce4c8qf4uX9dxCV08IZqa3yIX2vN1Tps87mExsG+6WuuOA3kBBzE04yjsWniNDA/ncVvAWtVa745WesEGsRZOTTg33JP5hz8sALTsH5YsCdL9yaCJ9vWVdvxiaEzsVdNdOPBmirceNqZ7icVmIb1k2rdNtcdSrh0Zn/iw6Xjn3GcS291YW+5P3PCpXO6iF/vui6dZ8ZdUYFpWFcU78qh3jzeAFDTofmELLREnJWTfmtrbmuE5rfHtPbKpomXm8amieNgHJ3FQZwGdJzFbwHnMifwzclaO9AgzsqhAR/4g1+qwDSsXyr8LDsVmAr8vALTsH5es0tGuJPxHQM0nu9iF8TpLB5oEGfl0G453lzmNLc1Ag3E0+RsNXEalMfiII7DT8Yfy01jzResA3FWDu3Y+mJygjyIs3Jo63g+bfALFfhpw/qFLe5iSZe1sF4k870hQgeNs6c0MTkBhziLAz/gIc1etppYmjge0uPiW00sTRwP6XHxrSaWJo6H9Dh7ShOTE3CIszjwAx7S7CVt7IMrMA3rwQWf5aYCU4HLKzAN6/La/WSky16XuGzj+tSJ1mUui4dy46wcuh9NcEhj8SAP4qwc2jreXmhicgINxNPk0I6Np5fH4nDp+NY6Nl7MGsE6EGfl0Na9prFygjyIs3Jo63h7oQ1+oQLTsH6h6J9LejOs+JQ/ztU+Dr/OzT2Wdxj+cUz/u/bxj1+rxi/CD+dq8s/NPZZ3yXjzGBdwiLM48AMe0ti0sQ+uwDSsxxTcn9DBXYhV2a1GT2Nx4AfjaOxWo6exOPCDcTQ2jaUBP+Cw5vK3mnwa8AMOxqTxaZDG4sAP5bJbbZuLQ3mscTQWBz4N8IBDnC2XxYM8iLP44M4VmIZ15wJ/Tu/CPXxKH3HWG4LO4oEGcRaHNZe/1dZcfpAHxqR1kbxqYvKAH+TQ2LTG09NYOV9p3uRy4KvxxoKc0JxsGisP+AGHNZe/1eTTgB9wMCbtu73KH9ypAtOw7lTYN53WG/tNj/7ix36R7U/DesyDcu+xwqr+6kkaHtLYn2ryjQs4xFkc+MFeaJDG4iCOAw78IL7VitHFV06Ls+I0wAMO4luNnsbiwA84xFk84OFczV7KdQEf0sbesQLTsO5Y3GVqnziFZD8SpfHp3jxpLA34QQ6NTbv3ePOfWkvcnqA8FgdxHPi0Y/unywlyaMak8WliaSwN+EEOjU271XjzmivggztXYBrWnQv8Ob0flcKn9BHPfnz+irOf0gc/fCy/0thkfjiliZXH4sAPOMSzNIizOPADDvEsDeIsDvyAQzxLgziLAz/gIY39qSbfuIBDnMUHd67ANKxbFPgfc3jh9u8u+ZO3iL/mEeTQXeJuNbE0Vh7wgxya+beaWBorD/hBDm0dby80sfJYGojjIId2bDxdTsDh0vGtdWy8WOuw1gF+kENb95rGlsfKA36QQ1vH2wtNrDyWFsTyx96wAtOwbljMmWoq8FkBDUyT+6RjblWBaVi3quQ/5nFfEv6hjvdOFfC3GrwG3unMDznrNKzbltmLtMtdfrN7AYd0eWn9aSyWxp4ab4wc4Mu9dLy9nBovbh1oLRYHceMBDziIpxlHY9PEaZDGOg9NHAfjaGJ4oEGclUMzBgc+TQwPNIizcmjG4P/y8fFhLzSxNJa2Qnzl49+gAtOwblDEmWIqMBV4TAWmYV1XZ5er0Cz+JHZ/Afx0PJQvvtXE0thHjbcXa321vrj9gBy5q8angZyAg3jaT8Yfy01jm5O1DvCDHNqx9cXKY+UBP8ihreP5NLHyWBqI4yCHNrhRBaZhXV5IL0Yvyj41aiY6rH+FAw/liaex6fxwShMrj8WBH3CIs3jAwV62Gj1NHA/pcfGtJpYmjof0uPhWE0sTx0N6nD2lickJOMRZHPgBD2n2stXE0sRxSBt7owo8uGHdaNfPM417ivW/fH6enc1OpgI7rMA0rMsfqmblAtaPAM1C669qsOn8IIeu0W01epq5cUhjG8/iwJcHOPxkvHxjgR9wOLZXa5bHygN+wOHS8db4ajy9dVgc+KHx7Fbb5uJQHmscjcUDDeIsDny1B+NogxtVYBrWjQr5OY0XqAYG/E/5Aw8fn7/ibLksDvzP1A88fHz+Ek/jk9mtRk9jcTiWu2prLj/I+Wo8vTwWB364x3hzWwf4AQdrpvG3mhgN+AEHY9L4W02MBuIBH9ywAtOwLi+mOwovVOCbicUDDeKsHBqLA58GeMAhzpbL4sCXB3jAIc6Wy+JBHsRZHNZc/lZbc/kA8sAYHPhbjU4DfjiWm7bNxaGxbLksDnx5gAcc4my5LB7kQZzFYc3lb7U1V2zwgwpMw/pBsTapLtvD+sJMc/nakDT2mHZs/Fe5jTdGDvDpLB5oEGdxWHPb66qtufwg56vx9PJYHPjhHuPNbR3gBxysmcbfamI04AccjEm7Za3MPfhBBaZh/aBYkzoVmAr8bgWmYV1efxfJ27uKOCve7HhIE99qYmksDvyAQ5zFAx7O1ezlVK74qTnFHz3eeu2JxYEfcIizeMDDudotz9qaL28fdYBpWJdX2l2ET4KAbyYvfhzS6HiQQxNP49PE0lga8IMcGpt27/HmP7WWuD1BeSwO4jjwacf2T5cT5NCMSePTxNJYGvCDHBqbdu/x5j+1lrg9DS6owDSsC4r2OcS9xopP+eMSzZiPz1/88Cl9xNmP5RcekuPsKU1MTsAhzuLAX0GDSzRjjAV+wCHO4sBfQYNztZ/kHpvz0vHmMhb4AR9cUIFpWOcVzZ+K/qt2thEuYWnghUgXx0GcBngoV3yriaWxxgI/yKGta6Wx5bHygB/k0Nbx9kITK4+lgTgOcmjHxtPlBBwuHd9ax8aLtQ5rHeAHObR1r2lseaw84Ac5tHW8vdDEymNpII6DHNqx8fTBDyswDeu8gvlkyIuPPW/ED7Im9a0r4B98fOsC/OTw07DOq5aLVvcg7HkjJmsqcF4Fjv3TNOeNfMOsaVjnPXTf0rtIZRuBe7FBOouDeLl40Pjo4mnG0cTSWBrwgxyaMWl8mlgaSwN+kEMzJs1eaGJpLA3EcTCOxuIgTgM84CCeZhyNTROnQRprPzRxHIyjieGBBnFWDs0YHPg0MTzQIM7KoRmDg73QxPBAA/E042hsmjhtcEEFpmFdUFjYef8AAA5ZSURBVLQZMhW4uAIz8KoKTMP65/K5q4I14gI1FPOn5ilNvDnKY0+NF5MTHjW+vX61vnh7kmNfq8anQXksDuI4/GT8sdw01nzBOhBn5dCOrS8mJ8iDOCuHto7n08TkBBqIp8nZauI0KI/FB99UYBrWPxfIiwd6scngBxxcwKexNOCDOA54wEE8jaUBP+AQZ/GAh59q8htrLziksTiI44EGcXEc0lgcxPFAg7g4DmksDuJ4oEGcxYEf8JDG/lSTbxzYCw54wEE8jaUBH8RxwAM++KYC07C+KdCEpwJTgeepwGs1rMfUrctRl6qt6N84Cuk+MdxqYmnsT8fLNw7Wy1k8WEMeu9XoaSwO/GAcjU1jacAPOFx6VmPh0vH2+NV4evtkceCD+jWepQFfHuABhzhbLosHeRBncfjJWe0xGDv4pgLTsL4p0GfYvUP4lD7irBf0x+EXiwP/IP35wsMf4fBbnC2XxYF/SPvzhYc/wuE38TT+Qfpg09iPz1/88Cl9rLn8j8Mvtjz2IP354gc5RHar0dNYHPjBOBq71ehpLA78YByNTWNpwAdxHPg04G81Og34AQdj0vhbTYwG/HAsN00uP+CDbyowDeuvBXKf0IuNLcoPcujsVqOnsTjwg3E0dqvR01gc+ME4GrvV6GksDvxgHI1NY2nADzisufytJp8G/ICDMWl8GqSxOPBDuexW2+biUB5rHI3FgU8DPOAgnsbfamI04AccjEnjbzUxGvADDsYEfLBUYBrWUoyD64Xir1bAejmKh0Pan684axzRiw+HS8abx9hgToizOKy5/K225vKDPDAmrb2umpg84Ac5NDat8fQ0Fgd+MI72Ta0+5MsDfmg8m8bKA37AYc3lbzX5NOAHHIxJ66yrJiYP+EEOjU1rPD2NxUGuD30AHywVmIa1FONM17fwZ6ZO2gtWQMN4wW2/x5anYf31OWtGweVp0TQ2TRyHNH4QP6aniZebxqaxOPADDnEWD3g4V7OXU7nip+YUf/R467UnFgd+wCHO4gEP52r3Pqv9uMSH9jT2swLTsD4L8Wm8WPrUxo8sn/Kf/z15epp4Gp9+zng5co05NV5MHvBD49k0c8lbNTEa8IMcGpv23XjxU7ni5oTyWBzEceDTjq1PlxPk0IxJ49PE0lga8IMcGpt27/HmP7WWuD1BeSwO9ioH8HfA2WechvXPpfIjQSgaZ49pX+nHco9pl4w3j3EBhziLAz/gIY09V/tJ7rE5f2O8fVg34BBnceAHPKSx52o/yT025zq++Fvbd29Y/hSDXgR8l52wXoTioVzxtF5Y54wv99h4seZkW4sf5NDXtdLY8lh5wA9yaOt4e6GJlcfSQBwHObRj4+lyAg6Xjm+tY+PFWoe1DvCDHNq61zS2PFYeHFtrHS8u79rx5rBuwMH8adagDT4r8M4Ny4vBi2P91OazLGOmAlOBZ6zAOzcsz8PFJvBfFbPv21bAH2S3nXFmu1kF3rlhdbnJVlDf+vdXc9aL0DS2XHEcjKOzOIjTAA+tJ55mnDyxNJYG/CCHZkwanyaWxtKAH+TQjEmzF5pYGksDcRyMo7E4iNMADziIpxlHY9PEaZDG2g9NHAfjaGJ4oEGclUMzBgc+TQwPNIizcmjG4GAvNDE80EA8zTgamyZOgzQWB3EcjKMNPivwzg3rswRjpgJTgVepwDs3LH96bS83V43fcyyPTRPHoR8jVo1frpxwLDeNLY991Pj2+tX64vYDcuxr1fg0kBNwEE/7yfhjuWlsc7LWAX6QQzu2vlh5rDw4lrtqfHnXjjeHdQMO5k+zBg3o/3lwVu1A3+vrnRuWy3YPP/Tk4+JbTSxNHA/pcfGtJpYmjof0OHtKE5MTcIizOPADHtLsZauJpYnjIT0uvtXE0sTxkB4X32piaeJ4SI+zpzQxOQGHOIvDuhYe5ID4VqOnieMhPS6+1cTSxPGQ7gMioKe9nX3nhvV2D3sOfFYF3rohnFWhX0x654blr1j4hBBcoHoMLB5oEGdxuHS8Nb4aT7dGwCHONp7FgS8P8IBDnC2XxYM8iLM4XHpWY+HS8fb41Xi6PQYc4i6vG8+m8+VBGosDP5TLprHygB9wuPSsxsKx8XSX8OBHQ/wt8VYNa/OEPfjgBSnMbjV6GosDPxhHY7caPY3FgR+Mo7FpLA34AYc1l7/V5NOAH3AwJo2/1cRowA/HctO2uTg0li2XxYEvD/CAQ5wtl8WDPIiL48Df6qsmJg/4AYc1l7/V5NOAH47lpm1zcWgsu+aKvT3epWH5Nj/00HEvCuDTWTzQIM7KobE48LcanQb8cCw3bZuLQ2PZclkc+PIADzjE2XJZPMiDOIvDmsvfamsuP8gDY9L4W02MBvxwLDdtm4tDY9lyWRz48gAPOIin8beaGA34AQdj0vhbTYwG/ICDMWn8rSZGe0u8S8PqUxe2B+0CM6wvjDSXn8dyj2n3GG8fx9ZKs6Yc4NNZPNAgzuKw5nbWVVtz+UHOV+Pp5bE48MM9xpvbOsAPOFgzjb/VxGjgNYIDDsbg8Ey1sre3wrs0rLd6qHPYj4+PKcIuK/AuDauLUbYH6XLTHQGk8YP4MT1NvNy0OCt+TE8TlwdpLB5wiLM48AMe0thzNXs5lStuPjiWJ35MTxM3FtL4QfyYniZebhqbxuLADzjEWTzg4VzNXk7lip+aU/xW45vnbey7NCw/94ceLu6TJODTvdBwSKPjQQ5NPI1PE9tq9DRWDs0YHPg0MTzQIM7KobE43Hu8+a0D/K/Wp8sJOBiTxqcd2z+9PFYOzRgc+DQxPNAgzsqhsTjce7z5rQP8r9anywk4GJPGpx3bP/3t8C4N6+0e7Bx4KrDHChxvWPs7qYtU6E8sJ8T/7+BAOouD+CH85wsPLmCJ4mnG0dg0cRqksafGi8kJxkKclUNb1+LTxOQEGsRZOTRjcGivYniQB+JpxtHYNHEapLE4iONgHI3FQZwGeLAfmniacTSxNJYG/CCHZkwanyaWxtKAH+TQjEmzF5pYGksDcRyMo7E4iNMADziIpxlHY9PEaW+Jd2lYXlzQJzxv+bDn0FOBV6/AuzQsdwCwXni++rOb/U8F3q4C79KwtpeYHjTNX3UA33LTWBzEaYAHjY8mnmYcjU0Tp0Eae2q8mJxgLMRZObR1LT5NTE6gQZyVQzPmXz4+PmjtVQwP8kA8zTgamyZOgzQWB3EcjKOxOIjTAA/2QxNPM44mlsbSgB/k0IxJ49PE0lga8IMcmjFp9kITS2NpII6DcTQWB3Ea4AEH8TTjaGyaOO0t8S4N6y0f7hx6KrC3Crxzw/KnlgtMcL/l2a4anwZywrHcNLa8a8ebx9rAD9agmX+riaWx8oAf5NDW8XyaWHksDcRxkLPVxGkgJ+AgnvaT8cdy09jmZK0D/CCHdmx9sfJYecAPcmjreD5NrDyWBuI4yNlq4jSQE3AQT2s8nQ/8t8U7NywX8F4AsL4AcBBPx0OaeBpLZ4M4DdJYHMTxQIM4iwM/4CGN/akm3ziwFxzwgIN4GksDPojjgAccxNNYGvBBHAc84CCextKAH3CIs3jAw081+Y21FxzSWBzE8UCDuDgOaSwO4niggb8WpJHR8Uvw8mPeuWG9/MObA7xVBXxg5N7srQ69Pew7Nyx/TccFJvRCYOmhesVZOXQvIBzSWDzIgzgrh3ZsPF1OwCHONp7FgS8PcHAuHPBQLpvGygN+wOHYXh8x3hpfrU9vnywO/NB4dqttc3EojzWOxuKBBnEWh3vUyrx+VPRM7QV/S7xzw/LgQw8f98IAfjoejmnlsuXxj+Ue08plG88ey01bc/l01jjg0wAPOIin8beaGA344Vhu2jYXh8ay5bI48OUBHnCIs+WyeJAHcRaHNZe/1dZcfpAHxqTxt5oYDfjhWG7aNheHxrJrrtjb450b1rGH735gRTlePEGczp7SxOQBPxhHY7caPY3FgR+Mo7FbjZ7G4sAPxtHYNJYG/IDDmsvfavJpwA84GJPG32piNOCHY7lp21wcGsuWy+LAlwd4wCHOlsviQR7EWRzWXP5WW3P5QR4YE/DBUoFpWEsxDq4XiotNcMl5kP588cMf4fBbnDXuIH2wOLg8/fj8hYdP6SPOGkdn8UCDOIvDmsvfamsuP8gDY9La66qJyQN+kENj0xpPT2Nx4AfjaGzatePNY07gBxzWtfhbTT4N+AEHY9La66qJyQN+kENj0xpPT2NxkOv1B3za4LMC07A+CzFmKjAVeP4KTMP66zNyZxBcnhZNY9PEcUjjB/Fjepp4uWlsGosDP+AQZ/GAh3M1ezmVK35qTvFHj7dee2Jx4Acc4iwe8PAX7UDoB/Pnix/ufVbruMQH/p8NzG9/q8A0rL/Vod+9QHwSA+4W0vEghy6exqeJbTV6GiuHZgwOfJoYHmgQZ+XQWBzuPd781gH+V+vT5QQcjEnj047tn14eK4dmDA58mhgeaBBn5dBYHO493vzWAf5X69PlBBzs1TjAB0sFpmEtxRh3KjAVeO4KTMN67ufzTLv7yQXwT3Kf6YyzlyevwF0a1pOfebZ3ugKajX8sbpvlkyyxVceP/ejiE641b/ypwE0qMA3rJmXc1STuUPxTJttDuWsRW3X8WMM6Nn4dN/5U4KIKTMO6qGwzaCowFfiNCkzD+o2q72nNOctU4IEVmIb1wGLPUlOBqcB1FZiGdV39ZvRUYCrwwApMw3pgsWepqcBrV+D3dz8N6/efwexgKjAVOLMC07DOLNSkTQWmAr9fgWlYv/8MZgdTganAmRWYhnVmoa5PmxmmAlOBayswDevaCs74qcBU4GEVmIb1sFLPQlOBqcC1FZiGdW0FZ/xU4J8rMMqdKjAN606FnWmnAlOB21dgGtbtazozTgWmAneqwDSsOxV2pp0KTAVuX4H/DwAA//9sB2hHAAAABklEQVQDAB9QlitZA9bLAAAAAElFTkSuQmCC",width:"248",height:"248",style:{mixBlendMode:"multiply"}})))}var $a="ai",eo="ai-wp-admin",Ze="ai/ai",to="https://wordpress.org/plugins/ai/",Ke=Object.values(Ge()),ao=Ke.some(e=>e.type==="ai_provider"),ia=[];for(let e of Ke)e.type==="ai_provider"&&e.authentication.method==="api_key"&&ia.push(e.authentication.settingName);function na(){let[e,t]=(0,B.useState)(!1),[a,o]=(0,B.useState)(!1),r=(0,B.useRef)(null);(0,B.useEffect)(()=>{a&&r.current?.focus()},[a]);let s=(0,B.useRef)(Ke.some(g=>g.type==="ai_provider"&&g.authentication.method==="api_key"&&g.authentication.isConnected)).current,{pluginStatus:l,canInstallPlugins:f,canManagePlugins:c,hasConnectedProvider:d}=(0,ce.useSelect)(g=>{let H=g(Xe.store),O=!!H.canUser("create",{kind:"root",name:"plugin"}),L=H.getEntityRecord("root","site"),D=s||ia.some($=>!!L?.[$]),T=H.getEntityRecord("root","plugin",Ze);return H.hasFinishedResolution("getEntityRecord",["root","plugin",Ze])?T?{pluginStatus:T.status==="active"?"active":"inactive",canInstallPlugins:O,canManagePlugins:!0,hasConnectedProvider:D}:{pluginStatus:"not-installed",canInstallPlugins:O,canManagePlugins:O,hasConnectedProvider:D}:{pluginStatus:"checking",canInstallPlugins:O,canManagePlugins:void 0,hasConnectedProvider:D}},[]),{saveEntityRecord:p}=(0,ce.useDispatch)(Xe.store),{createSuccessNotice:n,createErrorNotice:h}=(0,ce.useDispatch)(ra.store),m=async()=>{t(!0);try{await p("root","plugin",{slug:$a,status:"active"},{throwOnError:!0}),o(!0),n((0,w.__)("AI plugin installed and activated successfully."),{id:"ai-plugin-install-success",type:"snackbar"})}catch{h((0,w.__)("Failed to install the AI plugin."),{id:"ai-plugin-install-error",type:"snackbar"})}finally{t(!1)}},j=async()=>{t(!0);try{await p("root","plugin",{plugin:Ze,status:"active"},{throwOnError:!0}),o(!0),n((0,w.__)("AI plugin activated successfully."),{id:"ai-plugin-activate-success",type:"snackbar"})}catch{h((0,w.__)("Failed to activate the AI plugin."),{id:"ai-plugin-activate-error",type:"snackbar"})}finally{t(!1)}};if(!ao||l==="checking"||l==="active"&&s&&!a||l==="inactive"&&c===!1)return null;let b=l==="active"&&!d,Y=l==="active"&&d&&(!s||a),S=l==="not-installed"||l==="inactive",J=l==="not-installed"&&f===!1,C=()=>Y?(0,w.__)("The AI plugin is ready to use. You can use it to generate featured images, alt text, titles, excerpts and more. Learn more"):b?(0,w.__)("The AI plugin is installed. Connect an AI provider below to generate featured images, alt text, titles, excerpts, and more. Learn more"):(0,w.__)("The AI plugin can use your AI connectors to generate featured images, alt text, titles, excerpts and more. Learn more"),_=()=>l==="not-installed"?{label:e?(0,w.__)("Installing\u2026"):(0,w.__)("Install the AI plugin"),disabled:e,onClick:e?void 0:m}:{label:e?(0,w.__)("Activating\u2026"):(0,w.__)("Activate the AI plugin"),disabled:e,onClick:e?void 0:j};return React.createElement("div",{className:"ai-plugin-callout"},React.createElement("div",{className:"ai-plugin-callout__content"},React.createElement("p",null,(0,B.createInterpolateElement)(C(),{strong:React.createElement("strong",null),a:React.createElement(ue.ExternalLink,{href:to})})),!J&&(S?React.createElement(ue.Button,{variant:"primary",size:"compact",isBusy:e,disabled:_().disabled,accessibleWhenDisabled:!0,onClick:_().onClick},_().label):React.createElement(ue.Button,{ref:r,variant:"secondary",size:"compact",href:(0,sa.addQueryArgs)("options-general.php",{page:eo})},(0,w.__)("Control features in the AI plugin")))),React.createElement(oa,null))}var{store:ro}=U(oo);aa();function so(){let e=ta(),{connectors:t,canInstallPlugins:a,isAiPluginInstalled:o}=(0,la.useSelect)(n=>{let h=n(da.store),m=h.getEntityRecord("root","plugin","ai/ai");return{connectors:U(n(ro)).getConnectors(),canInstallPlugins:h.canUser("create",{kind:"root",name:"plugin"}),isAiPluginInstalled:!!m}},[]),r=t.filter(n=>n.render),s=Array.from(new Set(t.filter(n=>n.type==="ai_provider").map(n=>n.plugin?.file?.split("/")[0]).filter(n=>!!n))).sort(),l=new Set(t.filter(n=>n.plugin?.isInstalled).map(n=>n.plugin?.file?.split("/")[0]).filter(n=>!!n));o&&l.add("ai");let f=["ai",...s].filter(n=>!l.has(n)),c=r.length===0,d=f.length>0&&(e||!a),p=e?(0,k.__)("Plugins cannot be installed here due to your site configuration. Install them manually using your normal deployment workflow."):(0,k.__)("You do not have permission to install plugins. Please ask a site administrator to install them for you.");return React.createElement(We,{title:(0,k.__)("Connectors"),subTitle:(0,k.__)("All of your API keys and credentials are stored here and shared across plugins. Configure once and use everywhere.")},React.createElement("div",{className:`connectors-page${c?" connectors-page--empty":""}`},d&&React.createElement(ie.Root,{intent:"info",className:"connectors-page__file-mods-notice"},React.createElement(ie.Description,null,p)),c?React.createElement(P.__experimentalVStack,{alignment:"center",spacing:3,style:{maxWidth:480}},React.createElement(P.__experimentalVStack,{alignment:"center",spacing:2},React.createElement(P.__experimentalHeading,{level:2,size:15,weight:600},(0,k.__)("No connectors yet")),React.createElement(P.__experimentalText,{size:12},(0,k.__)("Connectors appear here when you install plugins that use external services. Each plugin registers the API keys it needs, and you manage them all in one place."))),React.createElement(P.Button,{variant:"secondary",href:"plugin-install.php"},(0,k.__)("Learn more"))):React.createElement(P.__experimentalVStack,{spacing:3},React.createElement(na,null),React.createElement(P.__experimentalVStack,{spacing:3,role:"list"},t.map(n=>n.render?React.createElement(n.render,{key:n.slug,slug:n.slug,name:n.name,description:n.description,type:n.type,logo:n.logo,authentication:n.authentication,plugin:n.plugin}):null))),a&&!e&&React.createElement("p",null,(0,fa.createInterpolateElement)((0,k.__)("If the connector you need is not listed, search the plugin directory to see if a connector is available."),{a:React.createElement("a",{href:"plugin-install.php?s=connector&tab=search&type=tag"})}))))}function io(){return React.createElement(so,null)}var no=io;export{no as stage}; diff --git a/src/wp-includes/build/routes/font-list/content.js b/src/wp-includes/build/routes/font-list/content.js index d15dd7a805ee9..e6565158d7f48 100644 --- a/src/wp-includes/build/routes/font-list/content.js +++ b/src/wp-includes/build/routes/font-list/content.js @@ -810,7 +810,7 @@ var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components // packages/admin-ui/build-module/page/header.mjs var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); function Header({ - headingLevel = 2, + headingLevel = 1, breadcrumbs, badges, title, @@ -819,42 +819,34 @@ function Header({ showSidebarToggle = true }) { const HeadingTag = `h${headingLevel}`; - return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)( - Stack, - { - direction: "column", - className: "admin-ui-page__header", - render: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("header", {}), - children: [ - /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", justify: "space-between", gap: "sm", children: [ - /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", gap: "sm", align: "center", justify: "start", children: [ - showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( - SidebarToggleSlot, - { - bubblesVirtually: true, - className: "admin-ui-page__sidebar-toggle-slot" - } - ), - title && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(HeadingTag, { className: "admin-ui-page__header-title", children: title }), - breadcrumbs, - badges - ] }), - /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( - Stack, - { - direction: "row", - gap: "sm", - style: { width: "auto", flexShrink: 0 }, - className: "admin-ui-page__header-actions", - align: "center", - children: actions - } - ) - ] }), - subTitle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) - ] - } - ); + return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "column", className: "admin-ui-page__header", children: [ + /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", justify: "space-between", gap: "sm", children: [ + /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", gap: "sm", align: "center", justify: "start", children: [ + showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( + SidebarToggleSlot, + { + bubblesVirtually: true, + className: "admin-ui-page__sidebar-toggle-slot" + } + ), + title && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(HeadingTag, { className: "admin-ui-page__header-title", children: title }), + breadcrumbs, + badges + ] }), + /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( + Stack, + { + direction: "row", + gap: "sm", + style: { width: "auto", flexShrink: 0 }, + className: "admin-ui-page__header-actions", + align: "center", + children: actions + } + ) + ] }), + subTitle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) + ] }); } // packages/admin-ui/build-module/page/index.mjs @@ -15480,7 +15472,7 @@ function FontLibraryPage() { })) ); } - return /* @__PURE__ */ React.createElement(page_default, { headingLevel: 1, title: (0, import_i18n46.__)("Fonts") }, /* @__PURE__ */ React.createElement( + return /* @__PURE__ */ React.createElement(page_default, { title: (0, import_i18n46.__)("Fonts") }, /* @__PURE__ */ React.createElement( Tabs3, { selectedTabId: activeTab, diff --git a/src/wp-includes/build/routes/font-list/content.min.asset.php b/src/wp-includes/build/routes/font-list/content.min.asset.php index 055d3fb568977..cc0fc7a6eb103 100644 --- a/src/wp-includes/build/routes/font-list/content.min.asset.php +++ b/src/wp-includes/build/routes/font-list/content.min.asset.php @@ -1 +1 @@ - array('react', 'react-dom', 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-style-engine', 'wp-theme'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => '87ed406cb72d86f09e6b'); \ No newline at end of file + array('react', 'react-dom', 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-style-engine', 'wp-theme'), 'module_dependencies' => array(array('id' => '@wordpress/a11y', 'import' => 'static'), array('id' => '@wordpress/route', 'import' => 'static')), 'version' => 'f4a76b3cfc58409a8d9c'); \ No newline at end of file diff --git a/src/wp-includes/build/routes/font-list/content.min.js b/src/wp-includes/build/routes/font-list/content.min.js index 8c33d2c316f1e..576cc3541569e 100644 --- a/src/wp-includes/build/routes/font-list/content.min.js +++ b/src/wp-includes/build/routes/font-list/content.min.js @@ -1,12 +1,12 @@ -var Xu=Object.create;var ra=Object.defineProperty;var Ku=Object.getOwnPropertyDescriptor;var Ju=Object.getOwnPropertyNames;var Qu=Object.getPrototypeOf,$u=Object.prototype.hasOwnProperty;var ue=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ht=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tf=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ju(e))!$u.call(t,s)&&s!==r&&ra(t,s,{get:()=>e[s],enumerable:!(o=Ku(e,s))||o.enumerable});return t};var u=(t,e,r)=>(r=t!=null?Xu(Qu(t)):{},tf(e||!t||!t.__esModule?ra(r,"default",{value:t,enumerable:!0}):r,t));var ut=Ht((Jg,oa)=>{oa.exports=window.wp.i18n});var X=Ht((Qg,sa)=>{sa.exports=window.wp.components});var z=Ht(($g,na)=>{na.exports=window.ReactJSXRuntime});var yt=Ht((ey,ia)=>{ia.exports=window.wp.element});var _r=Ht((sy,da)=>{da.exports=window.React});var Pr=Ht((Iy,_a)=>{_a.exports=window.wp.primitives});var Vs=Ht((Xy,Pa)=>{Pa.exports=window.wp.privateApis});var cr=Ht((Ky,Aa)=>{Aa.exports=window.wp.compose});var Na=Ht((dv,Va)=>{Va.exports=window.wp.editor});var be=Ht((mv,za)=>{za.exports=window.wp.coreData});var fe=Ht((pv,Ma)=>{Ma.exports=window.wp.data});var Rr=Ht((hv,Ga)=>{Ga.exports=window.wp.blocks});var ce=Ht((gv,ja)=>{ja.exports=window.wp.blockEditor});var Ha=Ht((xv,Ua)=>{Ua.exports=window.wp.styleEngine});var Xa=Ht((Lv,Za)=>{"use strict";Za.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,s,a;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(!t(e[s],r[s]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;for(s of e.entries())if(!t(s[1],r.get(s[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(e[s]!==r[s])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(a=Object.keys(e),o=a.length,o!==Object.keys(r).length)return!1;for(s=o;s--!==0;)if(!Object.prototype.hasOwnProperty.call(r,a[s]))return!1;for(s=o;s--!==0;){var n=a[s];if(!t(e[n],r[n]))return!1}return!0}return e!==e&&r!==r}});var $a=Ht((Dv,Qa)=>{"use strict";var Pf=function(e){return Af(e)&&!Rf(e)};function Af(t){return!!t&&typeof t=="object"}function Rf(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||Lf(t)}var Ef=typeof Symbol=="function"&&Symbol.for,If=Ef?Symbol.for("react.element"):60103;function Lf(t){return t.$$typeof===If}function Bf(t){return Array.isArray(t)?[]:{}}function so(t,e){return e.clone!==!1&&e.isMergeableObject(t)?Ir(Bf(t),t,e):t}function Df(t,e,r){return t.concat(e).map(function(o){return so(o,r)})}function Vf(t,e){if(!e.customMerge)return Ir;var r=e.customMerge(t);return typeof r=="function"?r:Ir}function Nf(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function Ka(t){return Object.keys(t).concat(Nf(t))}function Ja(t,e){try{return e in t}catch{return!1}}function zf(t,e){return Ja(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function Mf(t,e,r){var o={};return r.isMergeableObject(t)&&Ka(t).forEach(function(s){o[s]=so(t[s],r)}),Ka(e).forEach(function(s){zf(t,s)||(Ja(t,s)&&r.isMergeableObject(e[s])?o[s]=Vf(s,r)(t[s],e[s],r):o[s]=so(e[s],r))}),o}function Ir(t,e,r){r=r||{},r.arrayMerge=r.arrayMerge||Df,r.isMergeableObject=r.isMergeableObject||Pf,r.cloneUnlessOtherwiseSpecified=so;var o=Array.isArray(e),s=Array.isArray(t),a=o===s;return a?o?r.arrayMerge(t,e,r):Mf(t,e,r):so(e,r)}Ir.all=function(e,r){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(o,s){return Ir(o,s,r)},{})};var Gf=Ir;Qa.exports=Gf});var dn=Ht((H0,Ki)=>{Ki.exports=window.wp.keycodes});var el=Ht((eb,tl)=>{tl.exports=window.wp.apiFetch});var _u=Ht((FF,Tu)=>{Tu.exports=window.wp.date});function aa(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var s=t.length;for(e=0;e(0,ua.jsx)(o,{ref:a,className:ve("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...s,children:t}));fa.displayName="NavigableRegion";var ca=fa;var pa=u(_r(),1),ma={};function Fs(t,e){let r=pa.useRef(ma);return r.current===ma&&(r.current=t(e)),r}function ks(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var Oo=u(_r(),1);function Os(t,e,r,o){let s=Fs(ga).current;return rf(s,t,e,r,o)&&ya(s,[t,e,r,o]),s.callback}function ha(t){let e=Fs(ga).current;return of(e,t)&&ya(e,t),e.callback}function ga(){return{callback:null,cleanup:null,refs:[]}}function rf(t,e,r,o,s){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==s}function of(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function ya(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let s=0;s{for(let s=0;s=t}function Ts(t){if(!wa.isValidElement(t))return null;let e=t,r=e.props;return(ba(19)?r?.ref:e.ref)??null}function Jr(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Sa(t,e){let r={};for(let o in t){let s=t[o];if(e?.hasOwnProperty(o)){let a=e[o](s);a!=null&&Object.assign(r,a);continue}s===!0?r[`data-${o.toLowerCase()}`]="":s&&(r[`data-${o.toLowerCase()}`]=s.toString())}return r}function xa(t,e){return typeof t=="function"?t(e):t}function Ca(t,e){return typeof t=="function"?t(e):t}var $r={};function ko(t,e,r,o,s){let a={..._s(t,$r)};return e&&(a=Qr(a,e)),r&&(a=Qr(a,r)),o&&(a=Qr(a,o)),s&&(a=Qr(a,s)),a}function Fa(t){if(t.length===0)return $r;if(t.length===1)return _s(t[0],$r);let e={..._s(t[0],$r)};for(let r=1;r=65&&s<=90&&(typeof e=="function"||typeof e>"u")}function ka(t){return typeof t=="function"}function _s(t,e){return ka(t)?t(e):t??$r}function lf(t,e){return e?t?r=>{if(ff(r)){let s=r;uf(s);let a=e(s);return s.baseUIHandlerPrevented||t?.(s),a}let o=e(r);return t?.(r),o}:e:t}function uf(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Ps(t,e){return e?t?e+" "+t:e:t}function ff(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var cf=Object.freeze([]),Ke=Object.freeze({});var As=u(_r(),1);function Oa(t,e,r={}){let o=e.render,s=df(e,r);if(r.enabled===!1)return null;let a=r.state??Ke;return mf(t,o,s,a)}function df(t,e={}){let{className:r,style:o,render:s}=t,{state:a=Ke,ref:n,props:l,stateAttributesMapping:m,enabled:f=!0}=e,c=f?xa(r,a):void 0,d=f?Ca(o,a):void 0,g=f?Sa(a,m):Ke,h=f?Jr(g,Array.isArray(l)?Fa(l):l)??Ke:Ke;return typeof document<"u"&&(f?Array.isArray(n)?h.ref=ha([h.ref,Ts(s),...n]):h.ref=Os(h.ref,Ts(s),n):Os(null,null)),f?(c!==void 0&&(h.className=Ps(h.className,c)),d!==void 0&&(h.style=Jr(h.style,d)),h):Ke}function mf(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let s=ko(r,e.props);return s.ref=r.ref,Oo.cloneElement(e,s)}if(t&&typeof t=="string")return pf(t,r);throw new Error(ks(8))}function pf(t,e){return t==="button"?(0,As.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,As.createElement)("img",{alt:"",...e,key:e.key}):Oo.createElement(t,e)}function Ta(t){return Oa(t.defaultTagName??"div",t,t)}var To=u(yt(),1),to=(0,To.forwardRef)(({icon:t,size:e=24,...r},o)=>(0,To.cloneElement)(t,{width:e,height:e,...r,ref:o}));var _o=u(Pr(),1),Rs=u(z(),1),ur=(0,Rs.jsx)(_o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Rs.jsx)(_o.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})});var Po=u(Pr(),1),Es=u(z(),1),fr=(0,Es.jsx)(Po.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Es.jsx)(Po.Path,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"})});var Ao=u(Pr(),1),Is=u(z(),1),Ls=(0,Is.jsx)(Ao.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Is.jsx)(Ao.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});var Ro=u(Pr(),1),Bs=u(z(),1),Eo=(0,Bs.jsx)(Ro.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Bs.jsx)(Ro.Path,{d:"M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"})});var Io=u(Pr(),1),Ds=u(z(),1),Lo=(0,Ds.jsx)(Io.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Ds.jsx)(Io.Path,{d:"M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"})});var Ra=u(yt(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='71d20935c2']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","71d20935c2"),t.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")),document.head.appendChild(t)}var hf={stack:"_19ce0419607e1896__stack"},gf={xs:"var(--wpds-dimension-gap-xs, 4px)",sm:"var(--wpds-dimension-gap-sm, 8px)",md:"var(--wpds-dimension-gap-md, 12px)",lg:"var(--wpds-dimension-gap-lg, 16px)",xl:"var(--wpds-dimension-gap-xl, 24px)","2xl":"var(--wpds-dimension-gap-2xl, 32px)","3xl":"var(--wpds-dimension-gap-3xl, 40px)"},Ar=(0,Ra.forwardRef)(function({direction:e,gap:r,align:o,justify:s,wrap:a,render:n,...l},m){let f={gap:r&&gf[r],alignItems:o,justifyContent:s,flexDirection:e,flexWrap:a};return Ta({render:n,ref:m,props:ko(l,{style:f,className:hf.stack})})});var Ea=u(X(),1),{Fill:Ia,Slot:La}=(0,Ea.createSlotFill)("SidebarToggle");var Re=u(z(),1);function Ba({headingLevel:t=2,breadcrumbs:e,badges:r,title:o,subTitle:s,actions:a,showSidebarToggle:n=!0}){let l=`h${t}`;return(0,Re.jsxs)(Ar,{direction:"column",className:"admin-ui-page__header",render:(0,Re.jsx)("header",{}),children:[(0,Re.jsxs)(Ar,{direction:"row",justify:"space-between",gap:"sm",children:[(0,Re.jsxs)(Ar,{direction:"row",gap:"sm",align:"center",justify:"start",children:[n&&(0,Re.jsx)(La,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),o&&(0,Re.jsx)(l,{className:"admin-ui-page__header-title",children:o}),e,r]}),(0,Re.jsx)(Ar,{direction:"row",gap:"sm",style:{width:"auto",flexShrink:0},className:"admin-ui-page__header-actions",align:"center",children:a})]}),s&&(0,Re.jsx)("p",{className:"admin-ui-page__header-subtitle",children:s})]})}var eo=u(z(),1);function Da({headingLevel:t,breadcrumbs:e,badges:r,title:o,subTitle:s,children:a,className:n,actions:l,hasPadding:m=!1,showSidebarToggle:f=!0}){let c=ve("admin-ui-page",n);return(0,eo.jsxs)(ca,{className:c,ariaLabel:o,children:[(o||e||r)&&(0,eo.jsx)(Ba,{headingLevel:t,breadcrumbs:e,badges:r,title:o,subTitle:s,actions:l,showSidebarToggle:f}),m?(0,eo.jsx)("div",{className:"admin-ui-page__content has-padding",children:a}):a]})}Da.SidebarToggleFill=Ia;var Ns=Da;var xo=u(ut()),Uu=u(X()),Hu=u(Na()),ws=u(be()),Wu=u(fe()),Yu=u(yt());var Mu=u(X(),1),Gu=u(Rr(),1),Mg=u(fe(),1),Gg=u(ce(),1),qn=u(yt(),1),jg=u(cr(),1);function Er(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}var we=(t,e,r)=>{let o=Array.isArray(e)?e:e.split("."),s=t;return o.forEach(a=>{s=s?.[a]}),s??r};var yf=["appearanceTools","useRootPaddingAwareAlignments","background.backgroundImage","background.backgroundRepeat","background.backgroundSize","background.backgroundPosition","border.color","border.radius","border.radiusSizes","border.style","border.width","shadow.presets","shadow.defaultPresets","color.background","color.button","color.caption","color.custom","color.customDuotone","color.customGradient","color.defaultDuotone","color.defaultGradients","color.defaultPalette","color.duotone","color.gradients","color.heading","color.link","color.palette","color.text","custom","dimensions.aspectRatio","dimensions.height","dimensions.minHeight","dimensions.width","dimensions.dimensionSizes","layout.contentSize","layout.definitions","layout.wideSize","lightbox.enabled","lightbox.allowEditing","position.fixed","position.sticky","spacing.customSpacingSize","spacing.defaultSpacingSizes","spacing.spacingSizes","spacing.spacingScale","spacing.blockGap","spacing.margin","spacing.padding","spacing.units","typography.fluid","typography.customFontSize","typography.defaultFontSizes","typography.dropCap","typography.fontFamilies","typography.fontSizes","typography.fontStyle","typography.fontWeight","typography.letterSpacing","typography.lineHeight","typography.textAlign","typography.textColumns","typography.textDecoration","typography.textIndent","typography.textTransform","typography.writingMode"];function zs(t,e,r){let o=r?".blocks."+r:"",s=e?"."+e:"",a=`settings${o}${s}`,n=`settings${s}`;if(e)return we(t,a)??we(t,n);let l={};return yf.forEach(m=>{let f=we(t,`settings${o}.${m}`)??we(t,`settings.${m}`);f!==void 0&&(l=Er(l,m.split("."),f))}),l}function Ms(t,e,r,o){let s=o?".blocks."+o:"",a=e?"."+e:"",n=`settings${s}${a}`;return Er(t,n.split("."),r)}var kf=u(Ha(),1);var vf="1600px",bf="320px",wf=1,Sf=.25,xf=.75,Cf="14px";function Wa({minimumFontSize:t,maximumFontSize:e,fontSize:r,minimumViewportWidth:o=bf,maximumViewportWidth:s=vf,scaleFactor:a=wf,minimumFontSizeLimit:n}){if(n=Ee(n)?n:Cf,r){let b=Ee(r);if(!b?.unit||!b?.value)return null;let T=Ee(n,{coerceTo:b.unit});if(T?.value&&!t&&!e&&b?.value<=T?.value)return null;if(e||(e=`${b.value}${b.unit}`),!t){let Y=b.unit==="px"?b.value:b.value*16,I=Math.min(Math.max(1-.075*Math.log2(Y),Sf),xf),V=ro(b.value*I,3);T?.value&&V0}function Ff(t){let e=t?.typography??{},r=t?.layout,o=Ee(r?.wideSize)?r?.wideSize:null;return Gs(e)&&o?{fluid:{maxViewportWidth:o,...typeof e.fluid=="object"?e.fluid:{}}}:{fluid:e?.fluid}}function Ya(t,e){let{size:r}=t;if(!r||r==="0"||t?.fluid===!1||!Gs(e?.typography)&&!Gs(t))return r;let o=Ff(e)?.fluid??{},s=Wa({minimumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.min,maximumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.max,fontSize:r,minimumFontSizeLimit:typeof o=="object"?o?.minFontSize:void 0,maximumViewportWidth:typeof o=="object"?o?.maxViewportWidth:void 0,minimumViewportWidth:typeof o=="object"?o?.minViewportWidth:void 0});return s||r}var Of=[{path:["color","palette"],valueKey:"color",cssVarInfix:"color",classes:[{classSuffix:"color",propertyName:"color"},{classSuffix:"background-color",propertyName:"background-color"},{classSuffix:"border-color",propertyName:"border-color"}]},{path:["color","gradients"],valueKey:"gradient",cssVarInfix:"gradient",classes:[{classSuffix:"gradient-background",propertyName:"background"}]},{path:["color","duotone"],valueKey:"colors",cssVarInfix:"duotone",valueFunc:({slug:t})=>`url( '#wp-duotone-${t}' )`,classes:[]},{path:["shadow","presets"],valueKey:"shadow",cssVarInfix:"shadow",classes:[]},{path:["typography","fontSizes"],valueFunc:(t,e)=>Ya(t,e),valueKey:"size",cssVarInfix:"font-size",classes:[{classSuffix:"font-size",propertyName:"font-size"}]},{path:["typography","fontFamilies"],valueKey:"fontFamily",cssVarInfix:"font-family",classes:[{classSuffix:"font-family",propertyName:"font-family"}]},{path:["spacing","spacingSizes"],valueKey:"size",cssVarInfix:"spacing",valueFunc:({size:t})=>t,classes:[]},{path:["border","radiusSizes"],valueKey:"size",cssVarInfix:"border-radius",classes:[]},{path:["dimensions","dimensionSizes"],valueKey:"size",cssVarInfix:"dimension",classes:[]}];function qa(t,e,r=[],o="slug",s){let a=[e?we(t,["blocks",e,...r]):void 0,we(t,r)].filter(Boolean);for(let n of a)if(n){let l=["custom","theme","default"];for(let m of l){let f=n[m];if(f){let c=f.find(d=>d[o]===s);if(c)return o==="slug"||qa(t,e,r,"slug",c.slug)[o]===c[o]?c:void 0}}}}function Tf(t,e,r,[o,s]=[]){let a=Of.find(l=>l.cssVarInfix===o);if(!a||!t.settings)return r;let n=qa(t.settings,e,a.path,"slug",s);if(n){let{valueKey:l}=a,m=n[l];return Bo(t,e,m)}return r}function _f(t,e,r,o=[]){let s=(e?we(t?.settings??{},["blocks",e,"custom",...o]):void 0)??we(t?.settings??{},["custom",...o]);return s?Bo(t,e,s):r}function Bo(t,e,r){if(!r||typeof r!="string")if(typeof r=="object"&&r!==null&&"ref"in r&&typeof r.ref=="string"){let f=we(t,r.ref);if(!f||typeof f=="object"&&"ref"in f)return f;r=f}else return r;let o="var:",s="var(--wp--",a=")",n;if(r.startsWith(o))n=r.slice(o.length).split("|");else if(r.startsWith(s)&&r.endsWith(a))n=r.slice(s.length,-a.length).split("--");else return r;let[l,...m]=n;return l==="preset"?Tf(t,e,r,m):l==="custom"?_f(t,e,r,m):r}function js(t,e,r,o=!0){let s=e?"."+e:"",a=r?`styles.blocks.${r}${s}`:`styles${s}`;if(!t)return;let n=we(t,a);return o?Bo(t,r,n):n}function Us(t,e,r,o){let s=e?"."+e:"",a=o?`styles.blocks.${o}${s}`:`styles${s}`;return Er(t,a.split("."),r)}var Hs=u(Xa(),1);function oo(t,e){return typeof t!="object"||typeof e!="object"?t===e:(0,Hs.default)(t?.styles,e?.styles)&&(0,Hs.default)(t?.settings,e?.settings)}var ri=u($a(),1);function ti(t){return Object.prototype.toString.call(t)==="[object Object]"}function ei(t){var e,r;return ti(t)===!1?!1:(e=t.constructor,e===void 0?!0:(r=e.prototype,!(ti(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)))}function dr(t,e){return(0,ri.default)(t,e,{isMergeableObject:ei,customMerge:r=>{if(r==="backgroundImage")return(o,s)=>s??o}})}var jf={grad:.9,turn:360,rad:360/(2*Math.PI)},je=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},qt=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Fe=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},fi=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},oi=function(t){return{r:Fe(t.r,0,255),g:Fe(t.g,0,255),b:Fe(t.b,0,255),a:Fe(t.a)}},Ws=function(t){return{r:qt(t.r),g:qt(t.g),b:qt(t.b),a:qt(t.a,3)}},Uf=/^#([0-9a-f]{3,8})$/i,Do=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},ci=function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=Math.max(e,r,o),n=a-Math.min(e,r,o),l=n?a===e?(r-o)/n:a===r?2+(o-e)/n:4+(e-r)/n:0;return{h:60*(l<0?l+6:l),s:a?n/a*100:0,v:a/255*100,a:s}},di=function(t){var e=t.h,r=t.s,o=t.v,s=t.a;e=e/360*6,r/=100,o/=100;var a=Math.floor(e),n=o*(1-r),l=o*(1-(e-a)*r),m=o*(1-(1-e+a)*r),f=a%6;return{r:255*[o,l,n,n,m,o][f],g:255*[m,o,o,l,n,n][f],b:255*[n,n,m,o,o,l][f],a:s}},si=function(t){return{h:fi(t.h),s:Fe(t.s,0,100),l:Fe(t.l,0,100),a:Fe(t.a)}},ni=function(t){return{h:qt(t.h),s:qt(t.s),l:qt(t.l),a:qt(t.a,3)}},ai=function(t){return di((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},no=function(t){return{h:(e=ci(t)).h,s:(s=(200-(r=e.s))*(o=e.v)/100)>0&&s<200?r*o/100/(s<=100?s:200-s)*100:0,l:s/2,a:e.a};var e,r,o,s},Hf=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Wf=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Yf=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,qf=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Zs={string:[[function(t){var e=Uf.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?qt(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?qt(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=Yf.exec(t)||qf.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:oi({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=Hf.exec(t)||Wf.exec(t);if(!e)return null;var r,o,s=si({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(jf[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return ai(s)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=s===void 0?1:s;return je(e)&&je(r)&&je(o)?oi({r:Number(e),g:Number(r),b:Number(o),a:Number(a)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=si({h:Number(e),s:Number(r),l:Number(o),a:Number(a)});return ai(n)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=(function(l){return{h:fi(l.h),s:Fe(l.s,0,100),v:Fe(l.v,0,100),a:Fe(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(a)});return di(n)},"hsv"]]},ii=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=Ws(this.rgba),r=e.r,o=e.g,s=e.b,n=(a=e.a)<1?Do(qt(255*a)):"","#"+Do(r)+Do(o)+Do(s)+n;var e,r,o,s,a,n},t.prototype.toRgb=function(){return Ws(this.rgba)},t.prototype.toRgbString=function(){return e=Ws(this.rgba),r=e.r,o=e.g,s=e.b,(a=e.a)<1?"rgba("+r+", "+o+", "+s+", "+a+")":"rgb("+r+", "+o+", "+s+")";var e,r,o,s,a},t.prototype.toHsl=function(){return ni(no(this.rgba))},t.prototype.toHslString=function(){return e=ni(no(this.rgba)),r=e.h,o=e.s,s=e.l,(a=e.a)<1?"hsla("+r+", "+o+"%, "+s+"%, "+a+")":"hsl("+r+", "+o+"%, "+s+"%)";var e,r,o,s,a},t.prototype.toHsv=function(){return e=ci(this.rgba),{h:qt(e.h),s:qt(e.s),v:qt(e.v),a:qt(e.a,3)};var e},t.prototype.invert=function(){return Ie({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),Ie(Ys(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),Ie(Ys(this.rgba,-e))},t.prototype.grayscale=function(){return Ie(Ys(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),Ie(li(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),Ie(li(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?Ie({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):qt(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=no(this.rgba);return typeof e=="number"?Ie({h:e,s:r.s,l:r.l,a:r.a}):qt(r.h)},t.prototype.isEqual=function(e){return this.toHex()===Ie(e).toHex()},t})(),Ie=function(t){return t instanceof Xs?t:new Xs(t)},ui=[],mi=function(t){t.forEach(function(e){ui.indexOf(e)<0&&(e(Xs,Zs),ui.push(e))})};var Ks=u(yt(),1);var pi=u(yt(),1),Xt=(0,pi.createContext)({user:{styles:{},settings:{}},base:{styles:{},settings:{}},merged:{styles:{},settings:{}},onChange:()=>{},fontLibraryEnabled:!1});var hi=u(z(),1);function ao({children:t,value:e,baseValue:r,onChange:o,fontLibraryEnabled:s}){let a=(0,Ks.useMemo)(()=>dr(r,e),[r,e]),n=(0,Ks.useMemo)(()=>({user:e,base:r,merged:a,onChange:o,fontLibraryEnabled:s}),[e,r,a,o,s]);return(0,hi.jsx)(Xt.Provider,{value:n,children:t})}var Ue=u(X(),1),Li=u(ut(),1);var lc=u(fe(),1),uc=u(be(),1);var gi=u(z(),1);function Js({className:t,...e}){return(0,gi.jsx)(to,{className:ve(t,"global-styles-ui-icon-with-current-color"),...e})}var Je=u(X(),1);var mr=u(z(),1);function Xf({icon:t,children:e,...r}){return(0,mr.jsxs)(Je.__experimentalItem,{...r,children:[t&&(0,mr.jsxs)(Je.__experimentalHStack,{justify:"flex-start",children:[(0,mr.jsx)(Js,{icon:t,size:24}),(0,mr.jsx)(Je.FlexItem,{children:e})]}),!t&&e]})}function Le(t){return(0,mr.jsx)(Je.Navigator.Button,{as:Xf,...t})}var Qf=u(X(),1);var $f=u(ut(),1),Ci=u(ce(),1);var Qs=function(t){var e=t/255;return e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},$s=function(t){return .2126*Qs(t.r)+.7152*Qs(t.g)+.0722*Qs(t.b)};function yi(t){t.prototype.luminance=function(){return e=$s(this.rgba),(r=2)===void 0&&(r=0),o===void 0&&(o=Math.pow(10,r)),Math.round(o*e)/o+0;var e,r,o},t.prototype.contrast=function(e){e===void 0&&(e="#FFF");var r,o,s,a,n,l,m,f=e instanceof t?e:new t(e);return a=this.rgba,n=f.toRgb(),l=$s(a),m=$s(n),r=l>m?(l+.05)/(m+.05):(m+.05)/(l+.05),(o=2)===void 0&&(o=0),s===void 0&&(s=Math.pow(10,o)),Math.floor(s*r)/s+0},t.prototype.isReadable=function(e,r){return e===void 0&&(e="#FFF"),r===void 0&&(r={}),this.contrast(e)>=(l=(n=(o=r).size)===void 0?"normal":n,(a=(s=o.level)===void 0?"AA":s)==="AAA"&&l==="normal"?7:a==="AA"&&l==="large"?3:4.5);var o,s,a,n,l}}var Pe=u(yt(),1),wi=u(fe(),1),Si=u(be(),1),en=u(ut(),1);function tn(t,e){if(!e?.length||typeof t!="object"||!t||!Object.keys(t).length)return t;for(let r in t)e.includes(r)?delete t[r]:typeof t[r]=="object"&&tn(t[r],e);return t}var Vo=(t,e)=>{if(!t||!e?.length)return{};let r={};return Object.keys(t).forEach(o=>{if(e.includes(o))r[o]=t[o];else if(typeof t[o]=="object"){let s=Vo(t[o],e);Object.keys(s).length&&(r[o]=s)}}),r};function io(t,e){let r=Vo(structuredClone(t),e);return oo(r,t)}function vi(t,e){if(!Array.isArray(t)||!e)return null;let o=e.replace("var(","").replace(")","")?.split("--").slice(-1)[0];return t.find(s=>s.slug===o)}function bi(t){let e=t?.settings?.typography?.fontFamilies?.theme,r=t?.settings?.typography?.fontFamilies?.custom,o=[];e&&r?o=[...e,...r]:e?o=e:r&&(o=r);let s=t?.styles?.typography?.fontFamily,a=vi(o,s),n=t?.styles?.elements?.heading?.typography?.fontFamily,l;return n?l=vi(o,t?.styles?.elements?.heading?.typography?.fontFamily):l=a,[a,l]}mi([yi]);function kt(t,e,r="merged",o=!0){let{user:s,base:a,merged:n,onChange:l}=(0,Pe.useContext)(Xt),m=n;r==="base"?m=a:r==="user"&&(m=s);let f=(0,Pe.useMemo)(()=>js(m,t,e,o),[m,t,e,o]),c=(0,Pe.useCallback)(d=>{let g=Us(s,t,d,e);l(g)},[s,l,t,e]);return[f,c]}function _t(t,e,r="merged"){let{user:o,base:s,merged:a,onChange:n}=(0,Pe.useContext)(Xt),l=a;r==="base"?l=s:r==="user"&&(l=o);let m=(0,Pe.useMemo)(()=>zs(l,t,e),[l,t,e]),f=(0,Pe.useCallback)(c=>{let d=Ms(o,t,c,e);n(d)},[o,n,t,e]);return[m,f]}var Kf=[];function Jf({title:t,settings:e,styles:r}){return t===(0,en.__)("Default")||Object.keys(e||{}).length>0||Object.keys(r||{}).length>0}function No(t=[]){let{variationsFromTheme:e}=(0,wi.useSelect)(o=>({variationsFromTheme:o(Si.store).__experimentalGetCurrentThemeGlobalStylesVariations?.()||Kf}),[]),{user:r}=(0,Pe.useContext)(Xt);return(0,Pe.useMemo)(()=>{let o=structuredClone(r),s=tn(o,t);s.title=(0,en.__)("Default");let a=e.filter(l=>io(l,t)).map(l=>dr(s,l)),n=[s,...a];return n?.length?n.filter(Jf):[]},[t,r,e])}var xi=u(Vs(),1),{lock:d1,unlock:vt}=(0,xi.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/global-styles-ui");var rn=u(z(),1),{useHasDimensionsPanel:y1,useHasTypographyPanel:v1,useHasColorPanel:b1,useSettingsForBlockElement:w1,useHasBackgroundPanel:S1}=vt(Ci.privateApis);var Be=u(X(),1);function Lr(){let[t="black"]=kt("color.text"),[e="white"]=kt("color.background"),[r=t]=kt("elements.h1.color.text"),[o=r]=kt("elements.link.color.text"),[s=o]=kt("elements.button.color.background"),[a]=_t("color.palette.core")||[],[n]=_t("color.palette.theme")||[],[l]=_t("color.palette.custom")||[],m=(n??[]).concat(l??[]).concat(a??[]),f=m.filter(({color:g})=>g===t),c=m.filter(({color:g})=>g===s),d=f.concat(c).concat(m).filter(({color:g})=>g!==e).slice(0,2);return{paletteColors:m,highlightedColors:d}}var Oi=u(yt(),1),Ti=u(X(),1),sn=u(ut(),1);function tc(t,e){return e.length===0?null:(e.sort((r,o)=>Math.abs(t-r)-Math.abs(t-o)),e[0])}function ec(t){let e=[];return t.forEach(r=>{let o=String(r.fontWeight).split(" ");if(o.length===2){let s=parseInt(o[0]),a=parseInt(o[1]);for(let n=s;n<=a;n+=100)e.push(n)}else o.length===1&&e.push(parseInt(o[0]))}),e}function Fi(t){let e=/^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/,r=t.trim(),o=s=>(s=s.trim(),s.match(e)?(s=s.replace(/^["']|["']$/g,""),`"${s}"`):s);return r.includes(",")?r.split(",").map(o).filter(s=>s!=="").join(", "):o(r)}function on(t){if(!t)return"";let e=t.trim();return e.includes(",")&&(e=(e.split(",").find(r=>r.trim()!=="")??"").trim()),e=e.replace(/^["']|["']$/g,""),window.navigator.userAgent.toLowerCase().includes("firefox")&&(e=`"${e}"`),e}function Br(t){let e={fontFamily:Fi(t.fontFamily)};if(!("fontFace"in t)||!Array.isArray(t.fontFace))return e.fontWeight="400",e.fontStyle="normal",e;if(t.fontFace){let r=t.fontFace.filter(o=>o?.fontStyle&&o.fontStyle.toLowerCase()==="normal");if(r.length>0){e.fontStyle="normal";let o=ec(r),s=tc(400,o);e.fontWeight=String(s)||"400"}else e.fontStyle=t.fontFace.length&&t.fontFace[0].fontStyle||"normal",e.fontWeight=t.fontFace.length&&String(t.fontFace[0].fontWeight)||"400"}return e}function ki(t){return{fontFamily:Fi(t.fontFamily),fontStyle:t.fontStyle||"normal",fontWeight:t.fontWeight||"400"}}var lo=u(z(),1);function zo({fontSize:t,variation:e}){let{base:r}=(0,Oi.useContext)(Xt),o=r;e&&(o={...r,...e});let[s]=kt("color.text"),[a,n]=bi(o),l=a?Br(a):{},m=n?Br(n):{};return s&&(l.color=s,m.color=s),t&&(l.fontSize=t,m.fontSize=t),(0,lo.jsxs)(Ti.__unstableMotion.div,{animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:.3,type:"tween"},style:{textAlign:"center",lineHeight:1},children:[(0,lo.jsx)("span",{style:m,children:(0,sn._x)("A","Uppercase letter A")}),(0,lo.jsx)("span",{style:l,children:(0,sn._x)("a","Lowercase letter A")})]})}var _i=u(X(),1);var Pi=u(z(),1);function Ai({normalizedColorSwatchSize:t,ratio:e}){let{highlightedColors:r}=Lr(),o=t*e;return r.map(({slug:s,color:a},n)=>(0,Pi.jsx)(_i.__unstableMotion.div,{style:{height:o,width:o,background:a,borderRadius:o/2},animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:n===1?.2:.1}},`${s}-${n}`))}var Ii=u(X(),1),Dr=u(cr(),1),pr=u(yt(),1);var Qe=u(z(),1),Ri=248,Ei=152,rc={leading:!0,trailing:!0};function oc({children:t,label:e,isFocused:r,withHoverView:o}){let[s="white"]=kt("color.background"),[a]=kt("color.gradient"),n=(0,Dr.useReducedMotion)(),[l,m]=(0,pr.useState)(!1),[f,{width:c}]=(0,Dr.useResizeObserver)(),[d,g]=(0,pr.useState)(c),[h,v]=(0,pr.useState)(),_=(0,Dr.useThrottle)(g,250,rc);(0,pr.useLayoutEffect)(()=>{c&&_(c)},[c,_]),(0,pr.useLayoutEffect)(()=>{let b=d?d/Ri:1,T=b-(h||0);(Math.abs(T)>.1||!h)&&v(b)},[d,h]);let A=c?c/Ri:1,k=h||A;return(0,Qe.jsxs)(Qe.Fragment,{children:[(0,Qe.jsx)("div",{style:{position:"relative"},children:f}),!!c&&(0,Qe.jsx)("div",{className:"global-styles-ui-preview__wrapper",style:{height:Ei*k},onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),tabIndex:-1,children:(0,Qe.jsx)(Ii.__unstableMotion.div,{style:{height:Ei*k,width:"100%",background:a??s,cursor:o?"pointer":void 0},initial:"start",animate:(l||r)&&!n&&e?"hover":"start",children:[].concat(t).map((b,T)=>b({ratio:k,key:T}))})})]})}var Vr=oc;var de=u(z(),1),sc={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},nc={hover:{opacity:1},start:{opacity:.5}},ac={hover:{scale:1,opacity:1},start:{scale:0,opacity:0}};function ic({label:t,isFocused:e,withHoverView:r,variation:o}){let[s]=kt("typography.fontWeight"),[a="serif"]=kt("typography.fontFamily"),[n=a]=kt("elements.h1.typography.fontFamily"),[l=s]=kt("elements.h1.typography.fontWeight"),[m="black"]=kt("color.text"),[f=m]=kt("elements.h1.color.text"),{paletteColors:c}=Lr();return(0,de.jsxs)(Vr,{label:t,isFocused:e,withHoverView:r,children:[({ratio:d,key:g})=>(0,de.jsx)(Be.__unstableMotion.div,{variants:sc,style:{height:"100%",overflow:"hidden"},children:(0,de.jsxs)(Be.__experimentalHStack,{spacing:10*d,justify:"center",style:{height:"100%",overflow:"hidden"},children:[(0,de.jsx)(zo,{fontSize:65*d,variation:o}),(0,de.jsx)(Be.__experimentalVStack,{spacing:4*d,children:(0,de.jsx)(Ai,{normalizedColorSwatchSize:32,ratio:d})})]})},g),({key:d})=>(0,de.jsx)(Be.__unstableMotion.div,{variants:r?nc:void 0,style:{height:"100%",width:"100%",position:"absolute",top:0,overflow:"hidden",filter:"blur(60px)",opacity:.1},children:(0,de.jsx)(Be.__experimentalHStack,{spacing:0,justify:"flex-start",style:{height:"100%",overflow:"hidden"},children:c.slice(0,4).map(({color:g},h)=>(0,de.jsx)("div",{style:{height:"100%",background:g,flexGrow:1}},h))})},d),({ratio:d,key:g})=>(0,de.jsx)(Be.__unstableMotion.div,{variants:ac,style:{height:"100%",width:"100%",overflow:"hidden",position:"absolute",top:0},children:(0,de.jsx)(Be.__experimentalVStack,{spacing:3*d,justify:"center",style:{height:"100%",overflow:"hidden",padding:10*d,boxSizing:"border-box"},children:t&&(0,de.jsx)("div",{style:{fontSize:40*d,fontFamily:n,color:f,fontWeight:l,lineHeight:"1em",textAlign:"center"},children:t})})},g)]})}var nn=ic;var Bi=u(z(),1);var ln=u(Rr(),1),Nr=u(ut(),1),gr=u(X(),1),un=u(fe(),1),$e=u(yt(),1),Mo=u(ce(),1),Mi=u(cr(),1);import{speak as mc}from"@wordpress/a11y";var Di=u(Rr(),1),Vi=u(fe(),1),fc=u(X(),1);var cc=u(z(),1);function dc(t,e){return t?.filter(r=>r.source==="block"||e.includes(r.name))||[]}function an(t){let e=(0,Vi.useSelect)(s=>{let{getBlockStyles:a}=s(Di.store);return a(t)},[t]),[r]=kt("variations",t),o=Object.keys(r??{});return dc(e,o)}var hr=u(X(),1),Ni=u(ut(),1);var zi=u(z(),1);var De=u(z(),1),{useHasDimensionsPanel:pc,useHasTypographyPanel:hc,useHasBorderPanel:gc,useSettingsForBlockElement:yc,useHasColorPanel:vc}=vt(Mo.privateApis);function bc(){let t=(0,un.useSelect)(s=>s(ln.store).getBlockTypes(),[]),e=(s,a)=>{let{core:n,noncore:l}=s;return(a.name.startsWith("core/")?n:l).push(a),s},{core:r,noncore:o}=t.reduce(e,{core:[],noncore:[]});return[...r,...o]}function wc(t){let[e]=_t("",t),r=yc(e,t),o=hc(r),s=vc(r),a=gc(r),n=pc(r),l=a||n,m=!!an(t)?.length;return o||s||l||m}function Sc({block:t}){return wc(t.name)?(0,De.jsx)(Le,{path:"/blocks/"+encodeURIComponent(t.name),children:(0,De.jsxs)(gr.__experimentalHStack,{justify:"flex-start",children:[(0,De.jsx)(Mo.BlockIcon,{icon:t.icon}),(0,De.jsx)(gr.FlexItem,{children:t.title})]})}):null}function xc({filterValue:t}){let e=bc(),r=(0,Mi.useDebounce)(mc,500),{isMatchingSearchTerm:o}=(0,un.useSelect)(ln.store),s=t?e.filter(n=>o(n,t)):e,a=(0,$e.useRef)(null);return(0,$e.useEffect)(()=>{if(!t)return;let n=a.current?.childElementCount||0,l=(0,Nr.sprintf)((0,Nr._n)("%d result found.","%d results found.",n),n);r(l,"polite")},[t,r]),(0,De.jsx)("div",{ref:a,className:"global-styles-ui-block-types-item-list",role:"list",children:s.length===0?(0,De.jsx)(gr.__experimentalText,{align:"center",as:"p",children:(0,Nr.__)("No blocks found.")}):s.map(n=>(0,De.jsx)(Sc,{block:n},"menu-itemblock-"+n.name))})}var o0=(0,$e.memo)(xc);var Tc=u(Rr(),1),Hi=u(ce(),1),Wi=u(yt(),1),_c=u(fe(),1),Pc=u(be(),1),fn=u(X(),1),Yi=u(ut(),1);var Cc=u(ce(),1),Gi=u(Rr(),1),Fc=u(X(),1),kc=u(yt(),1);var Oc=u(z(),1);var ji=u(X(),1),Ui=u(z(),1);function Se({children:t,level:e=2}){return(0,Ui.jsx)(ji.__experimentalHeading,{className:"global-styles-ui-subtitle",level:e,children:t})}var cn=u(z(),1);var{useHasDimensionsPanel:v0,useHasTypographyPanel:b0,useHasBorderPanel:w0,useSettingsForBlockElement:S0,useHasColorPanel:x0,useHasFiltersPanel:C0,useHasImageSettingsPanel:F0,useHasBackgroundPanel:k0,BackgroundPanel:O0,BorderPanel:T0,ColorPanel:_0,TypographyPanel:P0,DimensionsPanel:A0,FiltersPanel:R0,ImageSettingsPanel:E0,AdvancedPanel:I0}=vt(Hi.privateApis);var jh=u(ut(),1),Uh=u(X(),1),Hh=u(yt(),1);var Ac=u(X(),1);var Rc=u(z(),1);var Ec=u(ut(),1),Go=u(X(),1);var qi=u(z(),1);var Ho=u(X(),1);var Zi=u(X(),1);var jo=u(z(),1),Ic=({variation:t,isFocused:e,withHoverView:r})=>(0,jo.jsx)(Vr,{label:t.title,isFocused:e,withHoverView:r,children:({ratio:o,key:s})=>(0,jo.jsx)(Zi.__experimentalHStack,{spacing:10*o,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,jo.jsx)(zo,{variation:t,fontSize:85*o})},s)}),Xi=Ic;var Ji=u(X(),1),yr=u(yt(),1),Qi=u(dn(),1),Uo=u(ut(),1);var uo=u(z(),1);function zr({variation:t,children:e,isPill:r=!1,properties:o,showTooltip:s=!1}){let[a,n]=(0,yr.useState)(!1),{base:l,user:m,onChange:f}=(0,yr.useContext)(Xt),c=(0,yr.useMemo)(()=>{let A=dr(l,t);return o&&(A=Vo(A,o)),{user:t,base:l,merged:A,onChange:()=>{}}},[t,l,o]),d=()=>f(t),g=A=>{A.keyCode===Qi.ENTER&&(A.preventDefault(),d())},h=(0,yr.useMemo)(()=>oo(m,t),[m,t]),v=t?.title;t?.description&&(v=(0,Uo.sprintf)((0,Uo._x)("%1$s (%2$s)","variation label"),t?.title,t?.description));let _=(0,uo.jsx)("div",{className:ve("global-styles-ui-variations_item",{"is-active":h}),role:"button",onClick:d,onKeyDown:g,tabIndex:0,"aria-label":v,"aria-current":h,onFocus:()=>n(!0),onBlur:()=>n(!1),children:(0,uo.jsx)("div",{className:ve("global-styles-ui-variations_item-preview",{"is-pill":r}),children:e(a)})});return(0,uo.jsx)(Xt.Provider,{value:c,children:s?(0,uo.jsx)(Ji.Tooltip,{text:t?.title,children:_}):_})}var vr=u(z(),1),$i=["typography"];function Wo({title:t,gap:e=2}){let r=No($i);return r?.length<=1?null:(0,vr.jsxs)(Ho.__experimentalVStack,{spacing:3,children:[t&&(0,vr.jsx)(Se,{level:3,children:t}),(0,vr.jsx)(Ho.__experimentalGrid,{columns:3,gap:e,className:"global-styles-ui-style-variations-container",children:r.map((o,s)=>(0,vr.jsx)(zr,{variation:o,properties:$i,showTooltip:!0,children:()=>(0,vr.jsx)(Xi,{variation:o})},s))})]})}var Mh=u(ut(),1),yo=u(X(),1);var Gh=u(yt(),1);var He=u(yt(),1),or=u(fe(),1),rr=u(be(),1),gn=u(ut(),1);var mn=u(el(),1),rl=u(be(),1),ol="/wp/v2/font-families";function sl(t){let{receiveEntityRecords:e}=t.dispatch(rl.store);e("postType","wp_font_family",[],void 0,!0)}async function nl(t,e){let o=await(0,mn.default)({path:ol,method:"POST",body:t});return sl(e),{id:o.id,...o.font_family_settings,fontFace:[]}}async function al(t,e,r){let o={path:`${ol}/${t}/font-faces`,method:"POST",body:e},s=await(0,mn.default)(o);return sl(r),{id:s.id,...s.font_face_settings}}var ul=u(X(),1);var ke=u(ut(),1),pn=["otf","ttf","woff","woff2"],il={100:(0,ke._x)("Thin","font weight"),200:(0,ke._x)("Extra-light","font weight"),300:(0,ke._x)("Light","font weight"),400:(0,ke._x)("Normal","font weight"),500:(0,ke._x)("Medium","font weight"),600:(0,ke._x)("Semi-bold","font weight"),700:(0,ke._x)("Bold","font weight"),800:(0,ke._x)("Extra-bold","font weight"),900:(0,ke._x)("Black","font weight")},ll={normal:(0,ke._x)("Normal","font style"),italic:(0,ke._x)("Italic","font style")};var{File:fl}=window,{kebabCase:Lc}=vt(ul.privateApis);function tr(t,e={}){return!t.name&&(t.fontFamily||t.slug)&&(t.name=t.fontFamily||t.slug),{...t,...e}}function Bc(t){return typeof t!="string"?!1:t!==decodeURIComponent(t)}function Yo(t){let e=il[t.fontWeight??""]||t.fontWeight,r=t.fontStyle==="normal"?"":ll[t.fontStyle??""]||t.fontStyle;return`${e} ${r}`}function Dc(t=[],e=[]){let r=new Map;for(let o of t)r.set(`${o.fontWeight}${o.fontStyle}`,o);for(let o of e)r.set(`${o.fontWeight}${o.fontStyle}`,o);return Array.from(r.values())}function cl(t=[],e=[]){let r=new Map;for(let o of t)r.set(o.slug,{...o});for(let o of e)if(r.has(o.slug)){let{fontFace:s,...a}=o,n=r.get(o.slug),l=Dc(n.fontFace,s);r.set(o.slug,{...a,fontFace:l})}else r.set(o.slug,{...o});return Array.from(r.values())}async function er(t,e,r="all"){let o;if(typeof e=="string")o=`url(${e})`;else if(e instanceof fl)o=await e.arrayBuffer();else return;let a=await new window.FontFace(on(t.fontFamily),o,{style:t.fontStyle,weight:String(t.fontWeight)}).load();if((r==="document"||r==="all")&&document.fonts.add(a),r==="iframe"||r==="all"){let n=document.querySelector('iframe[name="editor-canvas"]');n?.contentDocument&&n.contentDocument.fonts.add(a)}}function fo(t,e="all"){let r=o=>{o.forEach(s=>{s.family===on(t?.fontFamily)&&s.weight===t?.fontWeight&&s.style===t?.fontStyle&&o.delete(s)})};if((e==="document"||e==="all")&&r(document.fonts),e==="iframe"||e==="all"){let o=document.querySelector('iframe[name="editor-canvas"]');o?.contentDocument&&r(o.contentDocument.fonts)}}function Mr(t){if(!t)return;let e;if(Array.isArray(t)?e=t[0]:e=t,!e.startsWith("file:."))return Bc(e)||(e=encodeURI(e)),e}function dl(t){let e=new FormData,{fontFace:r,category:o,...s}=t,a={...s,slug:Lc(t.slug)};return e.append("font_family_settings",JSON.stringify(a)),e}function ml(t){return(t?.fontFace??[]).map((r,o)=>{let s={...r},a=new FormData;if(s.file){let n=Array.isArray(s.file)?s.file:[s.file],l=[];n.forEach((m,f)=>{let c=`file-${o}-${f}`;a.append(c,m,m.name),l.push(c)}),s.src=l.length===1?l[0]:l,delete s.file,a.append("font_face_settings",JSON.stringify(s))}else a.append("font_face_settings",JSON.stringify(s));return a})}async function pl(t,e,r){let o=[];for(let a of e)try{let n=await al(t,a,r);o.push({status:"fulfilled",value:n})}catch(n){o.push({status:"rejected",reason:n})}let s={errors:[],successes:[]};return o.forEach((a,n)=>{if(a.status==="fulfilled"&&a.value){let l=a.value;s.successes.push(l)}else a.reason&&s.errors.push({data:e[n],message:a.reason.message})}),s}async function hl(t){t=Array.isArray(t)?t:[t];let e=await Promise.all(t.map(async r=>fetch(new Request(r)).then(o=>{if(!o.ok)throw new Error(`Error downloading font face asset from ${r}. Server responded with status: ${o.status}`);return o.blob()}).then(o=>{let s=r.split("/").pop();return new fl([o],s,{type:o.type})})));return e.length===1?e[0]:e}function hn(t,e){return e.findIndex(r=>r.fontWeight===t.fontWeight&&r.fontStyle===t.fontStyle)!==-1}function gl(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}function qo(t,e,r=[]){let o=m=>m.slug===t.slug,s=m=>m.find(o),a=m=>m?r.filter(f=>!o(f)):[...r,t],n=m=>{let f=d=>d.fontWeight===e.fontWeight&&d.fontStyle===e.fontStyle;if(!m)return[...r,{...t,fontFace:[e]}];let c=m.fontFace||[];return c.find(f)?c=c.filter(d=>!f(d)):c=[...c,e],c.length===0?r.filter(d=>!o(d)):r.map(d=>o(d)?{...d,fontFace:c}:d)},l=s(r);return e?n(l):a(l)}var yl=u(z(),1),ne=(0,He.createContext)({});ne.displayName="FontLibraryContext";function Vc({children:t}){let e=(0,or.useRegistry)(),{saveEntityRecord:r,deleteEntityRecord:o}=(0,or.useDispatch)(rr.store),{globalStylesId:s}=(0,or.useSelect)(S=>{let{__experimentalGetCurrentGlobalStylesId:E}=S(rr.store);return{globalStylesId:E()}},[]),a=(0,rr.useEntityRecord)("root","globalStyles",s),[n,l]=(0,He.useState)(!1),{records:m=[],isResolving:f}=(0,rr.useEntityRecords)("postType","wp_font_family",{_embed:!0}),c=(m||[]).map(S=>({id:S.id,...S.font_family_settings||{},fontFace:S?._embedded?.font_faces?.map(E=>E.font_face_settings)||[]}))||[],[d,g]=_t("typography.fontFamilies"),h=async S=>{if(!a.record)return;let E=a.record,et=gl(E??{},["settings","typography","fontFamilies"],S);await r("root","globalStyles",et)},[v,_]=(0,He.useState)(""),[A,k]=(0,He.useState)(void 0),x=d?.theme?d.theme.map(S=>tr(S,{source:"theme"})).sort((S,E)=>S.name.localeCompare(E.name)):[],b=d?.custom?d.custom.map(S=>tr(S,{source:"custom"})).sort((S,E)=>S.name.localeCompare(E.name)):[],T=c?c.map(S=>tr(S,{source:"custom"})).sort((S,E)=>S.name.localeCompare(E.name)):[];(0,He.useEffect)(()=>{v||k(void 0)},[v]);let Y=S=>{if(!S){k(void 0);return}let et=(S.source==="theme"?x:T).find(ct=>ct.slug===S.slug);k({...et||S,source:S.source})},[I]=(0,He.useState)(new Set),V=S=>S.reduce((et,ct)=>{let at=ct?.fontFace&&ct.fontFace?.length>0?ct?.fontFace.map(Ct=>`${Ct.fontStyle??""}${Ct.fontWeight??""}`):["normal400"];return et[ct.slug]=at,et},{}),H=S=>V(S==="theme"?x:b),$=(S,E,et,ct)=>!E&&!et?!!H(ct)[S]:!!H(ct)[S]?.includes((E??"")+(et??"")),bt=(S,E)=>H(E)[S]||[];async function W(S){l(!0);try{let E=[],et=[];for(let at of S){let Ct=!1,Wt=await(0,or.resolveSelect)(rr.store).getEntityRecords("postType","wp_font_family",{slug:at.slug,per_page:1,_embed:!0}),Ot=Wt&&Wt.length>0?Wt[0]:null,J=Ot?{id:Ot.id,...Ot.font_family_settings,fontFace:(Ot?._embedded?.font_faces??[]).map(zt=>zt.font_face_settings)||[]}:null;J||(Ct=!0,J=await nl(dl(at),e));let St=J.fontFace&&at.fontFace?J.fontFace.filter(zt=>zt&&at.fontFace&&hn(zt,at.fontFace)):[];J.fontFace&&at.fontFace&&(at.fontFace=at.fontFace.filter(zt=>!hn(zt,J.fontFace)));let At=[],xe=[];if(at?.fontFace?.length??!1){let zt=await pl(J.id,ml(at),e);At=zt?.successes,xe=zt?.errors}(At?.length>0||St?.length>0)&&(J.fontFace=[...At],E.push(J)),J&&!at?.fontFace?.length&&E.push(J),Ct&&(at?.fontFace?.length??0)>0&&At?.length===0&&await o("postType","wp_font_family",J.id,{force:!0}),et=et.concat(xe)}let ct=et.reduce((at,Ct)=>at.includes(Ct.message)?at:[...at,Ct.message],[]);if(E.length>0){let at=it(E);await h(at)}if(ct.length>0){let at=new Error((0,gn.__)("There was an error installing fonts."));throw at.installationErrors=ct,at}}finally{l(!1)}}async function y(S){if(!S?.id)throw new Error((0,gn.__)("Font family to uninstall is not defined."));try{await o("postType","wp_font_family",S.id,{force:!0});let E=L(S);return await h(E),{deleted:!0}}catch(E){throw console.error("There was an error uninstalling the font family:",E),E}}let L=S=>{let et=(d?.[S.source??""]??[]).filter(at=>at.slug!==S.slug),ct={...d,[S.source??""]:et};return g(ct),S.fontFace&&S.fontFace.forEach(at=>{fo(at,"all")}),ct},it=S=>{let E=ot(S),et={...d,custom:cl(d?.custom,E)};return g(et),K(E),et},ot=S=>S.map(({id:E,fontFace:et,...ct})=>({...ct,...et&&et.length>0?{fontFace:et.map(({id:at,...Ct})=>Ct)}:{}})),K=S=>{S.forEach(E=>{E.fontFace&&E.fontFace.forEach(et=>{let ct=Mr(et?.src??"");ct&&er(et,ct,"all")})})},gt=(S,E)=>{let et=d?.[S.source??""]??[],ct=qo(S,E,et);g({...d,[S.source??""]:ct});let at=$(S.slug,E?.fontStyle??"",E?.fontWeight??"",S.source??"custom");if(E&&at)fo(E,"all");else{let Ct=Mr(E?.src??"");E&&Ct&&er(E,Ct,"all")}},R=async S=>{if(!S.src)return;let E=Mr(S.src);!E||I.has(E)||(er(S,E,"document"),I.add(E))};return(0,yl.jsx)(ne.Provider,{value:{libraryFontSelected:A,handleSetLibraryFontSelected:Y,fontFamilies:d??{},baseCustomFonts:T,isFontActivated:$,getFontFacesActivated:bt,loadFontFaceAsset:R,installFonts:W,uninstallFontFamily:y,toggleActivateFont:gt,getAvailableFontsOutline:V,modalTabOpen:v,setModalTabOpen:_,saveFontFamilies:h,isResolvingLibrary:f,isInstalling:n},children:t})}var Zo=Vc;var us=u(ut(),1),Sn=u(X(),1),$l=u(be(),1),Nh=u(fe(),1);var ht=u(X(),1),mo=u(be(),1),yn=u(fe(),1),wr=u(yt(),1),Et=u(ut(),1);var jr=u(ut(),1),Oe=u(X(),1);var vl=u(X(),1),Ve=u(yt(),1);var Xo=u(z(),1);function Nc(t){if(t.preview)return t.preview;if(t.src)return Array.isArray(t.src)?t.src[0]:t.src}function zc(t){return"fontStyle"in t&&t.fontStyle||"fontWeight"in t&&t.fontWeight?t:"fontFace"in t&&t.fontFace&&t.fontFace.length?t.fontFace.find(e=>e.fontStyle==="normal"&&e.fontWeight==="400")||t.fontFace[0]:{fontStyle:"normal",fontWeight:"400",fontFamily:t.fontFamily}}function Mc({font:t,text:e}){let r=(0,Ve.useRef)(null),o=zc(t),s=Br(t);e=e||("name"in t?t.name:"");let a=t.preview,[n,l]=(0,Ve.useState)(!1),[m,f]=(0,Ve.useState)(!1),{loadFontFaceAsset:c}=(0,Ve.useContext)(ne),d=a??Nc(o),g=d&&d.match(/\.(png|jpg|jpeg|gif|svg)$/i),h=ki(o),v={fontSize:"18px",lineHeight:1,opacity:m?"1":"0",...s,...h};return(0,Ve.useEffect)(()=>{let _=new window.IntersectionObserver(([A])=>{l(A.isIntersecting)},{});return r.current&&_.observe(r.current),()=>_.disconnect()},[r]),(0,Ve.useEffect)(()=>{(async()=>n&&(!g&&o.src&&await c(o),f(!0)))()},[o,n,c,g]),(0,Xo.jsx)("div",{ref:r,children:g?(0,Xo.jsx)("img",{src:d,loading:"lazy",alt:e,className:"font-library__font-variant_demo-image"}):(0,Xo.jsx)(vl.__experimentalText,{style:v,className:"font-library__font-variant_demo-text",children:e})})}var Gr=Mc;var Ne=u(z(),1);function Gc({font:t,onClick:e,variantsText:r,navigatorPath:o}){let s=t.fontFace?.length||1,a={cursor:e?"pointer":"default"},n=(0,Oe.useNavigator)();return(0,Ne.jsx)(Oe.Button,{__next40pxDefaultSize:!0,onClick:()=>{e(),o&&n.goTo(o)},style:a,className:"font-library__font-card",children:(0,Ne.jsxs)(Oe.Flex,{justify:"space-between",wrap:!1,children:[(0,Ne.jsx)(Gr,{font:t}),(0,Ne.jsxs)(Oe.Flex,{justify:"flex-end",children:[(0,Ne.jsx)(Oe.FlexItem,{children:(0,Ne.jsx)(Oe.__experimentalText,{className:"font-library__font-card__count",children:r||(0,jr.sprintf)((0,jr._n)("%d variant","%d variants",s),s)})}),(0,Ne.jsx)(Oe.FlexItem,{children:(0,Ne.jsx)(to,{icon:(0,jr.isRTL)()?ur:fr})})]})]})})}var co=Gc;var Ko=u(yt(),1),Jo=u(X(),1);var br=u(z(),1);function jc({face:t,font:e}){let{isFontActivated:r,toggleActivateFont:o}=(0,Ko.useContext)(ne),s=(e?.fontFace?.length??0)>0?r(e.slug,t.fontStyle,t.fontWeight,e.source):r(e.slug,void 0,void 0,e.source),a=()=>{if((e?.fontFace?.length??0)>0){o(e,t);return}o(e)},n=e.name+" "+Yo(t),l=(0,Ko.useId)();return(0,br.jsx)("div",{className:"font-library__font-card",children:(0,br.jsxs)(Jo.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,br.jsx)(Jo.CheckboxControl,{checked:s,onChange:a,id:l}),(0,br.jsx)("label",{htmlFor:l,children:(0,br.jsx)(Gr,{font:t,text:n,onClick:a})})]})})}var bl=jc;function wl(t){switch(t){case"normal":return 400;case"bold":return 700;case"bolder":return 500;case"lighter":return 300;default:return parseInt(t,10)}}function Qo(t){return t.sort((e,r)=>e.fontStyle==="normal"&&r.fontStyle!=="normal"?-1:r.fontStyle==="normal"&&e.fontStyle!=="normal"?1:e.fontStyle===r.fontStyle?wl(e.fontWeight?.toString()??"normal")-wl(r.fontWeight?.toString()??"normal"):!e.fontStyle||!r.fontStyle?e.fontStyle?-1:1:e.fontStyle.localeCompare(r.fontStyle))}var ft=u(z(),1);function Uc(){let{baseCustomFonts:t,libraryFontSelected:e,handleSetLibraryFontSelected:r,uninstallFontFamily:o,isResolvingLibrary:s,isInstalling:a,saveFontFamilies:n,getFontFacesActivated:l}=(0,wr.useContext)(ne),[m,f]=_t("typography.fontFamilies"),[c,d]=(0,wr.useState)(!1),[g,h]=(0,wr.useState)(null),[v]=_t("typography.fontFamilies",void 0,"base"),_=(0,yn.useSelect)(R=>{let{__experimentalGetCurrentGlobalStylesId:S}=R(mo.store);return S()},[]),k=!!(0,mo.useEntityRecord)("root","globalStyles",_)?.edits?.settings?.typography?.fontFamilies,x=m?.theme?m.theme.map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name)):[],b=new Set(x.map(R=>R.slug)),T=v?.theme?x.concat(v.theme.filter(R=>!b.has(R.slug)).map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name))):[],Y=e?.source==="custom"&&e?.id,I=(0,yn.useSelect)(R=>{let{canUser:S}=R(mo.store);return Y&&S("delete",{kind:"postType",name:"wp_font_family",id:Y})},[Y]),V=!!e&&e?.source!=="theme"&&I,H=()=>{d(!0)},$=async()=>{h(null);try{await n(m),h({type:"success",message:(0,Et.__)("Font family updated successfully.")})}catch(R){h({type:"error",message:(0,Et.sprintf)((0,Et.__)("There was an error updating the font family. %s"),R.message)})}},bt=R=>R?!R.fontFace||!R.fontFace.length?[{fontFamily:R.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Qo(R.fontFace):[],W=R=>{let S=R?.fontFace&&(R?.fontFace?.length??0)>0?R.fontFace.length:1,E=l(R.slug,R.source).length;return(0,Et.sprintf)((0,Et.__)("%1$d/%2$d variants active"),E,S)};(0,wr.useEffect)(()=>{r(e)},[]);let y=e?l(e.slug,e.source).length:0,L=e?.fontFace?.length??(e?.fontFamily?1:0),it=y>0&&y!==L,ot=y===L,K=()=>{if(!e||!e?.source)return;let R=m?.[e.source]?.filter(E=>E.slug!==e.slug)??[],S=ot?R:[...R,e];f({...m,[e.source]:S}),e.fontFace&&e.fontFace.forEach(E=>{if(ot)fo(E,"all");else{let et=Mr(E?.src??"");et&&er(E,et,"all")}})},gt=T.length>0||t.length>0;return(0,ft.jsxs)("div",{className:"font-library__tabpanel-layout",children:[s&&(0,ft.jsx)("div",{className:"font-library__loading",children:(0,ft.jsx)(ht.ProgressBar,{})}),!s&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsxs)(ht.Navigator,{initialPath:e?"/fontFamily":"/",children:[(0,ft.jsx)(ht.Navigator.Screen,{path:"/",children:(0,ft.jsxs)(ht.__experimentalVStack,{spacing:"8",children:[g&&(0,ft.jsx)(ht.Notice,{status:g.type,onRemove:()=>h(null),children:g.message}),!gt&&(0,ft.jsx)(ht.__experimentalText,{as:"p",children:(0,Et.__)("No fonts installed.")}),T.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Et._x)("Theme","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:T.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(co,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{h(null),r(R)}})},R.slug))})]}),t.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Et._x)("Custom","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:t.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(co,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{h(null),r(R)}})},R.slug))})]})]})}),(0,ft.jsxs)(ht.Navigator.Screen,{path:"/fontFamily",children:[e&&(0,ft.jsx)(Hc,{font:e,isOpen:c,setIsOpen:d,setNotice:h,uninstallFontFamily:o,handleSetLibraryFontSelected:r}),(0,ft.jsxs)(ht.Flex,{justify:"flex-start",children:[(0,ft.jsx)(ht.Navigator.BackButton,{icon:(0,Et.isRTL)()?fr:ur,size:"small",onClick:()=>{r(void 0),h(null)},label:(0,Et.__)("Back")}),(0,ft.jsx)(ht.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:e?.name})]}),g&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsx)(ht.__experimentalSpacer,{margin:1}),(0,ft.jsx)(ht.Notice,{status:g.type,onRemove:()=>h(null),children:g.message}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:1})]}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsx)(ht.__experimentalText,{children:(0,Et.__)("Choose font variants. Keep in mind that too many variants could make your site slower.")}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsxs)(ht.__experimentalVStack,{spacing:0,children:[(0,ft.jsx)(ht.CheckboxControl,{className:"font-library__select-all",label:(0,Et.__)("Select all"),checked:ot,onChange:K,indeterminate:it}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:8}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:e&&bt(e).map((R,S)=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(bl,{font:e,face:R},`face${S}`)},`face${S}`))})]})]})]}),(0,ft.jsxs)(ht.__experimentalHStack,{justify:"flex-end",className:"font-library__footer",children:[a&&(0,ft.jsx)(ht.ProgressBar,{}),V&&(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,isDestructive:!0,variant:"tertiary",onClick:H,children:(0,Et.__)("Delete")}),(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:$,disabled:!k,accessibleWhenDisabled:!0,children:(0,Et.__)("Update")})]})]})]})}function Hc({font:t,isOpen:e,setIsOpen:r,setNotice:o,uninstallFontFamily:s,handleSetLibraryFontSelected:a}){let n=(0,ht.useNavigator)(),l=async()=>{o(null),r(!1);try{await s(t),n.goBack(),a(void 0),o({type:"success",message:(0,Et.__)("Font family uninstalled successfully.")})}catch(f){o({type:"error",message:(0,Et.__)("There was an error uninstalling the font family.")+f.message})}},m=()=>{r(!1)};return(0,ft.jsx)(ht.__experimentalConfirmDialog,{isOpen:e,cancelButtonText:(0,Et.__)("Cancel"),confirmButtonText:(0,Et.__)("Delete"),onCancel:m,onConfirm:l,size:"medium",children:t&&(0,Et.sprintf)((0,Et.__)('Are you sure you want to delete "%s" font and all its variants and assets?'),t.name)})}var $o=Uc;var Zt=u(yt(),1),nt=u(X(),1),_l=u(cr(),1),Rt=u(ut(),1);var Pl=u(be(),1);function Sl(t,e){let{category:r,search:o}=e,s=t||[];return r&&r!=="all"&&(s=s.filter(a=>a.categories&&a.categories.indexOf(r)!==-1)),o&&(s=s.filter(a=>a.font_family_settings&&a.font_family_settings.name.toLowerCase().includes(o.toLowerCase()))),s}function xl(t){return t.reduce((e,r)=>({...e,[r.slug]:(r?.fontFace||[]).reduce((o,s)=>({...o,[`${s.fontStyle}-${s.fontWeight}`]:!0}),{})}),{})}function Cl(t,e,r){return e?!!r[t]?.[`${e.fontStyle}-${e.fontWeight}`]:!!r[t]}var po=u(ut(),1),ae=u(X(),1),Te=u(z(),1);function Wc(){let t=()=>{window.localStorage.setItem("wp-font-library-google-fonts-permission","true"),window.dispatchEvent(new Event("storage"))};return(0,Te.jsx)("div",{className:"font-library__google-fonts-confirm",children:(0,Te.jsx)(ae.Card,{children:(0,Te.jsxs)(ae.CardBody,{children:[(0,Te.jsx)(ae.__experimentalHeading,{level:2,children:(0,po.__)("Connect to Google Fonts")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,po.__)("To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:3}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,po.__)("You can alternatively upload files directly on the Upload tab.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:t,children:(0,po.__)("Allow access to Google Fonts")})]})})})}var Fl=Wc;var kl=u(yt(),1),ts=u(X(),1);var Sr=u(z(),1);function Yc({face:t,font:e,handleToggleVariant:r,selected:o}){let s=()=>{if(e?.fontFace){r(e,t);return}r(e)},a=e.name+" "+Yo(t),n=(0,kl.useId)();return(0,Sr.jsx)("div",{className:"font-library__font-card",children:(0,Sr.jsxs)(ts.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,Sr.jsx)(ts.CheckboxControl,{checked:o,onChange:s,id:n}),(0,Sr.jsx)("label",{htmlFor:n,children:(0,Sr.jsx)(Gr,{font:t,text:a,onClick:s})})]})})}var Ol=Yc;var tt=u(z(),1),qc={slug:"all",name:(0,Rt._x)("All","font categories")},Tl="wp-font-library-google-fonts-permission",Zc=500;function Xc({slug:t}){let e=t==="google-fonts",r=()=>window.localStorage.getItem(Tl)==="true",[o,s]=(0,Zt.useState)(null),[a,n]=(0,Zt.useState)(null),[l,m]=(0,Zt.useState)([]),[f,c]=(0,Zt.useState)(1),[d,g]=(0,Zt.useState)({}),[h,v]=(0,Zt.useState)(e&&!r()),{installFonts:_,isInstalling:A}=(0,Zt.useContext)(ne),{record:k,isResolving:x}=(0,Pl.useEntityRecord)("root","fontCollection",t);(0,Zt.useEffect)(()=>{let J=()=>{v(e&&!r())};return J(),window.addEventListener("storage",J),()=>window.removeEventListener("storage",J)},[t,e]);let b=()=>{window.localStorage.setItem(Tl,"false"),window.dispatchEvent(new Event("storage"))};(0,Zt.useEffect)(()=>{s(null)},[t]),(0,Zt.useEffect)(()=>{m([])},[o]);let T=(0,Zt.useMemo)(()=>k?.font_families??[],[k]),Y=k?.categories??[],I=[qc,...Y],V=(0,Zt.useMemo)(()=>Sl(T,d),[T,d]),H=Math.max(window.innerHeight,Zc),$=Math.floor((H-417)/61),bt=Math.ceil(V.length/$),W=(f-1)*$,y=f*$,L=V.slice(W,y),it=J=>{g({...d,category:J}),c(1)},K=(0,_l.debounce)(J=>{g({...d,search:J}),c(1)},300),gt=(J,St)=>{let At=qo(J,St,l);m(At)},R=xl(l),S=()=>{m([])},E=l.length>0?l[0]?.fontFace?.length??0:0,et=E>0&&E!==o?.fontFace?.length,ct=E===o?.fontFace?.length,at=()=>{let J=[];!ct&&o&&J.push(o),m(J)},Ct=async()=>{n(null);let J=l[0];try{J?.fontFace&&await Promise.all(J.fontFace.map(async St=>{St.src&&(St.file=await hl(St.src))}))}catch{n({type:"error",message:(0,Rt.__)("Error installing the fonts, could not be downloaded.")});return}try{await _([J]),n({type:"success",message:(0,Rt.__)("Fonts were installed successfully.")})}catch(St){n({type:"error",message:St.message})}S()},Wt=J=>J?!J.fontFace||!J.fontFace.length?[{fontFamily:J.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Qo(J.fontFace):[];if(h)return(0,tt.jsx)(Fl,{});let Ot=()=>t!=="google-fonts"||h||o?null:(0,tt.jsx)(nt.DropdownMenu,{icon:Ls,label:(0,Rt.__)("Actions"),popoverProps:{position:"bottom left"},controls:[{title:(0,Rt.__)("Revoke access to Google Fonts"),onClick:b}]});return(0,tt.jsxs)("div",{className:"font-library__tabpanel-layout",children:[x&&(0,tt.jsx)("div",{className:"font-library__loading",children:(0,tt.jsx)(nt.ProgressBar,{})}),!x&&k&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsxs)(nt.Navigator,{initialPath:"/",className:"font-library__tabpanel-layout",children:[(0,tt.jsxs)(nt.Navigator.Screen,{path:"/",children:[(0,tt.jsxs)(nt.__experimentalHStack,{justify:"space-between",children:[(0,tt.jsxs)(nt.__experimentalVStack,{children:[(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,children:k.name}),(0,tt.jsx)(nt.__experimentalText,{children:k.description})]}),(0,tt.jsx)(Ot,{})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsxs)(nt.__experimentalHStack,{spacing:4,justify:"space-between",children:[(0,tt.jsx)(nt.SearchControl,{value:d.search,placeholder:(0,Rt.__)("Font name\u2026"),label:(0,Rt.__)("Search"),onChange:K,hideLabelFromVision:!1}),(0,tt.jsx)(nt.SelectControl,{__next40pxDefaultSize:!0,label:(0,Rt.__)("Category"),value:d.category,onChange:it,children:I&&I.map(J=>(0,tt.jsx)("option",{value:J.slug,children:J.name},J.slug))})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),!!k?.font_families?.length&&!V.length&&(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("No fonts found. Try with a different search term.")}),(0,tt.jsx)("div",{className:"font-library__fonts-grid__main",children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:L.map(J=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(co,{font:J.font_family_settings,navigatorPath:"/fontFamily",onClick:()=>{s(J.font_family_settings)}})},J.font_family_settings.slug))})})]}),(0,tt.jsxs)(nt.Navigator.Screen,{path:"/fontFamily",children:[(0,tt.jsxs)(nt.Flex,{justify:"flex-start",children:[(0,tt.jsx)(nt.Navigator.BackButton,{icon:(0,Rt.isRTL)()?fr:ur,size:"small",onClick:()=>{s(null),n(null)},label:(0,Rt.__)("Back")}),(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:o?.name})]}),a&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsx)(nt.__experimentalSpacer,{margin:1}),(0,tt.jsx)(nt.Notice,{status:a.type,onRemove:()=>n(null),children:a.message}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:1})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("Select font variants to install.")}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.CheckboxControl,{className:"font-library__select-all",label:(0,Rt.__)("Select all"),checked:ct,onChange:at,indeterminate:et}),(0,tt.jsx)(nt.__experimentalVStack,{spacing:0,children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:o&&Wt(o).map((J,St)=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(Ol,{font:o,face:J,handleToggleVariant:gt,selected:Cl(o.slug,o.fontFace?J:null,R)})},`face${St}`))})}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:16})]})]}),o&&(0,tt.jsx)(nt.Flex,{justify:"flex-end",className:"font-library__footer",children:(0,tt.jsx)(nt.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:Ct,isBusy:A,disabled:l.length===0||A,accessibleWhenDisabled:!0,children:(0,Rt.__)("Install")})}),!o&&(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,className:"font-library__footer",justify:"end",spacing:6,children:[(0,tt.jsx)(nt.__experimentalHStack,{justify:"flex-start",expanded:!1,spacing:1,className:"font-library__page-selection",children:(0,Zt.createInterpolateElement)((0,Rt.sprintf)((0,Rt._x)("
Page
%1$s
of %2$d
","paging"),"",bt),{div:(0,tt.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,tt.jsx)(nt.SelectControl,{"aria-label":(0,Rt.__)("Current page"),value:f.toString(),options:[...Array(bt)].map((J,St)=>({label:(St+1).toString(),value:(St+1).toString()})),onChange:J=>c(parseInt(J)),size:"small",variant:"minimal"})})}),(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,spacing:1,children:[(0,tt.jsx)(nt.Button,{onClick:()=>c(f-1),disabled:f===1,accessibleWhenDisabled:!0,label:(0,Rt.__)("Previous page"),icon:(0,Rt.isRTL)()?Eo:Lo,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,tt.jsx)(nt.Button,{onClick:()=>c(f+1),disabled:f===bt,accessibleWhenDisabled:!0,label:(0,Rt.__)("Next page"),icon:(0,Rt.isRTL)()?Lo:Eo,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})]})]})}var es=Xc;var Ur=u(ut(),1),$t=u(X(),1),go=u(yt(),1);var rs=(t=>typeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),Al=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var g=typeof rs=="function"&&rs;if(!d&&g)return g(c,!0);if(m)return m(c,!0);var h=new Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof rs=="function"&&rs,f=0;f0},c.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw new Error("Unexpected end of input "+this.bit_pos_+" "+this.bit_end_pos_)}else{var d=this.buf_ptr_,g=this.input_.read(this.buf_,d,n);if(g<0)throw new Error("Unexpected end of input");if(g=8;)this.val_>>>=8,this.val_|=this.buf_[this.pos_&m]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0},c.prototype.readBits=function(d){32-this.bit_pos_>>this.bit_pos_&f[d];return this.bit_pos_+=d,g},s.exports=c},{}],2:[function(o,s,a){var n=0,l=1,m=2,f=3;a.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])},{}],3:[function(o,s,a){var n=o("./streams").BrotliInput,l=o("./streams").BrotliOutput,m=o("./bit_reader"),f=o("./dictionary"),c=o("./huffman").HuffmanCode,d=o("./huffman").BrotliBuildHuffmanTable,g=o("./context"),h=o("./prefix"),v=o("./transform"),_=8,A=16,k=256,x=704,b=26,T=6,Y=2,I=8,V=255,H=1080,$=18,bt=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),W=16,y=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),L=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),it=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function ot(N){var O;return N.readBits(1)===0?16:(O=N.readBits(3),O>0?17+O:(O=N.readBits(3),O>0?8+O:17))}function K(N){if(N.readBits(1)){var O=N.readBits(3);return O===0?1:N.readBits(O)+(1<1&&dt===0)throw new Error("Invalid size byte");O.meta_block_length|=dt<4&&rt===0)throw new Error("Invalid size nibble");O.meta_block_length|=rt<>>B.bit_pos_&V,D=N[O].bits-I,D>0&&(B.bit_pos_+=I,O+=N[O].value,O+=B.val_>>>B.bit_pos_&(1<0;){var Ft=0,Kt;if(P.readMoreInput(),P.fillBitWindow(),Ft+=P.val_>>>P.bit_pos_&31,P.bit_pos_+=lt[Ft].bits,Kt=lt[Ft].value&255,Kt>Kt);else{var he=Kt-14,te,Jt,Dt=0;if(Kt===A&&(Dt=dt),st!==Dt&&(rt=0,st=Dt),te=rt,rt>0&&(rt-=2,rt<<=he),rt+=P.readBits(he)+3,Jt=rt-te,D+Jt>O)throw new Error("[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols");for(var Qt=0;Qt0;++st){var Dt=bt[st],Qt=0,ee;P.fillBitWindow(),Qt+=P.val_>>>P.bit_pos_&15,P.bit_pos_+=Jt[Qt].bits,ee=Jt[Qt].value,Kt[Dt]=ee,ee!==0&&(he-=32>>ee,++te)}if(!(te===1||he===0))throw new Error("[ReadHuffmanCode] invalid num_codes or space");E(Kt,N,rt,P)}if(D=d(O,B,I,rt,N),D===0)throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");return D}function ct(N,O,B){var P,D;return P=S(N,O,B),D=h.kBlockLengthPrefixCode[P].nbits,h.kBlockLengthPrefixCode[P].offset+B.readBits(D)}function at(N,O,B){var P;return N>>5]),this.htrees=new Uint32Array(O)}Ot.prototype.decode=function(N){var O,B,P=0;for(O=0;O=N)throw new Error("[DecodeContextMap] i >= context_map_size");wt[rt]=0,++rt}else wt[rt]=lt-D,++rt}return O.readBits(1)&&Wt(wt,N),B}function St(N,O,B,P,D,dt,rt){var st=B*2,wt=B,lt=S(O,B*H,rt),q;lt===0?q=D[st+(dt[wt]&1)]:lt===1?q=D[st+(dt[wt]-1&1)]+1:q=lt-2,q>=N&&(q-=N),P[B]=q,D[st+(dt[wt]&1)]=q,++dt[wt]}function At(N,O,B,P,D,dt){var rt=D+1,st=B&D,wt=dt.pos_&m.IBUF_MASK,lt;if(O<8||dt.bit_pos_+(O<<3)0;)dt.readMoreInput(),P[st++]=dt.readBits(8),st===rt&&(N.write(P,rt),st=0);return}if(dt.bit_end_pos_<32)throw new Error("[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32");for(;dt.bit_pos_<32;)P[st]=dt.val_>>>dt.bit_pos_,dt.bit_pos_+=8,++st,--O;if(lt=dt.bit_end_pos_-dt.bit_pos_>>3,wt+lt>m.IBUF_MASK){for(var q=m.IBUF_MASK+1-wt,Ft=0;Ft=rt){N.write(P,rt),st-=rt;for(var Ft=0;Ft=rt;){if(lt=rt-st,dt.input_.read(P,st,lt)O.buffer.length){var lr=new Uint8Array(P+Mt);lr.set(O.buffer),O.buffer=lr}if(D=Me.input_end,Co=Me.is_uncompressed,Me.is_metadata){for(xe(pt);Mt>0;--Mt)pt.readMoreInput(),pt.readBits(8);continue}if(Mt!==0){if(Co){pt.bit_pos_=pt.bit_pos_+7&-8,At(O,Mt,P,q,lt,pt),P+=Mt;continue}for(B=0;B<3;++B)ge[B]=K(pt)+1,ge[B]>=2&&(et(ge[B]+2,Qt,B*H,pt),et(b,ee,B*H,pt),Ce[B]=ct(ee,B*H,pt),M[B]=1);for(pt.readMoreInput(),i=pt.readBits(2),U=W+(pt.readBits(4)<0;){var Nt,se,ie,Or,Ss,le,ye,Ge,Zr,Tr,Xr;for(pt.readMoreInput(),Ce[1]===0&&(St(ge[1],Qt,1,Ae,w,M,pt),Ce[1]=ct(ee,H,pt),Yt=Dt[1].htrees[Ae[1]]),--Ce[1],Nt=S(Dt[1].codes,Yt,pt),se=Nt>>6,se>=2?(se-=2,ye=-1):ye=0,ie=h.kInsertRangeLut[se]+(Nt>>3&7),Or=h.kCopyRangeLut[se]+(Nt&7),Ss=h.kInsertLengthPrefixCode[ie].offset+pt.readBits(h.kInsertLengthPrefixCode[ie].nbits),le=h.kCopyLengthPrefixCode[Or].offset+pt.readBits(h.kCopyLengthPrefixCode[Or].nbits),te=q[P-1<],Jt=q[P-2<],Tr=0;Tr4?3:le-2)&255,It=F[ir+Zr],ye=S(Dt[2].codes,Dt[2].htrees[It],pt),ye>=U){var xs,Qn,Kr;ye-=U,Qn=ye&Pt,ye>>=i,xs=(ye>>1)+1,Kr=(2+(ye&1)<st)if(le>=f.minDictionaryWordLength&&le<=f.maxDictionaryWordLength){var Kr=f.offsetsByLength[le],$n=Ge-st-1,ta=f.sizeBitsByLength[le],qu=(1<>ta;if(Kr+=Zu*le,ea=Ft){O.write(q,wt);for(var Fo=0;Fo0&&(Kt[he&3]=Ge,++he),le>Mt)throw new Error("Invalid backward reference. pos: "+P+" distance: "+Ge+" len: "+le+" bytes left: "+Mt);for(Tr=0;Tr>=1;return(d&h-1)+h}function f(d,g,h,v,_){do v-=h,d[g+v]=new n(_.bits,_.value);while(v>0)}function c(d,g,h){for(var v=1<0;--y[x])k=new n(x&255,W[b++]&65535),f(d,g+T,Y,$,k),T=m(T,x);for(V=bt-1,I=-1,x=h+1,Y=2;x<=l;++x,Y<<=1)for(;y[x]>0;--y[x])(T&V)!==I&&(g+=$,H=c(y,x,h),$=1<>h),Y,$,k),T=m(T,x);return bt}},{}],8:[function(o,s,a){"use strict";a.byteLength=h,a.toByteArray=_,a.fromByteArray=x;for(var n=[],l=[],m=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,d=f.length;c0)throw new Error("Invalid string. Length must be a multiple of 4");var Y=b.indexOf("=");Y===-1&&(Y=T);var I=Y===T?0:4-Y%4;return[Y,I]}function h(b){var T=g(b),Y=T[0],I=T[1];return(Y+I)*3/4-I}function v(b,T,Y){return(T+Y)*3/4-Y}function _(b){for(var T,Y=g(b),I=Y[0],V=Y[1],H=new m(v(b,I,V)),$=0,bt=V>0?I-4:I,W=0;W>16&255,H[$++]=T>>8&255,H[$++]=T&255;return V===2&&(T=l[b.charCodeAt(W)]<<2|l[b.charCodeAt(W+1)]>>4,H[$++]=T&255),V===1&&(T=l[b.charCodeAt(W)]<<10|l[b.charCodeAt(W+1)]<<4|l[b.charCodeAt(W+2)]>>2,H[$++]=T>>8&255,H[$++]=T&255),H}function A(b){return n[b>>18&63]+n[b>>12&63]+n[b>>6&63]+n[b&63]}function k(b,T,Y){for(var I,V=[],H=T;Hbt?bt:$+H));return I===1?(T=b[Y-1],V.push(n[T>>2]+n[T<<4&63]+"==")):I===2&&(T=(b[Y-2]<<8)+b[Y-1],V.push(n[T>>10]+n[T>>4&63]+n[T<<2&63]+"=")),V.join("")}},{}],9:[function(o,s,a){function n(l,m){this.offset=l,this.nbits=m}a.kBlockLengthPrefixCode=[new n(1,2),new n(5,2),new n(9,2),new n(13,2),new n(17,3),new n(25,3),new n(33,3),new n(41,3),new n(49,4),new n(65,4),new n(81,4),new n(97,4),new n(113,5),new n(145,5),new n(177,5),new n(209,5),new n(241,6),new n(305,6),new n(369,7),new n(497,8),new n(753,9),new n(1265,10),new n(2289,11),new n(4337,12),new n(8433,13),new n(16625,24)],a.kInsertLengthPrefixCode=[new n(0,0),new n(1,0),new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,1),new n(8,1),new n(10,2),new n(14,2),new n(18,3),new n(26,3),new n(34,4),new n(50,4),new n(66,5),new n(98,5),new n(130,6),new n(194,7),new n(322,8),new n(578,9),new n(1090,10),new n(2114,12),new n(6210,14),new n(22594,24)],a.kCopyLengthPrefixCode=[new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,0),new n(7,0),new n(8,0),new n(9,0),new n(10,1),new n(12,1),new n(14,2),new n(18,2),new n(22,3),new n(30,3),new n(38,4),new n(54,4),new n(70,5),new n(102,5),new n(134,6),new n(198,7),new n(326,8),new n(582,9),new n(1094,10),new n(2118,24)],a.kInsertRangeLut=[0,0,8,8,0,16,8,16,16],a.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]},{}],10:[function(o,s,a){function n(m){this.buffer=m,this.pos=0}n.prototype.read=function(m,f,c){this.pos+c>this.buffer.length&&(c=this.buffer.length-this.pos);for(var d=0;dthis.buffer.length)throw new Error("Output buffer is not large enough");return this.buffer.set(m.subarray(0,f),this.pos),this.pos+=f,f},a.BrotliOutput=l},{}],11:[function(o,s,a){var n=o("./dictionary"),l=0,m=1,f=2,c=3,d=4,g=5,h=6,v=7,_=8,A=9,k=10,x=11,b=12,T=13,Y=14,I=15,V=16,H=17,$=18,bt=19,W=20;function y(ot,K,gt){this.prefix=new Uint8Array(ot.length),this.transform=K,this.suffix=new Uint8Array(gt.length);for(var R=0;R'),new y("",l,` +var Xu=Object.create;var ra=Object.defineProperty;var Ku=Object.getOwnPropertyDescriptor;var Ju=Object.getOwnPropertyNames;var Qu=Object.getPrototypeOf,$u=Object.prototype.hasOwnProperty;var ue=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ht=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tf=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ju(e))!$u.call(t,s)&&s!==r&&ra(t,s,{get:()=>e[s],enumerable:!(o=Ku(e,s))||o.enumerable});return t};var u=(t,e,r)=>(r=t!=null?Xu(Qu(t)):{},tf(e||!t||!t.__esModule?ra(r,"default",{value:t,enumerable:!0}):r,t));var ut=Ht((Jg,oa)=>{oa.exports=window.wp.i18n});var X=Ht((Qg,sa)=>{sa.exports=window.wp.components});var z=Ht(($g,na)=>{na.exports=window.ReactJSXRuntime});var yt=Ht((ey,ia)=>{ia.exports=window.wp.element});var _r=Ht((sy,da)=>{da.exports=window.React});var Pr=Ht((Iy,_a)=>{_a.exports=window.wp.primitives});var Vs=Ht((Xy,Pa)=>{Pa.exports=window.wp.privateApis});var cr=Ht((Ky,Aa)=>{Aa.exports=window.wp.compose});var Na=Ht((dv,Va)=>{Va.exports=window.wp.editor});var be=Ht((mv,za)=>{za.exports=window.wp.coreData});var fe=Ht((pv,Ma)=>{Ma.exports=window.wp.data});var Rr=Ht((hv,Ga)=>{Ga.exports=window.wp.blocks});var ce=Ht((gv,ja)=>{ja.exports=window.wp.blockEditor});var Ha=Ht((xv,Ua)=>{Ua.exports=window.wp.styleEngine});var Xa=Ht((Lv,Za)=>{"use strict";Za.exports=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var o,s,a;if(Array.isArray(e)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(!t(e[s],r[s]))return!1;return!0}if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;for(s of e.entries())if(!t(s[1],r.get(s[0])))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(s of e.entries())if(!r.has(s[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if(o=e.length,o!=r.length)return!1;for(s=o;s--!==0;)if(e[s]!==r[s])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(a=Object.keys(e),o=a.length,o!==Object.keys(r).length)return!1;for(s=o;s--!==0;)if(!Object.prototype.hasOwnProperty.call(r,a[s]))return!1;for(s=o;s--!==0;){var n=a[s];if(!t(e[n],r[n]))return!1}return!0}return e!==e&&r!==r}});var $a=Ht((Dv,Qa)=>{"use strict";var Pf=function(e){return Af(e)&&!Rf(e)};function Af(t){return!!t&&typeof t=="object"}function Rf(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||Lf(t)}var Ef=typeof Symbol=="function"&&Symbol.for,If=Ef?Symbol.for("react.element"):60103;function Lf(t){return t.$$typeof===If}function Bf(t){return Array.isArray(t)?[]:{}}function so(t,e){return e.clone!==!1&&e.isMergeableObject(t)?Ir(Bf(t),t,e):t}function Df(t,e,r){return t.concat(e).map(function(o){return so(o,r)})}function Vf(t,e){if(!e.customMerge)return Ir;var r=e.customMerge(t);return typeof r=="function"?r:Ir}function Nf(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function Ka(t){return Object.keys(t).concat(Nf(t))}function Ja(t,e){try{return e in t}catch{return!1}}function zf(t,e){return Ja(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function Mf(t,e,r){var o={};return r.isMergeableObject(t)&&Ka(t).forEach(function(s){o[s]=so(t[s],r)}),Ka(e).forEach(function(s){zf(t,s)||(Ja(t,s)&&r.isMergeableObject(e[s])?o[s]=Vf(s,r)(t[s],e[s],r):o[s]=so(e[s],r))}),o}function Ir(t,e,r){r=r||{},r.arrayMerge=r.arrayMerge||Df,r.isMergeableObject=r.isMergeableObject||Pf,r.cloneUnlessOtherwiseSpecified=so;var o=Array.isArray(e),s=Array.isArray(t),a=o===s;return a?o?r.arrayMerge(t,e,r):Mf(t,e,r):so(e,r)}Ir.all=function(e,r){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(o,s){return Ir(o,s,r)},{})};var Gf=Ir;Qa.exports=Gf});var dn=Ht((H0,Ki)=>{Ki.exports=window.wp.keycodes});var el=Ht((eb,tl)=>{tl.exports=window.wp.apiFetch});var _u=Ht((FF,Tu)=>{Tu.exports=window.wp.date});function aa(t){var e,r,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var s=t.length;for(e=0;e(0,ua.jsx)(o,{ref:a,className:ve("admin-ui-navigable-region",e),"aria-label":r,role:"region",tabIndex:"-1",...s,children:t}));fa.displayName="NavigableRegion";var ca=fa;var pa=u(_r(),1),ma={};function Fs(t,e){let r=pa.useRef(ma);return r.current===ma&&(r.current=t(e)),r}function ks(t,...e){let r=new URL(`https://base-ui.com/production-error/${t}`);return e.forEach(o=>r.searchParams.append("args[]",o)),`Base UI error #${t}; visit ${r} for the full message.`}var Oo=u(_r(),1);function Os(t,e,r,o){let s=Fs(ga).current;return rf(s,t,e,r,o)&&ya(s,[t,e,r,o]),s.callback}function ha(t){let e=Fs(ga).current;return of(e,t)&&ya(e,t),e.callback}function ga(){return{callback:null,cleanup:null,refs:[]}}function rf(t,e,r,o,s){return t.refs[0]!==e||t.refs[1]!==r||t.refs[2]!==o||t.refs[3]!==s}function of(t,e){return t.refs.length!==e.length||t.refs.some((r,o)=>r!==e[o])}function ya(t,e){if(t.refs=e,e.every(r=>r==null)){t.callback=null;return}t.callback=r=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),r!=null){let o=Array(e.length).fill(null);for(let s=0;s{for(let s=0;s=t}function Ts(t){if(!wa.isValidElement(t))return null;let e=t,r=e.props;return(ba(19)?r?.ref:e.ref)??null}function Jr(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Sa(t,e){let r={};for(let o in t){let s=t[o];if(e?.hasOwnProperty(o)){let a=e[o](s);a!=null&&Object.assign(r,a);continue}s===!0?r[`data-${o.toLowerCase()}`]="":s&&(r[`data-${o.toLowerCase()}`]=s.toString())}return r}function xa(t,e){return typeof t=="function"?t(e):t}function Ca(t,e){return typeof t=="function"?t(e):t}var $r={};function ko(t,e,r,o,s){let a={..._s(t,$r)};return e&&(a=Qr(a,e)),r&&(a=Qr(a,r)),o&&(a=Qr(a,o)),s&&(a=Qr(a,s)),a}function Fa(t){if(t.length===0)return $r;if(t.length===1)return _s(t[0],$r);let e={..._s(t[0],$r)};for(let r=1;r=65&&s<=90&&(typeof e=="function"||typeof e>"u")}function ka(t){return typeof t=="function"}function _s(t,e){return ka(t)?t(e):t??$r}function lf(t,e){return e?t?r=>{if(ff(r)){let s=r;uf(s);let a=e(s);return s.baseUIHandlerPrevented||t?.(s),a}let o=e(r);return t?.(r),o}:e:t}function uf(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Ps(t,e){return e?t?e+" "+t:e:t}function ff(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}var cf=Object.freeze([]),Ke=Object.freeze({});var As=u(_r(),1);function Oa(t,e,r={}){let o=e.render,s=df(e,r);if(r.enabled===!1)return null;let a=r.state??Ke;return mf(t,o,s,a)}function df(t,e={}){let{className:r,style:o,render:s}=t,{state:a=Ke,ref:n,props:l,stateAttributesMapping:m,enabled:f=!0}=e,c=f?xa(r,a):void 0,d=f?Ca(o,a):void 0,g=f?Sa(a,m):Ke,h=f?Jr(g,Array.isArray(l)?Fa(l):l)??Ke:Ke;return typeof document<"u"&&(f?Array.isArray(n)?h.ref=ha([h.ref,Ts(s),...n]):h.ref=Os(h.ref,Ts(s),n):Os(null,null)),f?(c!==void 0&&(h.className=Ps(h.className,c)),d!==void 0&&(h.style=Jr(h.style,d)),h):Ke}function mf(t,e,r,o){if(e){if(typeof e=="function")return e(r,o);let s=ko(r,e.props);return s.ref=r.ref,Oo.cloneElement(e,s)}if(t&&typeof t=="string")return pf(t,r);throw new Error(ks(8))}function pf(t,e){return t==="button"?(0,As.createElement)("button",{type:"button",...e,key:e.key}):t==="img"?(0,As.createElement)("img",{alt:"",...e,key:e.key}):Oo.createElement(t,e)}function Ta(t){return Oa(t.defaultTagName??"div",t,t)}var To=u(yt(),1),to=(0,To.forwardRef)(({icon:t,size:e=24,...r},o)=>(0,To.cloneElement)(t,{width:e,height:e,...r,ref:o}));var _o=u(Pr(),1),Rs=u(z(),1),ur=(0,Rs.jsx)(_o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Rs.jsx)(_o.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})});var Po=u(Pr(),1),Es=u(z(),1),fr=(0,Es.jsx)(Po.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Es.jsx)(Po.Path,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"})});var Ao=u(Pr(),1),Is=u(z(),1),Ls=(0,Is.jsx)(Ao.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Is.jsx)(Ao.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});var Ro=u(Pr(),1),Bs=u(z(),1),Eo=(0,Bs.jsx)(Ro.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Bs.jsx)(Ro.Path,{d:"M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"})});var Io=u(Pr(),1),Ds=u(z(),1),Lo=(0,Ds.jsx)(Io.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,Ds.jsx)(Io.Path,{d:"M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"})});var Ra=u(yt(),1);if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='71d20935c2']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","71d20935c2"),t.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")),document.head.appendChild(t)}var hf={stack:"_19ce0419607e1896__stack"},gf={xs:"var(--wpds-dimension-gap-xs, 4px)",sm:"var(--wpds-dimension-gap-sm, 8px)",md:"var(--wpds-dimension-gap-md, 12px)",lg:"var(--wpds-dimension-gap-lg, 16px)",xl:"var(--wpds-dimension-gap-xl, 24px)","2xl":"var(--wpds-dimension-gap-2xl, 32px)","3xl":"var(--wpds-dimension-gap-3xl, 40px)"},Ar=(0,Ra.forwardRef)(function({direction:e,gap:r,align:o,justify:s,wrap:a,render:n,...l},m){let f={gap:r&&gf[r],alignItems:o,justifyContent:s,flexDirection:e,flexWrap:a};return Ta({render:n,ref:m,props:ko(l,{style:f,className:hf.stack})})});var Ea=u(X(),1),{Fill:Ia,Slot:La}=(0,Ea.createSlotFill)("SidebarToggle");var Ge=u(z(),1);function Ba({headingLevel:t=1,breadcrumbs:e,badges:r,title:o,subTitle:s,actions:a,showSidebarToggle:n=!0}){let l=`h${t}`;return(0,Ge.jsxs)(Ar,{direction:"column",className:"admin-ui-page__header",children:[(0,Ge.jsxs)(Ar,{direction:"row",justify:"space-between",gap:"sm",children:[(0,Ge.jsxs)(Ar,{direction:"row",gap:"sm",align:"center",justify:"start",children:[n&&(0,Ge.jsx)(La,{bubblesVirtually:!0,className:"admin-ui-page__sidebar-toggle-slot"}),o&&(0,Ge.jsx)(l,{className:"admin-ui-page__header-title",children:o}),e,r]}),(0,Ge.jsx)(Ar,{direction:"row",gap:"sm",style:{width:"auto",flexShrink:0},className:"admin-ui-page__header-actions",align:"center",children:a})]}),s&&(0,Ge.jsx)("p",{className:"admin-ui-page__header-subtitle",children:s})]})}var eo=u(z(),1);function Da({headingLevel:t,breadcrumbs:e,badges:r,title:o,subTitle:s,children:a,className:n,actions:l,hasPadding:m=!1,showSidebarToggle:f=!0}){let c=ve("admin-ui-page",n);return(0,eo.jsxs)(ca,{className:c,ariaLabel:o,children:[(o||e||r)&&(0,eo.jsx)(Ba,{headingLevel:t,breadcrumbs:e,badges:r,title:o,subTitle:s,actions:l,showSidebarToggle:f}),m?(0,eo.jsx)("div",{className:"admin-ui-page__content has-padding",children:a}):a]})}Da.SidebarToggleFill=Ia;var Ns=Da;var xo=u(ut()),Uu=u(X()),Hu=u(Na()),ws=u(be()),Wu=u(fe()),Yu=u(yt());var Mu=u(X(),1),Gu=u(Rr(),1),Mg=u(fe(),1),Gg=u(ce(),1),qn=u(yt(),1),jg=u(cr(),1);function Er(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}var we=(t,e,r)=>{let o=Array.isArray(e)?e:e.split("."),s=t;return o.forEach(a=>{s=s?.[a]}),s??r};var yf=["appearanceTools","useRootPaddingAwareAlignments","background.backgroundImage","background.backgroundRepeat","background.backgroundSize","background.backgroundPosition","border.color","border.radius","border.radiusSizes","border.style","border.width","shadow.presets","shadow.defaultPresets","color.background","color.button","color.caption","color.custom","color.customDuotone","color.customGradient","color.defaultDuotone","color.defaultGradients","color.defaultPalette","color.duotone","color.gradients","color.heading","color.link","color.palette","color.text","custom","dimensions.aspectRatio","dimensions.height","dimensions.minHeight","dimensions.width","dimensions.dimensionSizes","layout.contentSize","layout.definitions","layout.wideSize","lightbox.enabled","lightbox.allowEditing","position.fixed","position.sticky","spacing.customSpacingSize","spacing.defaultSpacingSizes","spacing.spacingSizes","spacing.spacingScale","spacing.blockGap","spacing.margin","spacing.padding","spacing.units","typography.fluid","typography.customFontSize","typography.defaultFontSizes","typography.dropCap","typography.fontFamilies","typography.fontSizes","typography.fontStyle","typography.fontWeight","typography.letterSpacing","typography.lineHeight","typography.textAlign","typography.textColumns","typography.textDecoration","typography.textIndent","typography.textTransform","typography.writingMode"];function zs(t,e,r){let o=r?".blocks."+r:"",s=e?"."+e:"",a=`settings${o}${s}`,n=`settings${s}`;if(e)return we(t,a)??we(t,n);let l={};return yf.forEach(m=>{let f=we(t,`settings${o}.${m}`)??we(t,`settings.${m}`);f!==void 0&&(l=Er(l,m.split("."),f))}),l}function Ms(t,e,r,o){let s=o?".blocks."+o:"",a=e?"."+e:"",n=`settings${s}${a}`;return Er(t,n.split("."),r)}var kf=u(Ha(),1);var vf="1600px",bf="320px",wf=1,Sf=.25,xf=.75,Cf="14px";function Wa({minimumFontSize:t,maximumFontSize:e,fontSize:r,minimumViewportWidth:o=bf,maximumViewportWidth:s=vf,scaleFactor:a=wf,minimumFontSizeLimit:n}){if(n=Re(n)?n:Cf,r){let b=Re(r);if(!b?.unit||!b?.value)return null;let T=Re(n,{coerceTo:b.unit});if(T?.value&&!t&&!e&&b?.value<=T?.value)return null;if(e||(e=`${b.value}${b.unit}`),!t){let Y=b.unit==="px"?b.value:b.value*16,I=Math.min(Math.max(1-.075*Math.log2(Y),Sf),xf),V=ro(b.value*I,3);T?.value&&V0}function Ff(t){let e=t?.typography??{},r=t?.layout,o=Re(r?.wideSize)?r?.wideSize:null;return Gs(e)&&o?{fluid:{maxViewportWidth:o,...typeof e.fluid=="object"?e.fluid:{}}}:{fluid:e?.fluid}}function Ya(t,e){let{size:r}=t;if(!r||r==="0"||t?.fluid===!1||!Gs(e?.typography)&&!Gs(t))return r;let o=Ff(e)?.fluid??{},s=Wa({minimumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.min,maximumFontSize:typeof t?.fluid=="boolean"?void 0:t?.fluid?.max,fontSize:r,minimumFontSizeLimit:typeof o=="object"?o?.minFontSize:void 0,maximumViewportWidth:typeof o=="object"?o?.maxViewportWidth:void 0,minimumViewportWidth:typeof o=="object"?o?.minViewportWidth:void 0});return s||r}var Of=[{path:["color","palette"],valueKey:"color",cssVarInfix:"color",classes:[{classSuffix:"color",propertyName:"color"},{classSuffix:"background-color",propertyName:"background-color"},{classSuffix:"border-color",propertyName:"border-color"}]},{path:["color","gradients"],valueKey:"gradient",cssVarInfix:"gradient",classes:[{classSuffix:"gradient-background",propertyName:"background"}]},{path:["color","duotone"],valueKey:"colors",cssVarInfix:"duotone",valueFunc:({slug:t})=>`url( '#wp-duotone-${t}' )`,classes:[]},{path:["shadow","presets"],valueKey:"shadow",cssVarInfix:"shadow",classes:[]},{path:["typography","fontSizes"],valueFunc:(t,e)=>Ya(t,e),valueKey:"size",cssVarInfix:"font-size",classes:[{classSuffix:"font-size",propertyName:"font-size"}]},{path:["typography","fontFamilies"],valueKey:"fontFamily",cssVarInfix:"font-family",classes:[{classSuffix:"font-family",propertyName:"font-family"}]},{path:["spacing","spacingSizes"],valueKey:"size",cssVarInfix:"spacing",valueFunc:({size:t})=>t,classes:[]},{path:["border","radiusSizes"],valueKey:"size",cssVarInfix:"border-radius",classes:[]},{path:["dimensions","dimensionSizes"],valueKey:"size",cssVarInfix:"dimension",classes:[]}];function qa(t,e,r=[],o="slug",s){let a=[e?we(t,["blocks",e,...r]):void 0,we(t,r)].filter(Boolean);for(let n of a)if(n){let l=["custom","theme","default"];for(let m of l){let f=n[m];if(f){let c=f.find(d=>d[o]===s);if(c)return o==="slug"||qa(t,e,r,"slug",c.slug)[o]===c[o]?c:void 0}}}}function Tf(t,e,r,[o,s]=[]){let a=Of.find(l=>l.cssVarInfix===o);if(!a||!t.settings)return r;let n=qa(t.settings,e,a.path,"slug",s);if(n){let{valueKey:l}=a,m=n[l];return Bo(t,e,m)}return r}function _f(t,e,r,o=[]){let s=(e?we(t?.settings??{},["blocks",e,"custom",...o]):void 0)??we(t?.settings??{},["custom",...o]);return s?Bo(t,e,s):r}function Bo(t,e,r){if(!r||typeof r!="string")if(typeof r=="object"&&r!==null&&"ref"in r&&typeof r.ref=="string"){let f=we(t,r.ref);if(!f||typeof f=="object"&&"ref"in f)return f;r=f}else return r;let o="var:",s="var(--wp--",a=")",n;if(r.startsWith(o))n=r.slice(o.length).split("|");else if(r.startsWith(s)&&r.endsWith(a))n=r.slice(s.length,-a.length).split("--");else return r;let[l,...m]=n;return l==="preset"?Tf(t,e,r,m):l==="custom"?_f(t,e,r,m):r}function js(t,e,r,o=!0){let s=e?"."+e:"",a=r?`styles.blocks.${r}${s}`:`styles${s}`;if(!t)return;let n=we(t,a);return o?Bo(t,r,n):n}function Us(t,e,r,o){let s=e?"."+e:"",a=o?`styles.blocks.${o}${s}`:`styles${s}`;return Er(t,a.split("."),r)}var Hs=u(Xa(),1);function oo(t,e){return typeof t!="object"||typeof e!="object"?t===e:(0,Hs.default)(t?.styles,e?.styles)&&(0,Hs.default)(t?.settings,e?.settings)}var ri=u($a(),1);function ti(t){return Object.prototype.toString.call(t)==="[object Object]"}function ei(t){var e,r;return ti(t)===!1?!1:(e=t.constructor,e===void 0?!0:(r=e.prototype,!(ti(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)))}function dr(t,e){return(0,ri.default)(t,e,{isMergeableObject:ei,customMerge:r=>{if(r==="backgroundImage")return(o,s)=>s??o}})}var jf={grad:.9,turn:360,rad:360/(2*Math.PI)},je=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},qt=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},Fe=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},fi=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},oi=function(t){return{r:Fe(t.r,0,255),g:Fe(t.g,0,255),b:Fe(t.b,0,255),a:Fe(t.a)}},Ws=function(t){return{r:qt(t.r),g:qt(t.g),b:qt(t.b),a:qt(t.a,3)}},Uf=/^#([0-9a-f]{3,8})$/i,Do=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},ci=function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=Math.max(e,r,o),n=a-Math.min(e,r,o),l=n?a===e?(r-o)/n:a===r?2+(o-e)/n:4+(e-r)/n:0;return{h:60*(l<0?l+6:l),s:a?n/a*100:0,v:a/255*100,a:s}},di=function(t){var e=t.h,r=t.s,o=t.v,s=t.a;e=e/360*6,r/=100,o/=100;var a=Math.floor(e),n=o*(1-r),l=o*(1-(e-a)*r),m=o*(1-(1-e+a)*r),f=a%6;return{r:255*[o,l,n,n,m,o][f],g:255*[m,o,o,l,n,n][f],b:255*[n,n,m,o,o,l][f],a:s}},si=function(t){return{h:fi(t.h),s:Fe(t.s,0,100),l:Fe(t.l,0,100),a:Fe(t.a)}},ni=function(t){return{h:qt(t.h),s:qt(t.s),l:qt(t.l),a:qt(t.a,3)}},ai=function(t){return di((r=(e=t).s,{h:e.h,s:(r*=((o=e.l)<50?o:100-o)/100)>0?2*r/(o+r)*100:0,v:o+r,a:e.a}));var e,r,o},no=function(t){return{h:(e=ci(t)).h,s:(s=(200-(r=e.s))*(o=e.v)/100)>0&&s<200?r*o/100/(s<=100?s:200-s)*100:0,l:s/2,a:e.a};var e,r,o,s},Hf=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Wf=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Yf=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,qf=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Zs={string:[[function(t){var e=Uf.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?qt(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?qt(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=Yf.exec(t)||qf.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:oi({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=Hf.exec(t)||Wf.exec(t);if(!e)return null;var r,o,s=si({h:(r=e[1],o=e[2],o===void 0&&(o="deg"),Number(r)*(jf[o]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return ai(s)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,o=t.b,s=t.a,a=s===void 0?1:s;return je(e)&&je(r)&&je(o)?oi({r:Number(e),g:Number(r),b:Number(o),a:Number(a)}):null},"rgb"],[function(t){var e=t.h,r=t.s,o=t.l,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=si({h:Number(e),s:Number(r),l:Number(o),a:Number(a)});return ai(n)},"hsl"],[function(t){var e=t.h,r=t.s,o=t.v,s=t.a,a=s===void 0?1:s;if(!je(e)||!je(r)||!je(o))return null;var n=(function(l){return{h:fi(l.h),s:Fe(l.s,0,100),v:Fe(l.v,0,100),a:Fe(l.a)}})({h:Number(e),s:Number(r),v:Number(o),a:Number(a)});return di(n)},"hsv"]]},ii=function(t,e){for(var r=0;r=.5},t.prototype.toHex=function(){return e=Ws(this.rgba),r=e.r,o=e.g,s=e.b,n=(a=e.a)<1?Do(qt(255*a)):"","#"+Do(r)+Do(o)+Do(s)+n;var e,r,o,s,a,n},t.prototype.toRgb=function(){return Ws(this.rgba)},t.prototype.toRgbString=function(){return e=Ws(this.rgba),r=e.r,o=e.g,s=e.b,(a=e.a)<1?"rgba("+r+", "+o+", "+s+", "+a+")":"rgb("+r+", "+o+", "+s+")";var e,r,o,s,a},t.prototype.toHsl=function(){return ni(no(this.rgba))},t.prototype.toHslString=function(){return e=ni(no(this.rgba)),r=e.h,o=e.s,s=e.l,(a=e.a)<1?"hsla("+r+", "+o+"%, "+s+"%, "+a+")":"hsl("+r+", "+o+"%, "+s+"%)";var e,r,o,s,a},t.prototype.toHsv=function(){return e=ci(this.rgba),{h:qt(e.h),s:qt(e.s),v:qt(e.v),a:qt(e.a,3)};var e},t.prototype.invert=function(){return Ee({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),Ee(Ys(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),Ee(Ys(this.rgba,-e))},t.prototype.grayscale=function(){return Ee(Ys(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),Ee(li(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),Ee(li(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?Ee({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):qt(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=no(this.rgba);return typeof e=="number"?Ee({h:e,s:r.s,l:r.l,a:r.a}):qt(r.h)},t.prototype.isEqual=function(e){return this.toHex()===Ee(e).toHex()},t})(),Ee=function(t){return t instanceof Xs?t:new Xs(t)},ui=[],mi=function(t){t.forEach(function(e){ui.indexOf(e)<0&&(e(Xs,Zs),ui.push(e))})};var Ks=u(yt(),1);var pi=u(yt(),1),Xt=(0,pi.createContext)({user:{styles:{},settings:{}},base:{styles:{},settings:{}},merged:{styles:{},settings:{}},onChange:()=>{},fontLibraryEnabled:!1});var hi=u(z(),1);function ao({children:t,value:e,baseValue:r,onChange:o,fontLibraryEnabled:s}){let a=(0,Ks.useMemo)(()=>dr(r,e),[r,e]),n=(0,Ks.useMemo)(()=>({user:e,base:r,merged:a,onChange:o,fontLibraryEnabled:s}),[e,r,a,o,s]);return(0,hi.jsx)(Xt.Provider,{value:n,children:t})}var Ue=u(X(),1),Li=u(ut(),1);var lc=u(fe(),1),uc=u(be(),1);var gi=u(z(),1);function Js({className:t,...e}){return(0,gi.jsx)(to,{className:ve(t,"global-styles-ui-icon-with-current-color"),...e})}var Je=u(X(),1);var mr=u(z(),1);function Xf({icon:t,children:e,...r}){return(0,mr.jsxs)(Je.__experimentalItem,{...r,children:[t&&(0,mr.jsxs)(Je.__experimentalHStack,{justify:"flex-start",children:[(0,mr.jsx)(Js,{icon:t,size:24}),(0,mr.jsx)(Je.FlexItem,{children:e})]}),!t&&e]})}function Ie(t){return(0,mr.jsx)(Je.Navigator.Button,{as:Xf,...t})}var Qf=u(X(),1);var $f=u(ut(),1),Ci=u(ce(),1);var Qs=function(t){var e=t/255;return e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},$s=function(t){return .2126*Qs(t.r)+.7152*Qs(t.g)+.0722*Qs(t.b)};function yi(t){t.prototype.luminance=function(){return e=$s(this.rgba),(r=2)===void 0&&(r=0),o===void 0&&(o=Math.pow(10,r)),Math.round(o*e)/o+0;var e,r,o},t.prototype.contrast=function(e){e===void 0&&(e="#FFF");var r,o,s,a,n,l,m,f=e instanceof t?e:new t(e);return a=this.rgba,n=f.toRgb(),l=$s(a),m=$s(n),r=l>m?(l+.05)/(m+.05):(m+.05)/(l+.05),(o=2)===void 0&&(o=0),s===void 0&&(s=Math.pow(10,o)),Math.floor(s*r)/s+0},t.prototype.isReadable=function(e,r){return e===void 0&&(e="#FFF"),r===void 0&&(r={}),this.contrast(e)>=(l=(n=(o=r).size)===void 0?"normal":n,(a=(s=o.level)===void 0?"AA":s)==="AAA"&&l==="normal"?7:a==="AA"&&l==="large"?3:4.5);var o,s,a,n,l}}var Pe=u(yt(),1),wi=u(fe(),1),Si=u(be(),1),en=u(ut(),1);function tn(t,e){if(!e?.length||typeof t!="object"||!t||!Object.keys(t).length)return t;for(let r in t)e.includes(r)?delete t[r]:typeof t[r]=="object"&&tn(t[r],e);return t}var Vo=(t,e)=>{if(!t||!e?.length)return{};let r={};return Object.keys(t).forEach(o=>{if(e.includes(o))r[o]=t[o];else if(typeof t[o]=="object"){let s=Vo(t[o],e);Object.keys(s).length&&(r[o]=s)}}),r};function io(t,e){let r=Vo(structuredClone(t),e);return oo(r,t)}function vi(t,e){if(!Array.isArray(t)||!e)return null;let o=e.replace("var(","").replace(")","")?.split("--").slice(-1)[0];return t.find(s=>s.slug===o)}function bi(t){let e=t?.settings?.typography?.fontFamilies?.theme,r=t?.settings?.typography?.fontFamilies?.custom,o=[];e&&r?o=[...e,...r]:e?o=e:r&&(o=r);let s=t?.styles?.typography?.fontFamily,a=vi(o,s),n=t?.styles?.elements?.heading?.typography?.fontFamily,l;return n?l=vi(o,t?.styles?.elements?.heading?.typography?.fontFamily):l=a,[a,l]}mi([yi]);function kt(t,e,r="merged",o=!0){let{user:s,base:a,merged:n,onChange:l}=(0,Pe.useContext)(Xt),m=n;r==="base"?m=a:r==="user"&&(m=s);let f=(0,Pe.useMemo)(()=>js(m,t,e,o),[m,t,e,o]),c=(0,Pe.useCallback)(d=>{let g=Us(s,t,d,e);l(g)},[s,l,t,e]);return[f,c]}function _t(t,e,r="merged"){let{user:o,base:s,merged:a,onChange:n}=(0,Pe.useContext)(Xt),l=a;r==="base"?l=s:r==="user"&&(l=o);let m=(0,Pe.useMemo)(()=>zs(l,t,e),[l,t,e]),f=(0,Pe.useCallback)(c=>{let d=Ms(o,t,c,e);n(d)},[o,n,t,e]);return[m,f]}var Kf=[];function Jf({title:t,settings:e,styles:r}){return t===(0,en.__)("Default")||Object.keys(e||{}).length>0||Object.keys(r||{}).length>0}function No(t=[]){let{variationsFromTheme:e}=(0,wi.useSelect)(o=>({variationsFromTheme:o(Si.store).__experimentalGetCurrentThemeGlobalStylesVariations?.()||Kf}),[]),{user:r}=(0,Pe.useContext)(Xt);return(0,Pe.useMemo)(()=>{let o=structuredClone(r),s=tn(o,t);s.title=(0,en.__)("Default");let a=e.filter(l=>io(l,t)).map(l=>dr(s,l)),n=[s,...a];return n?.length?n.filter(Jf):[]},[t,r,e])}var xi=u(Vs(),1),{lock:d1,unlock:vt}=(0,xi.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/global-styles-ui");var rn=u(z(),1),{useHasDimensionsPanel:y1,useHasTypographyPanel:v1,useHasColorPanel:b1,useSettingsForBlockElement:w1,useHasBackgroundPanel:S1}=vt(Ci.privateApis);var Le=u(X(),1);function Lr(){let[t="black"]=kt("color.text"),[e="white"]=kt("color.background"),[r=t]=kt("elements.h1.color.text"),[o=r]=kt("elements.link.color.text"),[s=o]=kt("elements.button.color.background"),[a]=_t("color.palette.core")||[],[n]=_t("color.palette.theme")||[],[l]=_t("color.palette.custom")||[],m=(n??[]).concat(l??[]).concat(a??[]),f=m.filter(({color:g})=>g===t),c=m.filter(({color:g})=>g===s),d=f.concat(c).concat(m).filter(({color:g})=>g!==e).slice(0,2);return{paletteColors:m,highlightedColors:d}}var Oi=u(yt(),1),Ti=u(X(),1),sn=u(ut(),1);function tc(t,e){return e.length===0?null:(e.sort((r,o)=>Math.abs(t-r)-Math.abs(t-o)),e[0])}function ec(t){let e=[];return t.forEach(r=>{let o=String(r.fontWeight).split(" ");if(o.length===2){let s=parseInt(o[0]),a=parseInt(o[1]);for(let n=s;n<=a;n+=100)e.push(n)}else o.length===1&&e.push(parseInt(o[0]))}),e}function Fi(t){let e=/^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/,r=t.trim(),o=s=>(s=s.trim(),s.match(e)?(s=s.replace(/^["']|["']$/g,""),`"${s}"`):s);return r.includes(",")?r.split(",").map(o).filter(s=>s!=="").join(", "):o(r)}function on(t){if(!t)return"";let e=t.trim();return e.includes(",")&&(e=(e.split(",").find(r=>r.trim()!=="")??"").trim()),e=e.replace(/^["']|["']$/g,""),window.navigator.userAgent.toLowerCase().includes("firefox")&&(e=`"${e}"`),e}function Br(t){let e={fontFamily:Fi(t.fontFamily)};if(!("fontFace"in t)||!Array.isArray(t.fontFace))return e.fontWeight="400",e.fontStyle="normal",e;if(t.fontFace){let r=t.fontFace.filter(o=>o?.fontStyle&&o.fontStyle.toLowerCase()==="normal");if(r.length>0){e.fontStyle="normal";let o=ec(r),s=tc(400,o);e.fontWeight=String(s)||"400"}else e.fontStyle=t.fontFace.length&&t.fontFace[0].fontStyle||"normal",e.fontWeight=t.fontFace.length&&String(t.fontFace[0].fontWeight)||"400"}return e}function ki(t){return{fontFamily:Fi(t.fontFamily),fontStyle:t.fontStyle||"normal",fontWeight:t.fontWeight||"400"}}var lo=u(z(),1);function zo({fontSize:t,variation:e}){let{base:r}=(0,Oi.useContext)(Xt),o=r;e&&(o={...r,...e});let[s]=kt("color.text"),[a,n]=bi(o),l=a?Br(a):{},m=n?Br(n):{};return s&&(l.color=s,m.color=s),t&&(l.fontSize=t,m.fontSize=t),(0,lo.jsxs)(Ti.__unstableMotion.div,{animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:.3,type:"tween"},style:{textAlign:"center",lineHeight:1},children:[(0,lo.jsx)("span",{style:m,children:(0,sn._x)("A","Uppercase letter A")}),(0,lo.jsx)("span",{style:l,children:(0,sn._x)("a","Lowercase letter A")})]})}var _i=u(X(),1);var Pi=u(z(),1);function Ai({normalizedColorSwatchSize:t,ratio:e}){let{highlightedColors:r}=Lr(),o=t*e;return r.map(({slug:s,color:a},n)=>(0,Pi.jsx)(_i.__unstableMotion.div,{style:{height:o,width:o,background:a,borderRadius:o/2},animate:{scale:1,opacity:1},initial:{scale:.1,opacity:0},transition:{delay:n===1?.2:.1}},`${s}-${n}`))}var Ii=u(X(),1),Dr=u(cr(),1),pr=u(yt(),1);var Qe=u(z(),1),Ri=248,Ei=152,rc={leading:!0,trailing:!0};function oc({children:t,label:e,isFocused:r,withHoverView:o}){let[s="white"]=kt("color.background"),[a]=kt("color.gradient"),n=(0,Dr.useReducedMotion)(),[l,m]=(0,pr.useState)(!1),[f,{width:c}]=(0,Dr.useResizeObserver)(),[d,g]=(0,pr.useState)(c),[h,v]=(0,pr.useState)(),_=(0,Dr.useThrottle)(g,250,rc);(0,pr.useLayoutEffect)(()=>{c&&_(c)},[c,_]),(0,pr.useLayoutEffect)(()=>{let b=d?d/Ri:1,T=b-(h||0);(Math.abs(T)>.1||!h)&&v(b)},[d,h]);let A=c?c/Ri:1,k=h||A;return(0,Qe.jsxs)(Qe.Fragment,{children:[(0,Qe.jsx)("div",{style:{position:"relative"},children:f}),!!c&&(0,Qe.jsx)("div",{className:"global-styles-ui-preview__wrapper",style:{height:Ei*k},onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),tabIndex:-1,children:(0,Qe.jsx)(Ii.__unstableMotion.div,{style:{height:Ei*k,width:"100%",background:a??s,cursor:o?"pointer":void 0},initial:"start",animate:(l||r)&&!n&&e?"hover":"start",children:[].concat(t).map((b,T)=>b({ratio:k,key:T}))})})]})}var Vr=oc;var de=u(z(),1),sc={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},nc={hover:{opacity:1},start:{opacity:.5}},ac={hover:{scale:1,opacity:1},start:{scale:0,opacity:0}};function ic({label:t,isFocused:e,withHoverView:r,variation:o}){let[s]=kt("typography.fontWeight"),[a="serif"]=kt("typography.fontFamily"),[n=a]=kt("elements.h1.typography.fontFamily"),[l=s]=kt("elements.h1.typography.fontWeight"),[m="black"]=kt("color.text"),[f=m]=kt("elements.h1.color.text"),{paletteColors:c}=Lr();return(0,de.jsxs)(Vr,{label:t,isFocused:e,withHoverView:r,children:[({ratio:d,key:g})=>(0,de.jsx)(Le.__unstableMotion.div,{variants:sc,style:{height:"100%",overflow:"hidden"},children:(0,de.jsxs)(Le.__experimentalHStack,{spacing:10*d,justify:"center",style:{height:"100%",overflow:"hidden"},children:[(0,de.jsx)(zo,{fontSize:65*d,variation:o}),(0,de.jsx)(Le.__experimentalVStack,{spacing:4*d,children:(0,de.jsx)(Ai,{normalizedColorSwatchSize:32,ratio:d})})]})},g),({key:d})=>(0,de.jsx)(Le.__unstableMotion.div,{variants:r?nc:void 0,style:{height:"100%",width:"100%",position:"absolute",top:0,overflow:"hidden",filter:"blur(60px)",opacity:.1},children:(0,de.jsx)(Le.__experimentalHStack,{spacing:0,justify:"flex-start",style:{height:"100%",overflow:"hidden"},children:c.slice(0,4).map(({color:g},h)=>(0,de.jsx)("div",{style:{height:"100%",background:g,flexGrow:1}},h))})},d),({ratio:d,key:g})=>(0,de.jsx)(Le.__unstableMotion.div,{variants:ac,style:{height:"100%",width:"100%",overflow:"hidden",position:"absolute",top:0},children:(0,de.jsx)(Le.__experimentalVStack,{spacing:3*d,justify:"center",style:{height:"100%",overflow:"hidden",padding:10*d,boxSizing:"border-box"},children:t&&(0,de.jsx)("div",{style:{fontSize:40*d,fontFamily:n,color:f,fontWeight:l,lineHeight:"1em",textAlign:"center"},children:t})})},g)]})}var nn=ic;var Bi=u(z(),1);var ln=u(Rr(),1),Nr=u(ut(),1),gr=u(X(),1),un=u(fe(),1),$e=u(yt(),1),Mo=u(ce(),1),Mi=u(cr(),1);import{speak as mc}from"@wordpress/a11y";var Di=u(Rr(),1),Vi=u(fe(),1),fc=u(X(),1);var cc=u(z(),1);function dc(t,e){return t?.filter(r=>r.source==="block"||e.includes(r.name))||[]}function an(t){let e=(0,Vi.useSelect)(s=>{let{getBlockStyles:a}=s(Di.store);return a(t)},[t]),[r]=kt("variations",t),o=Object.keys(r??{});return dc(e,o)}var hr=u(X(),1),Ni=u(ut(),1);var zi=u(z(),1);var Be=u(z(),1),{useHasDimensionsPanel:pc,useHasTypographyPanel:hc,useHasBorderPanel:gc,useSettingsForBlockElement:yc,useHasColorPanel:vc}=vt(Mo.privateApis);function bc(){let t=(0,un.useSelect)(s=>s(ln.store).getBlockTypes(),[]),e=(s,a)=>{let{core:n,noncore:l}=s;return(a.name.startsWith("core/")?n:l).push(a),s},{core:r,noncore:o}=t.reduce(e,{core:[],noncore:[]});return[...r,...o]}function wc(t){let[e]=_t("",t),r=yc(e,t),o=hc(r),s=vc(r),a=gc(r),n=pc(r),l=a||n,m=!!an(t)?.length;return o||s||l||m}function Sc({block:t}){return wc(t.name)?(0,Be.jsx)(Ie,{path:"/blocks/"+encodeURIComponent(t.name),children:(0,Be.jsxs)(gr.__experimentalHStack,{justify:"flex-start",children:[(0,Be.jsx)(Mo.BlockIcon,{icon:t.icon}),(0,Be.jsx)(gr.FlexItem,{children:t.title})]})}):null}function xc({filterValue:t}){let e=bc(),r=(0,Mi.useDebounce)(mc,500),{isMatchingSearchTerm:o}=(0,un.useSelect)(ln.store),s=t?e.filter(n=>o(n,t)):e,a=(0,$e.useRef)(null);return(0,$e.useEffect)(()=>{if(!t)return;let n=a.current?.childElementCount||0,l=(0,Nr.sprintf)((0,Nr._n)("%d result found.","%d results found.",n),n);r(l,"polite")},[t,r]),(0,Be.jsx)("div",{ref:a,className:"global-styles-ui-block-types-item-list",role:"list",children:s.length===0?(0,Be.jsx)(gr.__experimentalText,{align:"center",as:"p",children:(0,Nr.__)("No blocks found.")}):s.map(n=>(0,Be.jsx)(Sc,{block:n},"menu-itemblock-"+n.name))})}var o0=(0,$e.memo)(xc);var Tc=u(Rr(),1),Hi=u(ce(),1),Wi=u(yt(),1),_c=u(fe(),1),Pc=u(be(),1),fn=u(X(),1),Yi=u(ut(),1);var Cc=u(ce(),1),Gi=u(Rr(),1),Fc=u(X(),1),kc=u(yt(),1);var Oc=u(z(),1);var ji=u(X(),1),Ui=u(z(),1);function Se({children:t,level:e=2}){return(0,Ui.jsx)(ji.__experimentalHeading,{className:"global-styles-ui-subtitle",level:e,children:t})}var cn=u(z(),1);var{useHasDimensionsPanel:v0,useHasTypographyPanel:b0,useHasBorderPanel:w0,useSettingsForBlockElement:S0,useHasColorPanel:x0,useHasFiltersPanel:C0,useHasImageSettingsPanel:F0,useHasBackgroundPanel:k0,BackgroundPanel:O0,BorderPanel:T0,ColorPanel:_0,TypographyPanel:P0,DimensionsPanel:A0,FiltersPanel:R0,ImageSettingsPanel:E0,AdvancedPanel:I0}=vt(Hi.privateApis);var jh=u(ut(),1),Uh=u(X(),1),Hh=u(yt(),1);var Ac=u(X(),1);var Rc=u(z(),1);var Ec=u(ut(),1),Go=u(X(),1);var qi=u(z(),1);var Ho=u(X(),1);var Zi=u(X(),1);var jo=u(z(),1),Ic=({variation:t,isFocused:e,withHoverView:r})=>(0,jo.jsx)(Vr,{label:t.title,isFocused:e,withHoverView:r,children:({ratio:o,key:s})=>(0,jo.jsx)(Zi.__experimentalHStack,{spacing:10*o,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,jo.jsx)(zo,{variation:t,fontSize:85*o})},s)}),Xi=Ic;var Ji=u(X(),1),yr=u(yt(),1),Qi=u(dn(),1),Uo=u(ut(),1);var uo=u(z(),1);function zr({variation:t,children:e,isPill:r=!1,properties:o,showTooltip:s=!1}){let[a,n]=(0,yr.useState)(!1),{base:l,user:m,onChange:f}=(0,yr.useContext)(Xt),c=(0,yr.useMemo)(()=>{let A=dr(l,t);return o&&(A=Vo(A,o)),{user:t,base:l,merged:A,onChange:()=>{}}},[t,l,o]),d=()=>f(t),g=A=>{A.keyCode===Qi.ENTER&&(A.preventDefault(),d())},h=(0,yr.useMemo)(()=>oo(m,t),[m,t]),v=t?.title;t?.description&&(v=(0,Uo.sprintf)((0,Uo._x)("%1$s (%2$s)","variation label"),t?.title,t?.description));let _=(0,uo.jsx)("div",{className:ve("global-styles-ui-variations_item",{"is-active":h}),role:"button",onClick:d,onKeyDown:g,tabIndex:0,"aria-label":v,"aria-current":h,onFocus:()=>n(!0),onBlur:()=>n(!1),children:(0,uo.jsx)("div",{className:ve("global-styles-ui-variations_item-preview",{"is-pill":r}),children:e(a)})});return(0,uo.jsx)(Xt.Provider,{value:c,children:s?(0,uo.jsx)(Ji.Tooltip,{text:t?.title,children:_}):_})}var vr=u(z(),1),$i=["typography"];function Wo({title:t,gap:e=2}){let r=No($i);return r?.length<=1?null:(0,vr.jsxs)(Ho.__experimentalVStack,{spacing:3,children:[t&&(0,vr.jsx)(Se,{level:3,children:t}),(0,vr.jsx)(Ho.__experimentalGrid,{columns:3,gap:e,className:"global-styles-ui-style-variations-container",children:r.map((o,s)=>(0,vr.jsx)(zr,{variation:o,properties:$i,showTooltip:!0,children:()=>(0,vr.jsx)(Xi,{variation:o})},s))})]})}var Mh=u(ut(),1),yo=u(X(),1);var Gh=u(yt(),1);var He=u(yt(),1),or=u(fe(),1),rr=u(be(),1),gn=u(ut(),1);var mn=u(el(),1),rl=u(be(),1),ol="/wp/v2/font-families";function sl(t){let{receiveEntityRecords:e}=t.dispatch(rl.store);e("postType","wp_font_family",[],void 0,!0)}async function nl(t,e){let o=await(0,mn.default)({path:ol,method:"POST",body:t});return sl(e),{id:o.id,...o.font_family_settings,fontFace:[]}}async function al(t,e,r){let o={path:`${ol}/${t}/font-faces`,method:"POST",body:e},s=await(0,mn.default)(o);return sl(r),{id:s.id,...s.font_face_settings}}var ul=u(X(),1);var ke=u(ut(),1),pn=["otf","ttf","woff","woff2"],il={100:(0,ke._x)("Thin","font weight"),200:(0,ke._x)("Extra-light","font weight"),300:(0,ke._x)("Light","font weight"),400:(0,ke._x)("Normal","font weight"),500:(0,ke._x)("Medium","font weight"),600:(0,ke._x)("Semi-bold","font weight"),700:(0,ke._x)("Bold","font weight"),800:(0,ke._x)("Extra-bold","font weight"),900:(0,ke._x)("Black","font weight")},ll={normal:(0,ke._x)("Normal","font style"),italic:(0,ke._x)("Italic","font style")};var{File:fl}=window,{kebabCase:Lc}=vt(ul.privateApis);function tr(t,e={}){return!t.name&&(t.fontFamily||t.slug)&&(t.name=t.fontFamily||t.slug),{...t,...e}}function Bc(t){return typeof t!="string"?!1:t!==decodeURIComponent(t)}function Yo(t){let e=il[t.fontWeight??""]||t.fontWeight,r=t.fontStyle==="normal"?"":ll[t.fontStyle??""]||t.fontStyle;return`${e} ${r}`}function Dc(t=[],e=[]){let r=new Map;for(let o of t)r.set(`${o.fontWeight}${o.fontStyle}`,o);for(let o of e)r.set(`${o.fontWeight}${o.fontStyle}`,o);return Array.from(r.values())}function cl(t=[],e=[]){let r=new Map;for(let o of t)r.set(o.slug,{...o});for(let o of e)if(r.has(o.slug)){let{fontFace:s,...a}=o,n=r.get(o.slug),l=Dc(n.fontFace,s);r.set(o.slug,{...a,fontFace:l})}else r.set(o.slug,{...o});return Array.from(r.values())}async function er(t,e,r="all"){let o;if(typeof e=="string")o=`url(${e})`;else if(e instanceof fl)o=await e.arrayBuffer();else return;let a=await new window.FontFace(on(t.fontFamily),o,{style:t.fontStyle,weight:String(t.fontWeight)}).load();if((r==="document"||r==="all")&&document.fonts.add(a),r==="iframe"||r==="all"){let n=document.querySelector('iframe[name="editor-canvas"]');n?.contentDocument&&n.contentDocument.fonts.add(a)}}function fo(t,e="all"){let r=o=>{o.forEach(s=>{s.family===on(t?.fontFamily)&&s.weight===t?.fontWeight&&s.style===t?.fontStyle&&o.delete(s)})};if((e==="document"||e==="all")&&r(document.fonts),e==="iframe"||e==="all"){let o=document.querySelector('iframe[name="editor-canvas"]');o?.contentDocument&&r(o.contentDocument.fonts)}}function Mr(t){if(!t)return;let e;if(Array.isArray(t)?e=t[0]:e=t,!e.startsWith("file:."))return Bc(e)||(e=encodeURI(e)),e}function dl(t){let e=new FormData,{fontFace:r,category:o,...s}=t,a={...s,slug:Lc(t.slug)};return e.append("font_family_settings",JSON.stringify(a)),e}function ml(t){return(t?.fontFace??[]).map((r,o)=>{let s={...r},a=new FormData;if(s.file){let n=Array.isArray(s.file)?s.file:[s.file],l=[];n.forEach((m,f)=>{let c=`file-${o}-${f}`;a.append(c,m,m.name),l.push(c)}),s.src=l.length===1?l[0]:l,delete s.file,a.append("font_face_settings",JSON.stringify(s))}else a.append("font_face_settings",JSON.stringify(s));return a})}async function pl(t,e,r){let o=[];for(let a of e)try{let n=await al(t,a,r);o.push({status:"fulfilled",value:n})}catch(n){o.push({status:"rejected",reason:n})}let s={errors:[],successes:[]};return o.forEach((a,n)=>{if(a.status==="fulfilled"&&a.value){let l=a.value;s.successes.push(l)}else a.reason&&s.errors.push({data:e[n],message:a.reason.message})}),s}async function hl(t){t=Array.isArray(t)?t:[t];let e=await Promise.all(t.map(async r=>fetch(new Request(r)).then(o=>{if(!o.ok)throw new Error(`Error downloading font face asset from ${r}. Server responded with status: ${o.status}`);return o.blob()}).then(o=>{let s=r.split("/").pop();return new fl([o],s,{type:o.type})})));return e.length===1?e[0]:e}function hn(t,e){return e.findIndex(r=>r.fontWeight===t.fontWeight&&r.fontStyle===t.fontStyle)!==-1}function gl(t,e,r){e=Array.isArray(e)?[...e]:[e],t=Array.isArray(t)?[...t]:{...t};let o=e.pop(),s=t;for(let a of e){let n=s[a];s=s[a]=Array.isArray(n)?[...n]:{...n}}return s[o]=r,t}function qo(t,e,r=[]){let o=m=>m.slug===t.slug,s=m=>m.find(o),a=m=>m?r.filter(f=>!o(f)):[...r,t],n=m=>{let f=d=>d.fontWeight===e.fontWeight&&d.fontStyle===e.fontStyle;if(!m)return[...r,{...t,fontFace:[e]}];let c=m.fontFace||[];return c.find(f)?c=c.filter(d=>!f(d)):c=[...c,e],c.length===0?r.filter(d=>!o(d)):r.map(d=>o(d)?{...d,fontFace:c}:d)},l=s(r);return e?n(l):a(l)}var yl=u(z(),1),ne=(0,He.createContext)({});ne.displayName="FontLibraryContext";function Vc({children:t}){let e=(0,or.useRegistry)(),{saveEntityRecord:r,deleteEntityRecord:o}=(0,or.useDispatch)(rr.store),{globalStylesId:s}=(0,or.useSelect)(S=>{let{__experimentalGetCurrentGlobalStylesId:E}=S(rr.store);return{globalStylesId:E()}},[]),a=(0,rr.useEntityRecord)("root","globalStyles",s),[n,l]=(0,He.useState)(!1),{records:m=[],isResolving:f}=(0,rr.useEntityRecords)("postType","wp_font_family",{_embed:!0}),c=(m||[]).map(S=>({id:S.id,...S.font_family_settings||{},fontFace:S?._embedded?.font_faces?.map(E=>E.font_face_settings)||[]}))||[],[d,g]=_t("typography.fontFamilies"),h=async S=>{if(!a.record)return;let E=a.record,et=gl(E??{},["settings","typography","fontFamilies"],S);await r("root","globalStyles",et)},[v,_]=(0,He.useState)(""),[A,k]=(0,He.useState)(void 0),x=d?.theme?d.theme.map(S=>tr(S,{source:"theme"})).sort((S,E)=>S.name.localeCompare(E.name)):[],b=d?.custom?d.custom.map(S=>tr(S,{source:"custom"})).sort((S,E)=>S.name.localeCompare(E.name)):[],T=c?c.map(S=>tr(S,{source:"custom"})).sort((S,E)=>S.name.localeCompare(E.name)):[];(0,He.useEffect)(()=>{v||k(void 0)},[v]);let Y=S=>{if(!S){k(void 0);return}let et=(S.source==="theme"?x:T).find(ct=>ct.slug===S.slug);k({...et||S,source:S.source})},[I]=(0,He.useState)(new Set),V=S=>S.reduce((et,ct)=>{let at=ct?.fontFace&&ct.fontFace?.length>0?ct?.fontFace.map(Ct=>`${Ct.fontStyle??""}${Ct.fontWeight??""}`):["normal400"];return et[ct.slug]=at,et},{}),H=S=>V(S==="theme"?x:b),$=(S,E,et,ct)=>!E&&!et?!!H(ct)[S]:!!H(ct)[S]?.includes((E??"")+(et??"")),bt=(S,E)=>H(E)[S]||[];async function W(S){l(!0);try{let E=[],et=[];for(let at of S){let Ct=!1,Wt=await(0,or.resolveSelect)(rr.store).getEntityRecords("postType","wp_font_family",{slug:at.slug,per_page:1,_embed:!0}),Ot=Wt&&Wt.length>0?Wt[0]:null,J=Ot?{id:Ot.id,...Ot.font_family_settings,fontFace:(Ot?._embedded?.font_faces??[]).map(zt=>zt.font_face_settings)||[]}:null;J||(Ct=!0,J=await nl(dl(at),e));let St=J.fontFace&&at.fontFace?J.fontFace.filter(zt=>zt&&at.fontFace&&hn(zt,at.fontFace)):[];J.fontFace&&at.fontFace&&(at.fontFace=at.fontFace.filter(zt=>!hn(zt,J.fontFace)));let At=[],xe=[];if(at?.fontFace?.length??!1){let zt=await pl(J.id,ml(at),e);At=zt?.successes,xe=zt?.errors}(At?.length>0||St?.length>0)&&(J.fontFace=[...At],E.push(J)),J&&!at?.fontFace?.length&&E.push(J),Ct&&(at?.fontFace?.length??0)>0&&At?.length===0&&await o("postType","wp_font_family",J.id,{force:!0}),et=et.concat(xe)}let ct=et.reduce((at,Ct)=>at.includes(Ct.message)?at:[...at,Ct.message],[]);if(E.length>0){let at=it(E);await h(at)}if(ct.length>0){let at=new Error((0,gn.__)("There was an error installing fonts."));throw at.installationErrors=ct,at}}finally{l(!1)}}async function y(S){if(!S?.id)throw new Error((0,gn.__)("Font family to uninstall is not defined."));try{await o("postType","wp_font_family",S.id,{force:!0});let E=L(S);return await h(E),{deleted:!0}}catch(E){throw console.error("There was an error uninstalling the font family:",E),E}}let L=S=>{let et=(d?.[S.source??""]??[]).filter(at=>at.slug!==S.slug),ct={...d,[S.source??""]:et};return g(ct),S.fontFace&&S.fontFace.forEach(at=>{fo(at,"all")}),ct},it=S=>{let E=ot(S),et={...d,custom:cl(d?.custom,E)};return g(et),K(E),et},ot=S=>S.map(({id:E,fontFace:et,...ct})=>({...ct,...et&&et.length>0?{fontFace:et.map(({id:at,...Ct})=>Ct)}:{}})),K=S=>{S.forEach(E=>{E.fontFace&&E.fontFace.forEach(et=>{let ct=Mr(et?.src??"");ct&&er(et,ct,"all")})})},gt=(S,E)=>{let et=d?.[S.source??""]??[],ct=qo(S,E,et);g({...d,[S.source??""]:ct});let at=$(S.slug,E?.fontStyle??"",E?.fontWeight??"",S.source??"custom");if(E&&at)fo(E,"all");else{let Ct=Mr(E?.src??"");E&&Ct&&er(E,Ct,"all")}},R=async S=>{if(!S.src)return;let E=Mr(S.src);!E||I.has(E)||(er(S,E,"document"),I.add(E))};return(0,yl.jsx)(ne.Provider,{value:{libraryFontSelected:A,handleSetLibraryFontSelected:Y,fontFamilies:d??{},baseCustomFonts:T,isFontActivated:$,getFontFacesActivated:bt,loadFontFaceAsset:R,installFonts:W,uninstallFontFamily:y,toggleActivateFont:gt,getAvailableFontsOutline:V,modalTabOpen:v,setModalTabOpen:_,saveFontFamilies:h,isResolvingLibrary:f,isInstalling:n},children:t})}var Zo=Vc;var us=u(ut(),1),Sn=u(X(),1),$l=u(be(),1),Nh=u(fe(),1);var ht=u(X(),1),mo=u(be(),1),yn=u(fe(),1),wr=u(yt(),1),Et=u(ut(),1);var jr=u(ut(),1),Oe=u(X(),1);var vl=u(X(),1),De=u(yt(),1);var Xo=u(z(),1);function Nc(t){if(t.preview)return t.preview;if(t.src)return Array.isArray(t.src)?t.src[0]:t.src}function zc(t){return"fontStyle"in t&&t.fontStyle||"fontWeight"in t&&t.fontWeight?t:"fontFace"in t&&t.fontFace&&t.fontFace.length?t.fontFace.find(e=>e.fontStyle==="normal"&&e.fontWeight==="400")||t.fontFace[0]:{fontStyle:"normal",fontWeight:"400",fontFamily:t.fontFamily}}function Mc({font:t,text:e}){let r=(0,De.useRef)(null),o=zc(t),s=Br(t);e=e||("name"in t?t.name:"");let a=t.preview,[n,l]=(0,De.useState)(!1),[m,f]=(0,De.useState)(!1),{loadFontFaceAsset:c}=(0,De.useContext)(ne),d=a??Nc(o),g=d&&d.match(/\.(png|jpg|jpeg|gif|svg)$/i),h=ki(o),v={fontSize:"18px",lineHeight:1,opacity:m?"1":"0",...s,...h};return(0,De.useEffect)(()=>{let _=new window.IntersectionObserver(([A])=>{l(A.isIntersecting)},{});return r.current&&_.observe(r.current),()=>_.disconnect()},[r]),(0,De.useEffect)(()=>{(async()=>n&&(!g&&o.src&&await c(o),f(!0)))()},[o,n,c,g]),(0,Xo.jsx)("div",{ref:r,children:g?(0,Xo.jsx)("img",{src:d,loading:"lazy",alt:e,className:"font-library__font-variant_demo-image"}):(0,Xo.jsx)(vl.__experimentalText,{style:v,className:"font-library__font-variant_demo-text",children:e})})}var Gr=Mc;var Ve=u(z(),1);function Gc({font:t,onClick:e,variantsText:r,navigatorPath:o}){let s=t.fontFace?.length||1,a={cursor:e?"pointer":"default"},n=(0,Oe.useNavigator)();return(0,Ve.jsx)(Oe.Button,{__next40pxDefaultSize:!0,onClick:()=>{e(),o&&n.goTo(o)},style:a,className:"font-library__font-card",children:(0,Ve.jsxs)(Oe.Flex,{justify:"space-between",wrap:!1,children:[(0,Ve.jsx)(Gr,{font:t}),(0,Ve.jsxs)(Oe.Flex,{justify:"flex-end",children:[(0,Ve.jsx)(Oe.FlexItem,{children:(0,Ve.jsx)(Oe.__experimentalText,{className:"font-library__font-card__count",children:r||(0,jr.sprintf)((0,jr._n)("%d variant","%d variants",s),s)})}),(0,Ve.jsx)(Oe.FlexItem,{children:(0,Ve.jsx)(to,{icon:(0,jr.isRTL)()?ur:fr})})]})]})})}var co=Gc;var Ko=u(yt(),1),Jo=u(X(),1);var br=u(z(),1);function jc({face:t,font:e}){let{isFontActivated:r,toggleActivateFont:o}=(0,Ko.useContext)(ne),s=(e?.fontFace?.length??0)>0?r(e.slug,t.fontStyle,t.fontWeight,e.source):r(e.slug,void 0,void 0,e.source),a=()=>{if((e?.fontFace?.length??0)>0){o(e,t);return}o(e)},n=e.name+" "+Yo(t),l=(0,Ko.useId)();return(0,br.jsx)("div",{className:"font-library__font-card",children:(0,br.jsxs)(Jo.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,br.jsx)(Jo.CheckboxControl,{checked:s,onChange:a,id:l}),(0,br.jsx)("label",{htmlFor:l,children:(0,br.jsx)(Gr,{font:t,text:n,onClick:a})})]})})}var bl=jc;function wl(t){switch(t){case"normal":return 400;case"bold":return 700;case"bolder":return 500;case"lighter":return 300;default:return parseInt(t,10)}}function Qo(t){return t.sort((e,r)=>e.fontStyle==="normal"&&r.fontStyle!=="normal"?-1:r.fontStyle==="normal"&&e.fontStyle!=="normal"?1:e.fontStyle===r.fontStyle?wl(e.fontWeight?.toString()??"normal")-wl(r.fontWeight?.toString()??"normal"):!e.fontStyle||!r.fontStyle?e.fontStyle?-1:1:e.fontStyle.localeCompare(r.fontStyle))}var ft=u(z(),1);function Uc(){let{baseCustomFonts:t,libraryFontSelected:e,handleSetLibraryFontSelected:r,uninstallFontFamily:o,isResolvingLibrary:s,isInstalling:a,saveFontFamilies:n,getFontFacesActivated:l}=(0,wr.useContext)(ne),[m,f]=_t("typography.fontFamilies"),[c,d]=(0,wr.useState)(!1),[g,h]=(0,wr.useState)(null),[v]=_t("typography.fontFamilies",void 0,"base"),_=(0,yn.useSelect)(R=>{let{__experimentalGetCurrentGlobalStylesId:S}=R(mo.store);return S()},[]),k=!!(0,mo.useEntityRecord)("root","globalStyles",_)?.edits?.settings?.typography?.fontFamilies,x=m?.theme?m.theme.map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name)):[],b=new Set(x.map(R=>R.slug)),T=v?.theme?x.concat(v.theme.filter(R=>!b.has(R.slug)).map(R=>tr(R,{source:"theme"})).sort((R,S)=>R.name.localeCompare(S.name))):[],Y=e?.source==="custom"&&e?.id,I=(0,yn.useSelect)(R=>{let{canUser:S}=R(mo.store);return Y&&S("delete",{kind:"postType",name:"wp_font_family",id:Y})},[Y]),V=!!e&&e?.source!=="theme"&&I,H=()=>{d(!0)},$=async()=>{h(null);try{await n(m),h({type:"success",message:(0,Et.__)("Font family updated successfully.")})}catch(R){h({type:"error",message:(0,Et.sprintf)((0,Et.__)("There was an error updating the font family. %s"),R.message)})}},bt=R=>R?!R.fontFace||!R.fontFace.length?[{fontFamily:R.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Qo(R.fontFace):[],W=R=>{let S=R?.fontFace&&(R?.fontFace?.length??0)>0?R.fontFace.length:1,E=l(R.slug,R.source).length;return(0,Et.sprintf)((0,Et.__)("%1$d/%2$d variants active"),E,S)};(0,wr.useEffect)(()=>{r(e)},[]);let y=e?l(e.slug,e.source).length:0,L=e?.fontFace?.length??(e?.fontFamily?1:0),it=y>0&&y!==L,ot=y===L,K=()=>{if(!e||!e?.source)return;let R=m?.[e.source]?.filter(E=>E.slug!==e.slug)??[],S=ot?R:[...R,e];f({...m,[e.source]:S}),e.fontFace&&e.fontFace.forEach(E=>{if(ot)fo(E,"all");else{let et=Mr(E?.src??"");et&&er(E,et,"all")}})},gt=T.length>0||t.length>0;return(0,ft.jsxs)("div",{className:"font-library__tabpanel-layout",children:[s&&(0,ft.jsx)("div",{className:"font-library__loading",children:(0,ft.jsx)(ht.ProgressBar,{})}),!s&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsxs)(ht.Navigator,{initialPath:e?"/fontFamily":"/",children:[(0,ft.jsx)(ht.Navigator.Screen,{path:"/",children:(0,ft.jsxs)(ht.__experimentalVStack,{spacing:"8",children:[g&&(0,ft.jsx)(ht.Notice,{status:g.type,onRemove:()=>h(null),children:g.message}),!gt&&(0,ft.jsx)(ht.__experimentalText,{as:"p",children:(0,Et.__)("No fonts installed.")}),T.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Et._x)("Theme","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:T.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(co,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{h(null),r(R)}})},R.slug))})]}),t.length>0&&(0,ft.jsxs)(ht.__experimentalVStack,{children:[(0,ft.jsx)("h2",{className:"font-library__fonts-title",children:(0,Et._x)("Custom","font source")}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:t.map(R=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(co,{font:R,navigatorPath:"/fontFamily",variantsText:W(R),onClick:()=>{h(null),r(R)}})},R.slug))})]})]})}),(0,ft.jsxs)(ht.Navigator.Screen,{path:"/fontFamily",children:[e&&(0,ft.jsx)(Hc,{font:e,isOpen:c,setIsOpen:d,setNotice:h,uninstallFontFamily:o,handleSetLibraryFontSelected:r}),(0,ft.jsxs)(ht.Flex,{justify:"flex-start",children:[(0,ft.jsx)(ht.Navigator.BackButton,{icon:(0,Et.isRTL)()?fr:ur,size:"small",onClick:()=>{r(void 0),h(null)},label:(0,Et.__)("Back")}),(0,ft.jsx)(ht.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:e?.name})]}),g&&(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsx)(ht.__experimentalSpacer,{margin:1}),(0,ft.jsx)(ht.Notice,{status:g.type,onRemove:()=>h(null),children:g.message}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:1})]}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsx)(ht.__experimentalText,{children:(0,Et.__)("Choose font variants. Keep in mind that too many variants could make your site slower.")}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:4}),(0,ft.jsxs)(ht.__experimentalVStack,{spacing:0,children:[(0,ft.jsx)(ht.CheckboxControl,{className:"font-library__select-all",label:(0,Et.__)("Select all"),checked:ot,onChange:K,indeterminate:it}),(0,ft.jsx)(ht.__experimentalSpacer,{margin:8}),(0,ft.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:e&&bt(e).map((R,S)=>(0,ft.jsx)("li",{className:"font-library__fonts-list-item",children:(0,ft.jsx)(bl,{font:e,face:R},`face${S}`)},`face${S}`))})]})]})]}),(0,ft.jsxs)(ht.__experimentalHStack,{justify:"flex-end",className:"font-library__footer",children:[a&&(0,ft.jsx)(ht.ProgressBar,{}),V&&(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,isDestructive:!0,variant:"tertiary",onClick:H,children:(0,Et.__)("Delete")}),(0,ft.jsx)(ht.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:$,disabled:!k,accessibleWhenDisabled:!0,children:(0,Et.__)("Update")})]})]})]})}function Hc({font:t,isOpen:e,setIsOpen:r,setNotice:o,uninstallFontFamily:s,handleSetLibraryFontSelected:a}){let n=(0,ht.useNavigator)(),l=async()=>{o(null),r(!1);try{await s(t),n.goBack(),a(void 0),o({type:"success",message:(0,Et.__)("Font family uninstalled successfully.")})}catch(f){o({type:"error",message:(0,Et.__)("There was an error uninstalling the font family.")+f.message})}},m=()=>{r(!1)};return(0,ft.jsx)(ht.__experimentalConfirmDialog,{isOpen:e,cancelButtonText:(0,Et.__)("Cancel"),confirmButtonText:(0,Et.__)("Delete"),onCancel:m,onConfirm:l,size:"medium",children:t&&(0,Et.sprintf)((0,Et.__)('Are you sure you want to delete "%s" font and all its variants and assets?'),t.name)})}var $o=Uc;var Zt=u(yt(),1),nt=u(X(),1),_l=u(cr(),1),Rt=u(ut(),1);var Pl=u(be(),1);function Sl(t,e){let{category:r,search:o}=e,s=t||[];return r&&r!=="all"&&(s=s.filter(a=>a.categories&&a.categories.indexOf(r)!==-1)),o&&(s=s.filter(a=>a.font_family_settings&&a.font_family_settings.name.toLowerCase().includes(o.toLowerCase()))),s}function xl(t){return t.reduce((e,r)=>({...e,[r.slug]:(r?.fontFace||[]).reduce((o,s)=>({...o,[`${s.fontStyle}-${s.fontWeight}`]:!0}),{})}),{})}function Cl(t,e,r){return e?!!r[t]?.[`${e.fontStyle}-${e.fontWeight}`]:!!r[t]}var po=u(ut(),1),ae=u(X(),1),Te=u(z(),1);function Wc(){let t=()=>{window.localStorage.setItem("wp-font-library-google-fonts-permission","true"),window.dispatchEvent(new Event("storage"))};return(0,Te.jsx)("div",{className:"font-library__google-fonts-confirm",children:(0,Te.jsx)(ae.Card,{children:(0,Te.jsxs)(ae.CardBody,{children:[(0,Te.jsx)(ae.__experimentalHeading,{level:2,children:(0,po.__)("Connect to Google Fonts")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,po.__)("To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:3}),(0,Te.jsx)(ae.__experimentalText,{as:"p",children:(0,po.__)("You can alternatively upload files directly on the Upload tab.")}),(0,Te.jsx)(ae.__experimentalSpacer,{margin:6}),(0,Te.jsx)(ae.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:t,children:(0,po.__)("Allow access to Google Fonts")})]})})})}var Fl=Wc;var kl=u(yt(),1),ts=u(X(),1);var Sr=u(z(),1);function Yc({face:t,font:e,handleToggleVariant:r,selected:o}){let s=()=>{if(e?.fontFace){r(e,t);return}r(e)},a=e.name+" "+Yo(t),n=(0,kl.useId)();return(0,Sr.jsx)("div",{className:"font-library__font-card",children:(0,Sr.jsxs)(ts.Flex,{justify:"flex-start",align:"center",gap:"1rem",children:[(0,Sr.jsx)(ts.CheckboxControl,{checked:o,onChange:s,id:n}),(0,Sr.jsx)("label",{htmlFor:n,children:(0,Sr.jsx)(Gr,{font:t,text:a,onClick:s})})]})})}var Ol=Yc;var tt=u(z(),1),qc={slug:"all",name:(0,Rt._x)("All","font categories")},Tl="wp-font-library-google-fonts-permission",Zc=500;function Xc({slug:t}){let e=t==="google-fonts",r=()=>window.localStorage.getItem(Tl)==="true",[o,s]=(0,Zt.useState)(null),[a,n]=(0,Zt.useState)(null),[l,m]=(0,Zt.useState)([]),[f,c]=(0,Zt.useState)(1),[d,g]=(0,Zt.useState)({}),[h,v]=(0,Zt.useState)(e&&!r()),{installFonts:_,isInstalling:A}=(0,Zt.useContext)(ne),{record:k,isResolving:x}=(0,Pl.useEntityRecord)("root","fontCollection",t);(0,Zt.useEffect)(()=>{let J=()=>{v(e&&!r())};return J(),window.addEventListener("storage",J),()=>window.removeEventListener("storage",J)},[t,e]);let b=()=>{window.localStorage.setItem(Tl,"false"),window.dispatchEvent(new Event("storage"))};(0,Zt.useEffect)(()=>{s(null)},[t]),(0,Zt.useEffect)(()=>{m([])},[o]);let T=(0,Zt.useMemo)(()=>k?.font_families??[],[k]),Y=k?.categories??[],I=[qc,...Y],V=(0,Zt.useMemo)(()=>Sl(T,d),[T,d]),H=Math.max(window.innerHeight,Zc),$=Math.floor((H-417)/61),bt=Math.ceil(V.length/$),W=(f-1)*$,y=f*$,L=V.slice(W,y),it=J=>{g({...d,category:J}),c(1)},K=(0,_l.debounce)(J=>{g({...d,search:J}),c(1)},300),gt=(J,St)=>{let At=qo(J,St,l);m(At)},R=xl(l),S=()=>{m([])},E=l.length>0?l[0]?.fontFace?.length??0:0,et=E>0&&E!==o?.fontFace?.length,ct=E===o?.fontFace?.length,at=()=>{let J=[];!ct&&o&&J.push(o),m(J)},Ct=async()=>{n(null);let J=l[0];try{J?.fontFace&&await Promise.all(J.fontFace.map(async St=>{St.src&&(St.file=await hl(St.src))}))}catch{n({type:"error",message:(0,Rt.__)("Error installing the fonts, could not be downloaded.")});return}try{await _([J]),n({type:"success",message:(0,Rt.__)("Fonts were installed successfully.")})}catch(St){n({type:"error",message:St.message})}S()},Wt=J=>J?!J.fontFace||!J.fontFace.length?[{fontFamily:J.fontFamily,fontStyle:"normal",fontWeight:"400"}]:Qo(J.fontFace):[];if(h)return(0,tt.jsx)(Fl,{});let Ot=()=>t!=="google-fonts"||h||o?null:(0,tt.jsx)(nt.DropdownMenu,{icon:Ls,label:(0,Rt.__)("Actions"),popoverProps:{position:"bottom left"},controls:[{title:(0,Rt.__)("Revoke access to Google Fonts"),onClick:b}]});return(0,tt.jsxs)("div",{className:"font-library__tabpanel-layout",children:[x&&(0,tt.jsx)("div",{className:"font-library__loading",children:(0,tt.jsx)(nt.ProgressBar,{})}),!x&&k&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsxs)(nt.Navigator,{initialPath:"/",className:"font-library__tabpanel-layout",children:[(0,tt.jsxs)(nt.Navigator.Screen,{path:"/",children:[(0,tt.jsxs)(nt.__experimentalHStack,{justify:"space-between",children:[(0,tt.jsxs)(nt.__experimentalVStack,{children:[(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,children:k.name}),(0,tt.jsx)(nt.__experimentalText,{children:k.description})]}),(0,tt.jsx)(Ot,{})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsxs)(nt.__experimentalHStack,{spacing:4,justify:"space-between",children:[(0,tt.jsx)(nt.SearchControl,{value:d.search,placeholder:(0,Rt.__)("Font name\u2026"),label:(0,Rt.__)("Search"),onChange:K,hideLabelFromVision:!1}),(0,tt.jsx)(nt.SelectControl,{__next40pxDefaultSize:!0,label:(0,Rt.__)("Category"),value:d.category,onChange:it,children:I&&I.map(J=>(0,tt.jsx)("option",{value:J.slug,children:J.name},J.slug))})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),!!k?.font_families?.length&&!V.length&&(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("No fonts found. Try with a different search term.")}),(0,tt.jsx)("div",{className:"font-library__fonts-grid__main",children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:L.map(J=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(co,{font:J.font_family_settings,navigatorPath:"/fontFamily",onClick:()=>{s(J.font_family_settings)}})},J.font_family_settings.slug))})})]}),(0,tt.jsxs)(nt.Navigator.Screen,{path:"/fontFamily",children:[(0,tt.jsxs)(nt.Flex,{justify:"flex-start",children:[(0,tt.jsx)(nt.Navigator.BackButton,{icon:(0,Rt.isRTL)()?fr:ur,size:"small",onClick:()=>{s(null),n(null)},label:(0,Rt.__)("Back")}),(0,tt.jsx)(nt.__experimentalHeading,{level:2,size:13,className:"global-styles-ui-header",children:o?.name})]}),a&&(0,tt.jsxs)(tt.Fragment,{children:[(0,tt.jsx)(nt.__experimentalSpacer,{margin:1}),(0,tt.jsx)(nt.Notice,{status:a.type,onRemove:()=>n(null),children:a.message}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:1})]}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.__experimentalText,{children:(0,Rt.__)("Select font variants to install.")}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:4}),(0,tt.jsx)(nt.CheckboxControl,{className:"font-library__select-all",label:(0,Rt.__)("Select all"),checked:ct,onChange:at,indeterminate:et}),(0,tt.jsx)(nt.__experimentalVStack,{spacing:0,children:(0,tt.jsx)("ul",{role:"list",className:"font-library__fonts-list",children:o&&Wt(o).map((J,St)=>(0,tt.jsx)("li",{className:"font-library__fonts-list-item",children:(0,tt.jsx)(Ol,{font:o,face:J,handleToggleVariant:gt,selected:Cl(o.slug,o.fontFace?J:null,R)})},`face${St}`))})}),(0,tt.jsx)(nt.__experimentalSpacer,{margin:16})]})]}),o&&(0,tt.jsx)(nt.Flex,{justify:"flex-end",className:"font-library__footer",children:(0,tt.jsx)(nt.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:Ct,isBusy:A,disabled:l.length===0||A,accessibleWhenDisabled:!0,children:(0,Rt.__)("Install")})}),!o&&(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,className:"font-library__footer",justify:"end",spacing:6,children:[(0,tt.jsx)(nt.__experimentalHStack,{justify:"flex-start",expanded:!1,spacing:1,className:"font-library__page-selection",children:(0,Zt.createInterpolateElement)((0,Rt.sprintf)((0,Rt._x)("
Page
%1$s
of %2$d
","paging"),"",bt),{div:(0,tt.jsx)("div",{"aria-hidden":!0}),CurrentPage:(0,tt.jsx)(nt.SelectControl,{"aria-label":(0,Rt.__)("Current page"),value:f.toString(),options:[...Array(bt)].map((J,St)=>({label:(St+1).toString(),value:(St+1).toString()})),onChange:J=>c(parseInt(J)),size:"small",variant:"minimal"})})}),(0,tt.jsxs)(nt.__experimentalHStack,{expanded:!1,spacing:1,children:[(0,tt.jsx)(nt.Button,{onClick:()=>c(f-1),disabled:f===1,accessibleWhenDisabled:!0,label:(0,Rt.__)("Previous page"),icon:(0,Rt.isRTL)()?Eo:Lo,showTooltip:!0,size:"compact",tooltipPosition:"top"}),(0,tt.jsx)(nt.Button,{onClick:()=>c(f+1),disabled:f===bt,accessibleWhenDisabled:!0,label:(0,Rt.__)("Next page"),icon:(0,Rt.isRTL)()?Lo:Eo,showTooltip:!0,size:"compact",tooltipPosition:"top"})]})]})]})]})}var es=Xc;var Ur=u(ut(),1),$t=u(X(),1),go=u(yt(),1);var rs=(t=>typeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),Al=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var g=typeof rs=="function"&&rs;if(!d&&g)return g(c,!0);if(m)return m(c,!0);var h=new Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof rs=="function"&&rs,f=0;f0},c.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw new Error("Unexpected end of input "+this.bit_pos_+" "+this.bit_end_pos_)}else{var d=this.buf_ptr_,g=this.input_.read(this.buf_,d,n);if(g<0)throw new Error("Unexpected end of input");if(g=8;)this.val_>>>=8,this.val_|=this.buf_[this.pos_&m]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0},c.prototype.readBits=function(d){32-this.bit_pos_>>this.bit_pos_&f[d];return this.bit_pos_+=d,g},s.exports=c},{}],2:[function(o,s,a){var n=0,l=1,m=2,f=3;a.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])},{}],3:[function(o,s,a){var n=o("./streams").BrotliInput,l=o("./streams").BrotliOutput,m=o("./bit_reader"),f=o("./dictionary"),c=o("./huffman").HuffmanCode,d=o("./huffman").BrotliBuildHuffmanTable,g=o("./context"),h=o("./prefix"),v=o("./transform"),_=8,A=16,k=256,x=704,b=26,T=6,Y=2,I=8,V=255,H=1080,$=18,bt=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),W=16,y=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),L=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),it=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function ot(N){var O;return N.readBits(1)===0?16:(O=N.readBits(3),O>0?17+O:(O=N.readBits(3),O>0?8+O:17))}function K(N){if(N.readBits(1)){var O=N.readBits(3);return O===0?1:N.readBits(O)+(1<1&&dt===0)throw new Error("Invalid size byte");O.meta_block_length|=dt<4&&rt===0)throw new Error("Invalid size nibble");O.meta_block_length|=rt<>>B.bit_pos_&V,D=N[O].bits-I,D>0&&(B.bit_pos_+=I,O+=N[O].value,O+=B.val_>>>B.bit_pos_&(1<0;){var Ft=0,Kt;if(P.readMoreInput(),P.fillBitWindow(),Ft+=P.val_>>>P.bit_pos_&31,P.bit_pos_+=lt[Ft].bits,Kt=lt[Ft].value&255,Kt>Kt);else{var he=Kt-14,te,Jt,Dt=0;if(Kt===A&&(Dt=dt),st!==Dt&&(rt=0,st=Dt),te=rt,rt>0&&(rt-=2,rt<<=he),rt+=P.readBits(he)+3,Jt=rt-te,D+Jt>O)throw new Error("[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols");for(var Qt=0;Qt0;++st){var Dt=bt[st],Qt=0,ee;P.fillBitWindow(),Qt+=P.val_>>>P.bit_pos_&15,P.bit_pos_+=Jt[Qt].bits,ee=Jt[Qt].value,Kt[Dt]=ee,ee!==0&&(he-=32>>ee,++te)}if(!(te===1||he===0))throw new Error("[ReadHuffmanCode] invalid num_codes or space");E(Kt,N,rt,P)}if(D=d(O,B,I,rt,N),D===0)throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");return D}function ct(N,O,B){var P,D;return P=S(N,O,B),D=h.kBlockLengthPrefixCode[P].nbits,h.kBlockLengthPrefixCode[P].offset+B.readBits(D)}function at(N,O,B){var P;return N>>5]),this.htrees=new Uint32Array(O)}Ot.prototype.decode=function(N){var O,B,P=0;for(O=0;O=N)throw new Error("[DecodeContextMap] i >= context_map_size");wt[rt]=0,++rt}else wt[rt]=lt-D,++rt}return O.readBits(1)&&Wt(wt,N),B}function St(N,O,B,P,D,dt,rt){var st=B*2,wt=B,lt=S(O,B*H,rt),q;lt===0?q=D[st+(dt[wt]&1)]:lt===1?q=D[st+(dt[wt]-1&1)]+1:q=lt-2,q>=N&&(q-=N),P[B]=q,D[st+(dt[wt]&1)]=q,++dt[wt]}function At(N,O,B,P,D,dt){var rt=D+1,st=B&D,wt=dt.pos_&m.IBUF_MASK,lt;if(O<8||dt.bit_pos_+(O<<3)0;)dt.readMoreInput(),P[st++]=dt.readBits(8),st===rt&&(N.write(P,rt),st=0);return}if(dt.bit_end_pos_<32)throw new Error("[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32");for(;dt.bit_pos_<32;)P[st]=dt.val_>>>dt.bit_pos_,dt.bit_pos_+=8,++st,--O;if(lt=dt.bit_end_pos_-dt.bit_pos_>>3,wt+lt>m.IBUF_MASK){for(var q=m.IBUF_MASK+1-wt,Ft=0;Ft=rt){N.write(P,rt),st-=rt;for(var Ft=0;Ft=rt;){if(lt=rt-st,dt.input_.read(P,st,lt)O.buffer.length){var lr=new Uint8Array(P+Mt);lr.set(O.buffer),O.buffer=lr}if(D=ze.input_end,Co=ze.is_uncompressed,ze.is_metadata){for(xe(pt);Mt>0;--Mt)pt.readMoreInput(),pt.readBits(8);continue}if(Mt!==0){if(Co){pt.bit_pos_=pt.bit_pos_+7&-8,At(O,Mt,P,q,lt,pt),P+=Mt;continue}for(B=0;B<3;++B)ge[B]=K(pt)+1,ge[B]>=2&&(et(ge[B]+2,Qt,B*H,pt),et(b,ee,B*H,pt),Ce[B]=ct(ee,B*H,pt),M[B]=1);for(pt.readMoreInput(),i=pt.readBits(2),U=W+(pt.readBits(4)<0;){var Nt,se,ie,Or,Ss,le,ye,Me,Zr,Tr,Xr;for(pt.readMoreInput(),Ce[1]===0&&(St(ge[1],Qt,1,Ae,w,M,pt),Ce[1]=ct(ee,H,pt),Yt=Dt[1].htrees[Ae[1]]),--Ce[1],Nt=S(Dt[1].codes,Yt,pt),se=Nt>>6,se>=2?(se-=2,ye=-1):ye=0,ie=h.kInsertRangeLut[se]+(Nt>>3&7),Or=h.kCopyRangeLut[se]+(Nt&7),Ss=h.kInsertLengthPrefixCode[ie].offset+pt.readBits(h.kInsertLengthPrefixCode[ie].nbits),le=h.kCopyLengthPrefixCode[Or].offset+pt.readBits(h.kCopyLengthPrefixCode[Or].nbits),te=q[P-1<],Jt=q[P-2<],Tr=0;Tr4?3:le-2)&255,It=F[ir+Zr],ye=S(Dt[2].codes,Dt[2].htrees[It],pt),ye>=U){var xs,Qn,Kr;ye-=U,Qn=ye&Pt,ye>>=i,xs=(ye>>1)+1,Kr=(2+(ye&1)<st)if(le>=f.minDictionaryWordLength&&le<=f.maxDictionaryWordLength){var Kr=f.offsetsByLength[le],$n=Me-st-1,ta=f.sizeBitsByLength[le],qu=(1<>ta;if(Kr+=Zu*le,ea=Ft){O.write(q,wt);for(var Fo=0;Fo0&&(Kt[he&3]=Me,++he),le>Mt)throw new Error("Invalid backward reference. pos: "+P+" distance: "+Me+" len: "+le+" bytes left: "+Mt);for(Tr=0;Tr>=1;return(d&h-1)+h}function f(d,g,h,v,_){do v-=h,d[g+v]=new n(_.bits,_.value);while(v>0)}function c(d,g,h){for(var v=1<0;--y[x])k=new n(x&255,W[b++]&65535),f(d,g+T,Y,$,k),T=m(T,x);for(V=bt-1,I=-1,x=h+1,Y=2;x<=l;++x,Y<<=1)for(;y[x]>0;--y[x])(T&V)!==I&&(g+=$,H=c(y,x,h),$=1<>h),Y,$,k),T=m(T,x);return bt}},{}],8:[function(o,s,a){"use strict";a.byteLength=h,a.toByteArray=_,a.fromByteArray=x;for(var n=[],l=[],m=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,d=f.length;c0)throw new Error("Invalid string. Length must be a multiple of 4");var Y=b.indexOf("=");Y===-1&&(Y=T);var I=Y===T?0:4-Y%4;return[Y,I]}function h(b){var T=g(b),Y=T[0],I=T[1];return(Y+I)*3/4-I}function v(b,T,Y){return(T+Y)*3/4-Y}function _(b){for(var T,Y=g(b),I=Y[0],V=Y[1],H=new m(v(b,I,V)),$=0,bt=V>0?I-4:I,W=0;W>16&255,H[$++]=T>>8&255,H[$++]=T&255;return V===2&&(T=l[b.charCodeAt(W)]<<2|l[b.charCodeAt(W+1)]>>4,H[$++]=T&255),V===1&&(T=l[b.charCodeAt(W)]<<10|l[b.charCodeAt(W+1)]<<4|l[b.charCodeAt(W+2)]>>2,H[$++]=T>>8&255,H[$++]=T&255),H}function A(b){return n[b>>18&63]+n[b>>12&63]+n[b>>6&63]+n[b&63]}function k(b,T,Y){for(var I,V=[],H=T;Hbt?bt:$+H));return I===1?(T=b[Y-1],V.push(n[T>>2]+n[T<<4&63]+"==")):I===2&&(T=(b[Y-2]<<8)+b[Y-1],V.push(n[T>>10]+n[T>>4&63]+n[T<<2&63]+"=")),V.join("")}},{}],9:[function(o,s,a){function n(l,m){this.offset=l,this.nbits=m}a.kBlockLengthPrefixCode=[new n(1,2),new n(5,2),new n(9,2),new n(13,2),new n(17,3),new n(25,3),new n(33,3),new n(41,3),new n(49,4),new n(65,4),new n(81,4),new n(97,4),new n(113,5),new n(145,5),new n(177,5),new n(209,5),new n(241,6),new n(305,6),new n(369,7),new n(497,8),new n(753,9),new n(1265,10),new n(2289,11),new n(4337,12),new n(8433,13),new n(16625,24)],a.kInsertLengthPrefixCode=[new n(0,0),new n(1,0),new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,1),new n(8,1),new n(10,2),new n(14,2),new n(18,3),new n(26,3),new n(34,4),new n(50,4),new n(66,5),new n(98,5),new n(130,6),new n(194,7),new n(322,8),new n(578,9),new n(1090,10),new n(2114,12),new n(6210,14),new n(22594,24)],a.kCopyLengthPrefixCode=[new n(2,0),new n(3,0),new n(4,0),new n(5,0),new n(6,0),new n(7,0),new n(8,0),new n(9,0),new n(10,1),new n(12,1),new n(14,2),new n(18,2),new n(22,3),new n(30,3),new n(38,4),new n(54,4),new n(70,5),new n(102,5),new n(134,6),new n(198,7),new n(326,8),new n(582,9),new n(1094,10),new n(2118,24)],a.kInsertRangeLut=[0,0,8,8,0,16,8,16,16],a.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]},{}],10:[function(o,s,a){function n(m){this.buffer=m,this.pos=0}n.prototype.read=function(m,f,c){this.pos+c>this.buffer.length&&(c=this.buffer.length-this.pos);for(var d=0;dthis.buffer.length)throw new Error("Output buffer is not large enough");return this.buffer.set(m.subarray(0,f),this.pos),this.pos+=f,f},a.BrotliOutput=l},{}],11:[function(o,s,a){var n=o("./dictionary"),l=0,m=1,f=2,c=3,d=4,g=5,h=6,v=7,_=8,A=9,k=10,x=11,b=12,T=13,Y=14,I=15,V=16,H=17,$=18,bt=19,W=20;function y(ot,K,gt){this.prefix=new Uint8Array(ot.length),this.transform=K,this.suffix=new Uint8Array(gt.length);for(var R=0;R'),new y("",l,` `),new y("",c,""),new y("",l,"]"),new y("",l," for "),new y("",Y,""),new y("",f,""),new y("",l," a "),new y("",l," that "),new y(" ",k,""),new y("",l,". "),new y(".",l,""),new y(" ",l,", "),new y("",I,""),new y("",l," with "),new y("",l,"'"),new y("",l," from "),new y("",l," by "),new y("",V,""),new y("",H,""),new y(" the ",l,""),new y("",d,""),new y("",l,". The "),new y("",x,""),new y("",l," on "),new y("",l," as "),new y("",l," is "),new y("",v,""),new y("",m,"ing "),new y("",l,` - `),new y("",l,":"),new y(" ",l,". "),new y("",l,"ed "),new y("",W,""),new y("",$,""),new y("",h,""),new y("",l,"("),new y("",k,", "),new y("",_,""),new y("",l," at "),new y("",l,"ly "),new y(" the ",l," of "),new y("",g,""),new y("",A,""),new y(" ",k,", "),new y("",k,'"'),new y(".",l,"("),new y("",x," "),new y("",k,'">'),new y("",l,'="'),new y(" ",l,"."),new y(".com/",l,""),new y(" the ",l," of the "),new y("",k,"'"),new y("",l,". This "),new y("",l,","),new y(".",l," "),new y("",k,"("),new y("",k,"."),new y("",l," not "),new y(" ",l,'="'),new y("",l,"er "),new y(" ",x," "),new y("",l,"al "),new y(" ",x,""),new y("",l,"='"),new y("",x,'"'),new y("",k,". "),new y(" ",l,"("),new y("",l,"ful "),new y(" ",k,". "),new y("",l,"ive "),new y("",l,"less "),new y("",x,"'"),new y("",l,"est "),new y(" ",k,"."),new y("",x,'">'),new y(" ",l,"='"),new y("",k,","),new y("",l,"ize "),new y("",x,"."),new y("\xC2\xA0",l,""),new y(" ",l,","),new y("",k,'="'),new y("",x,'="'),new y("",l,"ous "),new y("",x,", "),new y("",k,"='"),new y(" ",k,","),new y(" ",x,'="'),new y(" ",x,", "),new y("",x,","),new y("",x,"("),new y("",x,". "),new y(" ",x,"."),new y("",x,"='"),new y(" ",x,". "),new y(" ",k,'="'),new y(" ",x,"='"),new y(" ",k,"='")];a.kTransforms=L,a.kNumTransforms=L.length;function it(ot,K){return ot[K]<192?(ot[K]>=97&&ot[K]<=122&&(ot[K]^=32),1):ot[K]<224?(ot[K+1]^=32,2):(ot[K+2]^=5,3)}a.transformDictionaryWord=function(ot,K,gt,R,S){var E=L[S].prefix,et=L[S].suffix,ct=L[S].transform,at=ctR&&(at=R);for(var J=0;J0;){var St=it(ot,Ot);Ot+=St,R-=St}for(var At=0;Attypeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),Rl=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var g=typeof os=="function"&&os;if(!d&&g)return g(c,!0);if(m)return m(c,!0);var h=new Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof os=="function"&&os,f=0;f=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;f[254]=f[254]=1,a.string2buf=function(g){var h,v,_,A,k,x=g.length,b=0;for(A=0;A>>6,h[k++]=128|v&63):v<65536?(h[k++]=224|v>>>12,h[k++]=128|v>>>6&63,h[k++]=128|v&63):(h[k++]=240|v>>>18,h[k++]=128|v>>>12&63,h[k++]=128|v>>>6&63,h[k++]=128|v&63);return h};function d(g,h){if(h<65534&&(g.subarray&&m||!g.subarray&&l))return String.fromCharCode.apply(null,n.shrinkBuf(g,h));for(var v="",_=0;_4){b[_++]=65533,v+=k-1;continue}for(A&=k===2?31:k===3?15:7;k>1&&v1){b[_++]=65533;continue}A<65536?b[_++]=A:(A-=65536,b[_++]=55296|A>>10&1023,b[_++]=56320|A&1023)}return d(b,_)},a.utf8border=function(g,h){var v;for(h=h||g.length,h>g.length&&(h=g.length),v=h-1;v>=0&&(g[v]&192)===128;)v--;return v<0||v===0?h:v+f[g[v]]>h?v:h}},{"./common":1}],3:[function(o,s,a){"use strict";function n(l,m,f,c){for(var d=l&65535|0,g=l>>>16&65535|0,h=0;f!==0;){h=f>2e3?2e3:f,f-=h;do d=d+m[c++]|0,g=g+d|0;while(--h);d%=65521,g%=65521}return d|g<<16|0}s.exports=n},{}],4:[function(o,s,a){"use strict";s.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(o,s,a){"use strict";function n(){for(var f,c=[],d=0;d<256;d++){f=d;for(var g=0;g<8;g++)f=f&1?3988292384^f>>>1:f>>>1;c[d]=f}return c}var l=n();function m(f,c,d,g){var h=l,v=g+d;f^=-1;for(var _=g;_>>8^h[(f^c[_])&255];return f^-1}s.exports=m},{}],6:[function(o,s,a){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}s.exports=n},{}],7:[function(o,s,a){"use strict";var n=30,l=12;s.exports=function(f,c){var d,g,h,v,_,A,k,x,b,T,Y,I,V,H,$,bt,W,y,L,it,ot,K,gt,R,S;d=f.state,g=f.next_in,R=f.input,h=g+(f.avail_in-5),v=f.next_out,S=f.output,_=v-(c-f.avail_out),A=v+(f.avail_out-257),k=d.dmax,x=d.wsize,b=d.whave,T=d.wnext,Y=d.window,I=d.hold,V=d.bits,H=d.lencode,$=d.distcode,bt=(1<>>24,I>>>=L,V-=L,L=y>>>16&255,L===0)S[v++]=y&65535;else if(L&16){it=y&65535,L&=15,L&&(V>>=L,V-=L),V<15&&(I+=R[g++]<>>24,I>>>=L,V-=L,L=y>>>16&255,L&16){if(ot=y&65535,L&=15,Vk){f.msg="invalid distance too far back",d.mode=n;break t}if(I>>>=L,V-=L,L=v-_,ot>L){if(L=ot-L,L>b&&d.sane){f.msg="invalid distance too far back",d.mode=n;break t}if(K=0,gt=Y,T===0){if(K+=x-L,L2;)S[v++]=gt[K++],S[v++]=gt[K++],S[v++]=gt[K++],it-=3;it&&(S[v++]=gt[K++],it>1&&(S[v++]=gt[K++]))}else{K=v-ot;do S[v++]=S[K++],S[v++]=S[K++],S[v++]=S[K++],it-=3;while(it>2);it&&(S[v++]=S[K++],it>1&&(S[v++]=S[K++]))}}else if((L&64)===0){y=$[(y&65535)+(I&(1<>3,g-=it,V-=it<<3,I&=(1<>>24&255)+(w>>>8&65280)+((w&65280)<<8)+((w&255)<<24)}function Kt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function he(w){var M;return!w||!w.state?T:(M=w.state,w.total_in=w.total_out=M.total=0,w.msg="",M.wrap&&(w.adler=M.wrap&1),M.mode=$,M.last=0,M.havedict=0,M.dmax=32768,M.head=null,M.hold=0,M.bits=0,M.lencode=M.lendyn=new n.Buf32(st),M.distcode=M.distdyn=new n.Buf32(wt),M.sane=1,M.back=-1,k)}function te(w){var M;return!w||!w.state?T:(M=w.state,M.wsize=0,M.whave=0,M.wnext=0,he(w))}function Jt(w,M){var i,U;return!w||!w.state||(U=w.state,M<0?(i=0,M=-M):(i=(M>>4)+1,M<48&&(M&=15)),M&&(M<8||M>15))?T:(U.window!==null&&U.wbits!==M&&(U.window=null),U.wrap=i,U.wbits=M,te(w))}function Dt(w,M){var i,U;return w?(U=new Kt,w.state=U,U.window=null,i=Jt(w,M),i!==k&&(w.state=null),i):T}function Qt(w){return Dt(w,q)}var ee=!0,pt,qr;function kr(w){if(ee){var M;for(pt=new n.Buf32(512),qr=new n.Buf32(32),M=0;M<144;)w.lens[M++]=8;for(;M<256;)w.lens[M++]=9;for(;M<280;)w.lens[M++]=7;for(;M<288;)w.lens[M++]=8;for(c(g,w.lens,0,288,pt,0,w.work,{bits:9}),M=0;M<32;)w.lens[M++]=5;c(h,w.lens,0,32,qr,0,w.work,{bits:5}),ee=!1}w.lencode=pt,w.lenbits=9,w.distcode=qr,w.distbits=5}function Mt(w,M,i,U){var Pt,G=w.state;return G.window===null&&(G.wsize=1<=G.wsize?(n.arraySet(G.window,M,i-G.wsize,G.wsize,0),G.wnext=0,G.whave=G.wsize):(Pt=G.wsize-G.wnext,Pt>U&&(Pt=U),n.arraySet(G.window,M,i-U,Pt,G.wnext),U-=Pt,U?(n.arraySet(G.window,M,i-U,U,0),G.wnext=U,G.whave=G.wsize):(G.wnext+=Pt,G.wnext===G.wsize&&(G.wnext=0),G.whave>>8&255,i.check=m(i.check,Nt,2,0),F=0,C=0,i.mode=bt;break}if(i.flags=0,i.head&&(i.head.done=!1),!(i.wrap&1)||(((F&255)<<8)+(F>>8))%31){w.msg="incorrect header check",i.mode=D;break}if((F&15)!==H){w.msg="unknown compression method",i.mode=D;break}if(F>>>=4,C-=4,Lt=(F&15)+8,i.wbits===0)i.wbits=Lt;else if(Lt>i.wbits){w.msg="invalid window size",i.mode=D;break}i.dmax=1<>8&1),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=W;case W:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>8&255,Nt[2]=F>>>16&255,Nt[3]=F>>>24&255,i.check=m(i.check,Nt,4,0)),F=0,C=0,i.mode=y;case y:for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>8),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=L;case L:if(i.flags&1024){for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0}else i.head&&(i.head.extra=null);i.mode=it;case it:if(i.flags&1024&&(Q=i.length,Q>j&&(Q=j),Q&&(i.head&&(Lt=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),n.arraySet(i.head.extra,U,G,Q,Lt)),i.flags&512&&(i.check=m(i.check,U,Q,G)),j-=Q,G+=Q,i.length-=Q),i.length))break t;i.length=0,i.mode=ot;case ot:if(i.flags&2048){if(j===0)break t;Q=0;do Lt=U[G+Q++],i.head&&Lt&&i.length<65536&&(i.head.name+=String.fromCharCode(Lt));while(Lt&&Q>9&1,i.head.done=!0),w.adler=i.check=0,i.mode=E;break;case R:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>=C&7,C-=C&7,i.mode=O;break}for(;C<3;){if(j===0)break t;j--,F+=U[G++]<>>=1,C-=1,F&3){case 0:i.mode=ct;break;case 1:if(kr(i),i.mode=St,M===A){F>>>=2,C-=2;break t}break;case 2:i.mode=Wt;break;case 3:w.msg="invalid block type",i.mode=D}F>>>=2,C-=2;break;case ct:for(F>>>=C&7,C-=C&7;C<32;){if(j===0)break t;j--,F+=U[G++]<>>16^65535)){w.msg="invalid stored block lengths",i.mode=D;break}if(i.length=F&65535,F=0,C=0,i.mode=at,M===A)break t;case at:i.mode=Ct;case Ct:if(Q=i.length,Q){if(Q>j&&(Q=j),Q>Vt&&(Q=Vt),Q===0)break t;n.arraySet(Pt,U,G,Q,re),j-=Q,G+=Q,Vt-=Q,re+=Q,i.length-=Q;break}i.mode=E;break;case Wt:for(;C<14;){if(j===0)break t;j--,F+=U[G++]<>>=5,C-=5,i.ndist=(F&31)+1,F>>>=5,C-=5,i.ncode=(F&15)+4,F>>>=4,C-=4,i.nlen>286||i.ndist>30){w.msg="too many length or distance symbols",i.mode=D;break}i.have=0,i.mode=Ot;case Ot:for(;i.have>>=3,C-=3}for(;i.have<19;)i.lens[Or[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,se={bits:i.lenbits},oe=c(d,i.lens,0,19,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid code lengths set",i.mode=D;break}i.have=0,i.mode=J;case J:for(;i.have>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=xt,C-=xt,i.lens[i.have++]=jt;else{if(jt===16){for(ie=xt+2;C>>=xt,C-=xt,i.have===0){w.msg="invalid bit length repeat",i.mode=D;break}Lt=i.lens[i.have-1],Q=3+(F&3),F>>>=2,C-=2}else if(jt===17){for(ie=xt+3;C>>=xt,C-=xt,Lt=0,Q=3+(F&7),F>>>=3,C-=3}else{for(ie=xt+7;C>>=xt,C-=xt,Lt=0,Q=11+(F&127),F>>>=7,C-=7}if(i.have+Q>i.nlen+i.ndist){w.msg="invalid bit length repeat",i.mode=D;break}for(;Q--;)i.lens[i.have++]=Lt}}if(i.mode===D)break;if(i.lens[256]===0){w.msg="invalid code -- missing end-of-block",i.mode=D;break}if(i.lenbits=9,se={bits:i.lenbits},oe=c(g,i.lens,0,i.nlen,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid literal/lengths set",i.mode=D;break}if(i.distbits=6,i.distcode=i.distdyn,se={bits:i.distbits},oe=c(h,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,se),i.distbits=se.bits,oe){w.msg="invalid distances set",i.mode=D;break}if(i.mode=St,M===A)break t;case St:i.mode=At;case At:if(j>=6&&Vt>=258){w.next_out=re,w.avail_out=Vt,w.next_in=G,w.avail_in=j,i.hold=F,i.bits=C,f(w,Tt),re=w.next_out,Pt=w.output,Vt=w.avail_out,G=w.next_in,U=w.input,j=w.avail_in,F=i.hold,C=i.bits,i.mode===E&&(i.back=-1);break}for(i.back=0;It=i.lencode[F&(1<>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Yt)],xt=It>>>24,Gt=It>>>16&255,jt=It&65535,!(Yt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Yt,C-=Yt,i.back+=Yt}if(F>>>=xt,C-=xt,i.back+=xt,i.length=jt,Gt===0){i.mode=N;break}if(Gt&32){i.back=-1,i.mode=E;break}if(Gt&64){w.msg="invalid literal/length code",i.mode=D;break}i.extra=Gt&15,i.mode=xe;case xe:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=zt;case zt:for(;It=i.distcode[F&(1<>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Yt)],xt=It>>>24,Gt=It>>>16&255,jt=It&65535,!(Yt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Yt,C-=Yt,i.back+=Yt}if(F>>>=xt,C-=xt,i.back+=xt,Gt&64){w.msg="invalid distance code",i.mode=D;break}i.offset=jt,i.extra=Gt&15,i.mode=sr;case sr:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){w.msg="invalid distance too far back",i.mode=D;break}i.mode=Xe;case Xe:if(Vt===0)break t;if(Q=Tt-Vt,i.offset>Q){if(Q=i.offset-Q,Q>i.whave&&i.sane){w.msg="invalid distance too far back",i.mode=D;break}Q>i.wnext?(Q-=i.wnext,ar=i.wsize-Q):ar=i.wnext-Q,Q>i.length&&(Q=i.length),ir=i.window}else ir=Pt,ar=re-i.offset,Q=i.length;Q>Vt&&(Q=Vt),Vt-=Q,i.length-=Q;do Pt[re++]=ir[ar++];while(--Q);i.length===0&&(i.mode=At);break;case N:if(Vt===0)break t;Pt[re++]=i.length,Vt--,i.mode=At;break;case O:if(i.wrap){for(;C<32;){if(j===0)break t;j--,F|=U[G++]<=1&&At[it]===0;it--);if(ot>it&&(ot=it),it===0)return I[V++]=1<<24|64<<16|0,I[V++]=1<<24|64<<16|0,$.bits=1,0;for(L=1;L0&&(x===c||it!==1))return-1;for(xe[1]=0,W=1;Wm||x===g&&S>f)return 1;for(;;){Xe=W-gt,H[y]St?(N=zt[sr+H[y]],O=Ot[J+H[y]]):(N=96,O=0),et=1<>gt)+ct]=Xe<<24|N<<16|O|0;while(ct!==0);for(et=1<>=1;if(et!==0?(E&=et-1,E+=et):E=0,y++,--At[W]===0){if(W===it)break;W=b[T+H[y]]}if(W>ot&&(E&Ct)!==at){for(gt===0&&(gt=ot),Wt+=L,K=W-gt,R=1<m||x===g&&S>f)return 1;at=E&Ct,I[at]=ot<<24|K<<16|Wt-V|0}}return E!==0&&(I[Wt+E]=W-gt<<24|64<<16|0),$.bits=ot,0}},{"../utils/common":1}],10:[function(o,s,a){"use strict";s.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(o,s,a){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}s.exports=n},{}],"/lib/inflate.js":[function(o,s,a){"use strict";var n=o("./zlib/inflate"),l=o("./utils/common"),m=o("./utils/strings"),f=o("./zlib/constants"),c=o("./zlib/messages"),d=o("./zlib/zstream"),g=o("./zlib/gzheader"),h=Object.prototype.toString;function v(k){if(!(this instanceof v))return new v(k);this.options=l.assign({chunkSize:16384,windowBits:0,to:""},k||{});var x=this.options;x.raw&&x.windowBits>=0&&x.windowBits<16&&(x.windowBits=-x.windowBits,x.windowBits===0&&(x.windowBits=-15)),x.windowBits>=0&&x.windowBits<16&&!(k&&k.windowBits)&&(x.windowBits+=32),x.windowBits>15&&x.windowBits<48&&(x.windowBits&15)===0&&(x.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var b=n.inflateInit2(this.strm,x.windowBits);if(b!==f.Z_OK)throw new Error(c[b]);if(this.header=new g,n.inflateGetHeader(this.strm,this.header),x.dictionary&&(typeof x.dictionary=="string"?x.dictionary=m.string2buf(x.dictionary):h.call(x.dictionary)==="[object ArrayBuffer]"&&(x.dictionary=new Uint8Array(x.dictionary)),x.raw&&(b=n.inflateSetDictionary(this.strm,x.dictionary),b!==f.Z_OK)))throw new Error(c[b])}v.prototype.push=function(k,x){var b=this.strm,T=this.options.chunkSize,Y=this.options.dictionary,I,V,H,$,bt,W=!1;if(this.ended)return!1;V=x===~~x?x:x===!0?f.Z_FINISH:f.Z_NO_FLUSH,typeof k=="string"?b.input=m.binstring2buf(k):h.call(k)==="[object ArrayBuffer]"?b.input=new Uint8Array(k):b.input=k,b.next_in=0,b.avail_in=b.input.length;do{if(b.avail_out===0&&(b.output=new l.Buf8(T),b.next_out=0,b.avail_out=T),I=n.inflate(b,f.Z_NO_FLUSH),I===f.Z_NEED_DICT&&Y&&(I=n.inflateSetDictionary(this.strm,Y)),I===f.Z_BUF_ERROR&&W===!0&&(I=f.Z_OK,W=!1),I!==f.Z_STREAM_END&&I!==f.Z_OK)return this.onEnd(I),this.ended=!0,!1;b.next_out&&(b.avail_out===0||I===f.Z_STREAM_END||b.avail_in===0&&(V===f.Z_FINISH||V===f.Z_SYNC_FLUSH))&&(this.options.to==="string"?(H=m.utf8border(b.output,b.next_out),$=b.next_out-H,bt=m.buf2string(b.output,H),b.next_out=$,b.avail_out=T-$,$&&l.arraySet(b.output,b.output,H,$,0),this.onData(bt)):this.onData(l.shrinkBuf(b.output,b.next_out))),b.avail_in===0&&b.avail_out===0&&(W=!0)}while((b.avail_in>0||b.avail_out===0)&&I!==f.Z_STREAM_END);return I===f.Z_STREAM_END&&(V=f.Z_FINISH),V===f.Z_FINISH?(I=n.inflateEnd(this.strm),this.onEnd(I),this.ended=!0,I===f.Z_OK):(V===f.Z_SYNC_FLUSH&&(this.onEnd(f.Z_OK),b.avail_out=0),!0)},v.prototype.onData=function(k){this.chunks.push(k)},v.prototype.onEnd=function(k){k===f.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=k,this.msg=this.strm.msg};function _(k,x){var b=new v(x);if(b.push(k,!0),b.err)throw b.msg||c[b.err];return b.result}function A(k,x){return x=x||{},x.raw=!0,_(k,x)}a.Inflate=v,a.inflate=_,a.inflateRaw=A,a.ungzip=_},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")})();var nw=globalThis.fetch,ss=class{constructor(t,e={},r){this.type=t,this.detail=e,this.msg=r,Object.defineProperty(this,"__mayPropagate",{enumerable:!1,writable:!0}),this.__mayPropagate=!0}preventDefault(){}stopPropagation(){this.__mayPropagate=!1}valueOf(){return this}toString(){return this.msg?`[${this.type} event]: ${this.msg}`:`[${this.type} event]`}},Kc=class{constructor(){this.listeners={}}addEventListener(t,e,r){let o=this.listeners[t]||[];r?o.unshift(e):o.push(e),this.listeners[t]=o}removeEventListener(t,e){let r=this.listeners[t]||[],o=r.findIndex(s=>s===e);o>-1&&(r.splice(o,1),this.listeners[t]=r)}dispatch(t){let e=this.listeners[t.type];if(e)for(let r=0,o=e.length;rString.fromCharCode(e)).join("")}var $c=class{constructor(t,e,r){this.name=(r||t.tag||"").trim(),this.length=t.length,this.start=t.offset,this.offset=0,this.data=e,["getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getBigInt64","getBigUint64"].forEach(o=>{let s=o.replace(/get(Big)?/,"").toLowerCase(),a=parseInt(o.replace(/[^\d]/g,""))/8;Object.defineProperty(this,s,{get:()=>this.getValue(o,a)})})}get currentPosition(){return this.start+this.offset}set currentPosition(t){this.start=t,this.offset=0}skip(t=0,e=8){this.offset+=t*e/8}getValue(t,e){let r=this.start+this.offset;this.offset+=e;try{return this.data[t](r)}catch(o){throw console.error("parser",t,e,this),console.error("parser",this.start,this.offset),o}}flags(t){if(t===8||t===16||t===32||t===64)return this[`uint${t}`].toString(2).padStart(t,0).split("").map(e=>e==="1");console.error("Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long"),console.trace()}get tag(){let t=this.uint32;return Qc([t>>24&255,t>>16&255,t>>8&255,t&255])}get fixed(){let t=this.int16,e=Math.round(1e3*this.uint16/65356);return t+e/1e3}get legacyFixed(){let t=this.uint16,e=this.uint16.toString(16).padStart(4,0);return parseFloat(`${t}.${e}`)}get uint24(){return(this.uint8<<16)+(this.uint8<<8)+this.uint8}get uint128(){let t=0;for(let e=0;e<5;e++){let r=this.uint8;if(t=t*128+(r&127),r<128)break}return t}get longdatetime(){return new Date(Jc+1e3*parseInt(this.int64.toString()))}get fword(){return this.int16}get ufword(){return this.uint16}get Offset16(){return this.uint16}get Offset32(){return this.uint32}get F2DOT14(){let t=p.uint16,e=[0,1,-2,-1][t>>14],r=t&16383;return e+r/16384}verifyLength(){this.offset!=this.length&&console.error(`unexpected parsed table size (${this.offset}) for "${this.name}" (expected ${this.length})`)}readBytes(t=0,e=0,r=8,o=!1){if(t=t||this.length,t===0)return[];e&&(this.currentPosition=e);let s=`${o?"":"u"}int${r}`,a=[];for(;t--;)a.push(this[s]);return a}},Bt=class{constructor(t){Object.defineProperty(this,"parser",{enumerable:!1,get:()=>t});let r=t.currentPosition;Object.defineProperty(this,"start",{enumerable:!1,get:()=>r})}load(t){Object.keys(t).forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);r.get?this[e]=r.get.bind(this):r.value!==void 0&&(this[e]=r.value)}),this.parser.length&&this.parser.verifyLength()}},mt=class extends Bt{constructor(t,e,r){let{parser:o,start:s}=super(new $c(t,e,r));Object.defineProperty(this,"p",{enumerable:!1,get:()=>o}),Object.defineProperty(this,"tableStart",{enumerable:!1,get:()=>s})}};function Z(t,e,r){let o;Object.defineProperty(t,e,{get:()=>o||(o=r(),o),enumerable:!0})}var td=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:12},e,"sfnt");this.version=o.uint32,this.numTables=o.uint16,this.searchRange=o.uint16,this.entrySelector=o.uint16,this.rangeShift=o.uint16,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new ed(o)),this.tables={},this.directory.forEach(s=>{let a=()=>r(this.tables,{tag:s.tag,offset:s.offset,length:s.length},e);Z(this.tables,s.tag.trim(),a)})}},ed=class{constructor(t){this.tag=t.tag,this.checksum=t.uint32,this.offset=t.uint32,this.length=t.uint32}},El=Rl.inflate||void 0,Il=void 0,rd=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:44},e,"woff");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new od(o)),sd(this,e,r)}},od=class{constructor(t){this.tag=t.tag,this.offset=t.uint32,this.compLength=t.uint32,this.origLength=t.uint32,this.origChecksum=t.uint32}};function sd(t,e,r){t.tables={},t.directory.forEach(o=>{Z(t.tables,o.tag.trim(),()=>{let s=0,a=e;if(o.compLength!==o.origLength){let n=e.buffer.slice(o.offset,o.offset+o.compLength),l;if(El)l=El(new Uint8Array(n));else if(Il)l=Il(new Uint8Array(n));else{let m="no brotli decoder available to decode WOFF2 font";throw font.onerror&&font.onerror(m),new Error(m)}a=new DataView(l.buffer)}else s=o.offset;return r(t.tables,{tag:o.tag,offset:s,length:o.origLength},a)})})}var Ll=Al,Bl=void 0,nd=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:48},e,"woff2");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.totalCompressedSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(l=>new ad(o));let s=o.currentPosition;this.directory[0].offset=0,this.directory.forEach((l,m)=>{let f=this.directory[m+1];f&&(f.offset=l.offset+(l.transformLength!==void 0?l.transformLength:l.origLength))});let a,n=e.buffer.slice(s);if(Ll)a=Ll(new Uint8Array(n));else if(Bl)a=new Uint8Array(Bl(n));else{let l="no brotli decoder available to decode WOFF2 font";throw t.onerror&&t.onerror(l),new Error(l)}id(this,a,r)}},ad=class{constructor(t){this.flags=t.uint8;let e=this.tagNumber=this.flags&63;e===63?this.tag=t.tag:this.tag=ld(e);let o=(this.transformVersion=(this.flags&192)>>6)!==0;(this.tag==="glyf"||this.tag==="loca")&&(o=this.transformVersion!==3),this.origLength=t.uint128,o&&(this.transformLength=t.uint128)}};function id(t,e,r){t.tables={},t.directory.forEach(o=>{Z(t.tables,o.tag.trim(),()=>{let s=o.offset,a=s+(o.transformLength?o.transformLength:o.origLength),n=new DataView(e.slice(s,a).buffer);try{return r(t.tables,{tag:o.tag,offset:0,length:o.origLength},n)}catch(l){console.error(l)}})})}function ld(t){return["cmap","head","hhea","hmtx","maxp","name","OS/2","post","cvt ","fpgm","glyf","loca","prep","CFF ","VORG","EBDT","EBLC","gasp","hdmx","kern","LTSH","PCLT","VDMX","vhea","vmtx","BASE","GDEF","GPOS","GSUB","EBSC","JSTF","MATH","CBDT","CBLC","COLR","CPAL","SVG ","sbix","acnt","avar","bdat","bloc","bsln","cvar","fdsc","feat","fmtx","fvar","gvar","hsty","just","lcar","mort","morx","opbd","prop","trak","Zapf","Silf","Glat","Gloc","Feat","Sill"][t&63]}var jl={},Ul=!1;Promise.all([Promise.resolve().then(function(){return Dd}),Promise.resolve().then(function(){return Nd}),Promise.resolve().then(function(){return Md}),Promise.resolve().then(function(){return Ud}),Promise.resolve().then(function(){return Wd}),Promise.resolve().then(function(){return Kd}),Promise.resolve().then(function(){return Qd}),Promise.resolve().then(function(){return tm}),Promise.resolve().then(function(){return fm}),Promise.resolve().then(function(){return Sm}),Promise.resolve().then(function(){return lp}),Promise.resolve().then(function(){return fp}),Promise.resolve().then(function(){return pp}),Promise.resolve().then(function(){return vp}),Promise.resolve().then(function(){return wp}),Promise.resolve().then(function(){return xp}),Promise.resolve().then(function(){return kp}),Promise.resolve().then(function(){return Tp}),Promise.resolve().then(function(){return Pp}),Promise.resolve().then(function(){return Rp}),Promise.resolve().then(function(){return Ip}),Promise.resolve().then(function(){return Bp}),Promise.resolve().then(function(){return Np}),Promise.resolve().then(function(){return Gp}),Promise.resolve().then(function(){return jp}),Promise.resolve().then(function(){return Hp}),Promise.resolve().then(function(){return Yp}),Promise.resolve().then(function(){return Zp}),Promise.resolve().then(function(){return Kp}),Promise.resolve().then(function(){return $p}),Promise.resolve().then(function(){return nh}),Promise.resolve().then(function(){return uh}),Promise.resolve().then(function(){return dh}),Promise.resolve().then(function(){return gh}),Promise.resolve().then(function(){return vh}),Promise.resolve().then(function(){return wh}),Promise.resolve().then(function(){return Ch}),Promise.resolve().then(function(){return kh}),Promise.resolve().then(function(){return Ah}),Promise.resolve().then(function(){return Eh}),Promise.resolve().then(function(){return Bh})]).then(t=>{t.forEach(e=>{let r=Object.keys(e)[0];jl[r]=e[r]}),Ul=!0});function ud(t,e,r){let o=e.tag.replace(/[^\w\d]/g,""),s=jl[o];return s?new s(e,r,t):(console.warn(`lib-font has no definition for ${o}. The table was skipped.`),{})}function fd(){let t=0;function e(r,o){if(!Ul)return t>10?o(new Error("loading took too long")):(t++,setTimeout(()=>e(r),250));r(ud)}return new Promise((r,o)=>e(r))}function cd(t,e){let r=t.lastIndexOf("."),o=(t.substring(r+1)||"").toLowerCase(),s={ttf:"truetype",otf:"opentype",woff:"woff",woff2:"woff2"}[o];if(s)return s;let a={eot:"The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.",svg:"The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.",fon:"The .fon format is not supported: this is an ancient Windows bitmap font format.",ttc:"Based on the current CSS specification, font collections are not (yet?) supported."}[o];if(a||(a=`${t} is not a known webfont format.`),e)throw new Error(a);console.warn(`Could not load font: ${a}`)}async function dd(t,e,r={}){if(!globalThis.document)return;let o=cd(e,r.errorOnStyle);if(!o)return;let s=document.createElement("style");s.className="injected-by-Font-js";let a=[];return r.styleRules&&(a=Object.entries(r.styleRules).map(([n,l])=>`${n}: ${l};`)),s.textContent=` + `),new y("",l,":"),new y(" ",l,". "),new y("",l,"ed "),new y("",W,""),new y("",$,""),new y("",h,""),new y("",l,"("),new y("",k,", "),new y("",_,""),new y("",l," at "),new y("",l,"ly "),new y(" the ",l," of "),new y("",g,""),new y("",A,""),new y(" ",k,", "),new y("",k,'"'),new y(".",l,"("),new y("",x," "),new y("",k,'">'),new y("",l,'="'),new y(" ",l,"."),new y(".com/",l,""),new y(" the ",l," of the "),new y("",k,"'"),new y("",l,". This "),new y("",l,","),new y(".",l," "),new y("",k,"("),new y("",k,"."),new y("",l," not "),new y(" ",l,'="'),new y("",l,"er "),new y(" ",x," "),new y("",l,"al "),new y(" ",x,""),new y("",l,"='"),new y("",x,'"'),new y("",k,". "),new y(" ",l,"("),new y("",l,"ful "),new y(" ",k,". "),new y("",l,"ive "),new y("",l,"less "),new y("",x,"'"),new y("",l,"est "),new y(" ",k,"."),new y("",x,'">'),new y(" ",l,"='"),new y("",k,","),new y("",l,"ize "),new y("",x,"."),new y("\xC2\xA0",l,""),new y(" ",l,","),new y("",k,'="'),new y("",x,'="'),new y("",l,"ous "),new y("",x,", "),new y("",k,"='"),new y(" ",k,","),new y(" ",x,'="'),new y(" ",x,", "),new y("",x,","),new y("",x,"("),new y("",x,". "),new y(" ",x,"."),new y("",x,"='"),new y(" ",x,". "),new y(" ",k,'="'),new y(" ",x,"='"),new y(" ",k,"='")];a.kTransforms=L,a.kNumTransforms=L.length;function it(ot,K){return ot[K]<192?(ot[K]>=97&&ot[K]<=122&&(ot[K]^=32),1):ot[K]<224?(ot[K+1]^=32,2):(ot[K+2]^=5,3)}a.transformDictionaryWord=function(ot,K,gt,R,S){var E=L[S].prefix,et=L[S].suffix,ct=L[S].transform,at=ctR&&(at=R);for(var J=0;J0;){var St=it(ot,Ot);Ot+=St,R-=St}for(var At=0;Attypeof ue<"u"?ue:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof ue<"u"?ue:e)[r]}):t)(function(t){if(typeof ue<"u")return ue.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),Rl=(function(){var t,e,r;return(function(){function o(s,a,n){function l(c,d){if(!a[c]){if(!s[c]){var g=typeof os=="function"&&os;if(!d&&g)return g(c,!0);if(m)return m(c,!0);var h=new Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h}var v=a[c]={exports:{}};s[c][0].call(v.exports,function(_){var A=s[c][1][_];return l(A||_)},v,v.exports,o,s,a,n)}return a[c].exports}for(var m=typeof os=="function"&&os,f=0;f=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;f[254]=f[254]=1,a.string2buf=function(g){var h,v,_,A,k,x=g.length,b=0;for(A=0;A>>6,h[k++]=128|v&63):v<65536?(h[k++]=224|v>>>12,h[k++]=128|v>>>6&63,h[k++]=128|v&63):(h[k++]=240|v>>>18,h[k++]=128|v>>>12&63,h[k++]=128|v>>>6&63,h[k++]=128|v&63);return h};function d(g,h){if(h<65534&&(g.subarray&&m||!g.subarray&&l))return String.fromCharCode.apply(null,n.shrinkBuf(g,h));for(var v="",_=0;_4){b[_++]=65533,v+=k-1;continue}for(A&=k===2?31:k===3?15:7;k>1&&v1){b[_++]=65533;continue}A<65536?b[_++]=A:(A-=65536,b[_++]=55296|A>>10&1023,b[_++]=56320|A&1023)}return d(b,_)},a.utf8border=function(g,h){var v;for(h=h||g.length,h>g.length&&(h=g.length),v=h-1;v>=0&&(g[v]&192)===128;)v--;return v<0||v===0?h:v+f[g[v]]>h?v:h}},{"./common":1}],3:[function(o,s,a){"use strict";function n(l,m,f,c){for(var d=l&65535|0,g=l>>>16&65535|0,h=0;f!==0;){h=f>2e3?2e3:f,f-=h;do d=d+m[c++]|0,g=g+d|0;while(--h);d%=65521,g%=65521}return d|g<<16|0}s.exports=n},{}],4:[function(o,s,a){"use strict";s.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(o,s,a){"use strict";function n(){for(var f,c=[],d=0;d<256;d++){f=d;for(var g=0;g<8;g++)f=f&1?3988292384^f>>>1:f>>>1;c[d]=f}return c}var l=n();function m(f,c,d,g){var h=l,v=g+d;f^=-1;for(var _=g;_>>8^h[(f^c[_])&255];return f^-1}s.exports=m},{}],6:[function(o,s,a){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}s.exports=n},{}],7:[function(o,s,a){"use strict";var n=30,l=12;s.exports=function(f,c){var d,g,h,v,_,A,k,x,b,T,Y,I,V,H,$,bt,W,y,L,it,ot,K,gt,R,S;d=f.state,g=f.next_in,R=f.input,h=g+(f.avail_in-5),v=f.next_out,S=f.output,_=v-(c-f.avail_out),A=v+(f.avail_out-257),k=d.dmax,x=d.wsize,b=d.whave,T=d.wnext,Y=d.window,I=d.hold,V=d.bits,H=d.lencode,$=d.distcode,bt=(1<>>24,I>>>=L,V-=L,L=y>>>16&255,L===0)S[v++]=y&65535;else if(L&16){it=y&65535,L&=15,L&&(V>>=L,V-=L),V<15&&(I+=R[g++]<>>24,I>>>=L,V-=L,L=y>>>16&255,L&16){if(ot=y&65535,L&=15,Vk){f.msg="invalid distance too far back",d.mode=n;break t}if(I>>>=L,V-=L,L=v-_,ot>L){if(L=ot-L,L>b&&d.sane){f.msg="invalid distance too far back",d.mode=n;break t}if(K=0,gt=Y,T===0){if(K+=x-L,L2;)S[v++]=gt[K++],S[v++]=gt[K++],S[v++]=gt[K++],it-=3;it&&(S[v++]=gt[K++],it>1&&(S[v++]=gt[K++]))}else{K=v-ot;do S[v++]=S[K++],S[v++]=S[K++],S[v++]=S[K++],it-=3;while(it>2);it&&(S[v++]=S[K++],it>1&&(S[v++]=S[K++]))}}else if((L&64)===0){y=$[(y&65535)+(I&(1<>3,g-=it,V-=it<<3,I&=(1<>>24&255)+(w>>>8&65280)+((w&65280)<<8)+((w&255)<<24)}function Kt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function he(w){var M;return!w||!w.state?T:(M=w.state,w.total_in=w.total_out=M.total=0,w.msg="",M.wrap&&(w.adler=M.wrap&1),M.mode=$,M.last=0,M.havedict=0,M.dmax=32768,M.head=null,M.hold=0,M.bits=0,M.lencode=M.lendyn=new n.Buf32(st),M.distcode=M.distdyn=new n.Buf32(wt),M.sane=1,M.back=-1,k)}function te(w){var M;return!w||!w.state?T:(M=w.state,M.wsize=0,M.whave=0,M.wnext=0,he(w))}function Jt(w,M){var i,U;return!w||!w.state||(U=w.state,M<0?(i=0,M=-M):(i=(M>>4)+1,M<48&&(M&=15)),M&&(M<8||M>15))?T:(U.window!==null&&U.wbits!==M&&(U.window=null),U.wrap=i,U.wbits=M,te(w))}function Dt(w,M){var i,U;return w?(U=new Kt,w.state=U,U.window=null,i=Jt(w,M),i!==k&&(w.state=null),i):T}function Qt(w){return Dt(w,q)}var ee=!0,pt,qr;function kr(w){if(ee){var M;for(pt=new n.Buf32(512),qr=new n.Buf32(32),M=0;M<144;)w.lens[M++]=8;for(;M<256;)w.lens[M++]=9;for(;M<280;)w.lens[M++]=7;for(;M<288;)w.lens[M++]=8;for(c(g,w.lens,0,288,pt,0,w.work,{bits:9}),M=0;M<32;)w.lens[M++]=5;c(h,w.lens,0,32,qr,0,w.work,{bits:5}),ee=!1}w.lencode=pt,w.lenbits=9,w.distcode=qr,w.distbits=5}function Mt(w,M,i,U){var Pt,G=w.state;return G.window===null&&(G.wsize=1<=G.wsize?(n.arraySet(G.window,M,i-G.wsize,G.wsize,0),G.wnext=0,G.whave=G.wsize):(Pt=G.wsize-G.wnext,Pt>U&&(Pt=U),n.arraySet(G.window,M,i-U,Pt,G.wnext),U-=Pt,U?(n.arraySet(G.window,M,i-U,U,0),G.wnext=U,G.whave=G.wsize):(G.wnext+=Pt,G.wnext===G.wsize&&(G.wnext=0),G.whave>>8&255,i.check=m(i.check,Nt,2,0),F=0,C=0,i.mode=bt;break}if(i.flags=0,i.head&&(i.head.done=!1),!(i.wrap&1)||(((F&255)<<8)+(F>>8))%31){w.msg="incorrect header check",i.mode=D;break}if((F&15)!==H){w.msg="unknown compression method",i.mode=D;break}if(F>>>=4,C-=4,Lt=(F&15)+8,i.wbits===0)i.wbits=Lt;else if(Lt>i.wbits){w.msg="invalid window size",i.mode=D;break}i.dmax=1<>8&1),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=W;case W:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>8&255,Nt[2]=F>>>16&255,Nt[3]=F>>>24&255,i.check=m(i.check,Nt,4,0)),F=0,C=0,i.mode=y;case y:for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>8),i.flags&512&&(Nt[0]=F&255,Nt[1]=F>>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0,i.mode=L;case L:if(i.flags&1024){for(;C<16;){if(j===0)break t;j--,F+=U[G++]<>>8&255,i.check=m(i.check,Nt,2,0)),F=0,C=0}else i.head&&(i.head.extra=null);i.mode=it;case it:if(i.flags&1024&&(Q=i.length,Q>j&&(Q=j),Q&&(i.head&&(Lt=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),n.arraySet(i.head.extra,U,G,Q,Lt)),i.flags&512&&(i.check=m(i.check,U,Q,G)),j-=Q,G+=Q,i.length-=Q),i.length))break t;i.length=0,i.mode=ot;case ot:if(i.flags&2048){if(j===0)break t;Q=0;do Lt=U[G+Q++],i.head&&Lt&&i.length<65536&&(i.head.name+=String.fromCharCode(Lt));while(Lt&&Q>9&1,i.head.done=!0),w.adler=i.check=0,i.mode=E;break;case R:for(;C<32;){if(j===0)break t;j--,F+=U[G++]<>>=C&7,C-=C&7,i.mode=O;break}for(;C<3;){if(j===0)break t;j--,F+=U[G++]<>>=1,C-=1,F&3){case 0:i.mode=ct;break;case 1:if(kr(i),i.mode=St,M===A){F>>>=2,C-=2;break t}break;case 2:i.mode=Wt;break;case 3:w.msg="invalid block type",i.mode=D}F>>>=2,C-=2;break;case ct:for(F>>>=C&7,C-=C&7;C<32;){if(j===0)break t;j--,F+=U[G++]<>>16^65535)){w.msg="invalid stored block lengths",i.mode=D;break}if(i.length=F&65535,F=0,C=0,i.mode=at,M===A)break t;case at:i.mode=Ct;case Ct:if(Q=i.length,Q){if(Q>j&&(Q=j),Q>Vt&&(Q=Vt),Q===0)break t;n.arraySet(Pt,U,G,Q,re),j-=Q,G+=Q,Vt-=Q,re+=Q,i.length-=Q;break}i.mode=E;break;case Wt:for(;C<14;){if(j===0)break t;j--,F+=U[G++]<>>=5,C-=5,i.ndist=(F&31)+1,F>>>=5,C-=5,i.ncode=(F&15)+4,F>>>=4,C-=4,i.nlen>286||i.ndist>30){w.msg="too many length or distance symbols",i.mode=D;break}i.have=0,i.mode=Ot;case Ot:for(;i.have>>=3,C-=3}for(;i.have<19;)i.lens[Or[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,se={bits:i.lenbits},oe=c(d,i.lens,0,19,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid code lengths set",i.mode=D;break}i.have=0,i.mode=J;case J:for(;i.have>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=xt,C-=xt,i.lens[i.have++]=jt;else{if(jt===16){for(ie=xt+2;C>>=xt,C-=xt,i.have===0){w.msg="invalid bit length repeat",i.mode=D;break}Lt=i.lens[i.have-1],Q=3+(F&3),F>>>=2,C-=2}else if(jt===17){for(ie=xt+3;C>>=xt,C-=xt,Lt=0,Q=3+(F&7),F>>>=3,C-=3}else{for(ie=xt+7;C>>=xt,C-=xt,Lt=0,Q=11+(F&127),F>>>=7,C-=7}if(i.have+Q>i.nlen+i.ndist){w.msg="invalid bit length repeat",i.mode=D;break}for(;Q--;)i.lens[i.have++]=Lt}}if(i.mode===D)break;if(i.lens[256]===0){w.msg="invalid code -- missing end-of-block",i.mode=D;break}if(i.lenbits=9,se={bits:i.lenbits},oe=c(g,i.lens,0,i.nlen,i.lencode,0,i.work,se),i.lenbits=se.bits,oe){w.msg="invalid literal/lengths set",i.mode=D;break}if(i.distbits=6,i.distcode=i.distdyn,se={bits:i.distbits},oe=c(h,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,se),i.distbits=se.bits,oe){w.msg="invalid distances set",i.mode=D;break}if(i.mode=St,M===A)break t;case St:i.mode=At;case At:if(j>=6&&Vt>=258){w.next_out=re,w.avail_out=Vt,w.next_in=G,w.avail_in=j,i.hold=F,i.bits=C,f(w,Tt),re=w.next_out,Pt=w.output,Vt=w.avail_out,G=w.next_in,U=w.input,j=w.avail_in,F=i.hold,C=i.bits,i.mode===E&&(i.back=-1);break}for(i.back=0;It=i.lencode[F&(1<>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Yt)],xt=It>>>24,Gt=It>>>16&255,jt=It&65535,!(Yt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Yt,C-=Yt,i.back+=Yt}if(F>>>=xt,C-=xt,i.back+=xt,i.length=jt,Gt===0){i.mode=N;break}if(Gt&32){i.back=-1,i.mode=E;break}if(Gt&64){w.msg="invalid literal/length code",i.mode=D;break}i.extra=Gt&15,i.mode=xe;case xe:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=zt;case zt:for(;It=i.distcode[F&(1<>>24,Gt=It>>>16&255,jt=It&65535,!(xt<=C);){if(j===0)break t;j--,F+=U[G++]<>Yt)],xt=It>>>24,Gt=It>>>16&255,jt=It&65535,!(Yt+xt<=C);){if(j===0)break t;j--,F+=U[G++]<>>=Yt,C-=Yt,i.back+=Yt}if(F>>>=xt,C-=xt,i.back+=xt,Gt&64){w.msg="invalid distance code",i.mode=D;break}i.offset=jt,i.extra=Gt&15,i.mode=sr;case sr:if(i.extra){for(ie=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){w.msg="invalid distance too far back",i.mode=D;break}i.mode=Xe;case Xe:if(Vt===0)break t;if(Q=Tt-Vt,i.offset>Q){if(Q=i.offset-Q,Q>i.whave&&i.sane){w.msg="invalid distance too far back",i.mode=D;break}Q>i.wnext?(Q-=i.wnext,ar=i.wsize-Q):ar=i.wnext-Q,Q>i.length&&(Q=i.length),ir=i.window}else ir=Pt,ar=re-i.offset,Q=i.length;Q>Vt&&(Q=Vt),Vt-=Q,i.length-=Q;do Pt[re++]=ir[ar++];while(--Q);i.length===0&&(i.mode=At);break;case N:if(Vt===0)break t;Pt[re++]=i.length,Vt--,i.mode=At;break;case O:if(i.wrap){for(;C<32;){if(j===0)break t;j--,F|=U[G++]<=1&&At[it]===0;it--);if(ot>it&&(ot=it),it===0)return I[V++]=1<<24|64<<16|0,I[V++]=1<<24|64<<16|0,$.bits=1,0;for(L=1;L0&&(x===c||it!==1))return-1;for(xe[1]=0,W=1;Wm||x===g&&S>f)return 1;for(;;){Xe=W-gt,H[y]St?(N=zt[sr+H[y]],O=Ot[J+H[y]]):(N=96,O=0),et=1<>gt)+ct]=Xe<<24|N<<16|O|0;while(ct!==0);for(et=1<>=1;if(et!==0?(E&=et-1,E+=et):E=0,y++,--At[W]===0){if(W===it)break;W=b[T+H[y]]}if(W>ot&&(E&Ct)!==at){for(gt===0&&(gt=ot),Wt+=L,K=W-gt,R=1<m||x===g&&S>f)return 1;at=E&Ct,I[at]=ot<<24|K<<16|Wt-V|0}}return E!==0&&(I[Wt+E]=W-gt<<24|64<<16|0),$.bits=ot,0}},{"../utils/common":1}],10:[function(o,s,a){"use strict";s.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(o,s,a){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}s.exports=n},{}],"/lib/inflate.js":[function(o,s,a){"use strict";var n=o("./zlib/inflate"),l=o("./utils/common"),m=o("./utils/strings"),f=o("./zlib/constants"),c=o("./zlib/messages"),d=o("./zlib/zstream"),g=o("./zlib/gzheader"),h=Object.prototype.toString;function v(k){if(!(this instanceof v))return new v(k);this.options=l.assign({chunkSize:16384,windowBits:0,to:""},k||{});var x=this.options;x.raw&&x.windowBits>=0&&x.windowBits<16&&(x.windowBits=-x.windowBits,x.windowBits===0&&(x.windowBits=-15)),x.windowBits>=0&&x.windowBits<16&&!(k&&k.windowBits)&&(x.windowBits+=32),x.windowBits>15&&x.windowBits<48&&(x.windowBits&15)===0&&(x.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var b=n.inflateInit2(this.strm,x.windowBits);if(b!==f.Z_OK)throw new Error(c[b]);if(this.header=new g,n.inflateGetHeader(this.strm,this.header),x.dictionary&&(typeof x.dictionary=="string"?x.dictionary=m.string2buf(x.dictionary):h.call(x.dictionary)==="[object ArrayBuffer]"&&(x.dictionary=new Uint8Array(x.dictionary)),x.raw&&(b=n.inflateSetDictionary(this.strm,x.dictionary),b!==f.Z_OK)))throw new Error(c[b])}v.prototype.push=function(k,x){var b=this.strm,T=this.options.chunkSize,Y=this.options.dictionary,I,V,H,$,bt,W=!1;if(this.ended)return!1;V=x===~~x?x:x===!0?f.Z_FINISH:f.Z_NO_FLUSH,typeof k=="string"?b.input=m.binstring2buf(k):h.call(k)==="[object ArrayBuffer]"?b.input=new Uint8Array(k):b.input=k,b.next_in=0,b.avail_in=b.input.length;do{if(b.avail_out===0&&(b.output=new l.Buf8(T),b.next_out=0,b.avail_out=T),I=n.inflate(b,f.Z_NO_FLUSH),I===f.Z_NEED_DICT&&Y&&(I=n.inflateSetDictionary(this.strm,Y)),I===f.Z_BUF_ERROR&&W===!0&&(I=f.Z_OK,W=!1),I!==f.Z_STREAM_END&&I!==f.Z_OK)return this.onEnd(I),this.ended=!0,!1;b.next_out&&(b.avail_out===0||I===f.Z_STREAM_END||b.avail_in===0&&(V===f.Z_FINISH||V===f.Z_SYNC_FLUSH))&&(this.options.to==="string"?(H=m.utf8border(b.output,b.next_out),$=b.next_out-H,bt=m.buf2string(b.output,H),b.next_out=$,b.avail_out=T-$,$&&l.arraySet(b.output,b.output,H,$,0),this.onData(bt)):this.onData(l.shrinkBuf(b.output,b.next_out))),b.avail_in===0&&b.avail_out===0&&(W=!0)}while((b.avail_in>0||b.avail_out===0)&&I!==f.Z_STREAM_END);return I===f.Z_STREAM_END&&(V=f.Z_FINISH),V===f.Z_FINISH?(I=n.inflateEnd(this.strm),this.onEnd(I),this.ended=!0,I===f.Z_OK):(V===f.Z_SYNC_FLUSH&&(this.onEnd(f.Z_OK),b.avail_out=0),!0)},v.prototype.onData=function(k){this.chunks.push(k)},v.prototype.onEnd=function(k){k===f.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=k,this.msg=this.strm.msg};function _(k,x){var b=new v(x);if(b.push(k,!0),b.err)throw b.msg||c[b.err];return b.result}function A(k,x){return x=x||{},x.raw=!0,_(k,x)}a.Inflate=v,a.inflate=_,a.inflateRaw=A,a.ungzip=_},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")})();var nw=globalThis.fetch,ss=class{constructor(t,e={},r){this.type=t,this.detail=e,this.msg=r,Object.defineProperty(this,"__mayPropagate",{enumerable:!1,writable:!0}),this.__mayPropagate=!0}preventDefault(){}stopPropagation(){this.__mayPropagate=!1}valueOf(){return this}toString(){return this.msg?`[${this.type} event]: ${this.msg}`:`[${this.type} event]`}},Kc=class{constructor(){this.listeners={}}addEventListener(t,e,r){let o=this.listeners[t]||[];r?o.unshift(e):o.push(e),this.listeners[t]=o}removeEventListener(t,e){let r=this.listeners[t]||[],o=r.findIndex(s=>s===e);o>-1&&(r.splice(o,1),this.listeners[t]=r)}dispatch(t){let e=this.listeners[t.type];if(e)for(let r=0,o=e.length;rString.fromCharCode(e)).join("")}var $c=class{constructor(t,e,r){this.name=(r||t.tag||"").trim(),this.length=t.length,this.start=t.offset,this.offset=0,this.data=e,["getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getBigInt64","getBigUint64"].forEach(o=>{let s=o.replace(/get(Big)?/,"").toLowerCase(),a=parseInt(o.replace(/[^\d]/g,""))/8;Object.defineProperty(this,s,{get:()=>this.getValue(o,a)})})}get currentPosition(){return this.start+this.offset}set currentPosition(t){this.start=t,this.offset=0}skip(t=0,e=8){this.offset+=t*e/8}getValue(t,e){let r=this.start+this.offset;this.offset+=e;try{return this.data[t](r)}catch(o){throw console.error("parser",t,e,this),console.error("parser",this.start,this.offset),o}}flags(t){if(t===8||t===16||t===32||t===64)return this[`uint${t}`].toString(2).padStart(t,0).split("").map(e=>e==="1");console.error("Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long"),console.trace()}get tag(){let t=this.uint32;return Qc([t>>24&255,t>>16&255,t>>8&255,t&255])}get fixed(){let t=this.int16,e=Math.round(1e3*this.uint16/65356);return t+e/1e3}get legacyFixed(){let t=this.uint16,e=this.uint16.toString(16).padStart(4,0);return parseFloat(`${t}.${e}`)}get uint24(){return(this.uint8<<16)+(this.uint8<<8)+this.uint8}get uint128(){let t=0;for(let e=0;e<5;e++){let r=this.uint8;if(t=t*128+(r&127),r<128)break}return t}get longdatetime(){return new Date(Jc+1e3*parseInt(this.int64.toString()))}get fword(){return this.int16}get ufword(){return this.uint16}get Offset16(){return this.uint16}get Offset32(){return this.uint32}get F2DOT14(){let t=p.uint16,e=[0,1,-2,-1][t>>14],r=t&16383;return e+r/16384}verifyLength(){this.offset!=this.length&&console.error(`unexpected parsed table size (${this.offset}) for "${this.name}" (expected ${this.length})`)}readBytes(t=0,e=0,r=8,o=!1){if(t=t||this.length,t===0)return[];e&&(this.currentPosition=e);let s=`${o?"":"u"}int${r}`,a=[];for(;t--;)a.push(this[s]);return a}},Bt=class{constructor(t){Object.defineProperty(this,"parser",{enumerable:!1,get:()=>t});let r=t.currentPosition;Object.defineProperty(this,"start",{enumerable:!1,get:()=>r})}load(t){Object.keys(t).forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);r.get?this[e]=r.get.bind(this):r.value!==void 0&&(this[e]=r.value)}),this.parser.length&&this.parser.verifyLength()}},mt=class extends Bt{constructor(t,e,r){let{parser:o,start:s}=super(new $c(t,e,r));Object.defineProperty(this,"p",{enumerable:!1,get:()=>o}),Object.defineProperty(this,"tableStart",{enumerable:!1,get:()=>s})}};function Z(t,e,r){let o;Object.defineProperty(t,e,{get:()=>o||(o=r(),o),enumerable:!0})}var td=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:12},e,"sfnt");this.version=o.uint32,this.numTables=o.uint16,this.searchRange=o.uint16,this.entrySelector=o.uint16,this.rangeShift=o.uint16,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new ed(o)),this.tables={},this.directory.forEach(s=>{let a=()=>r(this.tables,{tag:s.tag,offset:s.offset,length:s.length},e);Z(this.tables,s.tag.trim(),a)})}},ed=class{constructor(t){this.tag=t.tag,this.checksum=t.uint32,this.offset=t.uint32,this.length=t.uint32}},El=Rl.inflate||void 0,Il=void 0,rd=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:44},e,"woff");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(s=>new od(o)),sd(this,e,r)}},od=class{constructor(t){this.tag=t.tag,this.offset=t.uint32,this.compLength=t.uint32,this.origLength=t.uint32,this.origChecksum=t.uint32}};function sd(t,e,r){t.tables={},t.directory.forEach(o=>{Z(t.tables,o.tag.trim(),()=>{let s=0,a=e;if(o.compLength!==o.origLength){let n=e.buffer.slice(o.offset,o.offset+o.compLength),l;if(El)l=El(new Uint8Array(n));else if(Il)l=Il(new Uint8Array(n));else{let m="no brotli decoder available to decode WOFF2 font";throw font.onerror&&font.onerror(m),new Error(m)}a=new DataView(l.buffer)}else s=o.offset;return r(t.tables,{tag:o.tag,offset:s,length:o.origLength},a)})})}var Ll=Al,Bl=void 0,nd=class extends mt{constructor(t,e,r){let{p:o}=super({offset:0,length:48},e,"woff2");this.signature=o.tag,this.flavor=o.uint32,this.length=o.uint32,this.numTables=o.uint16,o.uint16,this.totalSfntSize=o.uint32,this.totalCompressedSize=o.uint32,this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.metaOffset=o.uint32,this.metaLength=o.uint32,this.metaOrigLength=o.uint32,this.privOffset=o.uint32,this.privLength=o.uint32,o.verifyLength(),this.directory=[...new Array(this.numTables)].map(l=>new ad(o));let s=o.currentPosition;this.directory[0].offset=0,this.directory.forEach((l,m)=>{let f=this.directory[m+1];f&&(f.offset=l.offset+(l.transformLength!==void 0?l.transformLength:l.origLength))});let a,n=e.buffer.slice(s);if(Ll)a=Ll(new Uint8Array(n));else if(Bl)a=new Uint8Array(Bl(n));else{let l="no brotli decoder available to decode WOFF2 font";throw t.onerror&&t.onerror(l),new Error(l)}id(this,a,r)}},ad=class{constructor(t){this.flags=t.uint8;let e=this.tagNumber=this.flags&63;e===63?this.tag=t.tag:this.tag=ld(e);let o=(this.transformVersion=(this.flags&192)>>6)!==0;(this.tag==="glyf"||this.tag==="loca")&&(o=this.transformVersion!==3),this.origLength=t.uint128,o&&(this.transformLength=t.uint128)}};function id(t,e,r){t.tables={},t.directory.forEach(o=>{Z(t.tables,o.tag.trim(),()=>{let s=o.offset,a=s+(o.transformLength?o.transformLength:o.origLength),n=new DataView(e.slice(s,a).buffer);try{return r(t.tables,{tag:o.tag,offset:0,length:o.origLength},n)}catch(l){console.error(l)}})})}function ld(t){return["cmap","head","hhea","hmtx","maxp","name","OS/2","post","cvt ","fpgm","glyf","loca","prep","CFF ","VORG","EBDT","EBLC","gasp","hdmx","kern","LTSH","PCLT","VDMX","vhea","vmtx","BASE","GDEF","GPOS","GSUB","EBSC","JSTF","MATH","CBDT","CBLC","COLR","CPAL","SVG ","sbix","acnt","avar","bdat","bloc","bsln","cvar","fdsc","feat","fmtx","fvar","gvar","hsty","just","lcar","mort","morx","opbd","prop","trak","Zapf","Silf","Glat","Gloc","Feat","Sill"][t&63]}var jl={},Ul=!1;Promise.all([Promise.resolve().then(function(){return Dd}),Promise.resolve().then(function(){return Nd}),Promise.resolve().then(function(){return Md}),Promise.resolve().then(function(){return Ud}),Promise.resolve().then(function(){return Wd}),Promise.resolve().then(function(){return Kd}),Promise.resolve().then(function(){return Qd}),Promise.resolve().then(function(){return tm}),Promise.resolve().then(function(){return fm}),Promise.resolve().then(function(){return Sm}),Promise.resolve().then(function(){return lp}),Promise.resolve().then(function(){return fp}),Promise.resolve().then(function(){return pp}),Promise.resolve().then(function(){return vp}),Promise.resolve().then(function(){return wp}),Promise.resolve().then(function(){return xp}),Promise.resolve().then(function(){return kp}),Promise.resolve().then(function(){return Tp}),Promise.resolve().then(function(){return Pp}),Promise.resolve().then(function(){return Rp}),Promise.resolve().then(function(){return Ip}),Promise.resolve().then(function(){return Bp}),Promise.resolve().then(function(){return Np}),Promise.resolve().then(function(){return Gp}),Promise.resolve().then(function(){return jp}),Promise.resolve().then(function(){return Hp}),Promise.resolve().then(function(){return Yp}),Promise.resolve().then(function(){return Zp}),Promise.resolve().then(function(){return Kp}),Promise.resolve().then(function(){return $p}),Promise.resolve().then(function(){return nh}),Promise.resolve().then(function(){return uh}),Promise.resolve().then(function(){return dh}),Promise.resolve().then(function(){return gh}),Promise.resolve().then(function(){return vh}),Promise.resolve().then(function(){return wh}),Promise.resolve().then(function(){return Ch}),Promise.resolve().then(function(){return kh}),Promise.resolve().then(function(){return Ah}),Promise.resolve().then(function(){return Eh}),Promise.resolve().then(function(){return Bh})]).then(t=>{t.forEach(e=>{let r=Object.keys(e)[0];jl[r]=e[r]}),Ul=!0});function ud(t,e,r){let o=e.tag.replace(/[^\w\d]/g,""),s=jl[o];return s?new s(e,r,t):(console.warn(`lib-font has no definition for ${o}. The table was skipped.`),{})}function fd(){let t=0;function e(r,o){if(!Ul)return t>10?o(new Error("loading took too long")):(t++,setTimeout(()=>e(r),250));r(ud)}return new Promise((r,o)=>e(r))}function cd(t,e){let r=t.lastIndexOf("."),o=(t.substring(r+1)||"").toLowerCase(),s={ttf:"truetype",otf:"opentype",woff:"woff",woff2:"woff2"}[o];if(s)return s;let a={eot:"The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.",svg:"The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.",fon:"The .fon format is not supported: this is an ancient Windows bitmap font format.",ttc:"Based on the current CSS specification, font collections are not (yet?) supported."}[o];if(a||(a=`${t} is not a known webfont format.`),e)throw new Error(a);console.warn(`Could not load font: ${a}`)}async function dd(t,e,r={}){if(!globalThis.document)return;let o=cd(e,r.errorOnStyle);if(!o)return;let s=document.createElement("style");s.className="injected-by-Font-js";let a=[];return r.styleRules&&(a=Object.entries(r.styleRules).map(([n,l])=>`${n}: ${l};`)),s.textContent=` @font-face { font-family: "${t}"; ${a.join(` `)} src: url("${e}") format("${o}"); -}`,globalThis.document.head.appendChild(s),s}var md=[0,1,0,0],pd=[79,84,84,79],hd=[119,79,70,70],gd=[119,79,70,50];function ns(t,e){if(t.length===e.length){for(let r=0;r(globalThis.document&&!this.options.skipStyleSheet&&await dd(this.name,t,this.options),this.loadFont(t)))()}async loadFont(t,e){fetch(t).then(r=>vd(r)&&r.arrayBuffer()).then(r=>this.fromDataBuffer(r,e||t)).catch(r=>{let o=new ss("error",r,`Failed to load font at ${e||t}`);this.dispatch(o),this.onerror&&this.onerror(o)})}async fromDataBuffer(t,e){this.fontData=new DataView(t);let r=yd(this.fontData);if(!r)throw new Error(`${e} is either an unsupported font format, or not a font at all.`);await this.parseBasicData(r);let o=new ss("load",{font:this});this.dispatch(o),this.onload&&this.onload(o)}async parseBasicData(t){return fd().then(e=>(t==="SFNT"&&(this.opentype=new td(this,this.fontData,e)),t==="WOFF"&&(this.opentype=new rd(this,this.fontData,e)),t==="WOFF2"&&(this.opentype=new nd(this,this.fontData,e)),this.opentype))}getGlyphId(t){return this.opentype.tables.cmap.getGlyphId(t)}reverse(t){return this.opentype.tables.cmap.reverse(t)}supports(t){return this.getGlyphId(t)!==0}supportsVariation(t){return this.opentype.tables.cmap.supportsVariation(t)!==!1}measureText(t,e=16){if(this.__unloaded)throw new Error("Cannot measure text: font was unloaded. Please reload before calling measureText()");let r=document.createElement("div");r.textContent=t,r.style.fontFamily=this.name,r.style.fontSize=`${e}px`,r.style.color="transparent",r.style.background="transparent",r.style.top="0",r.style.left="0",r.style.position="absolute",document.body.appendChild(r);let o=r.getBoundingClientRect();document.body.removeChild(r);let s=this.opentype.tables["OS/2"];return o.fontSize=e,o.ascender=s.sTypoAscender,o.descender=s.sTypoDescender,o}unload(){if(this.styleElement.parentNode){this.styleElement.parentNode.removeElement(this.styleElement);let t=new ss("unload",{font:this});this.dispatch(t),this.onunload&&this.onunload(t)}this._unloaded=!0}load(){if(this.__unloaded){delete this.__unloaded,document.head.appendChild(this.styleElement);let t=new ss("load",{font:this});this.dispatch(t),this.onload&&this.onload(t)}}};globalThis.Font=is;var We=class extends Bt{constructor(t,e,r){super(t),this.plaformID=e,this.encodingID=r}},bd=class extends We{constructor(t,e,r){super(t,e,r),this.format=0,this.length=t.uint16,this.language=t.uint16,this.glyphIdArray=[...new Array(256)].map(o=>t.uint8)}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.")),0<=t&&t<=255}reverse(t){return console.warn("reverse not implemented for cmap subtable format 0"),{}}getSupportedCharCodes(){return[{start:1,end:256}]}},wd=class extends We{constructor(t,e,r){super(t,e,r),this.format=2,this.length=t.uint16,this.language=t.uint16,this.subHeaderKeys=[...new Array(256)].map(n=>t.uint16);let o=Math.max(...this.subHeaderKeys),s=t.currentPosition;Z(this,"subHeaders",()=>(t.currentPosition=s,[...new Array(o)].map(n=>new Sd(t))));let a=s+o*8;Z(this,"glyphIndexArray",()=>(t.currentPosition=a,[...new Array(o)].map(n=>t.uint16)))}supports(t){t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented."));let e=t&&255,r=t&&65280,o=this.subHeaders[r],s=this.subHeaders[o],a=s.firstCode,n=a+s.entryCount;return a<=e&&e<=n}reverse(t){return console.warn("reverse not implemented for cmap subtable format 2"),{}}getSupportedCharCodes(t=!1){return t?this.subHeaders.map(e=>({firstCode:e.firstCode,lastCode:e.lastCode})):this.subHeaders.map(e=>({start:e.firstCode,end:e.lastCode}))}},Sd=class{constructor(t){this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.first+this.entryCount,this.idDelta=t.int16,this.idRangeOffset=t.uint16}},xd=class extends We{constructor(t,e,r){super(t,e,r),this.format=4,this.length=t.uint16,this.language=t.uint16,this.segCountX2=t.uint16,this.segCount=this.segCountX2/2,this.searchRange=t.uint16,this.entrySelector=t.uint16,this.rangeShift=t.uint16;let o=t.currentPosition;Z(this,"endCode",()=>t.readBytes(this.segCount,o,16));let s=o+2+this.segCountX2;Z(this,"startCode",()=>t.readBytes(this.segCount,s,16));let a=s+this.segCountX2;Z(this,"idDelta",()=>t.readBytes(this.segCount,a,16,!0));let n=a+this.segCountX2;Z(this,"idRangeOffset",()=>t.readBytes(this.segCount,n,16));let l=n+this.segCountX2,m=this.length-(l-this.tableStart);Z(this,"glyphIdArray",()=>t.readBytes(m,l,16)),Z(this,"segments",()=>this.buildSegments(n,l,t))}buildSegments(t,e,r){let o=(s,a)=>{let n=this.startCode[a],l=this.endCode[a],m=this.idDelta[a],f=this.idRangeOffset[a],c=t+2*a,d=[];if(f===0)for(let g=n+m,h=l+m;g<=h;g++)d.push(g);else for(let g=0,h=l-n;g<=h;g++)r.currentPosition=c+f+g*2,d.push(r.uint16);return{startCode:n,endCode:l,idDelta:m,idRangeOffset:f,glyphIDs:d}};return[...new Array(this.segCount)].map(o)}reverse(t){let e=this.segments.find(o=>o.glyphIDs.includes(t));if(!e)return{};let r=e.startCode+e.glyphIDs.indexOf(t);return{code:r,unicode:String.fromCodePoint(r)}}getGlyphId(t){if(t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535)return 0;let e=this.segments.find(r=>r.startCode<=t&&t<=r.endCode);return e?e.glyphIDs[t-e.startCode]:0}supports(t){return this.getGlyphId(t)!==0}getSupportedCharCodes(t=!1){return t?this.segments:this.segments.map(e=>({start:e.startCode,end:e.endCode}))}},Cd=class extends We{constructor(t,e,r){super(t,e,r),this.format=6,this.length=t.uint16,this.language=t.uint16,this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.firstCode+this.entryCount-1,Z(this,"glyphIdArray",()=>[...new Array(this.entryCount)].map(s=>t.uint16))}supports(t){if(t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.")),tthis.firstCode+this.entryCount)return{};let e=t-this.firstCode;return{code:e,unicode:String.fromCodePoint(e)}}reverse(t){let e=this.glyphIdArray.indexOf(t);if(e>-1)return this.firstCode+e}getSupportedCharCodes(t=!1){return t?[{firstCode:this.firstCode,lastCode:this.lastCode}]:[{start:this.firstCode,end:this.lastCode}]}},Fd=class extends We{constructor(t,e,r){super(t,e,r),this.format=8,t.uint16,this.length=t.uint32,this.language=t.uint32,this.is32=[...new Array(8192)].map(s=>t.uint8),this.numGroups=t.uint32,Z(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new kd(t)))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.")),this.groups.findIndex(e=>e.startcharCode<=t&&t<=e.endcharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 8"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startcharCode,end:e.endcharCode}))}},kd=class{constructor(t){this.startcharCode=t.uint32,this.endcharCode=t.uint32,this.startGlyphID=t.uint32}},Od=class extends We{constructor(t,e,r){super(t,e,r),this.format=10,t.uint16,this.length=t.uint32,this.language=t.uint32,this.startCharCode=t.uint32,this.numChars=t.uint32,this.endCharCode=this.startCharCode+this.numChars,Z(this,"glyphs",()=>[...new Array(this.numChars)].map(s=>t.uint16))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.")),tthis.startCharCode+this.numChars?!1:t-this.startCharCode}reverse(t){return console.warn("reverse not implemented for cmap subtable format 10"),{}}getSupportedCharCodes(t=!1){return t?[{startCharCode:this.startCharCode,endCharCode:this.endCharCode}]:[{start:this.startCharCode,end:this.endCharCode}]}},Td=class extends We{constructor(t,e,r){super(t,e,r),this.format=12,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32,Z(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new _d(t)))}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535?0:this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){for(let e of this.groups){let r=e.startGlyphID;if(r>t)continue;if(r===t)return e.startCharCode;if(r+(e.endCharCode-e.startCharCode)({start:e.startCharCode,end:e.endCharCode}))}},_d=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.startGlyphID=t.uint32}},Pd=class extends We{constructor(t,e,r){super(t,e,r),this.format=13,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32;let o=[...new Array(this.numGroups)].map(s=>new Ad(t));Z(this,"groups",o)}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 13"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startCharCode,end:e.endCharCode}))}},Ad=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.glyphID=t.uint32}},Rd=class extends We{constructor(t,e,r){super(t,e,r),this.subTableStart=t.currentPosition,this.format=14,this.length=t.uint32,this.numVarSelectorRecords=t.uint32,Z(this,"varSelectors",()=>[...new Array(this.numVarSelectorRecords)].map(o=>new Ed(t)))}supports(){return console.warn("supports not implemented for cmap subtable format 14"),0}getSupportedCharCodes(){return console.warn("getSupportedCharCodes not implemented for cmap subtable format 14"),[]}reverse(t){return console.warn("reverse not implemented for cmap subtable format 14"),{}}supportsVariation(t){let e=this.varSelector.find(r=>r.varSelector===t);return e||!1}getSupportedVariations(){return this.varSelectors.map(t=>t.varSelector)}},Ed=class{constructor(t){this.varSelector=t.uint24,this.defaultUVSOffset=t.Offset32,this.nonDefaultUVSOffset=t.Offset32}};function Id(t,e,r){let o=t.uint16;return o===0?new bd(t,e,r):o===2?new wd(t,e,r):o===4?new xd(t,e,r):o===6?new Cd(t,e,r):o===8?new Fd(t,e,r):o===10?new Od(t,e,r):o===12?new Td(t,e,r):o===13?new Pd(t,e,r):o===14?new Rd(t,e,r):{}}var Ld=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numTables=r.uint16,this.encodingRecords=[...new Array(this.numTables)].map(o=>new Bd(r,this.tableStart))}getSubTable(t){return this.encodingRecords[t].table}getSupportedEncodings(){return this.encodingRecords.map(t=>({platformID:t.platformID,encodingId:t.encodingID}))}getSupportedCharCodes(t,e){let r=this.encodingRecords.findIndex(s=>s.platformID===t&&s.encodingID===e);return r===-1?!1:this.getSubTable(r).getSupportedCharCodes()}reverse(t){for(let e=0;e{let s=this.getSubTable(o);return s.getGlyphId?(e=s.getGlyphId(t),e!==0):!1}),e}supports(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supports&&o.supports(t)!==!1})}supportsVariation(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supportsVariation&&o.supportsVariation(t)!==!1})}},Bd=class{constructor(t,e){let r=this.platformID=t.uint16,o=this.encodingID=t.uint16,s=this.offset=t.Offset32;Z(this,"table",()=>(t.currentPosition=e+s,Id(t,r,o)))}},Dd=Object.freeze({__proto__:null,cmap:Ld}),Vd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.load({majorVersion:r.uint16,minorVersion:r.uint16,fontRevision:r.fixed,checkSumAdjustment:r.uint32,magicNumber:r.uint32,flags:r.flags(16),unitsPerEm:r.uint16,created:r.longdatetime,modified:r.longdatetime,xMin:r.int16,yMin:r.int16,xMax:r.int16,yMax:r.int16,macStyle:r.flags(16),lowestRecPPEM:r.uint16,fontDirectionHint:r.uint16,indexToLocFormat:r.uint16,glyphDataFormat:r.uint16})}},Nd=Object.freeze({__proto__:null,head:Vd}),zd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.ascender=r.fword,this.descender=r.fword,this.lineGap=r.fword,this.advanceWidthMax=r.ufword,this.minLeftSideBearing=r.fword,this.minRightSideBearing=r.fword,this.xMaxExtent=r.fword,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,r.int16,r.int16,r.int16,r.int16,this.metricDataFormat=r.int16,this.numberOfHMetrics=r.uint16,r.verifyLength()}},Md=Object.freeze({__proto__:null,hhea:zd}),Gd=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hhea.numberOfHMetrics,a=r.maxp.numGlyphs,n=o.currentPosition;if(Z(this,"hMetrics",()=>(o.currentPosition=n,[...new Array(s)].map(l=>new jd(o.uint16,o.int16)))),s(o.currentPosition=l,[...new Array(a-s)].map(m=>o.int16)))}}},jd=class{constructor(t,e){this.advanceWidth=t,this.lsb=e}},Ud=Object.freeze({__proto__:null,hmtx:Gd}),Hd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.legacyFixed,this.numGlyphs=r.uint16,this.version===1&&(this.maxPoints=r.uint16,this.maxContours=r.uint16,this.maxCompositePoints=r.uint16,this.maxCompositeContours=r.uint16,this.maxZones=r.uint16,this.maxTwilightPoints=r.uint16,this.maxStorage=r.uint16,this.maxFunctionDefs=r.uint16,this.maxInstructionDefs=r.uint16,this.maxStackElements=r.uint16,this.maxSizeOfInstructions=r.uint16,this.maxComponentElements=r.uint16,this.maxComponentDepth=r.uint16),r.verifyLength()}},Wd=Object.freeze({__proto__:null,maxp:Hd}),Yd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.format=r.uint16,this.count=r.uint16,this.stringOffset=r.Offset16,this.nameRecords=[...new Array(this.count)].map(o=>new Zd(r,this)),this.format===1&&(this.langTagCount=r.uint16,this.langTagRecords=[...new Array(this.langTagCount)].map(o=>new qd(r.uint16,r.Offset16))),this.stringStart=this.tableStart+this.stringOffset}get(t){let e=this.nameRecords.find(r=>r.nameID===t);if(e)return e.string}},qd=class{constructor(t,e){this.length=t,this.offset=e}},Zd=class{constructor(t,e){this.platformID=t.uint16,this.encodingID=t.uint16,this.languageID=t.uint16,this.nameID=t.uint16,this.length=t.uint16,this.offset=t.Offset16,Z(this,"string",()=>(t.currentPosition=e.stringStart+this.offset,Xd(t,this)))}};function Xd(t,e){let{platformID:r,length:o}=e;if(o===0)return"";if(r===0||r===3){let n=[];for(let l=0,m=o/2;lr.uint8),this.ulUnicodeRange1=r.flags(32),this.ulUnicodeRange2=r.flags(32),this.ulUnicodeRange3=r.flags(32),this.ulUnicodeRange4=r.flags(32),this.achVendID=r.tag,this.fsSelection=r.uint16,this.usFirstCharIndex=r.uint16,this.usLastCharIndex=r.uint16,this.sTypoAscender=r.int16,this.sTypoDescender=r.int16,this.sTypoLineGap=r.int16,this.usWinAscent=r.uint16,this.usWinDescent=r.uint16,this.version===0||(this.ulCodePageRange1=r.flags(32),this.ulCodePageRange2=r.flags(32),this.version===1)||(this.sxHeight=r.int16,this.sCapHeight=r.int16,this.usDefaultChar=r.uint16,this.usBreakChar=r.uint16,this.usMaxContext=r.uint16,this.version<=4)||(this.usLowerOpticalPointSize=r.uint16,this.usUpperOpticalPointSize=r.uint16,this.version===5))return r.verifyLength()}},Qd=Object.freeze({__proto__:null,OS2:Jd}),$d=class extends mt{constructor(t,e){let{p:r}=super(t,e);if(this.version=r.legacyFixed,this.italicAngle=r.fixed,this.underlinePosition=r.fword,this.underlineThickness=r.fword,this.isFixedPitch=r.uint32,this.minMemType42=r.uint32,this.maxMemType42=r.uint32,this.minMemType1=r.uint32,this.maxMemType1=r.uint32,this.version===1||this.version===3)return r.verifyLength();if(this.numGlyphs=r.uint16,this.version===2){this.glyphNameIndex=[...new Array(this.numGlyphs)].map(o=>r.uint16),this.namesOffset=r.currentPosition,this.glyphNameOffsets=[1];for(let o=0;or.int8))}getGlyphName(t){if(this.version!==2)return console.warn(`post table version ${this.version} does not support glyph name lookups`),"";let e=this.glyphNameIndex[t];if(e<258)return Dl[e];let r=this.glyphNameOffsets[t],s=this.glyphNameOffsets[t+1]-r-1;return s===0?".notdef.":(this.parser.currentPosition=this.namesOffset+r,this.parser.readBytes(s,this.namesOffset+r,8,!0).map(n=>String.fromCharCode(n)).join(""))}},Dl=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"],tm=Object.freeze({__proto__:null,post:$d}),em=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.horizAxisOffset=r.Offset16,this.vertAxisOffset=r.Offset16,Z(this,"horizAxis",()=>new vn({offset:t.offset+this.horizAxisOffset},e)),Z(this,"vertAxis",()=>new vn({offset:t.offset+this.vertAxisOffset},e)),this.majorVersion===1&&this.minorVersion===1&&(this.itemVarStoreOffset=r.Offset32,Z(this,"itemVarStore",()=>new vn({offset:t.offset+this.itemVarStoreOffset},e)))}},vn=class extends mt{constructor(t,e){let{p:r}=super(t,e,"AxisTable");this.baseTagListOffset=r.Offset16,this.baseScriptListOffset=r.Offset16,Z(this,"baseTagList",()=>new rm({offset:t.offset+this.baseTagListOffset},e)),Z(this,"baseScriptList",()=>new om({offset:t.offset+this.baseScriptListOffset},e))}},rm=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseTagListTable");this.baseTagCount=r.uint16,this.baselineTags=[...new Array(this.baseTagCount)].map(o=>r.tag)}},om=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseScriptListTable");this.baseScriptCount=r.uint16;let o=r.currentPosition;Z(this,"baseScriptRecords",()=>(r.currentPosition=o,[...new Array(this.baseScriptCount)].map(s=>new sm(this.start,r))))}},sm=class{constructor(t,e){this.baseScriptTag=e.tag,this.baseScriptOffset=e.Offset16,Z(this,"baseScriptTable",()=>(e.currentPosition=t+this.baseScriptOffset,new nm(e)))}},nm=class{constructor(t){this.start=t.currentPosition,this.baseValuesOffset=t.Offset16,this.defaultMinMaxOffset=t.Offset16,this.baseLangSysCount=t.uint16,this.baseLangSysRecords=[...new Array(this.baseLangSysCount)].map(e=>new am(this.start,t)),Z(this,"baseValues",()=>(t.currentPosition=this.start+this.baseValuesOffset,new im(t))),Z(this,"defaultMinMax",()=>(t.currentPosition=this.start+this.defaultMinMaxOffset,new Hl(t)))}},am=class{constructor(t,e){this.baseLangSysTag=e.tag,this.minMaxOffset=e.Offset16,Z(this,"minMax",()=>(e.currentPosition=t+this.minMaxOffset,new Hl(e)))}},im=class{constructor(t){this.parser=t,this.start=t.currentPosition,this.defaultBaselineIndex=t.uint16,this.baseCoordCount=t.uint16,this.baseCoords=[...new Array(this.baseCoordCount)].map(e=>t.Offset16)}getTable(t){return this.parser.currentPosition=this.start+this.baseCoords[t],new um(this.parser)}},Hl=class{constructor(t){this.minCoord=t.Offset16,this.maxCoord=t.Offset16,this.featMinMaxCount=t.uint16;let e=t.currentPosition;Z(this,"featMinMaxRecords",()=>(t.currentPosition=e,[...new Array(this.featMinMaxCount)].map(r=>new lm(t))))}},lm=class{constructor(t){this.featureTableTag=t.tag,this.minCoord=t.Offset16,this.maxCoord=t.Offset16}},um=class{constructor(t){this.baseCoordFormat=t.uint16,this.coordinate=t.int16,this.baseCoordFormat===2&&(this.referenceGlyph=t.uint16,this.baseCoordPoint=t.uint16),this.baseCoordFormat===3&&(this.deviceTable=t.Offset16)}},fm=Object.freeze({__proto__:null,BASE:em}),Vl=class{constructor(t){this.classFormat=t.uint16,this.classFormat===1&&(this.startGlyphID=t.uint16,this.glyphCount=t.uint16,this.classValueArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.classFormat===2&&(this.classRangeCount=t.uint16,this.classRangeRecords=[...new Array(this.classRangeCount)].map(e=>new cm(t)))}},cm=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.class=t.uint16}},ho=class extends Bt{constructor(t){super(t),this.coverageFormat=t.uint16,this.coverageFormat===1&&(this.glyphCount=t.uint16,this.glyphArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.coverageFormat===2&&(this.rangeCount=t.uint16,this.rangeRecords=[...new Array(this.rangeCount)].map(e=>new dm(t)))}},dm=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.startCoverageIndex=t.uint16}},mm=class{constructor(t,e){this.table=t,this.parser=e,this.start=e.currentPosition,this.format=e.uint16,this.variationRegionListOffset=e.Offset32,this.itemVariationDataCount=e.uint16,this.itemVariationDataOffsets=[...new Array(this.itemVariationDataCount)].map(r=>e.Offset32)}},pm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.glyphClassDefOffset=r.Offset16,Z(this,"glyphClassDefs",()=>{if(this.glyphClassDefOffset!==0)return r.currentPosition=this.tableStart+this.glyphClassDefOffset,new Vl(r)}),this.attachListOffset=r.Offset16,Z(this,"attachList",()=>{if(this.attachListOffset!==0)return r.currentPosition=this.tableStart+this.attachListOffset,new hm(r)}),this.ligCaretListOffset=r.Offset16,Z(this,"ligCaretList",()=>{if(this.ligCaretListOffset!==0)return r.currentPosition=this.tableStart+this.ligCaretListOffset,new ym(r)}),this.markAttachClassDefOffset=r.Offset16,Z(this,"markAttachClassDef",()=>{if(this.markAttachClassDefOffset!==0)return r.currentPosition=this.tableStart+this.markAttachClassDefOffset,new Vl(r)}),this.minorVersion>=2&&(this.markGlyphSetsDefOffset=r.Offset16,Z(this,"markGlyphSetsDef",()=>{if(this.markGlyphSetsDefOffset!==0)return r.currentPosition=this.tableStart+this.markGlyphSetsDefOffset,new wm(r)})),this.minorVersion===3&&(this.itemVarStoreOffset=r.Offset32,Z(this,"itemVarStore",()=>{if(this.itemVarStoreOffset!==0)return r.currentPosition=this.tableStart+this.itemVarStoreOffset,new mm(r)}))}},hm=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,this.glyphCount=t.uint16,this.attachPointOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16)}getPoint(t){return this.parser.currentPosition=this.start+this.attachPointOffsets[t],new gm(this.parser)}},gm=class{constructor(t){this.pointCount=t.uint16,this.pointIndices=[...new Array(this.pointCount)].map(e=>t.uint16)}},ym=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,Z(this,"coverage",()=>(t.currentPosition=this.start+this.coverageOffset,new ho(t))),this.ligGlyphCount=t.uint16,this.ligGlyphOffsets=[...new Array(this.ligGlyphCount)].map(e=>t.Offset16)}getLigGlyph(t){return this.parser.currentPosition=this.start+this.ligGlyphOffsets[t],new vm(this.parser)}},vm=class extends Bt{constructor(t){super(t),this.caretCount=t.uint16,this.caretValueOffsets=[...new Array(this.caretCount)].map(e=>t.Offset16)}getCaretValue(t){return this.parser.currentPosition=this.start+this.caretValueOffsets[t],new bm(this.parser)}},bm=class{constructor(t){this.caretValueFormat=t.uint16,this.caretValueFormat===1&&(this.coordinate=t.int16),this.caretValueFormat===2&&(this.caretValuePointIndex=t.uint16),this.caretValueFormat===3&&(this.coordinate=t.int16,this.deviceOffset=t.Offset16)}},wm=class extends Bt{constructor(t){super(t),this.markGlyphSetTableFormat=t.uint16,this.markGlyphSetCount=t.uint16,this.coverageOffsets=[...new Array(this.markGlyphSetCount)].map(e=>t.Offset32)}getMarkGlyphSet(t){return this.parser.currentPosition=this.start+this.coverageOffsets[t],new ho(this.parser)}},Sm=Object.freeze({__proto__:null,GDEF:pm}),Nl=class extends Bt{static EMPTY={scriptCount:0,scriptRecords:[]};constructor(t){super(t),this.scriptCount=t.uint16,this.scriptRecords=[...new Array(this.scriptCount)].map(e=>new xm(t))}},xm=class{constructor(t){this.scriptTag=t.tag,this.scriptOffset=t.Offset16}},Cm=class extends Bt{constructor(t){super(t),this.defaultLangSys=t.Offset16,this.langSysCount=t.uint16,this.langSysRecords=[...new Array(this.langSysCount)].map(e=>new Fm(t))}},Fm=class{constructor(t){this.langSysTag=t.tag,this.langSysOffset=t.Offset16}},zl=class{constructor(t){this.lookupOrder=t.Offset16,this.requiredFeatureIndex=t.uint16,this.featureIndexCount=t.uint16,this.featureIndices=[...new Array(this.featureIndexCount)].map(e=>t.uint16)}},Ml=class extends Bt{static EMPTY={featureCount:0,featureRecords:[]};constructor(t){super(t),this.featureCount=t.uint16,this.featureRecords=[...new Array(this.featureCount)].map(e=>new km(t))}},km=class{constructor(t){this.featureTag=t.tag,this.featureOffset=t.Offset16}},Om=class extends Bt{constructor(t){super(t),this.featureParams=t.Offset16,this.lookupIndexCount=t.uint16,this.lookupListIndices=[...new Array(this.lookupIndexCount)].map(e=>t.uint16)}getFeatureParams(){if(this.featureParams>0){let t=this.parser;t.currentPosition=this.start+this.featureParams;let e=this.featureTag;if(e==="size")return new _m(t);if(e.startsWith("cc"))return new Tm(t);if(e.startsWith("ss"))return new Pm(t)}}},Tm=class{constructor(t){this.format=t.uint16,this.featUiLabelNameId=t.uint16,this.featUiTooltipTextNameId=t.uint16,this.sampleTextNameId=t.uint16,this.numNamedParameters=t.uint16,this.firstParamUiLabelNameId=t.uint16,this.charCount=t.uint16,this.character=[...new Array(this.charCount)].map(e=>t.uint24)}},_m=class{constructor(t){this.designSize=t.uint16,this.subfamilyIdentifier=t.uint16,this.subfamilyNameID=t.uint16,this.smallEnd=t.uint16,this.largeEnd=t.uint16}},Pm=class{constructor(t){this.version=t.uint16,this.UINameID=t.uint16}};function Wl(t){t.parser.currentPosition-=2,delete t.coverageOffset,delete t.getCoverageTable}var xr=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.coverageOffset=t.Offset16}getCoverageTable(){let t=this.parser;return t.currentPosition=this.start+this.coverageOffset,new ho(t)}},wn=class{constructor(t){this.glyphSequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},Am=class extends xr{constructor(t){super(t),this.deltaGlyphID=t.int16}},Rm=class extends xr{constructor(t){super(t),this.sequenceCount=t.uint16,this.sequenceOffsets=[...new Array(this.sequenceCount)].map(e=>t.Offset16)}getSequence(t){let e=this.parser;return e.currentPosition=this.start+this.sequenceOffsets[t],new Em(e)}},Em=class{constructor(t){this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Im=class extends xr{constructor(t){super(t),this.alternateSetCount=t.uint16,this.alternateSetOffsets=[...new Array(this.alternateSetCount)].map(e=>t.Offset16)}getAlternateSet(t){let e=this.parser;return e.currentPosition=this.start+this.alternateSetOffsets[t],new Lm(e)}},Lm=class{constructor(t){this.glyphCount=t.uint16,this.alternateGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Bm=class extends xr{constructor(t){super(t),this.ligatureSetCount=t.uint16,this.ligatureSetOffsets=[...new Array(this.ligatureSetCount)].map(e=>t.Offset16)}getLigatureSet(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureSetOffsets[t],new Dm(e)}},Dm=class extends Bt{constructor(t){super(t),this.ligatureCount=t.uint16,this.ligatureOffsets=[...new Array(this.ligatureCount)].map(e=>t.Offset16)}getLigature(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureOffsets[t],new Vm(e)}},Vm=class{constructor(t){this.ligatureGlyph=t.uint16,this.componentCount=t.uint16,this.componentGlyphIDs=[...new Array(this.componentCount-1)].map(e=>t.uint16)}},Nm=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.subRuleSetCount=t.uint16,this.subRuleSetOffsets=[...new Array(this.subRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.classDefOffset=t.Offset16,this.subClassSetCount=t.uint16,this.subClassSetOffsets=[...new Array(this.subClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(Wl(this),this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.coverageOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new wn(t)))}getSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 5.${this.substFormat} has no subrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.subRuleSetOffsets[t],new zm(e)}getSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 5.${this.substFormat} has no subclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.subClassSetOffsets[t],new Mm(e)}getCoverageTable(t){if(this.substFormat!==3&&!t)return super.getCoverageTable();if(!t)throw new Error(`lookup type 5.${this.substFormat} requires an coverage table index.`);let e=this.parser;return e.currentPosition=this.start+this.coverageOffsets[t],new ho(e)}},zm=class extends Bt{constructor(t){super(t),this.subRuleCount=t.uint16,this.subRuleOffsets=[...new Array(this.subRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.subRuleOffsets[t],new Yl(e)}},Yl=class{constructor(t){this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.inputSequence=[...new Array(this.glyphCount-1)].map(e=>t.uint16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new wn(t))}},Mm=class extends Bt{constructor(t){super(t),this.subClassRuleCount=t.uint16,this.subClassRuleOffsets=[...new Array(this.subClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.subClassRuleOffsets[t],new Gm(e)}},Gm=class extends Yl{constructor(t){super(t)}},jm=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.chainSubRuleSetCount=t.uint16,this.chainSubRuleSetOffsets=[...new Array(this.chainSubRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.backtrackClassDefOffset=t.Offset16,this.inputClassDefOffset=t.Offset16,this.lookaheadClassDefOffset=t.Offset16,this.chainSubClassSetCount=t.uint16,this.chainSubClassSetOffsets=[...new Array(this.chainSubClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(Wl(this),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.inputGlyphCount=t.uint16,this.inputCoverageOffsets=[...new Array(this.inputGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[...new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.seqLookupCount=t.uint16,this.seqLookupRecords=[...new Array(this.substitutionCount)].map(e=>new ql(t)))}getChainSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 6.${this.substFormat} has no chainsubrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleSetOffsets[t],new Um(e)}getChainSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 6.${this.substFormat} has no chainsubclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubClassSetOffsets[t],new Wm(e)}getCoverageFromOffset(t){if(this.substFormat!==3)throw new Error(`lookup type 6.${this.substFormat} does not use contextual coverage offsets.`);let e=this.parser;return e.currentPosition=this.start+t,new ho(e)}},Um=class extends Bt{constructor(t){super(t),this.chainSubRuleCount=t.uint16,this.chainSubRuleOffsets=[...new Array(this.chainSubRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new Hm(e)}},Hm=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.SubstCount)].map(e=>new wn(t))}},Wm=class extends Bt{constructor(t){super(t),this.chainSubClassRuleCount=t.uint16,this.chainSubClassRuleOffsets=[...new Array(this.chainSubClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new Ym(e)}},Ym=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new ql(t))}},ql=class extends Bt{constructor(t){super(t),this.sequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},qm=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.extensionLookupType=t.uint16,this.extensionOffset=t.Offset32}},Zm=class extends xr{constructor(t){super(t),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Xm={buildSubtable:function(t,e){let r=new[void 0,Am,Rm,Im,Bm,Nm,jm,qm,Zm][t](e);return r.type=t,r}},Ye=class extends Bt{constructor(t){super(t)}},Km=class extends Ye{constructor(t){super(t),console.log("lookup type 1")}},Jm=class extends Ye{constructor(t){super(t),console.log("lookup type 2")}},Qm=class extends Ye{constructor(t){super(t),console.log("lookup type 3")}},$m=class extends Ye{constructor(t){super(t),console.log("lookup type 4")}},tp=class extends Ye{constructor(t){super(t),console.log("lookup type 5")}},ep=class extends Ye{constructor(t){super(t),console.log("lookup type 6")}},rp=class extends Ye{constructor(t){super(t),console.log("lookup type 7")}},op=class extends Ye{constructor(t){super(t),console.log("lookup type 8")}},sp=class extends Ye{constructor(t){super(t),console.log("lookup type 9")}},np={buildSubtable:function(t,e){let r=new[void 0,Km,Jm,Qm,$m,tp,ep,rp,op,sp][t](e);return r.type=t,r}},Gl=class extends Bt{static EMPTY={lookupCount:0,lookups:[]};constructor(t){super(t),this.lookupCount=t.uint16,this.lookups=[...new Array(this.lookupCount)].map(e=>t.Offset16)}},ap=class extends Bt{constructor(t,e){super(t),this.ctType=e,this.lookupType=t.uint16,this.lookupFlag=t.uint16,this.subTableCount=t.uint16,this.subtableOffsets=[...new Array(this.subTableCount)].map(r=>t.Offset16),this.markFilteringSet=t.uint16}get rightToLeft(){return this.lookupFlag&!0}get ignoreBaseGlyphs(){return this.lookupFlag&!0}get ignoreLigatures(){return this.lookupFlag&!0}get ignoreMarks(){return this.lookupFlag&!0}get useMarkFilteringSet(){return this.lookupFlag&!0}get markAttachmentType(){return this.lookupFlag&!0}getSubTable(t){let e=this.ctType==="GSUB"?Xm:np;return this.parser.currentPosition=this.start+this.subtableOffsets[t],e.buildSubtable(this.lookupType,this.parser)}},Zl=class extends mt{constructor(t,e,r){let{p:o,tableStart:s}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.scriptListOffset=o.Offset16,this.featureListOffset=o.Offset16,this.lookupListOffset=o.Offset16,this.majorVersion===1&&this.minorVersion===1&&(this.featureVariationsOffset=o.Offset32);let a=!(this.scriptListOffset||this.featureListOffset||this.lookupListOffset);Z(this,"scriptList",()=>a?Nl.EMPTY:(o.currentPosition=s+this.scriptListOffset,new Nl(o))),Z(this,"featureList",()=>a?Ml.EMPTY:(o.currentPosition=s+this.featureListOffset,new Ml(o))),Z(this,"lookupList",()=>a?Gl.EMPTY:(o.currentPosition=s+this.lookupListOffset,new Gl(o))),this.featureVariationsOffset&&Z(this,"featureVariations",()=>a?FeatureVariations.EMPTY:(o.currentPosition=s+this.featureVariationsOffset,new FeatureVariations(o)))}getSupportedScripts(){return this.scriptList.scriptRecords.map(t=>t.scriptTag)}getScriptTable(t){let e=this.scriptList.scriptRecords.find(o=>o.scriptTag===t);this.parser.currentPosition=this.scriptList.start+e.scriptOffset;let r=new Cm(this.parser);return r.scriptTag=t,r}ensureScriptTable(t){return typeof t=="string"?this.getScriptTable(t):t}getSupportedLangSys(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys!==0,r=t.langSysRecords.map(o=>o.langSysTag);return e&&r.unshift("dflt"),r}getDefaultLangSysTable(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys;if(e!==0){this.parser.currentPosition=t.start+e;let r=new zl(this.parser);return r.langSysTag="",r.defaultForScript=t.scriptTag,r}}getLangSysTable(t,e="dflt"){if(e==="dflt")return this.getDefaultLangSysTable(t);t=this.ensureScriptTable(t);let r=t.langSysRecords.find(s=>s.langSysTag===e);this.parser.currentPosition=t.start+r.langSysOffset;let o=new zl(this.parser);return o.langSysTag=e,o}getFeatures(t){return t.featureIndices.map(e=>this.getFeature(e))}getFeature(t){let e;if(parseInt(t)==t?e=this.featureList.featureRecords[t]:e=this.featureList.featureRecords.find(o=>o.featureTag===t),!e)return;this.parser.currentPosition=this.featureList.start+e.featureOffset;let r=new Om(this.parser);return r.featureTag=e.featureTag,r}getLookups(t){return t.lookupListIndices.map(e=>this.getLookup(e))}getLookup(t,e){let r=this.lookupList.lookups[t];return this.parser.currentPosition=this.lookupList.start+r,new ap(this.parser,e)}},ip=class extends Zl{constructor(t,e){super(t,e,"GSUB")}getLookup(t){return super.getLookup(t,"GSUB")}},lp=Object.freeze({__proto__:null,GSUB:ip}),up=class extends Zl{constructor(t,e){super(t,e,"GPOS")}getLookup(t){return super.getLookup(t,"GPOS")}},fp=Object.freeze({__proto__:null,GPOS:up}),cp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.offsetToSVGDocumentList=r.Offset32,r.currentPosition=this.tableStart+this.offsetToSVGDocumentList,this.documentList=new dp(r)}},dp=class extends Bt{constructor(t){super(t),this.numEntries=t.uint16,this.documentRecords=[...new Array(this.numEntries)].map(e=>new mp(t))}getDocument(t){let e=this.documentRecords[t];if(!e)return"";let r=this.start+e.svgDocOffset;return this.parser.currentPosition=r,this.parser.readBytes(e.svgDocLength)}getDocumentForGlyph(t){let e=this.documentRecords.findIndex(r=>r.startGlyphID<=t&&t<=r.endGlyphID);return e===-1?"":this.getDocument(e)}},mp=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.svgDocOffset=t.Offset32,this.svgDocLength=t.uint32}},pp=Object.freeze({__proto__:null,SVG:cp}),hp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.axesArrayOffset=r.Offset16,r.uint16,this.axisCount=r.uint16,this.axisSize=r.uint16,this.instanceCount=r.uint16,this.instanceSize=r.uint16;let o=this.tableStart+this.axesArrayOffset;Z(this,"axes",()=>(r.currentPosition=o,[...new Array(this.axisCount)].map(a=>new gp(r))));let s=o+this.axisCount*this.axisSize;Z(this,"instances",()=>{let a=[];for(let n=0;nt.tag)}getAxis(t){return this.axes.find(e=>e.tag===t)}},gp=class{constructor(t){this.tag=t.tag,this.minValue=t.fixed,this.defaultValue=t.fixed,this.maxValue=t.fixed,this.flags=t.flags(16),this.axisNameID=t.uint16}},yp=class{constructor(t,e,r){let o=t.currentPosition;this.subfamilyNameID=t.uint16,t.uint16,this.coordinates=[...new Array(e)].map(s=>t.fixed),t.currentPosition-o[...new Array(o)].map(s=>r.fword))}},wp=Object.freeze({__proto__:null,cvt:bp}),Sp=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},xp=Object.freeze({__proto__:null,fpgm:Sp}),Cp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRanges=r.uint16,Z(this,"gaspRanges",()=>[...new Array(this.numRanges)].map(s=>new Fp(r)))}},Fp=class{constructor(t){this.rangeMaxPPEM=t.uint16,this.rangeGaspBehavior=t.uint16}},kp=Object.freeze({__proto__:null,gasp:Cp}),Op=class extends mt{constructor(t,e){super(t,e)}getGlyphData(t,e){return this.parser.currentPosition=this.tableStart+t,this.parser.readBytes(e)}},Tp=Object.freeze({__proto__:null,glyf:Op}),_p=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.maxp.numGlyphs+1;r.head.indexToLocFormat===0?(this.x2=!0,Z(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset16))):Z(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset32))}getGlyphDataOffsetAndLength(t){let e=this.offsets[t]*this.x2?2:1,r=this.offsets[t+1]*this.x2?2:1;return{offset:e,length:r-e}}},Pp=Object.freeze({__proto__:null,loca:_p}),Ap=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},Rp=Object.freeze({__proto__:null,prep:Ap}),Ep=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"data",()=>r.readBytes())}},Ip=Object.freeze({__proto__:null,CFF:Ep}),Lp=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"data",()=>r.readBytes())}},Bp=Object.freeze({__proto__:null,CFF2:Lp}),Dp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.defaultVertOriginY=r.int16,this.numVertOriginYMetrics=r.uint16,Z(this,"vertORiginYMetrics",()=>[...new Array(this.numVertOriginYMetrics)].map(o=>new Vp(r)))}},Vp=class{constructor(t){this.glyphIndex=t.uint16,this.vertOriginY=t.int16}},Np=Object.freeze({__proto__:null,VORG:Dp}),zp=class{constructor(t){this.indexSubTableArrayOffset=t.Offset32,this.indexTablesSize=t.uint32,this.numberofIndexSubTables=t.uint32,this.colorRef=t.uint32,this.hori=new as(t),this.vert=new as(t),this.startGlyphIndex=t.uint16,this.endGlyphIndex=t.uint16,this.ppemX=t.uint8,this.ppemY=t.uint8,this.bitDepth=t.uint8,this.flags=t.int8}},Mp=class{constructor(t){this.hori=new as(t),this.vert=new as(t),this.ppemX=t.uint8,this.ppemY=t.uint8,this.substitutePpemX=t.uint8,this.substitutePpemY=t.uint8}},as=class{constructor(t){this.ascender=t.int8,this.descender=t.int8,this.widthMax=t.uint8,this.caretSlopeNumerator=t.int8,this.caretSlopeDenominator=t.int8,this.caretOffset=t.int8,this.minOriginSB=t.int8,this.minAdvanceSB=t.int8,this.maxBeforeBL=t.int8,this.minAfterBL=t.int8,this.pad1=t.int8,this.pad2=t.int8}},Xl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.numSizes=o.uint32,Z(this,"bitMapSizes",()=>[...new Array(this.numSizes)].map(s=>new zp(o)))}},Gp=Object.freeze({__proto__:null,EBLC:Xl}),Kl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16}},jp=Object.freeze({__proto__:null,EBDT:Kl}),Up=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.numSizes=r.uint32,Z(this,"bitmapScales",()=>[...new Array(this.numSizes)].map(o=>new Mp(r)))}},Hp=Object.freeze({__proto__:null,EBSC:Up}),Wp=class extends Xl{constructor(t,e){super(t,e,"CBLC")}},Yp=Object.freeze({__proto__:null,CBLC:Wp}),qp=class extends Kl{constructor(t,e){super(t,e,"CBDT")}},Zp=Object.freeze({__proto__:null,CBDT:qp}),Xp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.flags=r.flags(16),this.numStrikes=r.uint32,Z(this,"strikeOffsets",()=>[...new Array(this.numStrikes)].map(o=>r.Offset32))}},Kp=Object.freeze({__proto__:null,sbix:Xp}),Jp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numBaseGlyphRecords=r.uint16,this.baseGlyphRecordsOffset=r.Offset32,this.layerRecordsOffset=r.Offset32,this.numLayerRecords=r.uint16}getBaseGlyphRecord(t){let e=this.tableStart+this.baseGlyphRecordsOffset;this.parser.currentPosition=e;let r=new bn(this.parser),o=r.gID,s=this.tableStart+this.layerRecordsOffset-6;this.parser.currentPosition=s;let a=new bn(this.parser),n=a.gID;if(o===t)return r;if(n===t)return a;for(;e!==s;){let l=e+(s-e)/12;this.parser.currentPosition=l;let m=new bn(this.parser),f=m.gID;if(f===t)return m;f>t?s=l:fnew Qp(p))}},bn=class{constructor(t){this.gID=t.uint16,this.firstLayerIndex=t.uint16,this.numLayers=t.uint16}},Qp=class{constructor(t){this.gID=t.uint16,this.paletteIndex=t.uint16}},$p=Object.freeze({__proto__:null,COLR:Jp}),th=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numPaletteEntries=r.uint16;let o=this.numPalettes=r.uint16;this.numColorRecords=r.uint16,this.offsetFirstColorRecord=r.Offset32,this.colorRecordIndices=[...new Array(this.numPalettes)].map(s=>r.uint16),Z(this,"colorRecords",()=>(r.currentPosition=this.tableStart+this.offsetFirstColorRecord,[...new Array(this.numColorRecords)].map(s=>new eh(r)))),this.version===1&&(this.offsetPaletteTypeArray=r.Offset32,this.offsetPaletteLabelArray=r.Offset32,this.offsetPaletteEntryLabelArray=r.Offset32,Z(this,"paletteTypeArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteTypeArray,new rh(r,o))),Z(this,"paletteLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteLabelArray,new oh(r,o))),Z(this,"paletteEntryLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteEntryLabelArray,new sh(r,o))))}},eh=class{constructor(t){this.blue=t.uint8,this.green=t.uint8,this.red=t.uint8,this.alpha=t.uint8}},rh=class{constructor(t,e){this.paletteTypes=[...new Array(e)].map(r=>t.uint32)}},oh=class{constructor(t,e){this.paletteLabels=[...new Array(e)].map(r=>t.uint16)}},sh=class{constructor(t,e){this.paletteEntryLabels=[...new Array(e)].map(r=>t.uint16)}},nh=Object.freeze({__proto__:null,CPAL:th}),ah=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.numSignatures=r.uint16,this.flags=r.uint16,this.signatureRecords=[...new Array(this.numSignatures)].map(o=>new ih(r))}getData(t){let e=this.signatureRecords[t];return this.parser.currentPosition=this.tableStart+e.offset,new lh(this.parser)}},ih=class{constructor(t){this.format=t.uint32,this.length=t.uint32,this.offset=t.Offset32}},lh=class{constructor(t){t.uint16,t.uint16,this.signatureLength=t.uint32,this.signature=t.readBytes(this.signatureLength)}},uh=Object.freeze({__proto__:null,DSIG:ah}),fh=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hmtx.numGlyphs;this.version=o.uint16,this.numRecords=o.int16,this.sizeDeviceRecord=o.int32,this.records=[...new Array(numRecords)].map(a=>new ch(o,s))}},ch=class{constructor(t,e){this.pixelSize=t.uint8,this.maxWidth=t.uint8,this.widths=t.readBytes(e)}},dh=Object.freeze({__proto__:null,hdmx:fh}),mh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.nTables=r.uint16,Z(this,"tables",()=>{let o=this.tableStart+4,s=[];for(let a=0;a[...new Array(this.nPairs)].map(e=>new hh(t)))),this.format===2&&console.warn("Kern subtable format 2 is not supported: this parser currently only parses universal table data.")}get horizontal(){return this.coverage[0]}get minimum(){return this.coverage[1]}get crossstream(){return this.coverage[2]}get override(){return this.coverage[3]}},hh=class{constructor(t){this.left=t.uint16,this.right=t.uint16,this.value=t.fword}},gh=Object.freeze({__proto__:null,kern:mh}),yh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numGlyphs=r.uint16,this.yPels=r.readBytes(this.numGlyphs)}},vh=Object.freeze({__proto__:null,LTSH:yh}),bh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.mergeClassCount=r.uint16,this.mergeDataOffset=r.Offset16,this.classDefCount=r.uint16,this.offsetToClassDefOffsets=r.Offset16,Z(this,"mergeEntryMatrix",()=>[...new Array(this.mergeClassCount)].map(o=>r.readBytes(this.mergeClassCount))),console.warn("Full MERG parsing is currently not supported."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},wh=Object.freeze({__proto__:null,MERG:bh}),Sh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.flags=r.uint32,r.uint32,this.dataMapsCount=r.uint32,this.dataMaps=[...new Array(this.dataMapsCount)].map(o=>new xh(this.tableStart,r))}},xh=class{constructor(t,e){this.tableStart=t,this.parser=e,this.tag=e.tag,this.dataOffset=e.Offset32,this.dataLength=e.uint32}getData(){return this.parser.currentField=this.tableStart+this.dataOffset,this.parser.readBytes(this.dataLength)}},Ch=Object.freeze({__proto__:null,meta:Sh}),Fh=class extends mt{constructor(t,e){super(t,e),console.warn("This font uses a PCLT table, which is currently not supported by this parser."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},kh=Object.freeze({__proto__:null,PCLT:Fh}),Oh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRecs=r.uint16,this.numRatios=r.uint16,this.ratRanges=[...new Array(this.numRatios)].map(o=>new Th(r)),this.offsets=[...new Array(this.numRatios)].map(o=>r.Offset16),this.VDMXGroups=[...new Array(this.numRecs)].map(o=>new _h(r))}},Th=class{constructor(t){this.bCharSet=t.uint8,this.xRatio=t.uint8,this.yStartRatio=t.uint8,this.yEndRatio=t.uint8}},_h=class{constructor(t){this.recs=t.uint16,this.startsz=t.uint8,this.endsz=t.uint8,this.records=[...new Array(this.recs)].map(e=>new Ph(t))}},Ph=class{constructor(t){this.yPelHeight=t.uint16,this.yMax=t.int16,this.yMin=t.int16}},Ah=Object.freeze({__proto__:null,VDMX:Oh}),Rh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.fixed,this.ascent=this.vertTypoAscender=r.int16,this.descent=this.vertTypoDescender=r.int16,this.lineGap=this.vertTypoLineGap=r.int16,this.advanceHeightMax=r.int16,this.minTopSideBearing=r.int16,this.minBottomSideBearing=r.int16,this.yMaxExtent=r.int16,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.metricDataFormat=r.int16,this.numOfLongVerMetrics=r.uint16,r.verifyLength()}},Eh=Object.freeze({__proto__:null,vhea:Rh}),Ih=class extends mt{constructor(t,e,r){super(t,e);let o=r.vhea.numOfLongVerMetrics,s=r.maxp.numGlyphs,a=p.currentPosition;if(lazy(this,"vMetrics",()=>(p.currentPosition=a,[...new Array(o)].map(n=>new Lh(p.uint16,p.int16)))),o(p.currentPosition=n,[...new Array(s-o)].map(l=>p.int16)))}}},Lh=class{constructor(t,e){this.advanceHeight=t,this.topSideBearing=e}},Bh=Object.freeze({__proto__:null,vmtx:Ih});var Jl=u(X(),1);var{kebabCase:Dh}=vt(Jl.privateApis);function Ql(t){let e=t.reduce((r,o)=>(r[o.fontFamily]||(r[o.fontFamily]={name:o.fontFamily,fontFamily:o.fontFamily,slug:Dh(o.fontFamily.toLowerCase()),fontFace:[]}),r[o.fontFamily].fontFace.push(o),r),{});return Object.values(e)}var pe=u(z(),1);function Vh(){let{installFonts:t}=(0,go.useContext)(ne),[e,r]=(0,go.useState)(!1),[o,s]=(0,go.useState)(null),a=h=>{l(h)},n=h=>{l(h.target.files)},l=async h=>{if(!h)return;s(null),r(!0);let v=new Set,_=[...h],A=!1,k=_.map(async b=>{if(!await f(b))return A=!0,null;if(v.has(b.name))return null;let Y=(((b.name??"").split(".")??[]).pop()??"").toLowerCase();return pn.includes(Y)?(v.add(b.name),b):null}),x=(await Promise.all(k)).filter(b=>b!==null);if(x.length>0)m(x);else{let b=A?(0,Ur.__)("Sorry, you are not allowed to upload this file type."):(0,Ur.__)("No fonts found to install.");s({type:"error",message:b}),r(!1)}},m=async h=>{let v=await Promise.all(h.map(async _=>{let A=await d(_);return await er(A,A.file,"all"),A}));g(v)};async function f(h){let v=new is("Uploaded Font");try{let _=await c(h);return await v.fromDataBuffer(_,"font"),!0}catch{return!1}}async function c(h){return new Promise((v,_)=>{let A=new window.FileReader;A.readAsArrayBuffer(h),A.onload=()=>v(A.result),A.onerror=_})}let d=async h=>{let v=await c(h),_=new is("Uploaded Font");_.fromDataBuffer(v,h.name);let k=(await new Promise($=>_.onload=$)).detail.font,{name:x}=k.opentype.tables,b=x.get(16)||x.get(1),T=x.get(2).toLowerCase().includes("italic"),Y=k.opentype.tables["OS/2"].usWeightClass||"normal",V=!!k.opentype.tables.fvar&&k.opentype.tables.fvar.axes.find(({tag:$})=>$==="wght"),H=V?`${V.minValue} ${V.maxValue}`:null;return{file:h,fontFamily:b,fontStyle:T?"italic":"normal",fontWeight:H||Y}},g=async h=>{let v=Ql(h);try{await t(v),s({type:"success",message:(0,Ur.__)("Fonts were installed successfully.")})}catch(_){let A=_;s({type:"error",message:A.message,errors:A?.installationErrors})}r(!1)};return(0,pe.jsxs)("div",{className:"font-library__tabpanel-layout",children:[(0,pe.jsx)($t.DropZone,{onFilesDrop:a}),(0,pe.jsxs)($t.__experimentalVStack,{className:"font-library__local-fonts",justify:"start",children:[o&&(0,pe.jsxs)($t.Notice,{status:o.type,__unstableHTML:!0,onRemove:()=>s(null),children:[o.message,o.errors&&(0,pe.jsx)("ul",{children:o.errors.map((h,v)=>(0,pe.jsx)("li",{children:h},v))})]}),e&&(0,pe.jsx)($t.FlexItem,{children:(0,pe.jsx)("div",{className:"font-library__upload-area",children:(0,pe.jsx)($t.ProgressBar,{})})}),!e&&(0,pe.jsx)($t.FormFileUpload,{accept:pn.map(h=>`.${h}`).join(","),multiple:!0,onChange:n,render:({openFileDialog:h})=>(0,pe.jsx)($t.Button,{__next40pxDefaultSize:!0,className:"font-library__upload-area",onClick:h,children:(0,Ur.__)("Upload font")})}),(0,pe.jsx)($t.__experimentalText,{className:"font-library__upload-area__text",children:(0,Ur.__)("Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.")})]})]})}var ls=Vh;var tu=u(z(),1),{Tabs:x2}=vt(Sn.privateApis),C2={id:"installed-fonts",title:(0,us._x)("Library","Font library")},F2={id:"upload-fonts",title:(0,us._x)("Upload","noun")};var eu=u(ut(),1),xn=u(X(),1),zh=u(yt(),1);var ru=u(z(),1);var Cn=u(z(),1);var ou=u(ut(),1),fs=u(X(),1);var su=u(z(),1);var kn=u(z(),1);var _e=u(ut(),1),On=u(X(),1),qh=u(yt(),1);var nu=u(ce(),1);var Wh=u(z(),1),{useSettingsForBlockElement:t6,TypographyPanel:e6}=vt(nu.privateApis);var Yh=u(z(),1);var Tn=u(z(),1),f6={text:{description:(0,_e.__)("Manage the fonts used on the site."),title:(0,_e.__)("Text")},link:{description:(0,_e.__)("Manage the fonts and typography used on the links."),title:(0,_e.__)("Links")},heading:{description:(0,_e.__)("Manage the fonts and typography used on headings."),title:(0,_e.__)("Headings")},caption:{description:(0,_e.__)("Manage the fonts and typography used on captions."),title:(0,_e.__)("Captions")},button:{description:(0,_e.__)("Manage the fonts and typography used on buttons."),title:(0,_e.__)("Buttons")}};var Jh=u(ut(),1),Qh=u(X(),1),iu=u(ce(),1);var Hr=u(X(),1),au=u(ut(),1);var Kh=u(yt(),1);var Zh=u(X(),1),Xh=u(z(),1);var _n=u(z(),1);var Pn=u(z(),1),{useSettingsForBlockElement:O6,ColorPanel:T6}=vt(iu.privateApis);var ng=u(ut(),1),pu=u(X(),1);var eg=u(cr(),1),An=u(X(),1),rg=u(ut(),1);var ds=u(X(),1);var cs=u(X(),1);var lu=u(z(),1);function uu(){let{paletteColors:t}=Lr();return t.slice(0,4).map(({slug:e,color:r},o)=>(0,lu.jsx)("div",{style:{flexGrow:1,height:"100%",background:r}},`${e}-${o}`))}var vo=u(z(),1),$h={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},tg=({label:t,isFocused:e,withHoverView:r})=>(0,vo.jsx)(Vr,{label:t,isFocused:e,withHoverView:r,children:({key:o})=>(0,vo.jsx)(cs.__unstableMotion.div,{variants:$h,style:{height:"100%",overflow:"hidden"},children:(0,vo.jsx)(cs.__experimentalHStack,{spacing:0,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,vo.jsx)(uu,{})})},o)}),fu=tg;var Cr=u(z(),1),cu=["color"];function ms({title:t,gap:e=2}){let r=No(cu);return r?.length<=1?null:(0,Cr.jsxs)(ds.__experimentalVStack,{spacing:3,children:[t&&(0,Cr.jsx)(Se,{level:3,children:t}),(0,Cr.jsx)(ds.__experimentalGrid,{gap:e,children:r.map((o,s)=>(0,Cr.jsx)(zr,{variation:o,isPill:!0,properties:cu,showTooltip:!0,children:()=>(0,Cr.jsx)(fu,{})},s))})]})}var du=u(z(),1);var og=u(cr(),1),ps=u(X(),1),sg=u(ut(),1);var mu=u(z(),1);var Rn=u(z(),1),{Tabs:Q6}=vt(pu.privateApis);var ig=u(ut(),1),gu=u(ce(),1),lg=u(X(),1);var hu=u(ce(),1);var ag=u(z(),1);var{BackgroundPanel:rC}=vt(hu.privateApis);var En=u(z(),1),{useHasBackgroundPanel:uC}=vt(gu.privateApis);var Fr=u(X(),1),In=u(ut(),1);var mg=u(yt(),1);var ug=u(X(),1),fg=u(ut(),1),cg=u(z(),1);var Ln=u(z(),1),{Menu:SC}=vt(Fr.privateApis);var Ut=u(X(),1),bo=u(ut(),1);var hs=u(yt(),1);var Bn=u(z(),1),{Menu:DC}=vt(Ut.privateApis),VC=[{label:(0,bo.__)("Rename"),action:"rename"},{label:(0,bo.__)("Delete"),action:"delete"}],NC=[{label:(0,bo.__)("Reset"),action:"reset"}];var pg=u(z(),1);var yg=u(ut(),1),vu=u(ce(),1);var yu=u(ce(),1),hg=u(yt(),1);var gg=u(z(),1),{useSettingsForBlockElement:qC,DimensionsPanel:ZC}=vt(yu.privateApis);var Dn=u(z(),1),{useHasDimensionsPanel:eF,useSettingsForBlockElement:rF}=vt(vu.privateApis);var Fu=u(X(),1),Sg=u(ut(),1);var bg=u(ut(),1),wg=u(X(),1);var bu=u(be(),1),wu=u(fe(),1),ys=u(yt(),1),Su=u(X(),1),xu=u(ut(),1);var gs=u(z(),1);function vg({gap:t=2}){let{user:e}=(0,ys.useContext)(Xt),r=e?.styles,s=(0,wu.useSelect)(n=>{let l=n(bu.store).__experimentalGetCurrentThemeGlobalStylesVariations();return Array.isArray(l)?l:void 0},[])?.filter(n=>!io(n,["color"])&&!io(n,["typography","spacing"])),a=(0,ys.useMemo)(()=>[...[{title:(0,xu.__)("Default"),settings:{},styles:{}},...s??[]].map(l=>{let m=l?.styles?.blocks?{...l.styles.blocks}:{};r?.blocks&&Object.keys(r.blocks).forEach(g=>{if(r.blocks?.[g]?.css){let h=m[g]||{},v={css:`${m[g]?.css||""} ${r.blocks?.[g]?.css?.trim()||""}`};m[g]={...h,...v}}});let f=r?.css||l.styles?.css?{css:`${l.styles?.css||""} ${r?.css||""}`}:{},c=Object.keys(m).length>0?{blocks:m}:{},d={...l.styles,...f,...c};return{...l,settings:l.settings??{},styles:d}})],[s,r?.blocks,r?.css]);return!s||s.length<1?null:(0,gs.jsx)(Su.__experimentalGrid,{columns:2,className:"global-styles-ui-style-variations-container",gap:t,children:a.map((n,l)=>(0,gs.jsx)(zr,{variation:n,children:m=>(0,gs.jsx)(nn,{label:n?.title,withHoverView:!0,isFocused:m,variation:n})},l))})}var Vn=vg;var Cu=u(z(),1);var Nn=u(z(),1);var xg=u(ut(),1),Cg=u(X(),1),ku=u(ce(),1);var zn=u(z(),1),{AdvancedPanel:wF}=vt(ku.privateApis);var Lu=u(ut(),1),Gn=u(X(),1),jn=u(yt(),1);var Fg=u(fe(),1),kg=u(be(),1),Ou=u(yt(),1);var Pu=u(ut(),1),Au=u(X(),1),vs=u(_u(),1),Og=u(be(),1),Tg=u(fe(),1);var Ru=u(dn(),1),Eu=u(z(),1),kF=3600*1e3*24;var Mn=u(X(),1),wo=u(ut(),1);var Iu=u(z(),1);var Un=u(z(),1);var Hn=u(ut(),1),qe=u(X(),1);var Eg=u(yt(),1);var Pg=u(X(),1),Ag=u(ut(),1),Rg=u(z(),1);var Wn=u(z(),1),{Menu:YF}=vt(qe.privateApis);var Nu=u(ut(),1),ze=u(X(),1);var zu=u(yt(),1);var Ig=u(ce(),1),Lg=u(ut(),1);var Bg=u(z(),1);var Dg=u(X(),1),Bu=u(ut(),1),Vg=u(z(),1);var So=u(X(),1),Ng=u(ut(),1),zg=u(yt(),1),Du=u(z(),1);var Ze=u(X(),1),Vu=u(z(),1);var Yn=u(z(),1),{Menu:f3}=vt(ze.privateApis);var Zn=u(z(),1);var Xn=u(z(),1);function Wr(t){return function({value:r,baseValue:o,onChange:s,...a}){return(0,Xn.jsx)(ao,{value:r,baseValue:o,onChange:s,children:(0,Xn.jsx)(t,{...a})})}}var Ug=Wr(Vn);var Hg=Wr(ms);var Wg=Wr(Wo);var Yr=u(z(),1);function Kn({value:t,baseValue:e,onChange:r,activeTab:o="installed-fonts"}){let s;switch(o){case"upload-fonts":s=(0,Yr.jsx)(ls,{});break;case"installed-fonts":s=(0,Yr.jsx)($o,{});break;default:s=(0,Yr.jsx)(es,{slug:o})}return(0,Yr.jsx)(ao,{value:t,baseValue:e,onChange:r,children:(0,Yr.jsx)(Zo,{children:s})})}var ju=u(Vs()),{unlock:Jn}=(0,ju.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/font-list-route");if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='4bbd4c3e39']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","4bbd4c3e39"),t.appendChild(document.createTextNode('@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:90px;padding:0}.font-library-modal .font-library__subtitle{font-size:11px;font-weight:499;text-transform:uppercase}.font-library-modal__tab-panel{height:calc(100% - 50px)}.font-library__tabpanel-layout{display:flex;flex-direction:column;height:100%}.font-library__tabpanel-layout>div{flex-grow:1}.font-library__tabpanel-layout .font-library__loading{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;padding-top:124px;position:absolute;top:0;width:100%}.font-library__footer,.font-library__tabpanel-layout .components-navigator-screen{padding:24px;width:100%}.font-library__footer{background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;flex-grow:0!important;flex-shrink:0;height:90px;position:absolute}.font-library__page-selection{font-size:11px;font-weight:499;text-transform:uppercase}@media (min-width:600px){.font-library__page-selection .font-library__page-selection-trigger{font-size:11px!important;font-weight:499}}.font-library__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library__fonts-list{list-style:none;margin-bottom:0;margin-top:0;padding:0}.font-library__fonts-list-item{margin-bottom:0}.font-library__font-card{border:1px solid #ddd;box-sizing:border-box;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library__font-card:hover{background-color:#f0f0f0}.font-library__font-card:focus{position:relative}.font-library__font-card .font-library__font-card__name{font-weight:700}.font-library__font-card .font-library__font-card__count{color:#757575}.font-library__font-card .font-library__font-variant_demo-image{display:block;height:24px;width:auto}.font-library__font-card .font-library__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library__font-card .font-library__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;position:sticky;top:0;z-index:1}.font-library__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library__upload-area{background-color:#f0f0f0}.font-library__local-fonts{margin:24px auto;width:80%}.font-library__local-fonts .font-library__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library__select-all{padding:16px 16px 16px 17px}.font-library__select-all .components-checkbox-control__label{padding-left:16px}.global-styles-ui-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.global-styles-ui-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.global-styles-ui-screen-revisions__revisions-list li{margin-bottom:0}.global-styles-ui-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.global-styles-ui-screen-revisions__revision-item[role=option]:active,.global-styles-ui-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.global-styles-ui-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item:after,.global-styles-ui-screen-revisions__revision-item:before{content:"\\a";display:block;position:absolute}.global-styles-ui-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes>li,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta{color:#1e1e1e}.global-styles-ui-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.global-styles-ui-screen-revisions__revision-item:first-child:after{top:18px}.global-styles-ui-screen-revisions__revision-item:last-child:after{height:18px}.global-styles-ui-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__changes,.global-styles-ui-screen-revisions__meta{color:#757575;font-size:12px}.global-styles-ui-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.global-styles-ui-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.global-styles-ui-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.global-styles-ui-screen-revisions__loading{margin:24px auto!important}.global-styles-ui-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.global-styles-ui-screen-revisions__changes li{margin-bottom:4px}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination{gap:2px;justify-content:space-between}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled,.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.global-styles-ui-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.global-styles-ui-variations_item{box-sizing:border-box;cursor:pointer}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{transition:outline .1s linear}}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill{height:32px}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview{outline-color:#0000004d}.global-styles-ui-variations_item.is-active .global-styles-ui-variations_item-preview,.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.global-styles-ui-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.global-styles-ui-preview__wrapper{display:block;max-width:100%;width:100%}.global-styles-ui-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:20px;min-height:100px;overflow:hidden}.global-styles-ui-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.global-styles-ui-font-size__item-value{color:#757575}.global-styles-ui-screen-typography__indicator{align-items:center;border-radius:2px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.global-styles-ui-block-types-search{margin-bottom:10px;padding:0 16px}.global-styles-ui-screen-typography__font-variants-count{color:#757575}.global-styles-ui-font-families__manage-fonts{justify-content:center}.global-styles-ui-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.global-styles-ui-header{margin-bottom:0!important}.global-styles-ui-subtitle{font-size:11px!important;font-weight:499!important;margin-bottom:0!important;text-transform:uppercase}.global-styles-ui-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.global-styles-ui-icon-with-current-color{fill:currentColor}.global-styles-ui__color-indicator-wrapper{flex-shrink:0;height:24px}.global-styles-ui__shadows-panel__options-container,.global-styles-ui__typography-panel__options-container{height:24px}.global-styles-ui__block-preview-panel{border:1px solid #ddd;border-radius:2px;overflow:hidden;position:relative;width:100%}.global-styles-ui__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #ddd;border-radius:2px;height:144px;overflow:auto}.global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block{background-color:#fff;border:1px solid #ddd;border-radius:2px;height:60px;width:60%}.global-styles-ui__shadow-editor__dropdown-content{width:280px}.global-styles-ui__shadow-editor-panel{margin-bottom:4px}.global-styles-ui__shadow-editor__dropdown{position:relative;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.global-styles-ui__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button{border:none}.global-styles-ui__shadow-editor__dropdown-toggle:hover+.global-styles-ui__shadow-editor__remove-button,.global-styles-ui__shadow-editor__remove-button:focus,.global-styles-ui__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.global-styles-ui__shadow-editor__remove-button{opacity:1}}.global-styles-ui-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.global-styles-ui-screen-css .components-v-stack{flex:1 1 auto}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.global-styles-ui-screen-css-help-link{display:inline-block;margin-top:8px}.global-styles-ui-screen-variations{border-top:1px solid #ddd;margin-top:16px}.global-styles-ui-screen-variations>*{margin:24px 16px}.global-styles-ui-sidebar__navigator-provider{height:100%}.global-styles-ui-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.global-styles-ui-sidebar__navigator-screen .single-column{grid-column:span 1}.global-styles-ui-screen-root.global-styles-ui-screen-root,.global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations{background:unset;color:inherit}.global-styles-ui-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile,.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile .global-styles-ui-screen-root__active-style-tile-preview{border-radius:2px}.global-styles-ui-screen-root__active-style-tile-preview{clip-path:border-box}.global-styles-ui-color-palette-panel,.global-styles-ui-gradient-palette-panel{padding:16px}.font-library-page__tablist{border-bottom:1px solid #f0f0f0;padding:0 24px}.font-library-page__tab-panel{flex-grow:1;max-height:calc(100% - 110px);overflow:auto}.admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel{max-height:calc(100% - 198px)}')),document.head.appendChild(t)}var{Tabs:bs}=Jn(Uu.privateApis),{useGlobalStyles:Yg}=Jn(Hu.privateApis);function qg(){let{records:t=[]}=(0,ws.useEntityRecords)("root","fontCollection",{_fields:"slug,name,description"}),[e,r]=(0,Yu.useState)("installed-fonts"),{base:o,user:s,setUser:a,isReady:n}=Yg(),l=(0,Wu.useSelect)(f=>f(ws.store).canUser("create",{kind:"postType",name:"wp_font_family"}),[]);if(!n)return null;let m=[{id:"installed-fonts",title:(0,xo.__)("Library")}];return l&&(m.push({id:"upload-fonts",title:(0,xo.__)("Upload")}),m.push(...(t||[]).map(({slug:f,name:c})=>({id:f,title:t&&t.length===1&&f==="google-fonts"?(0,xo.__)("Install Fonts"):c})))),React.createElement(Ns,{headingLevel:1,title:(0,xo.__)("Fonts")},React.createElement(bs,{selectedTabId:e,onSelect:f=>r(f)},React.createElement("div",{className:"font-library-page__tablist"},React.createElement(bs.TabList,null,m.map(({id:f,title:c})=>React.createElement(bs.Tab,{key:f,tabId:f},c)))),m.map(({id:f})=>React.createElement(bs.TabPanel,{key:f,tabId:f,focusable:!1,className:"font-library-page__tab-panel"},React.createElement(Kn,{value:s,baseValue:o,onChange:a,activeTab:f})))))}function Zg(){return React.createElement(qg,null)}var Xg=Zg;export{Xg as stage}; +}`,globalThis.document.head.appendChild(s),s}var md=[0,1,0,0],pd=[79,84,84,79],hd=[119,79,70,70],gd=[119,79,70,50];function ns(t,e){if(t.length===e.length){for(let r=0;r(globalThis.document&&!this.options.skipStyleSheet&&await dd(this.name,t,this.options),this.loadFont(t)))()}async loadFont(t,e){fetch(t).then(r=>vd(r)&&r.arrayBuffer()).then(r=>this.fromDataBuffer(r,e||t)).catch(r=>{let o=new ss("error",r,`Failed to load font at ${e||t}`);this.dispatch(o),this.onerror&&this.onerror(o)})}async fromDataBuffer(t,e){this.fontData=new DataView(t);let r=yd(this.fontData);if(!r)throw new Error(`${e} is either an unsupported font format, or not a font at all.`);await this.parseBasicData(r);let o=new ss("load",{font:this});this.dispatch(o),this.onload&&this.onload(o)}async parseBasicData(t){return fd().then(e=>(t==="SFNT"&&(this.opentype=new td(this,this.fontData,e)),t==="WOFF"&&(this.opentype=new rd(this,this.fontData,e)),t==="WOFF2"&&(this.opentype=new nd(this,this.fontData,e)),this.opentype))}getGlyphId(t){return this.opentype.tables.cmap.getGlyphId(t)}reverse(t){return this.opentype.tables.cmap.reverse(t)}supports(t){return this.getGlyphId(t)!==0}supportsVariation(t){return this.opentype.tables.cmap.supportsVariation(t)!==!1}measureText(t,e=16){if(this.__unloaded)throw new Error("Cannot measure text: font was unloaded. Please reload before calling measureText()");let r=document.createElement("div");r.textContent=t,r.style.fontFamily=this.name,r.style.fontSize=`${e}px`,r.style.color="transparent",r.style.background="transparent",r.style.top="0",r.style.left="0",r.style.position="absolute",document.body.appendChild(r);let o=r.getBoundingClientRect();document.body.removeChild(r);let s=this.opentype.tables["OS/2"];return o.fontSize=e,o.ascender=s.sTypoAscender,o.descender=s.sTypoDescender,o}unload(){if(this.styleElement.parentNode){this.styleElement.parentNode.removeElement(this.styleElement);let t=new ss("unload",{font:this});this.dispatch(t),this.onunload&&this.onunload(t)}this._unloaded=!0}load(){if(this.__unloaded){delete this.__unloaded,document.head.appendChild(this.styleElement);let t=new ss("load",{font:this});this.dispatch(t),this.onload&&this.onload(t)}}};globalThis.Font=is;var We=class extends Bt{constructor(t,e,r){super(t),this.plaformID=e,this.encodingID=r}},bd=class extends We{constructor(t,e,r){super(t,e,r),this.format=0,this.length=t.uint16,this.language=t.uint16,this.glyphIdArray=[...new Array(256)].map(o=>t.uint8)}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.")),0<=t&&t<=255}reverse(t){return console.warn("reverse not implemented for cmap subtable format 0"),{}}getSupportedCharCodes(){return[{start:1,end:256}]}},wd=class extends We{constructor(t,e,r){super(t,e,r),this.format=2,this.length=t.uint16,this.language=t.uint16,this.subHeaderKeys=[...new Array(256)].map(n=>t.uint16);let o=Math.max(...this.subHeaderKeys),s=t.currentPosition;Z(this,"subHeaders",()=>(t.currentPosition=s,[...new Array(o)].map(n=>new Sd(t))));let a=s+o*8;Z(this,"glyphIndexArray",()=>(t.currentPosition=a,[...new Array(o)].map(n=>t.uint16)))}supports(t){t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented."));let e=t&&255,r=t&&65280,o=this.subHeaders[r],s=this.subHeaders[o],a=s.firstCode,n=a+s.entryCount;return a<=e&&e<=n}reverse(t){return console.warn("reverse not implemented for cmap subtable format 2"),{}}getSupportedCharCodes(t=!1){return t?this.subHeaders.map(e=>({firstCode:e.firstCode,lastCode:e.lastCode})):this.subHeaders.map(e=>({start:e.firstCode,end:e.lastCode}))}},Sd=class{constructor(t){this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.first+this.entryCount,this.idDelta=t.int16,this.idRangeOffset=t.uint16}},xd=class extends We{constructor(t,e,r){super(t,e,r),this.format=4,this.length=t.uint16,this.language=t.uint16,this.segCountX2=t.uint16,this.segCount=this.segCountX2/2,this.searchRange=t.uint16,this.entrySelector=t.uint16,this.rangeShift=t.uint16;let o=t.currentPosition;Z(this,"endCode",()=>t.readBytes(this.segCount,o,16));let s=o+2+this.segCountX2;Z(this,"startCode",()=>t.readBytes(this.segCount,s,16));let a=s+this.segCountX2;Z(this,"idDelta",()=>t.readBytes(this.segCount,a,16,!0));let n=a+this.segCountX2;Z(this,"idRangeOffset",()=>t.readBytes(this.segCount,n,16));let l=n+this.segCountX2,m=this.length-(l-this.tableStart);Z(this,"glyphIdArray",()=>t.readBytes(m,l,16)),Z(this,"segments",()=>this.buildSegments(n,l,t))}buildSegments(t,e,r){let o=(s,a)=>{let n=this.startCode[a],l=this.endCode[a],m=this.idDelta[a],f=this.idRangeOffset[a],c=t+2*a,d=[];if(f===0)for(let g=n+m,h=l+m;g<=h;g++)d.push(g);else for(let g=0,h=l-n;g<=h;g++)r.currentPosition=c+f+g*2,d.push(r.uint16);return{startCode:n,endCode:l,idDelta:m,idRangeOffset:f,glyphIDs:d}};return[...new Array(this.segCount)].map(o)}reverse(t){let e=this.segments.find(o=>o.glyphIDs.includes(t));if(!e)return{};let r=e.startCode+e.glyphIDs.indexOf(t);return{code:r,unicode:String.fromCodePoint(r)}}getGlyphId(t){if(t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535)return 0;let e=this.segments.find(r=>r.startCode<=t&&t<=r.endCode);return e?e.glyphIDs[t-e.startCode]:0}supports(t){return this.getGlyphId(t)!==0}getSupportedCharCodes(t=!1){return t?this.segments:this.segments.map(e=>({start:e.startCode,end:e.endCode}))}},Cd=class extends We{constructor(t,e,r){super(t,e,r),this.format=6,this.length=t.uint16,this.language=t.uint16,this.firstCode=t.uint16,this.entryCount=t.uint16,this.lastCode=this.firstCode+this.entryCount-1,Z(this,"glyphIdArray",()=>[...new Array(this.entryCount)].map(s=>t.uint16))}supports(t){if(t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.")),tthis.firstCode+this.entryCount)return{};let e=t-this.firstCode;return{code:e,unicode:String.fromCodePoint(e)}}reverse(t){let e=this.glyphIdArray.indexOf(t);if(e>-1)return this.firstCode+e}getSupportedCharCodes(t=!1){return t?[{firstCode:this.firstCode,lastCode:this.lastCode}]:[{start:this.firstCode,end:this.lastCode}]}},Fd=class extends We{constructor(t,e,r){super(t,e,r),this.format=8,t.uint16,this.length=t.uint32,this.language=t.uint32,this.is32=[...new Array(8192)].map(s=>t.uint8),this.numGroups=t.uint32,Z(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new kd(t)))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.")),this.groups.findIndex(e=>e.startcharCode<=t&&t<=e.endcharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 8"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startcharCode,end:e.endcharCode}))}},kd=class{constructor(t){this.startcharCode=t.uint32,this.endcharCode=t.uint32,this.startGlyphID=t.uint32}},Od=class extends We{constructor(t,e,r){super(t,e,r),this.format=10,t.uint16,this.length=t.uint32,this.language=t.uint32,this.startCharCode=t.uint32,this.numChars=t.uint32,this.endCharCode=this.startCharCode+this.numChars,Z(this,"glyphs",()=>[...new Array(this.numChars)].map(s=>t.uint16))}supports(t){return t.charCodeAt&&(t=-1,console.warn("supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.")),tthis.startCharCode+this.numChars?!1:t-this.startCharCode}reverse(t){return console.warn("reverse not implemented for cmap subtable format 10"),{}}getSupportedCharCodes(t=!1){return t?[{startCharCode:this.startCharCode,endCharCode:this.endCharCode}]:[{start:this.startCharCode,end:this.endCharCode}]}},Td=class extends We{constructor(t,e,r){super(t,e,r),this.format=12,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32,Z(this,"groups",()=>[...new Array(this.numGroups)].map(s=>new _d(t)))}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),55296<=t&&t<=57343||(t&65534)===65534||(t&65535)===65535?0:this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){for(let e of this.groups){let r=e.startGlyphID;if(r>t)continue;if(r===t)return e.startCharCode;if(r+(e.endCharCode-e.startCharCode)({start:e.startCharCode,end:e.endCharCode}))}},_d=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.startGlyphID=t.uint32}},Pd=class extends We{constructor(t,e,r){super(t,e,r),this.format=13,t.uint16,this.length=t.uint32,this.language=t.uint32,this.numGroups=t.uint32;let o=[...new Array(this.numGroups)].map(s=>new Ad(t));Z(this,"groups",o)}supports(t){return t.charCodeAt&&(t=t.charCodeAt(0)),this.groups.findIndex(e=>e.startCharCode<=t&&t<=e.endCharCode)!==-1}reverse(t){return console.warn("reverse not implemented for cmap subtable format 13"),{}}getSupportedCharCodes(t=!1){return t?this.groups:this.groups.map(e=>({start:e.startCharCode,end:e.endCharCode}))}},Ad=class{constructor(t){this.startCharCode=t.uint32,this.endCharCode=t.uint32,this.glyphID=t.uint32}},Rd=class extends We{constructor(t,e,r){super(t,e,r),this.subTableStart=t.currentPosition,this.format=14,this.length=t.uint32,this.numVarSelectorRecords=t.uint32,Z(this,"varSelectors",()=>[...new Array(this.numVarSelectorRecords)].map(o=>new Ed(t)))}supports(){return console.warn("supports not implemented for cmap subtable format 14"),0}getSupportedCharCodes(){return console.warn("getSupportedCharCodes not implemented for cmap subtable format 14"),[]}reverse(t){return console.warn("reverse not implemented for cmap subtable format 14"),{}}supportsVariation(t){let e=this.varSelector.find(r=>r.varSelector===t);return e||!1}getSupportedVariations(){return this.varSelectors.map(t=>t.varSelector)}},Ed=class{constructor(t){this.varSelector=t.uint24,this.defaultUVSOffset=t.Offset32,this.nonDefaultUVSOffset=t.Offset32}};function Id(t,e,r){let o=t.uint16;return o===0?new bd(t,e,r):o===2?new wd(t,e,r):o===4?new xd(t,e,r):o===6?new Cd(t,e,r):o===8?new Fd(t,e,r):o===10?new Od(t,e,r):o===12?new Td(t,e,r):o===13?new Pd(t,e,r):o===14?new Rd(t,e,r):{}}var Ld=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numTables=r.uint16,this.encodingRecords=[...new Array(this.numTables)].map(o=>new Bd(r,this.tableStart))}getSubTable(t){return this.encodingRecords[t].table}getSupportedEncodings(){return this.encodingRecords.map(t=>({platformID:t.platformID,encodingId:t.encodingID}))}getSupportedCharCodes(t,e){let r=this.encodingRecords.findIndex(s=>s.platformID===t&&s.encodingID===e);return r===-1?!1:this.getSubTable(r).getSupportedCharCodes()}reverse(t){for(let e=0;e{let s=this.getSubTable(o);return s.getGlyphId?(e=s.getGlyphId(t),e!==0):!1}),e}supports(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supports&&o.supports(t)!==!1})}supportsVariation(t){return this.encodingRecords.some((e,r)=>{let o=this.getSubTable(r);return o.supportsVariation&&o.supportsVariation(t)!==!1})}},Bd=class{constructor(t,e){let r=this.platformID=t.uint16,o=this.encodingID=t.uint16,s=this.offset=t.Offset32;Z(this,"table",()=>(t.currentPosition=e+s,Id(t,r,o)))}},Dd=Object.freeze({__proto__:null,cmap:Ld}),Vd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.load({majorVersion:r.uint16,minorVersion:r.uint16,fontRevision:r.fixed,checkSumAdjustment:r.uint32,magicNumber:r.uint32,flags:r.flags(16),unitsPerEm:r.uint16,created:r.longdatetime,modified:r.longdatetime,xMin:r.int16,yMin:r.int16,xMax:r.int16,yMax:r.int16,macStyle:r.flags(16),lowestRecPPEM:r.uint16,fontDirectionHint:r.uint16,indexToLocFormat:r.uint16,glyphDataFormat:r.uint16})}},Nd=Object.freeze({__proto__:null,head:Vd}),zd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.ascender=r.fword,this.descender=r.fword,this.lineGap=r.fword,this.advanceWidthMax=r.ufword,this.minLeftSideBearing=r.fword,this.minRightSideBearing=r.fword,this.xMaxExtent=r.fword,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,r.int16,r.int16,r.int16,r.int16,this.metricDataFormat=r.int16,this.numberOfHMetrics=r.uint16,r.verifyLength()}},Md=Object.freeze({__proto__:null,hhea:zd}),Gd=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hhea.numberOfHMetrics,a=r.maxp.numGlyphs,n=o.currentPosition;if(Z(this,"hMetrics",()=>(o.currentPosition=n,[...new Array(s)].map(l=>new jd(o.uint16,o.int16)))),s(o.currentPosition=l,[...new Array(a-s)].map(m=>o.int16)))}}},jd=class{constructor(t,e){this.advanceWidth=t,this.lsb=e}},Ud=Object.freeze({__proto__:null,hmtx:Gd}),Hd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.legacyFixed,this.numGlyphs=r.uint16,this.version===1&&(this.maxPoints=r.uint16,this.maxContours=r.uint16,this.maxCompositePoints=r.uint16,this.maxCompositeContours=r.uint16,this.maxZones=r.uint16,this.maxTwilightPoints=r.uint16,this.maxStorage=r.uint16,this.maxFunctionDefs=r.uint16,this.maxInstructionDefs=r.uint16,this.maxStackElements=r.uint16,this.maxSizeOfInstructions=r.uint16,this.maxComponentElements=r.uint16,this.maxComponentDepth=r.uint16),r.verifyLength()}},Wd=Object.freeze({__proto__:null,maxp:Hd}),Yd=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.format=r.uint16,this.count=r.uint16,this.stringOffset=r.Offset16,this.nameRecords=[...new Array(this.count)].map(o=>new Zd(r,this)),this.format===1&&(this.langTagCount=r.uint16,this.langTagRecords=[...new Array(this.langTagCount)].map(o=>new qd(r.uint16,r.Offset16))),this.stringStart=this.tableStart+this.stringOffset}get(t){let e=this.nameRecords.find(r=>r.nameID===t);if(e)return e.string}},qd=class{constructor(t,e){this.length=t,this.offset=e}},Zd=class{constructor(t,e){this.platformID=t.uint16,this.encodingID=t.uint16,this.languageID=t.uint16,this.nameID=t.uint16,this.length=t.uint16,this.offset=t.Offset16,Z(this,"string",()=>(t.currentPosition=e.stringStart+this.offset,Xd(t,this)))}};function Xd(t,e){let{platformID:r,length:o}=e;if(o===0)return"";if(r===0||r===3){let n=[];for(let l=0,m=o/2;lr.uint8),this.ulUnicodeRange1=r.flags(32),this.ulUnicodeRange2=r.flags(32),this.ulUnicodeRange3=r.flags(32),this.ulUnicodeRange4=r.flags(32),this.achVendID=r.tag,this.fsSelection=r.uint16,this.usFirstCharIndex=r.uint16,this.usLastCharIndex=r.uint16,this.sTypoAscender=r.int16,this.sTypoDescender=r.int16,this.sTypoLineGap=r.int16,this.usWinAscent=r.uint16,this.usWinDescent=r.uint16,this.version===0||(this.ulCodePageRange1=r.flags(32),this.ulCodePageRange2=r.flags(32),this.version===1)||(this.sxHeight=r.int16,this.sCapHeight=r.int16,this.usDefaultChar=r.uint16,this.usBreakChar=r.uint16,this.usMaxContext=r.uint16,this.version<=4)||(this.usLowerOpticalPointSize=r.uint16,this.usUpperOpticalPointSize=r.uint16,this.version===5))return r.verifyLength()}},Qd=Object.freeze({__proto__:null,OS2:Jd}),$d=class extends mt{constructor(t,e){let{p:r}=super(t,e);if(this.version=r.legacyFixed,this.italicAngle=r.fixed,this.underlinePosition=r.fword,this.underlineThickness=r.fword,this.isFixedPitch=r.uint32,this.minMemType42=r.uint32,this.maxMemType42=r.uint32,this.minMemType1=r.uint32,this.maxMemType1=r.uint32,this.version===1||this.version===3)return r.verifyLength();if(this.numGlyphs=r.uint16,this.version===2){this.glyphNameIndex=[...new Array(this.numGlyphs)].map(o=>r.uint16),this.namesOffset=r.currentPosition,this.glyphNameOffsets=[1];for(let o=0;or.int8))}getGlyphName(t){if(this.version!==2)return console.warn(`post table version ${this.version} does not support glyph name lookups`),"";let e=this.glyphNameIndex[t];if(e<258)return Dl[e];let r=this.glyphNameOffsets[t],s=this.glyphNameOffsets[t+1]-r-1;return s===0?".notdef.":(this.parser.currentPosition=this.namesOffset+r,this.parser.readBytes(s,this.namesOffset+r,8,!0).map(n=>String.fromCharCode(n)).join(""))}},Dl=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"],tm=Object.freeze({__proto__:null,post:$d}),em=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.horizAxisOffset=r.Offset16,this.vertAxisOffset=r.Offset16,Z(this,"horizAxis",()=>new vn({offset:t.offset+this.horizAxisOffset},e)),Z(this,"vertAxis",()=>new vn({offset:t.offset+this.vertAxisOffset},e)),this.majorVersion===1&&this.minorVersion===1&&(this.itemVarStoreOffset=r.Offset32,Z(this,"itemVarStore",()=>new vn({offset:t.offset+this.itemVarStoreOffset},e)))}},vn=class extends mt{constructor(t,e){let{p:r}=super(t,e,"AxisTable");this.baseTagListOffset=r.Offset16,this.baseScriptListOffset=r.Offset16,Z(this,"baseTagList",()=>new rm({offset:t.offset+this.baseTagListOffset},e)),Z(this,"baseScriptList",()=>new om({offset:t.offset+this.baseScriptListOffset},e))}},rm=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseTagListTable");this.baseTagCount=r.uint16,this.baselineTags=[...new Array(this.baseTagCount)].map(o=>r.tag)}},om=class extends mt{constructor(t,e){let{p:r}=super(t,e,"BaseScriptListTable");this.baseScriptCount=r.uint16;let o=r.currentPosition;Z(this,"baseScriptRecords",()=>(r.currentPosition=o,[...new Array(this.baseScriptCount)].map(s=>new sm(this.start,r))))}},sm=class{constructor(t,e){this.baseScriptTag=e.tag,this.baseScriptOffset=e.Offset16,Z(this,"baseScriptTable",()=>(e.currentPosition=t+this.baseScriptOffset,new nm(e)))}},nm=class{constructor(t){this.start=t.currentPosition,this.baseValuesOffset=t.Offset16,this.defaultMinMaxOffset=t.Offset16,this.baseLangSysCount=t.uint16,this.baseLangSysRecords=[...new Array(this.baseLangSysCount)].map(e=>new am(this.start,t)),Z(this,"baseValues",()=>(t.currentPosition=this.start+this.baseValuesOffset,new im(t))),Z(this,"defaultMinMax",()=>(t.currentPosition=this.start+this.defaultMinMaxOffset,new Hl(t)))}},am=class{constructor(t,e){this.baseLangSysTag=e.tag,this.minMaxOffset=e.Offset16,Z(this,"minMax",()=>(e.currentPosition=t+this.minMaxOffset,new Hl(e)))}},im=class{constructor(t){this.parser=t,this.start=t.currentPosition,this.defaultBaselineIndex=t.uint16,this.baseCoordCount=t.uint16,this.baseCoords=[...new Array(this.baseCoordCount)].map(e=>t.Offset16)}getTable(t){return this.parser.currentPosition=this.start+this.baseCoords[t],new um(this.parser)}},Hl=class{constructor(t){this.minCoord=t.Offset16,this.maxCoord=t.Offset16,this.featMinMaxCount=t.uint16;let e=t.currentPosition;Z(this,"featMinMaxRecords",()=>(t.currentPosition=e,[...new Array(this.featMinMaxCount)].map(r=>new lm(t))))}},lm=class{constructor(t){this.featureTableTag=t.tag,this.minCoord=t.Offset16,this.maxCoord=t.Offset16}},um=class{constructor(t){this.baseCoordFormat=t.uint16,this.coordinate=t.int16,this.baseCoordFormat===2&&(this.referenceGlyph=t.uint16,this.baseCoordPoint=t.uint16),this.baseCoordFormat===3&&(this.deviceTable=t.Offset16)}},fm=Object.freeze({__proto__:null,BASE:em}),Vl=class{constructor(t){this.classFormat=t.uint16,this.classFormat===1&&(this.startGlyphID=t.uint16,this.glyphCount=t.uint16,this.classValueArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.classFormat===2&&(this.classRangeCount=t.uint16,this.classRangeRecords=[...new Array(this.classRangeCount)].map(e=>new cm(t)))}},cm=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.class=t.uint16}},ho=class extends Bt{constructor(t){super(t),this.coverageFormat=t.uint16,this.coverageFormat===1&&(this.glyphCount=t.uint16,this.glyphArray=[...new Array(this.glyphCount)].map(e=>t.uint16)),this.coverageFormat===2&&(this.rangeCount=t.uint16,this.rangeRecords=[...new Array(this.rangeCount)].map(e=>new dm(t)))}},dm=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.startCoverageIndex=t.uint16}},mm=class{constructor(t,e){this.table=t,this.parser=e,this.start=e.currentPosition,this.format=e.uint16,this.variationRegionListOffset=e.Offset32,this.itemVariationDataCount=e.uint16,this.itemVariationDataOffsets=[...new Array(this.itemVariationDataCount)].map(r=>e.Offset32)}},pm=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.glyphClassDefOffset=r.Offset16,Z(this,"glyphClassDefs",()=>{if(this.glyphClassDefOffset!==0)return r.currentPosition=this.tableStart+this.glyphClassDefOffset,new Vl(r)}),this.attachListOffset=r.Offset16,Z(this,"attachList",()=>{if(this.attachListOffset!==0)return r.currentPosition=this.tableStart+this.attachListOffset,new hm(r)}),this.ligCaretListOffset=r.Offset16,Z(this,"ligCaretList",()=>{if(this.ligCaretListOffset!==0)return r.currentPosition=this.tableStart+this.ligCaretListOffset,new ym(r)}),this.markAttachClassDefOffset=r.Offset16,Z(this,"markAttachClassDef",()=>{if(this.markAttachClassDefOffset!==0)return r.currentPosition=this.tableStart+this.markAttachClassDefOffset,new Vl(r)}),this.minorVersion>=2&&(this.markGlyphSetsDefOffset=r.Offset16,Z(this,"markGlyphSetsDef",()=>{if(this.markGlyphSetsDefOffset!==0)return r.currentPosition=this.tableStart+this.markGlyphSetsDefOffset,new wm(r)})),this.minorVersion===3&&(this.itemVarStoreOffset=r.Offset32,Z(this,"itemVarStore",()=>{if(this.itemVarStoreOffset!==0)return r.currentPosition=this.tableStart+this.itemVarStoreOffset,new mm(r)}))}},hm=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,this.glyphCount=t.uint16,this.attachPointOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16)}getPoint(t){return this.parser.currentPosition=this.start+this.attachPointOffsets[t],new gm(this.parser)}},gm=class{constructor(t){this.pointCount=t.uint16,this.pointIndices=[...new Array(this.pointCount)].map(e=>t.uint16)}},ym=class extends Bt{constructor(t){super(t),this.coverageOffset=t.Offset16,Z(this,"coverage",()=>(t.currentPosition=this.start+this.coverageOffset,new ho(t))),this.ligGlyphCount=t.uint16,this.ligGlyphOffsets=[...new Array(this.ligGlyphCount)].map(e=>t.Offset16)}getLigGlyph(t){return this.parser.currentPosition=this.start+this.ligGlyphOffsets[t],new vm(this.parser)}},vm=class extends Bt{constructor(t){super(t),this.caretCount=t.uint16,this.caretValueOffsets=[...new Array(this.caretCount)].map(e=>t.Offset16)}getCaretValue(t){return this.parser.currentPosition=this.start+this.caretValueOffsets[t],new bm(this.parser)}},bm=class{constructor(t){this.caretValueFormat=t.uint16,this.caretValueFormat===1&&(this.coordinate=t.int16),this.caretValueFormat===2&&(this.caretValuePointIndex=t.uint16),this.caretValueFormat===3&&(this.coordinate=t.int16,this.deviceOffset=t.Offset16)}},wm=class extends Bt{constructor(t){super(t),this.markGlyphSetTableFormat=t.uint16,this.markGlyphSetCount=t.uint16,this.coverageOffsets=[...new Array(this.markGlyphSetCount)].map(e=>t.Offset32)}getMarkGlyphSet(t){return this.parser.currentPosition=this.start+this.coverageOffsets[t],new ho(this.parser)}},Sm=Object.freeze({__proto__:null,GDEF:pm}),Nl=class extends Bt{static EMPTY={scriptCount:0,scriptRecords:[]};constructor(t){super(t),this.scriptCount=t.uint16,this.scriptRecords=[...new Array(this.scriptCount)].map(e=>new xm(t))}},xm=class{constructor(t){this.scriptTag=t.tag,this.scriptOffset=t.Offset16}},Cm=class extends Bt{constructor(t){super(t),this.defaultLangSys=t.Offset16,this.langSysCount=t.uint16,this.langSysRecords=[...new Array(this.langSysCount)].map(e=>new Fm(t))}},Fm=class{constructor(t){this.langSysTag=t.tag,this.langSysOffset=t.Offset16}},zl=class{constructor(t){this.lookupOrder=t.Offset16,this.requiredFeatureIndex=t.uint16,this.featureIndexCount=t.uint16,this.featureIndices=[...new Array(this.featureIndexCount)].map(e=>t.uint16)}},Ml=class extends Bt{static EMPTY={featureCount:0,featureRecords:[]};constructor(t){super(t),this.featureCount=t.uint16,this.featureRecords=[...new Array(this.featureCount)].map(e=>new km(t))}},km=class{constructor(t){this.featureTag=t.tag,this.featureOffset=t.Offset16}},Om=class extends Bt{constructor(t){super(t),this.featureParams=t.Offset16,this.lookupIndexCount=t.uint16,this.lookupListIndices=[...new Array(this.lookupIndexCount)].map(e=>t.uint16)}getFeatureParams(){if(this.featureParams>0){let t=this.parser;t.currentPosition=this.start+this.featureParams;let e=this.featureTag;if(e==="size")return new _m(t);if(e.startsWith("cc"))return new Tm(t);if(e.startsWith("ss"))return new Pm(t)}}},Tm=class{constructor(t){this.format=t.uint16,this.featUiLabelNameId=t.uint16,this.featUiTooltipTextNameId=t.uint16,this.sampleTextNameId=t.uint16,this.numNamedParameters=t.uint16,this.firstParamUiLabelNameId=t.uint16,this.charCount=t.uint16,this.character=[...new Array(this.charCount)].map(e=>t.uint24)}},_m=class{constructor(t){this.designSize=t.uint16,this.subfamilyIdentifier=t.uint16,this.subfamilyNameID=t.uint16,this.smallEnd=t.uint16,this.largeEnd=t.uint16}},Pm=class{constructor(t){this.version=t.uint16,this.UINameID=t.uint16}};function Wl(t){t.parser.currentPosition-=2,delete t.coverageOffset,delete t.getCoverageTable}var xr=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.coverageOffset=t.Offset16}getCoverageTable(){let t=this.parser;return t.currentPosition=this.start+this.coverageOffset,new ho(t)}},wn=class{constructor(t){this.glyphSequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},Am=class extends xr{constructor(t){super(t),this.deltaGlyphID=t.int16}},Rm=class extends xr{constructor(t){super(t),this.sequenceCount=t.uint16,this.sequenceOffsets=[...new Array(this.sequenceCount)].map(e=>t.Offset16)}getSequence(t){let e=this.parser;return e.currentPosition=this.start+this.sequenceOffsets[t],new Em(e)}},Em=class{constructor(t){this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Im=class extends xr{constructor(t){super(t),this.alternateSetCount=t.uint16,this.alternateSetOffsets=[...new Array(this.alternateSetCount)].map(e=>t.Offset16)}getAlternateSet(t){let e=this.parser;return e.currentPosition=this.start+this.alternateSetOffsets[t],new Lm(e)}},Lm=class{constructor(t){this.glyphCount=t.uint16,this.alternateGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Bm=class extends xr{constructor(t){super(t),this.ligatureSetCount=t.uint16,this.ligatureSetOffsets=[...new Array(this.ligatureSetCount)].map(e=>t.Offset16)}getLigatureSet(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureSetOffsets[t],new Dm(e)}},Dm=class extends Bt{constructor(t){super(t),this.ligatureCount=t.uint16,this.ligatureOffsets=[...new Array(this.ligatureCount)].map(e=>t.Offset16)}getLigature(t){let e=this.parser;return e.currentPosition=this.start+this.ligatureOffsets[t],new Vm(e)}},Vm=class{constructor(t){this.ligatureGlyph=t.uint16,this.componentCount=t.uint16,this.componentGlyphIDs=[...new Array(this.componentCount-1)].map(e=>t.uint16)}},Nm=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.subRuleSetCount=t.uint16,this.subRuleSetOffsets=[...new Array(this.subRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.classDefOffset=t.Offset16,this.subClassSetCount=t.uint16,this.subClassSetOffsets=[...new Array(this.subClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(Wl(this),this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.coverageOffsets=[...new Array(this.glyphCount)].map(e=>t.Offset16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new wn(t)))}getSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 5.${this.substFormat} has no subrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.subRuleSetOffsets[t],new zm(e)}getSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 5.${this.substFormat} has no subclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.subClassSetOffsets[t],new Mm(e)}getCoverageTable(t){if(this.substFormat!==3&&!t)return super.getCoverageTable();if(!t)throw new Error(`lookup type 5.${this.substFormat} requires an coverage table index.`);let e=this.parser;return e.currentPosition=this.start+this.coverageOffsets[t],new ho(e)}},zm=class extends Bt{constructor(t){super(t),this.subRuleCount=t.uint16,this.subRuleOffsets=[...new Array(this.subRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.subRuleOffsets[t],new Yl(e)}},Yl=class{constructor(t){this.glyphCount=t.uint16,this.substitutionCount=t.uint16,this.inputSequence=[...new Array(this.glyphCount-1)].map(e=>t.uint16),this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new wn(t))}},Mm=class extends Bt{constructor(t){super(t),this.subClassRuleCount=t.uint16,this.subClassRuleOffsets=[...new Array(this.subClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.subClassRuleOffsets[t],new Gm(e)}},Gm=class extends Yl{constructor(t){super(t)}},jm=class extends xr{constructor(t){super(t),this.substFormat===1&&(this.chainSubRuleSetCount=t.uint16,this.chainSubRuleSetOffsets=[...new Array(this.chainSubRuleSetCount)].map(e=>t.Offset16)),this.substFormat===2&&(this.backtrackClassDefOffset=t.Offset16,this.inputClassDefOffset=t.Offset16,this.lookaheadClassDefOffset=t.Offset16,this.chainSubClassSetCount=t.uint16,this.chainSubClassSetOffsets=[...new Array(this.chainSubClassSetCount)].map(e=>t.Offset16)),this.substFormat===3&&(Wl(this),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.inputGlyphCount=t.uint16,this.inputCoverageOffsets=[...new Array(this.inputGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[...new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.seqLookupCount=t.uint16,this.seqLookupRecords=[...new Array(this.substitutionCount)].map(e=>new ql(t)))}getChainSubRuleSet(t){if(this.substFormat!==1)throw new Error(`lookup type 6.${this.substFormat} has no chainsubrule sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleSetOffsets[t],new Um(e)}getChainSubClassSet(t){if(this.substFormat!==2)throw new Error(`lookup type 6.${this.substFormat} has no chainsubclass sets.`);let e=this.parser;return e.currentPosition=this.start+this.chainSubClassSetOffsets[t],new Wm(e)}getCoverageFromOffset(t){if(this.substFormat!==3)throw new Error(`lookup type 6.${this.substFormat} does not use contextual coverage offsets.`);let e=this.parser;return e.currentPosition=this.start+t,new ho(e)}},Um=class extends Bt{constructor(t){super(t),this.chainSubRuleCount=t.uint16,this.chainSubRuleOffsets=[...new Array(this.chainSubRuleCount)].map(e=>t.Offset16)}getSubRule(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new Hm(e)}},Hm=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.SubstCount)].map(e=>new wn(t))}},Wm=class extends Bt{constructor(t){super(t),this.chainSubClassRuleCount=t.uint16,this.chainSubClassRuleOffsets=[...new Array(this.chainSubClassRuleCount)].map(e=>t.Offset16)}getSubClass(t){let e=this.parser;return e.currentPosition=this.start+this.chainSubRuleOffsets[t],new Ym(e)}},Ym=class{constructor(t){this.backtrackGlyphCount=t.uint16,this.backtrackSequence=[...new Array(this.backtrackGlyphCount)].map(e=>t.uint16),this.inputGlyphCount=t.uint16,this.inputSequence=[...new Array(this.inputGlyphCount-1)].map(e=>t.uint16),this.lookaheadGlyphCount=t.uint16,this.lookAheadSequence=[...new Array(this.lookAheadGlyphCount)].map(e=>t.uint16),this.substitutionCount=t.uint16,this.substLookupRecords=[...new Array(this.substitutionCount)].map(e=>new ql(t))}},ql=class extends Bt{constructor(t){super(t),this.sequenceIndex=t.uint16,this.lookupListIndex=t.uint16}},qm=class extends Bt{constructor(t){super(t),this.substFormat=t.uint16,this.extensionLookupType=t.uint16,this.extensionOffset=t.Offset32}},Zm=class extends xr{constructor(t){super(t),this.backtrackGlyphCount=t.uint16,this.backtrackCoverageOffsets=[...new Array(this.backtrackGlyphCount)].map(e=>t.Offset16),this.lookaheadGlyphCount=t.uint16,this.lookaheadCoverageOffsets=[new Array(this.lookaheadGlyphCount)].map(e=>t.Offset16),this.glyphCount=t.uint16,this.substituteGlyphIDs=[...new Array(this.glyphCount)].map(e=>t.uint16)}},Xm={buildSubtable:function(t,e){let r=new[void 0,Am,Rm,Im,Bm,Nm,jm,qm,Zm][t](e);return r.type=t,r}},Ye=class extends Bt{constructor(t){super(t)}},Km=class extends Ye{constructor(t){super(t),console.log("lookup type 1")}},Jm=class extends Ye{constructor(t){super(t),console.log("lookup type 2")}},Qm=class extends Ye{constructor(t){super(t),console.log("lookup type 3")}},$m=class extends Ye{constructor(t){super(t),console.log("lookup type 4")}},tp=class extends Ye{constructor(t){super(t),console.log("lookup type 5")}},ep=class extends Ye{constructor(t){super(t),console.log("lookup type 6")}},rp=class extends Ye{constructor(t){super(t),console.log("lookup type 7")}},op=class extends Ye{constructor(t){super(t),console.log("lookup type 8")}},sp=class extends Ye{constructor(t){super(t),console.log("lookup type 9")}},np={buildSubtable:function(t,e){let r=new[void 0,Km,Jm,Qm,$m,tp,ep,rp,op,sp][t](e);return r.type=t,r}},Gl=class extends Bt{static EMPTY={lookupCount:0,lookups:[]};constructor(t){super(t),this.lookupCount=t.uint16,this.lookups=[...new Array(this.lookupCount)].map(e=>t.Offset16)}},ap=class extends Bt{constructor(t,e){super(t),this.ctType=e,this.lookupType=t.uint16,this.lookupFlag=t.uint16,this.subTableCount=t.uint16,this.subtableOffsets=[...new Array(this.subTableCount)].map(r=>t.Offset16),this.markFilteringSet=t.uint16}get rightToLeft(){return this.lookupFlag&!0}get ignoreBaseGlyphs(){return this.lookupFlag&!0}get ignoreLigatures(){return this.lookupFlag&!0}get ignoreMarks(){return this.lookupFlag&!0}get useMarkFilteringSet(){return this.lookupFlag&!0}get markAttachmentType(){return this.lookupFlag&!0}getSubTable(t){let e=this.ctType==="GSUB"?Xm:np;return this.parser.currentPosition=this.start+this.subtableOffsets[t],e.buildSubtable(this.lookupType,this.parser)}},Zl=class extends mt{constructor(t,e,r){let{p:o,tableStart:s}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.scriptListOffset=o.Offset16,this.featureListOffset=o.Offset16,this.lookupListOffset=o.Offset16,this.majorVersion===1&&this.minorVersion===1&&(this.featureVariationsOffset=o.Offset32);let a=!(this.scriptListOffset||this.featureListOffset||this.lookupListOffset);Z(this,"scriptList",()=>a?Nl.EMPTY:(o.currentPosition=s+this.scriptListOffset,new Nl(o))),Z(this,"featureList",()=>a?Ml.EMPTY:(o.currentPosition=s+this.featureListOffset,new Ml(o))),Z(this,"lookupList",()=>a?Gl.EMPTY:(o.currentPosition=s+this.lookupListOffset,new Gl(o))),this.featureVariationsOffset&&Z(this,"featureVariations",()=>a?FeatureVariations.EMPTY:(o.currentPosition=s+this.featureVariationsOffset,new FeatureVariations(o)))}getSupportedScripts(){return this.scriptList.scriptRecords.map(t=>t.scriptTag)}getScriptTable(t){let e=this.scriptList.scriptRecords.find(o=>o.scriptTag===t);this.parser.currentPosition=this.scriptList.start+e.scriptOffset;let r=new Cm(this.parser);return r.scriptTag=t,r}ensureScriptTable(t){return typeof t=="string"?this.getScriptTable(t):t}getSupportedLangSys(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys!==0,r=t.langSysRecords.map(o=>o.langSysTag);return e&&r.unshift("dflt"),r}getDefaultLangSysTable(t){t=this.ensureScriptTable(t);let e=t.defaultLangSys;if(e!==0){this.parser.currentPosition=t.start+e;let r=new zl(this.parser);return r.langSysTag="",r.defaultForScript=t.scriptTag,r}}getLangSysTable(t,e="dflt"){if(e==="dflt")return this.getDefaultLangSysTable(t);t=this.ensureScriptTable(t);let r=t.langSysRecords.find(s=>s.langSysTag===e);this.parser.currentPosition=t.start+r.langSysOffset;let o=new zl(this.parser);return o.langSysTag=e,o}getFeatures(t){return t.featureIndices.map(e=>this.getFeature(e))}getFeature(t){let e;if(parseInt(t)==t?e=this.featureList.featureRecords[t]:e=this.featureList.featureRecords.find(o=>o.featureTag===t),!e)return;this.parser.currentPosition=this.featureList.start+e.featureOffset;let r=new Om(this.parser);return r.featureTag=e.featureTag,r}getLookups(t){return t.lookupListIndices.map(e=>this.getLookup(e))}getLookup(t,e){let r=this.lookupList.lookups[t];return this.parser.currentPosition=this.lookupList.start+r,new ap(this.parser,e)}},ip=class extends Zl{constructor(t,e){super(t,e,"GSUB")}getLookup(t){return super.getLookup(t,"GSUB")}},lp=Object.freeze({__proto__:null,GSUB:ip}),up=class extends Zl{constructor(t,e){super(t,e,"GPOS")}getLookup(t){return super.getLookup(t,"GPOS")}},fp=Object.freeze({__proto__:null,GPOS:up}),cp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.offsetToSVGDocumentList=r.Offset32,r.currentPosition=this.tableStart+this.offsetToSVGDocumentList,this.documentList=new dp(r)}},dp=class extends Bt{constructor(t){super(t),this.numEntries=t.uint16,this.documentRecords=[...new Array(this.numEntries)].map(e=>new mp(t))}getDocument(t){let e=this.documentRecords[t];if(!e)return"";let r=this.start+e.svgDocOffset;return this.parser.currentPosition=r,this.parser.readBytes(e.svgDocLength)}getDocumentForGlyph(t){let e=this.documentRecords.findIndex(r=>r.startGlyphID<=t&&t<=r.endGlyphID);return e===-1?"":this.getDocument(e)}},mp=class{constructor(t){this.startGlyphID=t.uint16,this.endGlyphID=t.uint16,this.svgDocOffset=t.Offset32,this.svgDocLength=t.uint32}},pp=Object.freeze({__proto__:null,SVG:cp}),hp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.axesArrayOffset=r.Offset16,r.uint16,this.axisCount=r.uint16,this.axisSize=r.uint16,this.instanceCount=r.uint16,this.instanceSize=r.uint16;let o=this.tableStart+this.axesArrayOffset;Z(this,"axes",()=>(r.currentPosition=o,[...new Array(this.axisCount)].map(a=>new gp(r))));let s=o+this.axisCount*this.axisSize;Z(this,"instances",()=>{let a=[];for(let n=0;nt.tag)}getAxis(t){return this.axes.find(e=>e.tag===t)}},gp=class{constructor(t){this.tag=t.tag,this.minValue=t.fixed,this.defaultValue=t.fixed,this.maxValue=t.fixed,this.flags=t.flags(16),this.axisNameID=t.uint16}},yp=class{constructor(t,e,r){let o=t.currentPosition;this.subfamilyNameID=t.uint16,t.uint16,this.coordinates=[...new Array(e)].map(s=>t.fixed),t.currentPosition-o[...new Array(o)].map(s=>r.fword))}},wp=Object.freeze({__proto__:null,cvt:bp}),Sp=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},xp=Object.freeze({__proto__:null,fpgm:Sp}),Cp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRanges=r.uint16,Z(this,"gaspRanges",()=>[...new Array(this.numRanges)].map(s=>new Fp(r)))}},Fp=class{constructor(t){this.rangeMaxPPEM=t.uint16,this.rangeGaspBehavior=t.uint16}},kp=Object.freeze({__proto__:null,gasp:Cp}),Op=class extends mt{constructor(t,e){super(t,e)}getGlyphData(t,e){return this.parser.currentPosition=this.tableStart+t,this.parser.readBytes(e)}},Tp=Object.freeze({__proto__:null,glyf:Op}),_p=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.maxp.numGlyphs+1;r.head.indexToLocFormat===0?(this.x2=!0,Z(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset16))):Z(this,"offsets",()=>[...new Array(s)].map(a=>o.Offset32))}getGlyphDataOffsetAndLength(t){let e=this.offsets[t]*this.x2?2:1,r=this.offsets[t+1]*this.x2?2:1;return{offset:e,length:r-e}}},Pp=Object.freeze({__proto__:null,loca:_p}),Ap=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"instructions",()=>[...new Array(t.length)].map(o=>r.uint8))}},Rp=Object.freeze({__proto__:null,prep:Ap}),Ep=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"data",()=>r.readBytes())}},Ip=Object.freeze({__proto__:null,CFF:Ep}),Lp=class extends mt{constructor(t,e){let{p:r}=super(t,e);Z(this,"data",()=>r.readBytes())}},Bp=Object.freeze({__proto__:null,CFF2:Lp}),Dp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.defaultVertOriginY=r.int16,this.numVertOriginYMetrics=r.uint16,Z(this,"vertORiginYMetrics",()=>[...new Array(this.numVertOriginYMetrics)].map(o=>new Vp(r)))}},Vp=class{constructor(t){this.glyphIndex=t.uint16,this.vertOriginY=t.int16}},Np=Object.freeze({__proto__:null,VORG:Dp}),zp=class{constructor(t){this.indexSubTableArrayOffset=t.Offset32,this.indexTablesSize=t.uint32,this.numberofIndexSubTables=t.uint32,this.colorRef=t.uint32,this.hori=new as(t),this.vert=new as(t),this.startGlyphIndex=t.uint16,this.endGlyphIndex=t.uint16,this.ppemX=t.uint8,this.ppemY=t.uint8,this.bitDepth=t.uint8,this.flags=t.int8}},Mp=class{constructor(t){this.hori=new as(t),this.vert=new as(t),this.ppemX=t.uint8,this.ppemY=t.uint8,this.substitutePpemX=t.uint8,this.substitutePpemY=t.uint8}},as=class{constructor(t){this.ascender=t.int8,this.descender=t.int8,this.widthMax=t.uint8,this.caretSlopeNumerator=t.int8,this.caretSlopeDenominator=t.int8,this.caretOffset=t.int8,this.minOriginSB=t.int8,this.minAdvanceSB=t.int8,this.maxBeforeBL=t.int8,this.minAfterBL=t.int8,this.pad1=t.int8,this.pad2=t.int8}},Xl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16,this.numSizes=o.uint32,Z(this,"bitMapSizes",()=>[...new Array(this.numSizes)].map(s=>new zp(o)))}},Gp=Object.freeze({__proto__:null,EBLC:Xl}),Kl=class extends mt{constructor(t,e,r){let{p:o}=super(t,e,r);this.majorVersion=o.uint16,this.minorVersion=o.uint16}},jp=Object.freeze({__proto__:null,EBDT:Kl}),Up=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.majorVersion=r.uint16,this.minorVersion=r.uint16,this.numSizes=r.uint32,Z(this,"bitmapScales",()=>[...new Array(this.numSizes)].map(o=>new Mp(r)))}},Hp=Object.freeze({__proto__:null,EBSC:Up}),Wp=class extends Xl{constructor(t,e){super(t,e,"CBLC")}},Yp=Object.freeze({__proto__:null,CBLC:Wp}),qp=class extends Kl{constructor(t,e){super(t,e,"CBDT")}},Zp=Object.freeze({__proto__:null,CBDT:qp}),Xp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.flags=r.flags(16),this.numStrikes=r.uint32,Z(this,"strikeOffsets",()=>[...new Array(this.numStrikes)].map(o=>r.Offset32))}},Kp=Object.freeze({__proto__:null,sbix:Xp}),Jp=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numBaseGlyphRecords=r.uint16,this.baseGlyphRecordsOffset=r.Offset32,this.layerRecordsOffset=r.Offset32,this.numLayerRecords=r.uint16}getBaseGlyphRecord(t){let e=this.tableStart+this.baseGlyphRecordsOffset;this.parser.currentPosition=e;let r=new bn(this.parser),o=r.gID,s=this.tableStart+this.layerRecordsOffset-6;this.parser.currentPosition=s;let a=new bn(this.parser),n=a.gID;if(o===t)return r;if(n===t)return a;for(;e!==s;){let l=e+(s-e)/12;this.parser.currentPosition=l;let m=new bn(this.parser),f=m.gID;if(f===t)return m;f>t?s=l:fnew Qp(p))}},bn=class{constructor(t){this.gID=t.uint16,this.firstLayerIndex=t.uint16,this.numLayers=t.uint16}},Qp=class{constructor(t){this.gID=t.uint16,this.paletteIndex=t.uint16}},$p=Object.freeze({__proto__:null,COLR:Jp}),th=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numPaletteEntries=r.uint16;let o=this.numPalettes=r.uint16;this.numColorRecords=r.uint16,this.offsetFirstColorRecord=r.Offset32,this.colorRecordIndices=[...new Array(this.numPalettes)].map(s=>r.uint16),Z(this,"colorRecords",()=>(r.currentPosition=this.tableStart+this.offsetFirstColorRecord,[...new Array(this.numColorRecords)].map(s=>new eh(r)))),this.version===1&&(this.offsetPaletteTypeArray=r.Offset32,this.offsetPaletteLabelArray=r.Offset32,this.offsetPaletteEntryLabelArray=r.Offset32,Z(this,"paletteTypeArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteTypeArray,new rh(r,o))),Z(this,"paletteLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteLabelArray,new oh(r,o))),Z(this,"paletteEntryLabelArray",()=>(r.currentPosition=this.tableStart+this.offsetPaletteEntryLabelArray,new sh(r,o))))}},eh=class{constructor(t){this.blue=t.uint8,this.green=t.uint8,this.red=t.uint8,this.alpha=t.uint8}},rh=class{constructor(t,e){this.paletteTypes=[...new Array(e)].map(r=>t.uint32)}},oh=class{constructor(t,e){this.paletteLabels=[...new Array(e)].map(r=>t.uint16)}},sh=class{constructor(t,e){this.paletteEntryLabels=[...new Array(e)].map(r=>t.uint16)}},nh=Object.freeze({__proto__:null,CPAL:th}),ah=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.numSignatures=r.uint16,this.flags=r.uint16,this.signatureRecords=[...new Array(this.numSignatures)].map(o=>new ih(r))}getData(t){let e=this.signatureRecords[t];return this.parser.currentPosition=this.tableStart+e.offset,new lh(this.parser)}},ih=class{constructor(t){this.format=t.uint32,this.length=t.uint32,this.offset=t.Offset32}},lh=class{constructor(t){t.uint16,t.uint16,this.signatureLength=t.uint32,this.signature=t.readBytes(this.signatureLength)}},uh=Object.freeze({__proto__:null,DSIG:ah}),fh=class extends mt{constructor(t,e,r){let{p:o}=super(t,e),s=r.hmtx.numGlyphs;this.version=o.uint16,this.numRecords=o.int16,this.sizeDeviceRecord=o.int32,this.records=[...new Array(numRecords)].map(a=>new ch(o,s))}},ch=class{constructor(t,e){this.pixelSize=t.uint8,this.maxWidth=t.uint8,this.widths=t.readBytes(e)}},dh=Object.freeze({__proto__:null,hdmx:fh}),mh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.nTables=r.uint16,Z(this,"tables",()=>{let o=this.tableStart+4,s=[];for(let a=0;a[...new Array(this.nPairs)].map(e=>new hh(t)))),this.format===2&&console.warn("Kern subtable format 2 is not supported: this parser currently only parses universal table data.")}get horizontal(){return this.coverage[0]}get minimum(){return this.coverage[1]}get crossstream(){return this.coverage[2]}get override(){return this.coverage[3]}},hh=class{constructor(t){this.left=t.uint16,this.right=t.uint16,this.value=t.fword}},gh=Object.freeze({__proto__:null,kern:mh}),yh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numGlyphs=r.uint16,this.yPels=r.readBytes(this.numGlyphs)}},vh=Object.freeze({__proto__:null,LTSH:yh}),bh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.mergeClassCount=r.uint16,this.mergeDataOffset=r.Offset16,this.classDefCount=r.uint16,this.offsetToClassDefOffsets=r.Offset16,Z(this,"mergeEntryMatrix",()=>[...new Array(this.mergeClassCount)].map(o=>r.readBytes(this.mergeClassCount))),console.warn("Full MERG parsing is currently not supported."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},wh=Object.freeze({__proto__:null,MERG:bh}),Sh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint32,this.flags=r.uint32,r.uint32,this.dataMapsCount=r.uint32,this.dataMaps=[...new Array(this.dataMapsCount)].map(o=>new xh(this.tableStart,r))}},xh=class{constructor(t,e){this.tableStart=t,this.parser=e,this.tag=e.tag,this.dataOffset=e.Offset32,this.dataLength=e.uint32}getData(){return this.parser.currentField=this.tableStart+this.dataOffset,this.parser.readBytes(this.dataLength)}},Ch=Object.freeze({__proto__:null,meta:Sh}),Fh=class extends mt{constructor(t,e){super(t,e),console.warn("This font uses a PCLT table, which is currently not supported by this parser."),console.warn("If you need this table parsed, please file an issue, or better yet, a PR.")}},kh=Object.freeze({__proto__:null,PCLT:Fh}),Oh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.uint16,this.numRecs=r.uint16,this.numRatios=r.uint16,this.ratRanges=[...new Array(this.numRatios)].map(o=>new Th(r)),this.offsets=[...new Array(this.numRatios)].map(o=>r.Offset16),this.VDMXGroups=[...new Array(this.numRecs)].map(o=>new _h(r))}},Th=class{constructor(t){this.bCharSet=t.uint8,this.xRatio=t.uint8,this.yStartRatio=t.uint8,this.yEndRatio=t.uint8}},_h=class{constructor(t){this.recs=t.uint16,this.startsz=t.uint8,this.endsz=t.uint8,this.records=[...new Array(this.recs)].map(e=>new Ph(t))}},Ph=class{constructor(t){this.yPelHeight=t.uint16,this.yMax=t.int16,this.yMin=t.int16}},Ah=Object.freeze({__proto__:null,VDMX:Oh}),Rh=class extends mt{constructor(t,e){let{p:r}=super(t,e);this.version=r.fixed,this.ascent=this.vertTypoAscender=r.int16,this.descent=this.vertTypoDescender=r.int16,this.lineGap=this.vertTypoLineGap=r.int16,this.advanceHeightMax=r.int16,this.minTopSideBearing=r.int16,this.minBottomSideBearing=r.int16,this.yMaxExtent=r.int16,this.caretSlopeRise=r.int16,this.caretSlopeRun=r.int16,this.caretOffset=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.reserved=r.int16,this.metricDataFormat=r.int16,this.numOfLongVerMetrics=r.uint16,r.verifyLength()}},Eh=Object.freeze({__proto__:null,vhea:Rh}),Ih=class extends mt{constructor(t,e,r){super(t,e);let o=r.vhea.numOfLongVerMetrics,s=r.maxp.numGlyphs,a=p.currentPosition;if(lazy(this,"vMetrics",()=>(p.currentPosition=a,[...new Array(o)].map(n=>new Lh(p.uint16,p.int16)))),o(p.currentPosition=n,[...new Array(s-o)].map(l=>p.int16)))}}},Lh=class{constructor(t,e){this.advanceHeight=t,this.topSideBearing=e}},Bh=Object.freeze({__proto__:null,vmtx:Ih});var Jl=u(X(),1);var{kebabCase:Dh}=vt(Jl.privateApis);function Ql(t){let e=t.reduce((r,o)=>(r[o.fontFamily]||(r[o.fontFamily]={name:o.fontFamily,fontFamily:o.fontFamily,slug:Dh(o.fontFamily.toLowerCase()),fontFace:[]}),r[o.fontFamily].fontFace.push(o),r),{});return Object.values(e)}var pe=u(z(),1);function Vh(){let{installFonts:t}=(0,go.useContext)(ne),[e,r]=(0,go.useState)(!1),[o,s]=(0,go.useState)(null),a=h=>{l(h)},n=h=>{l(h.target.files)},l=async h=>{if(!h)return;s(null),r(!0);let v=new Set,_=[...h],A=!1,k=_.map(async b=>{if(!await f(b))return A=!0,null;if(v.has(b.name))return null;let Y=(((b.name??"").split(".")??[]).pop()??"").toLowerCase();return pn.includes(Y)?(v.add(b.name),b):null}),x=(await Promise.all(k)).filter(b=>b!==null);if(x.length>0)m(x);else{let b=A?(0,Ur.__)("Sorry, you are not allowed to upload this file type."):(0,Ur.__)("No fonts found to install.");s({type:"error",message:b}),r(!1)}},m=async h=>{let v=await Promise.all(h.map(async _=>{let A=await d(_);return await er(A,A.file,"all"),A}));g(v)};async function f(h){let v=new is("Uploaded Font");try{let _=await c(h);return await v.fromDataBuffer(_,"font"),!0}catch{return!1}}async function c(h){return new Promise((v,_)=>{let A=new window.FileReader;A.readAsArrayBuffer(h),A.onload=()=>v(A.result),A.onerror=_})}let d=async h=>{let v=await c(h),_=new is("Uploaded Font");_.fromDataBuffer(v,h.name);let k=(await new Promise($=>_.onload=$)).detail.font,{name:x}=k.opentype.tables,b=x.get(16)||x.get(1),T=x.get(2).toLowerCase().includes("italic"),Y=k.opentype.tables["OS/2"].usWeightClass||"normal",V=!!k.opentype.tables.fvar&&k.opentype.tables.fvar.axes.find(({tag:$})=>$==="wght"),H=V?`${V.minValue} ${V.maxValue}`:null;return{file:h,fontFamily:b,fontStyle:T?"italic":"normal",fontWeight:H||Y}},g=async h=>{let v=Ql(h);try{await t(v),s({type:"success",message:(0,Ur.__)("Fonts were installed successfully.")})}catch(_){let A=_;s({type:"error",message:A.message,errors:A?.installationErrors})}r(!1)};return(0,pe.jsxs)("div",{className:"font-library__tabpanel-layout",children:[(0,pe.jsx)($t.DropZone,{onFilesDrop:a}),(0,pe.jsxs)($t.__experimentalVStack,{className:"font-library__local-fonts",justify:"start",children:[o&&(0,pe.jsxs)($t.Notice,{status:o.type,__unstableHTML:!0,onRemove:()=>s(null),children:[o.message,o.errors&&(0,pe.jsx)("ul",{children:o.errors.map((h,v)=>(0,pe.jsx)("li",{children:h},v))})]}),e&&(0,pe.jsx)($t.FlexItem,{children:(0,pe.jsx)("div",{className:"font-library__upload-area",children:(0,pe.jsx)($t.ProgressBar,{})})}),!e&&(0,pe.jsx)($t.FormFileUpload,{accept:pn.map(h=>`.${h}`).join(","),multiple:!0,onChange:n,render:({openFileDialog:h})=>(0,pe.jsx)($t.Button,{__next40pxDefaultSize:!0,className:"font-library__upload-area",onClick:h,children:(0,Ur.__)("Upload font")})}),(0,pe.jsx)($t.__experimentalText,{className:"font-library__upload-area__text",children:(0,Ur.__)("Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.")})]})]})}var ls=Vh;var tu=u(z(),1),{Tabs:x2}=vt(Sn.privateApis),C2={id:"installed-fonts",title:(0,us._x)("Library","Font library")},F2={id:"upload-fonts",title:(0,us._x)("Upload","noun")};var eu=u(ut(),1),xn=u(X(),1),zh=u(yt(),1);var ru=u(z(),1);var Cn=u(z(),1);var ou=u(ut(),1),fs=u(X(),1);var su=u(z(),1);var kn=u(z(),1);var _e=u(ut(),1),On=u(X(),1),qh=u(yt(),1);var nu=u(ce(),1);var Wh=u(z(),1),{useSettingsForBlockElement:t6,TypographyPanel:e6}=vt(nu.privateApis);var Yh=u(z(),1);var Tn=u(z(),1),f6={text:{description:(0,_e.__)("Manage the fonts used on the site."),title:(0,_e.__)("Text")},link:{description:(0,_e.__)("Manage the fonts and typography used on the links."),title:(0,_e.__)("Links")},heading:{description:(0,_e.__)("Manage the fonts and typography used on headings."),title:(0,_e.__)("Headings")},caption:{description:(0,_e.__)("Manage the fonts and typography used on captions."),title:(0,_e.__)("Captions")},button:{description:(0,_e.__)("Manage the fonts and typography used on buttons."),title:(0,_e.__)("Buttons")}};var Jh=u(ut(),1),Qh=u(X(),1),iu=u(ce(),1);var Hr=u(X(),1),au=u(ut(),1);var Kh=u(yt(),1);var Zh=u(X(),1),Xh=u(z(),1);var _n=u(z(),1);var Pn=u(z(),1),{useSettingsForBlockElement:O6,ColorPanel:T6}=vt(iu.privateApis);var ng=u(ut(),1),pu=u(X(),1);var eg=u(cr(),1),An=u(X(),1),rg=u(ut(),1);var ds=u(X(),1);var cs=u(X(),1);var lu=u(z(),1);function uu(){let{paletteColors:t}=Lr();return t.slice(0,4).map(({slug:e,color:r},o)=>(0,lu.jsx)("div",{style:{flexGrow:1,height:"100%",background:r}},`${e}-${o}`))}var vo=u(z(),1),$h={start:{scale:1,opacity:1},hover:{scale:0,opacity:0}},tg=({label:t,isFocused:e,withHoverView:r})=>(0,vo.jsx)(Vr,{label:t,isFocused:e,withHoverView:r,children:({key:o})=>(0,vo.jsx)(cs.__unstableMotion.div,{variants:$h,style:{height:"100%",overflow:"hidden"},children:(0,vo.jsx)(cs.__experimentalHStack,{spacing:0,justify:"center",style:{height:"100%",overflow:"hidden"},children:(0,vo.jsx)(uu,{})})},o)}),fu=tg;var Cr=u(z(),1),cu=["color"];function ms({title:t,gap:e=2}){let r=No(cu);return r?.length<=1?null:(0,Cr.jsxs)(ds.__experimentalVStack,{spacing:3,children:[t&&(0,Cr.jsx)(Se,{level:3,children:t}),(0,Cr.jsx)(ds.__experimentalGrid,{gap:e,children:r.map((o,s)=>(0,Cr.jsx)(zr,{variation:o,isPill:!0,properties:cu,showTooltip:!0,children:()=>(0,Cr.jsx)(fu,{})},s))})]})}var du=u(z(),1);var og=u(cr(),1),ps=u(X(),1),sg=u(ut(),1);var mu=u(z(),1);var Rn=u(z(),1),{Tabs:Q6}=vt(pu.privateApis);var ig=u(ut(),1),gu=u(ce(),1),lg=u(X(),1);var hu=u(ce(),1);var ag=u(z(),1);var{BackgroundPanel:rC}=vt(hu.privateApis);var En=u(z(),1),{useHasBackgroundPanel:uC}=vt(gu.privateApis);var Fr=u(X(),1),In=u(ut(),1);var mg=u(yt(),1);var ug=u(X(),1),fg=u(ut(),1),cg=u(z(),1);var Ln=u(z(),1),{Menu:SC}=vt(Fr.privateApis);var Ut=u(X(),1),bo=u(ut(),1);var hs=u(yt(),1);var Bn=u(z(),1),{Menu:DC}=vt(Ut.privateApis),VC=[{label:(0,bo.__)("Rename"),action:"rename"},{label:(0,bo.__)("Delete"),action:"delete"}],NC=[{label:(0,bo.__)("Reset"),action:"reset"}];var pg=u(z(),1);var yg=u(ut(),1),vu=u(ce(),1);var yu=u(ce(),1),hg=u(yt(),1);var gg=u(z(),1),{useSettingsForBlockElement:qC,DimensionsPanel:ZC}=vt(yu.privateApis);var Dn=u(z(),1),{useHasDimensionsPanel:eF,useSettingsForBlockElement:rF}=vt(vu.privateApis);var Fu=u(X(),1),Sg=u(ut(),1);var bg=u(ut(),1),wg=u(X(),1);var bu=u(be(),1),wu=u(fe(),1),ys=u(yt(),1),Su=u(X(),1),xu=u(ut(),1);var gs=u(z(),1);function vg({gap:t=2}){let{user:e}=(0,ys.useContext)(Xt),r=e?.styles,s=(0,wu.useSelect)(n=>{let l=n(bu.store).__experimentalGetCurrentThemeGlobalStylesVariations();return Array.isArray(l)?l:void 0},[])?.filter(n=>!io(n,["color"])&&!io(n,["typography","spacing"])),a=(0,ys.useMemo)(()=>[...[{title:(0,xu.__)("Default"),settings:{},styles:{}},...s??[]].map(l=>{let m=l?.styles?.blocks?{...l.styles.blocks}:{};r?.blocks&&Object.keys(r.blocks).forEach(g=>{if(r.blocks?.[g]?.css){let h=m[g]||{},v={css:`${m[g]?.css||""} ${r.blocks?.[g]?.css?.trim()||""}`};m[g]={...h,...v}}});let f=r?.css||l.styles?.css?{css:`${l.styles?.css||""} ${r?.css||""}`}:{},c=Object.keys(m).length>0?{blocks:m}:{},d={...l.styles,...f,...c};return{...l,settings:l.settings??{},styles:d}})],[s,r?.blocks,r?.css]);return!s||s.length<1?null:(0,gs.jsx)(Su.__experimentalGrid,{columns:2,className:"global-styles-ui-style-variations-container",gap:t,children:a.map((n,l)=>(0,gs.jsx)(zr,{variation:n,children:m=>(0,gs.jsx)(nn,{label:n?.title,withHoverView:!0,isFocused:m,variation:n})},l))})}var Vn=vg;var Cu=u(z(),1);var Nn=u(z(),1);var xg=u(ut(),1),Cg=u(X(),1),ku=u(ce(),1);var zn=u(z(),1),{AdvancedPanel:wF}=vt(ku.privateApis);var Lu=u(ut(),1),Gn=u(X(),1),jn=u(yt(),1);var Fg=u(fe(),1),kg=u(be(),1),Ou=u(yt(),1);var Pu=u(ut(),1),Au=u(X(),1),vs=u(_u(),1),Og=u(be(),1),Tg=u(fe(),1);var Ru=u(dn(),1),Eu=u(z(),1),kF=3600*1e3*24;var Mn=u(X(),1),wo=u(ut(),1);var Iu=u(z(),1);var Un=u(z(),1);var Hn=u(ut(),1),qe=u(X(),1);var Eg=u(yt(),1);var Pg=u(X(),1),Ag=u(ut(),1),Rg=u(z(),1);var Wn=u(z(),1),{Menu:YF}=vt(qe.privateApis);var Nu=u(ut(),1),Ne=u(X(),1);var zu=u(yt(),1);var Ig=u(ce(),1),Lg=u(ut(),1);var Bg=u(z(),1);var Dg=u(X(),1),Bu=u(ut(),1),Vg=u(z(),1);var So=u(X(),1),Ng=u(ut(),1),zg=u(yt(),1),Du=u(z(),1);var Ze=u(X(),1),Vu=u(z(),1);var Yn=u(z(),1),{Menu:f3}=vt(Ne.privateApis);var Zn=u(z(),1);var Xn=u(z(),1);function Wr(t){return function({value:r,baseValue:o,onChange:s,...a}){return(0,Xn.jsx)(ao,{value:r,baseValue:o,onChange:s,children:(0,Xn.jsx)(t,{...a})})}}var Ug=Wr(Vn);var Hg=Wr(ms);var Wg=Wr(Wo);var Yr=u(z(),1);function Kn({value:t,baseValue:e,onChange:r,activeTab:o="installed-fonts"}){let s;switch(o){case"upload-fonts":s=(0,Yr.jsx)(ls,{});break;case"installed-fonts":s=(0,Yr.jsx)($o,{});break;default:s=(0,Yr.jsx)(es,{slug:o})}return(0,Yr.jsx)(ao,{value:t,baseValue:e,onChange:r,children:(0,Yr.jsx)(Zo,{children:s})})}var ju=u(Vs()),{unlock:Jn}=(0,ju.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/font-list-route");if(typeof document<"u"&&!document.head.querySelector("style[data-wp-hash='4bbd4c3e39']")){let t=document.createElement("style");t.setAttribute("data-wp-hash","4bbd4c3e39"),t.appendChild(document.createTextNode('@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:90px;padding:0}.font-library-modal .font-library__subtitle{font-size:11px;font-weight:499;text-transform:uppercase}.font-library-modal__tab-panel{height:calc(100% - 50px)}.font-library__tabpanel-layout{display:flex;flex-direction:column;height:100%}.font-library__tabpanel-layout>div{flex-grow:1}.font-library__tabpanel-layout .font-library__loading{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;padding-top:124px;position:absolute;top:0;width:100%}.font-library__footer,.font-library__tabpanel-layout .components-navigator-screen{padding:24px;width:100%}.font-library__footer{background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;flex-grow:0!important;flex-shrink:0;height:90px;position:absolute}.font-library__page-selection{font-size:11px;font-weight:499;text-transform:uppercase}@media (min-width:600px){.font-library__page-selection .font-library__page-selection-trigger{font-size:11px!important;font-weight:499}}.font-library__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library__fonts-list{list-style:none;margin-bottom:0;margin-top:0;padding:0}.font-library__fonts-list-item{margin-bottom:0}.font-library__font-card{border:1px solid #ddd;box-sizing:border-box;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library__font-card:hover{background-color:#f0f0f0}.font-library__font-card:focus{position:relative}.font-library__font-card .font-library__font-card__name{font-weight:700}.font-library__font-card .font-library__font-card__count{color:#757575}.font-library__font-card .font-library__font-variant_demo-image{display:block;height:24px;width:auto}.font-library__font-card .font-library__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library__font-card .font-library__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;position:sticky;top:0;z-index:1}.font-library__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library__upload-area{background-color:#f0f0f0}.font-library__local-fonts{margin:24px auto;width:80%}.font-library__local-fonts .font-library__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library__select-all{padding:16px 16px 16px 17px}.font-library__select-all .components-checkbox-control__label{padding-left:16px}.global-styles-ui-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.global-styles-ui-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.global-styles-ui-screen-revisions__revisions-list li{margin-bottom:0}.global-styles-ui-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.global-styles-ui-screen-revisions__revision-item[role=option]:active,.global-styles-ui-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.global-styles-ui-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item:after,.global-styles-ui-screen-revisions__revision-item:before{content:"\\a";display:block;position:absolute}.global-styles-ui-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes>li,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta{color:#1e1e1e}.global-styles-ui-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.global-styles-ui-screen-revisions__revision-item:first-child:after{top:18px}.global-styles-ui-screen-revisions__revision-item:last-child:after{height:18px}.global-styles-ui-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__changes,.global-styles-ui-screen-revisions__meta{color:#757575;font-size:12px}.global-styles-ui-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.global-styles-ui-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.global-styles-ui-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.global-styles-ui-screen-revisions__loading{margin:24px auto!important}.global-styles-ui-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.global-styles-ui-screen-revisions__changes li{margin-bottom:4px}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination{gap:2px;justify-content:space-between}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled,.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.global-styles-ui-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.global-styles-ui-variations_item{box-sizing:border-box;cursor:pointer}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{transition:outline .1s linear}}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill{height:32px}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview{outline-color:#0000004d}.global-styles-ui-variations_item.is-active .global-styles-ui-variations_item-preview,.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.global-styles-ui-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.global-styles-ui-preview__wrapper{display:block;max-width:100%;width:100%}.global-styles-ui-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:20px;min-height:100px;overflow:hidden}.global-styles-ui-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.global-styles-ui-font-size__item-value{color:#757575}.global-styles-ui-screen-typography__indicator{align-items:center;border-radius:2px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.global-styles-ui-block-types-search{margin-bottom:10px;padding:0 16px}.global-styles-ui-screen-typography__font-variants-count{color:#757575}.global-styles-ui-font-families__manage-fonts{justify-content:center}.global-styles-ui-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.global-styles-ui-header{margin-bottom:0!important}.global-styles-ui-subtitle{font-size:11px!important;font-weight:499!important;margin-bottom:0!important;text-transform:uppercase}.global-styles-ui-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.global-styles-ui-icon-with-current-color{fill:currentColor}.global-styles-ui__color-indicator-wrapper{flex-shrink:0;height:24px}.global-styles-ui__shadows-panel__options-container,.global-styles-ui__typography-panel__options-container{height:24px}.global-styles-ui__block-preview-panel{border:1px solid #ddd;border-radius:2px;overflow:hidden;position:relative;width:100%}.global-styles-ui__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #ddd;border-radius:2px;height:144px;overflow:auto}.global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block{background-color:#fff;border:1px solid #ddd;border-radius:2px;height:60px;width:60%}.global-styles-ui__shadow-editor__dropdown-content{width:280px}.global-styles-ui__shadow-editor-panel{margin-bottom:4px}.global-styles-ui__shadow-editor__dropdown{position:relative;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.global-styles-ui__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button{border:none}.global-styles-ui__shadow-editor__dropdown-toggle:hover+.global-styles-ui__shadow-editor__remove-button,.global-styles-ui__shadow-editor__remove-button:focus,.global-styles-ui__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.global-styles-ui__shadow-editor__remove-button{opacity:1}}.global-styles-ui-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.global-styles-ui-screen-css .components-v-stack{flex:1 1 auto}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.global-styles-ui-screen-css-help-link{display:inline-block;margin-top:8px}.global-styles-ui-screen-variations{border-top:1px solid #ddd;margin-top:16px}.global-styles-ui-screen-variations>*{margin:24px 16px}.global-styles-ui-sidebar__navigator-provider{height:100%}.global-styles-ui-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.global-styles-ui-sidebar__navigator-screen .single-column{grid-column:span 1}.global-styles-ui-screen-root.global-styles-ui-screen-root,.global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations{background:unset;color:inherit}.global-styles-ui-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile,.global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile .global-styles-ui-screen-root__active-style-tile-preview{border-radius:2px}.global-styles-ui-screen-root__active-style-tile-preview{clip-path:border-box}.global-styles-ui-color-palette-panel,.global-styles-ui-gradient-palette-panel{padding:16px}.font-library-page__tablist{border-bottom:1px solid #f0f0f0;padding:0 24px}.font-library-page__tab-panel{flex-grow:1;max-height:calc(100% - 110px);overflow:auto}.admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel{max-height:calc(100% - 198px)}')),document.head.appendChild(t)}var{Tabs:bs}=Jn(Uu.privateApis),{useGlobalStyles:Yg}=Jn(Hu.privateApis);function qg(){let{records:t=[]}=(0,ws.useEntityRecords)("root","fontCollection",{_fields:"slug,name,description"}),[e,r]=(0,Yu.useState)("installed-fonts"),{base:o,user:s,setUser:a,isReady:n}=Yg(),l=(0,Wu.useSelect)(f=>f(ws.store).canUser("create",{kind:"postType",name:"wp_font_family"}),[]);if(!n)return null;let m=[{id:"installed-fonts",title:(0,xo.__)("Library")}];return l&&(m.push({id:"upload-fonts",title:(0,xo.__)("Upload")}),m.push(...(t||[]).map(({slug:f,name:c})=>({id:f,title:t&&t.length===1&&f==="google-fonts"?(0,xo.__)("Install Fonts"):c})))),React.createElement(Ns,{title:(0,xo.__)("Fonts")},React.createElement(bs,{selectedTabId:e,onSelect:f=>r(f)},React.createElement("div",{className:"font-library-page__tablist"},React.createElement(bs.TabList,null,m.map(({id:f,title:c})=>React.createElement(bs.Tab,{key:f,tabId:f},c)))),m.map(({id:f})=>React.createElement(bs.TabPanel,{key:f,tabId:f,focusable:!1,className:"font-library-page__tab-panel"},React.createElement(Kn,{value:s,baseValue:o,onChange:a,activeTab:f})))))}function Zg(){return React.createElement(qg,null)}var Xg=Zg;export{Xg as stage}; /*! Bundled license information: is-plain-object/dist/is-plain-object.mjs: From 8e8b4df5db2f4998edc79a62493fbdd7615a1cb5 Mon Sep 17 00:00:00 2001 From: Kelly Choyce-Dwan Date: Thu, 14 May 2026 14:33:31 +0000 Subject: [PATCH 094/106] Help/About: Update the About page for 7.0. Introducing the new content for the 7.0 About page. Fixes #64536. Props mukesh27, audrasjb, jorbin, ankit-k-gupta, parinpanjari, fcoveram, joen, markoserb, Benjamin_Zekavica, westonruter, peterwilsoncc, JeffPaul. git-svn-id: https://develop.svn.wordpress.org/trunk@62362 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 80 +++++++++--------- src/wp-admin/contribute.php | 2 +- src/wp-admin/credits.php | 2 +- src/wp-admin/css/about.css | 57 ++++++++----- src/wp-admin/freedoms.php | 2 +- .../images/about-header-credits-rtl.webp | Bin 0 -> 40906 bytes src/wp-admin/images/about-header-credits.webp | Bin 0 -> 40960 bytes .../images/about-header-default-rtl.webp | Bin 0 -> 18810 bytes src/wp-admin/images/about-header-default.webp | Bin 0 -> 20030 bytes .../images/about-header-freedoms-rtl.webp | Bin 0 -> 43814 bytes .../images/about-header-freedoms.webp | Bin 0 -> 40888 bytes .../images/about-header-get-involved-rtl.webp | Bin 0 -> 15424 bytes .../images/about-header-get-involved.webp | Bin 0 -> 18168 bytes .../images/about-header-privacy-rtl.webp | Bin 0 -> 13612 bytes src/wp-admin/images/about-header-privacy.webp | Bin 0 -> 10926 bytes src/wp-admin/images/about-release-badge.svg | 25 +++--- src/wp-admin/images/about-release-logo.svg | 44 ++-------- src/wp-admin/privacy.php | 2 +- 18 files changed, 96 insertions(+), 118 deletions(-) create mode 100644 src/wp-admin/images/about-header-credits-rtl.webp create mode 100644 src/wp-admin/images/about-header-credits.webp create mode 100644 src/wp-admin/images/about-header-default-rtl.webp create mode 100644 src/wp-admin/images/about-header-default.webp create mode 100644 src/wp-admin/images/about-header-freedoms-rtl.webp create mode 100644 src/wp-admin/images/about-header-freedoms.webp create mode 100644 src/wp-admin/images/about-header-get-involved-rtl.webp create mode 100644 src/wp-admin/images/about-header-get-involved.webp create mode 100644 src/wp-admin/images/about-header-privacy-rtl.webp create mode 100644 src/wp-admin/images/about-header-privacy.webp diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index 962a68a3b87af..f8c48bb195b3c 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -14,7 +14,7 @@ $title = _x( 'About', 'page title' ); list( $display_version ) = explode( '-', wp_get_wp_version() ); -$display_major_version = '6.9'; +$display_major_version = '7.0'; $release_notes_url = sprintf( /* translators: %s: WordPress version number. */ @@ -61,68 +61,68 @@
-
-

-

+
+

+

-
-

+
+

-
- +
+

-
+
- +
-
+
- +
-
-

+
+

-
- +
+

-
-

+
+

-
- +
+

-
+
- +
-
+
- +
-
-

+
+

-
- +
+

@@ -130,30 +130,30 @@
-
+
-

-

LCP (Largest Contentful Paint) metric is achieved through improved loading of conditional and inlined stylesheets, script loading with fetchpriority support, and additional core optimizations. Editor advances include fixes for layout shifts caused by the Video block and faster loading of the terms selector.' ); ?>

+

+

-
+
-

-

+

+

-
+

@@ -176,10 +176,10 @@


-
- +
+
-
+

-
+
-
+
- <?php echo esc_attr( $header_alt_text ); ?> + <?php echo esc_attr( $header_alt_text ); ?>
diff --git a/src/wp-admin/credits.php b/src/wp-admin/credits.php index c3d544b410df0..3aa8e06b63d0a 100644 --- a/src/wp-admin/credits.php +++ b/src/wp-admin/credits.php @@ -28,7 +28,7 @@
- <?php echo esc_attr( $header_alt_text ); ?> + <?php echo esc_attr( $header_alt_text ); ?>
diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index 1d4583d1095bb..721a98078f0d6 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -21,8 +21,8 @@ .about__container { /* Section backgrounds */ - --background: #ececec; - --subtle-background: #eef0fd; + --background: #ebe8e5; + --subtle-background: #ebe8e5; /* Main text color */ --text: #1e1e1e; @@ -42,7 +42,7 @@ --nav-color: var(--text); --nav-current: var(--accent-1); - --border-radius: 0; + --border-radius: 0.5rem; --gap: 2rem; } @@ -132,6 +132,7 @@ .about__container .has-subtle-background-color { background-color: var(--subtle-background); + border-radius: var(--border-radius); } .about__container .has-background-image { @@ -150,6 +151,14 @@ padding: var(--gap); } +.about__section .column.is-left-padding-zero { + padding-left: 0; +} + +.about__section .column.is-right-padding-zero { + padding-right: 0; +} + .about__section + .about__section .is-section-header { padding-bottom: var(--gap); } @@ -340,6 +349,14 @@ .about__section.has-2-columns.has-gutters .column:last-child { margin-bottom: 0; } + + .about__section .column.is-left-padding-zero { + padding-right: 0; + } + + .about__section .column.is-right-padding-zero { + padding-left: 0; + } } @media screen and (max-width: 480px) { @@ -579,7 +596,7 @@ padding-right: 26rem; /* Space for the background image. */ min-height: clamp(10rem, 25vw, 18.75rem); border-radius: var(--border-radius); - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40721)'%3E%3Cpath fill='url(%23paint0_linear_6958_40721)' d='M0 0h1000v300H0z'/%3E%3Cg clip-path='url(%23clip1_6958_40721)'%3E%3Cpath d='M643.203 90.702c29.374-29.375 76.993-29.375 106.367 0 67.745 73.346-33.051 174.1-106.367 106.367-29.369-29.369-29.369-76.993 0-106.367z' stroke='url(%23paint1_linear_6958_40721)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M643.215 90.71L763.002-29.074' stroke='url(%23paint2_linear_6958_40721)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M981.603 113.114c-29.375 29.375-76.993 29.375-106.368 0-67.745-73.347 33.051-174.1 106.368-106.368 29.367 29.37 29.367 76.993 0 106.368z' stroke='url(%23paint3_linear_6958_40721)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M981.622 113.105L870.501 224.226' stroke='url(%23paint4_linear_6958_40721)' stroke-width='50' stroke-miterlimit='10'/%3E%3Ccircle cx='816.697' cy='221.067' r='24.068' fill='%233858E9'/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40721' x1='47' y1='46' x2='963.5' y2='318.5' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40721' x1='565.98' y1='158.471' x2='700.462' y2='23.995' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_6958_40721' x1='722.025' y1='-41.283' x2='545.675' y2='135.067' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.5' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint3_linear_6958_40721' x1='1058.83' y1='45.345' x2='924.344' y2='179.821' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint4_linear_6958_40721' x1='902.813' y1='245.098' x2='1079.16' y2='68.748' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.5' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40721'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3CclipPath id='clip1_6958_40721'%3E%3Cpath fill='%23fff' transform='translate(596 -42)' d='M0 0h433v287.934H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-default.webp?ver=20260514" ); background-repeat: no-repeat; background-position: right center; background-size: cover; @@ -588,42 +605,41 @@ } .credits-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40732)'%3E%3Cpath fill='url(%23paint0_linear_6958_40732)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M964.296 78.3c35.067-35.067 91.914-35.067 126.984 0 80.87 87.56-39.46 207.839-126.984 126.98-35.061-35.06-35.061-91.913 0-126.98z' stroke='url(%23paint1_linear_6958_40732)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M784.296 78.3c35.067-35.067 91.914-35.067 126.982 0 80.875 87.56-39.456 207.839-126.982 126.98-35.061-35.06-35.061-91.913 0-126.98z' stroke='url(%23paint2_linear_6958_40732)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40732' x1='378.5' y1='402' x2='926' y2='9.5' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40732' x1='872.106' y1='159.202' x2='1032.65' y2='-1.337' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_6958_40732' x1='692.106' y1='159.202' x2='852.648' y2='-1.337' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40732'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-credits.webp?ver=20260514" ); } .freedoms-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40736)'%3E%3Cpath fill='url(%23paint0_linear_6958_40736)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M847.111 61.731a1 1 0 0 1 1.778 0l29.511 57.436c.096.186.247.337.433.433l57.436 29.511a1 1 0 0 1 0 1.778L878.833 180.4a1.006 1.006 0 0 0-.433.433l-29.511 57.436a1 1 0 0 1-1.778 0L817.6 180.833a1.006 1.006 0 0 0-.433-.433l-57.436-29.511a1 1 0 0 1 0-1.778l57.436-29.511c.186-.096.337-.247.433-.433l29.511-57.436z' stroke='url(%23paint1_linear_6958_40736)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40736' x1='47' y1='46' x2='1264.5' y2='46' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40736' x1='692.106' y1='167.202' x2='852.648' y2='6.663' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40736'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-freedoms.webp?ver=20260514" ); } .privacy-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40739)'%3E%3Cpath fill='url(%23paint0_radial_6958_40739)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M758 90l90-30 90 30v11.511c0 59.891-35.271 114.165-90 138.489-54.729-24.324-90-78.598-90-138.489V90z' stroke='url(%23paint1_linear_6958_40739)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3CradialGradient id='paint0_radial_6958_40739' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='rotate(37.724 183.217 1253.89) scale(615.701 397.883)'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.35' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/radialGradient%3E%3ClinearGradient id='paint1_linear_6958_40739' x1='692.106' y1='167.202' x2='852.648' y2='6.663' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40739'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-privacy.webp?ver=20260514" ); } .contribute-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40742)'%3E%3Cpath fill='url(%23paint0_linear_6958_40742)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M924.567 149.134a1 1 0 0 1 0 1.732L771.5 239.135a1 1 0 0 1-1.5-.866V61.731a1 1 0 0 1 1.5-.866l153.067 88.269z' stroke='url(%23paint1_linear_6958_40742)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40742' x1='606.5' x2='721' y2='355' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40742' x1='833.12' y1='-5.894' x2='992.039' y2='131.9' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40742'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-get-involved.webp?ver=20260514" ); } [dir="rtl"] .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40746)'%3E%3Cpath transform='matrix(-1 0 0 1 1000 0)' fill='url(%23paint0_linear_6958_40746)' d='M0 0h1000v300H0z'/%3E%3Cg clip-path='url(%23clip1_6958_40746)'%3E%3Cpath d='M18.203 90.702c29.375-29.375 76.993-29.375 106.367 0 67.745 73.346-33.05 174.1-106.367 106.367-29.369-29.369-29.369-76.993 0-106.367z' stroke='url(%23paint1_linear_6958_40746)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M18.215 90.71L138.002-29.074' stroke='url(%23paint2_linear_6958_40746)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M356.603 113.114c-29.375 29.375-76.993 29.375-106.368 0-67.745-73.347 33.051-174.1 106.368-106.368 29.368 29.37 29.368 76.993 0 106.368z' stroke='url(%23paint3_linear_6958_40746)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M356.622 113.105L245.501 224.226' stroke='url(%23paint4_linear_6958_40746)' stroke-width='50' stroke-miterlimit='10'/%3E%3Ccircle cx='191.698' cy='221.067' r='24.068' fill='%233858E9'/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40746' x1='47' y1='46' x2='963.5' y2='318.5' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40746' x1='218' y1='120.499' x2='51.502' y2='21.995' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_6958_40746' x1='78' y1='-29.003' x2='216' y2='68.497' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.5' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint3_linear_6958_40746' x1='175.805' y1='53.58' x2='405.499' y2='103.005' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.608' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint4_linear_6958_40746' x1='414' y1='137.499' x2='180.5' y2='59.499' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.5' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40746'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3CclipPath id='clip1_6958_40746'%3E%3Cpath fill='%23fff' transform='translate(-29 -42)' d='M0 0h433v287.934H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-default-rtl.webp?ver=20260514" ); } [dir="rtl"] .credits-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40757)'%3E%3Cpath transform='matrix(-1 0 0 1 1000 0)' fill='url(%23paint0_linear_6958_40757)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M35.705 78.3C.637 43.233-56.21 43.233-91.279 78.3c-80.875 87.56 39.457 207.839 126.983 126.98 35.06-35.06 35.06-91.913 0-126.98z' stroke='url(%23paint1_linear_6958_40757)' stroke-width='50' stroke-miterlimit='10'/%3E%3Cpath d='M215.704 78.3c-35.067-35.067-91.914-35.067-126.982 0-80.875 87.56 39.456 207.839 126.982 126.98 35.061-35.06 35.061-91.913 0-126.98z' stroke='url(%23paint2_linear_6958_40757)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40757' x1='378.5' y1='402' x2='926' y2='9.5' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40757' x1='127.894' y1='159.202' x2='-32.648' y2='-1.337' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_6958_40757' x1='307.894' y1='159.202' x2='147.352' y2='-1.337' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40757'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-credits-rtl.webp?ver=20260514" ); } [dir="rtl"] .freedoms-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40762)'%3E%3Cpath transform='matrix(-1 0 0 1 1000 0)' fill='url(%23paint0_linear_6958_40762)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M152.889 61.731a1 1 0 0 0-1.778 0L121.6 119.167a1.006 1.006 0 0 1-.433.433l-57.436 29.511a1 1 0 0 0 0 1.778l57.436 29.511c.186.096.337.247.433.433l29.511 57.436a1 1 0 0 0 1.778 0l29.511-57.436c.096-.186.247-.337.433-.433l57.436-29.511a1 1 0 0 0 0-1.778L182.833 119.6a1.006 1.006 0 0 1-.433-.433l-29.511-57.436z' stroke='url(%23paint1_linear_6958_40762)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40762' x1='47' y1='46' x2='1264.5' y2='46' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40762' x1='307.894' y1='167.202' x2='147.352' y2='6.663' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40762'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-freedoms-rtl.webp?ver=20260514" ); } [dir="rtl"] .privacy-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40765)'%3E%3Cpath transform='matrix(-1 0 0 1 1000 0)' fill='url(%23paint0_radial_6958_40765)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M242 90l-90-30-90 30v11.511C62 161.402 97.27 215.676 152 240c54.729-24.324 90-78.598 90-138.489V90z' stroke='url(%23paint1_linear_6958_40765)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3CradialGradient id='paint0_radial_6958_40765' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='rotate(37.724 183.217 1253.89) scale(615.701 397.883)'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.35' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/radialGradient%3E%3ClinearGradient id='paint1_linear_6958_40765' x1='307.894' y1='167.202' x2='147.352' y2='6.663' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.665' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40765'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-privacy-rtl.webp?ver=20260514" ); } [dir="rtl"] .contribute-php .about__header { - background-image: url("data:image/svg+xml,%3Csvg width='1000' height='300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6958_40768)'%3E%3Cpath transform='matrix(-1 0 0 1 1000 0)' fill='url(%23paint0_linear_6958_40768)' d='M0 0h1000v300H0z'/%3E%3Cpath d='M241.498 149.134a1 1 0 0 1 0 1.732L88.43 239.135a1 1 0 0 1-1.5-.866V61.731a1 1 0 0 1 1.5-.866l153.068 88.269z' stroke='url(%23paint1_linear_6958_40768)' stroke-width='50' stroke-miterlimit='10'/%3E%3C/g%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_6958_40768' x1='606.5' x2='721' y2='355' gradientUnits='userSpaceOnUse'%3E%3Cstop/%3E%3Cstop offset='.65' stop-color='%233858E9'/%3E%3Cstop offset='1' stop-color='%23D3CDB6'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_6958_40768' x1='176' y1='45.5' x2='-6.506' y2='213.124' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23D3CDB6'/%3E%3Cstop offset='.64' stop-color='%233858E9'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3CclipPath id='clip0_6958_40768'%3E%3Cpath fill='%23fff' d='M0 0h1000v300H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E"); + background-image: url( "../images/about-header-get-involved-rtl.webp?ver=20260514" ); } - .about__header-image { margin: 0 0 calc(var(--gap) * 1.5); } @@ -641,6 +657,7 @@ font-size: clamp(2rem, 20vw - 9rem, 4rem); line-height: 1; font-weight: 600; + color: var(--text); } .about-php .about__header-title h1, @@ -659,6 +676,7 @@ padding: 0; font-size: 1.6rem; line-height: 1.15; + color: var(--text); } .about__header-navigation { @@ -695,6 +713,7 @@ .about__header-navigation .nav-tab:active { background-color: var(--nav-current); color: var(--text-light); + border-radius: var(--border-radius); } .about__header-navigation .nav-tab-active { @@ -709,6 +728,7 @@ background-color: var(--nav-current); color: var(--text-light); border-color: var(--nav-current); + border-radius: var(--border-radius); } @media screen and (max-width: 960px) { @@ -761,14 +781,6 @@ padding-right: var(--gap); } - .about__header, - .credits-php .about__header, - .freedoms-php .about__header, - .privacy-php .about__header, - .contribute-php .about__header { - background: var(--accent-gradient) !important; - } - .about__header-navigation { display: block; } @@ -795,7 +807,6 @@ .about__section .wp-people-group-title { margin-bottom: calc(var(--gap) * 2 - 10px); text-align: center; - } .about__section .wp-people-group { diff --git a/src/wp-admin/freedoms.php b/src/wp-admin/freedoms.php index 711f9b9414fcb..aabfc5d4c77b8 100644 --- a/src/wp-admin/freedoms.php +++ b/src/wp-admin/freedoms.php @@ -31,7 +31,7 @@
- <?php echo esc_attr( $header_alt_text ); ?> + <?php echo esc_attr( $header_alt_text ); ?>
diff --git a/src/wp-admin/images/about-header-credits-rtl.webp b/src/wp-admin/images/about-header-credits-rtl.webp new file mode 100644 index 0000000000000000000000000000000000000000..b65ce15238ea97b50f1b2af09d73fb53bee4396f GIT binary patch literal 40906 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-credits.webp b/src/wp-admin/images/about-header-credits.webp new file mode 100644 index 0000000000000000000000000000000000000000..b83bb5b49e1c4aa60463bf40cdb9b298f7ced2b8 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-default-rtl.webp b/src/wp-admin/images/about-header-default-rtl.webp new file mode 100644 index 0000000000000000000000000000000000000000..7de0c9a4ffec28534933da9029262ce00b43ddfa GIT binary patch literal 18810 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-default.webp b/src/wp-admin/images/about-header-default.webp new file mode 100644 index 0000000000000000000000000000000000000000..020a92a7265ae8660285362065a9b1699a6d1e3c GIT binary patch literal 20030 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 U8s9)(HugtkRof-Wnsx~60EhTKt^fc4 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-freedoms-rtl.webp b/src/wp-admin/images/about-header-freedoms-rtl.webp new file mode 100644 index 0000000000000000000000000000000000000000..506c20f4cf6200c1a8bb0d3814573d0c59aa6b58 GIT binary patch literal 43814 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

PcclC(;Opy5 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 E0PW!iumAu6 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-freedoms.webp b/src/wp-admin/images/about-header-freedoms.webp new file mode 100644 index 0000000000000000000000000000000000000000..4740e8ab087b0f370fa3fd4dab2f792f5da355e7 GIT binary patch literal 40888 zcmd421CZ@cwkBFOPg$pI+qP}ncGW4JQ?_l}wr$(CUA5=m-S@`ah?$tz-FM!L_lwxE zf0-*|<;q;&T3=#sB}p-{+8iJtbx|P&H3be07$6`Zq`y8hkU;7nK!P#~669b&K=3f* zP0d}l#GeGf3=5nq3>~-^X}-mUDr1$!U^oh|el$%77bmdDjKINwJO1wxz$-rB!0$8W zpD6%p)N;Om?WC(8CmmHENl&CCd7A3I?N{k&MKqaN(>{!!B;BfcS?g&{Y~ClzW!URC z8de=YI}@{rx6c;eYB9Hlla= zkCu0UsBg~2|LnsrwBzwVb^J}zA#`%v(@&Qr+cEI{dFeF<2avCQTA+IlS$OjtJWBVR z-h7O3Rq~naH2ay;b=%k|+_HK?@3}Je$P~G8VeRM2t1ssmjq&Yt>Ecy4{nEjKcWJR_ zzdcg1@TSnd?b2?~9D?hf!}t1RfNqA&=Az`|;l|3HbNL3_(|LPP{FtReU-0oZbi@_ z-Isf)Rx(rTc@ksmd6soj>7iBVkbm7dV|1k@<%Qd#8Jdw+Oj31Wmq%JvN~vKjDR4FL zRXj?$1HQ{p9<-Go0sxP0<886de=?;xF<#~E$+KZOQ>^G@rcSalwHG%TD%u=a*(Y7- zbf%8-k0E&3E7~*`HwjL>I5E8J)SSCZ+h&~`(jT~4F<`TuSyv|77+7e{ZHm*f9(Lp>Vw~)IfA7lqle}d@Y#Qr(K|3q+;wZC>vq#x^=obHbVc;t( zojNQ1=4Mfck#!{_o&IkM7+Fu;t*TwDx>KAJGI5SJ^`_f0H}=|~XNvw-A~_M7j&ic2 zKJnsd>GOM)N9xFg{VZwGod*9-*ce*O1phuTr#tyQjmC)~I^|i~M&U%an0e4fVKps0 zU6c-+;w(CymhR4p;Y4?&Gs>Cb9B`sDU6kp}nc_ruo3riqAK!AECx0)?ak7v7HJ+=( z%!`VfoOHm`lD_;@e$9PZ-+u(dKNYI~)sz35@b-fT`YVGF7-awf%|3!;0aMLFYJl)D zVn&D%5#|vQ%yaY#KtNmCz0DwboB1*($P#|qnb>4YdgjjdjM!9pHv(ikLKaFe-eE@p zC4STIpru~f2m00k!TmmyaczBI)@Ifc$@cHHG{n!Gp~vfso;4HCTtL9F`5>a@cB?feFw5PTwg-3!fv!|ZV>Q@(lF2MTPd!2X@6tL5* zev1hBGWsq%6u!=~_}==I2k`HFgaDQT0VTKepX@JDcz}cLnkW3Hckn|*fZRxQ&Llll zC+s)=BI4N0m+ue#7{I_K==;QS0>EzvQG|ck@9OLF75RGt0Q(}`j993k*j@fhp}}z7 zDnpfzLbLXYRkl0_m1fl~y?9AJ9NmUnR@tg#2$l`6xU5NeKPUrXL1n${PG~B`vfNhX zHP39Iaf$8!-wLcQ!1SM*3k@^X>Y^kDII4`X_M0ND#IS~}F&875!rRkPKJUrwPPZ>y)FFyPP1D|J6yh5hE_OQG<>P zfQD{IOr%EW|9XycBJh~v8h#dX$=GgX?{cvB+TDKY>$>>ky#n!44S%D9^G{S~G_jN* zQWd9~xtZq;%Xl26##}y*1Zvs#)3WWMXE;R2 zwu%;S68-lCWap|z&uoWkjvva|bdVpKzRS|RATq@@YhgJupQPc}?cyuXPf<98$a7~! z8BMbxRJ+1S4us>aNJlzQPSs$X>L9ok0SKzS|1E*mqZa;lV6;^IlcVi^D&MB?20e{; zVwab>fa!UViLl53@m(z(;i;?Ygn#Ex=GcL}|ZoZfq8*Au7rKVSXJ23p{Q zmMQkMrPkc!w7h$lGwLnK0`C1@9v+`*y|emytJRk3HDDbT&l9SUNA1)>G_--icoD_b zW=#60Q!_SKvq@15r#3vEHj~mwW>s)>RT`!7wAz5U+GJwg3AJHCg_)GbLsISBQUfWC z=lH6{`C5E3&yfwwKNK{5N$6EZ)c>Bj|ML-pP_Vu89c?qy*{yrF!p4xUi1J4P=x1V{ zL|!f>QO8e~;7tRQ?U#+c8p7ho3!F9R`F{&tf5Rd;DbvH?H(w?%29r@Jh~Epq;vI7I_QZ`bSK&;v_dFqgM|Wlp0!Sf#N@@}a)i*4`{rVE}=K&T|A=G?RL=HWo7W7YT)6o1i1fGKV zv>okrBhKqyklisiqkDQ%{ph^n#d*<%`|k;^2LWmIgJei}QRu#ytPJ>ro2- z_4xj4;%1_(TWVPFjrg6C?lN<=ZVvj*6^RqL!N5#%Y&xh8S+h2$M2Ol9A;GQr(S)fW zEo{Z)vZ^OZg_m34?LiFpVPZLW<4Th&%p(*_)6{{)b? z$T-XOC`#&l0pd>XdkQt3T!SsjyFs{%ZRu!TJQ3IPz=jNU#UXKz#F(P8Y3hVD38c2N z$}hpxQ(O&LxsDFohW-~Riq#$_fc_Q~F%CCzCW3(Yz{dXiRj5kZ0`7&Bm!`jU%vgda zmqFXGoU-T1i%u%ZhFW%Fkj&*S02%=n*8j?Xp2R)o-^s537sh<{PY6B5YndpLZ;67dH4oZ{nBnZT>AQQ1 ztlfX{g&U;Fw@pj29Kb5XZySWdw)*Fhh$;j4t6{Ai*89% zTJ<0Z{W5XSS0>}mfU6ZWj6k>$#0?RF#!&}ELrYgPLBP^B&8(1FIbsYba>DUxn8sfG zTj1EQ!2etH3&98r&*nI|NAOD`vd1y7T~r;vcZrHfYiqpSR;-Kkoe^m4z`Z3g#*ppx z1YM?ZUSsD3{1-zHBO&!@)kr%;1Ab$N{KG=o@f4GqUbk=fO;%gREA$27_BaP#wDn(5 zZlh;tIxj$`49uSGqI&4YfoFqqhy9j?LgOp*Rg&qUB-2k!pdXh^IU^92{t%WSdana2evP% zzp2Ym$AU69Q_zwu()7dm0`+J2%57nL?cvQGZ00t&JP4AN z9!$J5^aGHanw1k+E*xRN@I?O|6097wE3Q_@N6`8WiKsK`O_7E@q{L2}i@BHHK88j> z!@H)m0eua{af;-*qK2^w9CZa|r;ZS|p9zCWI|3poIUU?;Y%A#1blQOrFcham+kkS$ zI9pO?3b<$5yN$EWC(kDHw)ahG@-@N89~Q11*44oLH|O+!@dDv)pj`y&1N3Se)*cQ3 zzt`8PS%L{?yCFWDIK3&xpfs?^@?^S3Vgy(U=R5%jW?#f^^Z|aBPT!ul3!d_hF6Q|Jj5Tng_H-mwo(=<&_Tf&JGNn`|*lQZ|abn@b zYJzP>fN2%)KYMJzM>Hb=DAaBK`Ncn#O_0|D~y z*M{4?BFz7H7O~atnBzamLuM&K6%1KF>gNx;-ZfrY zR3C6o`t@Gmj@=)LpM`oM1;E2Mkyl#KSD7b(YqdB;Tcn|uRLb(**g-Q@mgZ($wAlq3 zYm13YKrLOx9p0oT?ECoZbSTt$<5M^4%UE*ud(@3^9Ifl+$Nr7T{a;Y_R}zT5HPDBO zR3R8R=!g?7Z{h{vJK{((42c_>NbotsARO^1^nN8O$ZxKX&4A_FKq$#7z(jd->;yuB!9>7+iZe!#?|%^gLmOD8 zS?c+JYcFF#g~fq|kPv5Kc;?#=Izgc=u56{A%f;K%d$q|o!!iE(lIA_gnrRtjSfZR4 zK+%WW@4hCfCO_jP5hlZ5XJFrqu#f;%zeZ4+OyUp6B(*d%?azZqkzFZK@hxM zs7f@*LT2&drlU*kZJfgV%+)D9CtHSS`o#%DT_Q4#2gMA`Y_zjdH%`RaZg|}byP%Zy z5B?n=aB5~{)H;2j1@mIAa$GTig4@%VS2w=*3pzOCYrQ(rm&x8XP#k z94h|(#s@^~4Iyk8bt4BBjFvNfJsU@Pz zFtavZq>fty%Q4U`z;4FfRFCc@Q~h7vhoi_%vgOUlG;?Fhnq0XcBKgem6AeIBcoyW7 z*n6t{D1Ejrra@UtoA1%%dD0ngO;8%sp7{Mvl;7Mql~*!KkR<^z%V_N_M%cj10H@#N z0Ac?^d8$_vZ>YcgHlL&NDk`@!t{!-g9MJl+PvWwF4#4VRi4IsJhSFr8#PHe^EE_UJ zkx2^h-h^itjmPP8B%oy^3cl5mfR&NR>%{m0vhah#9(>ThaWMS z(jc}v-;QBskVU(c@w%Nwdu6iDj+cM)$2Ix=#2X>>{R$#D-jSa!9c_64POAxqo`cbX zrYv0KCr@q}|6ZotfWj1D!lhnGfH>HOmcl?j5IQ$%(4l~dG8YZCrTg!lSNv`Hq_<%F z4k21C-Z)T^xqV;YfQR?qx0h^k{)3PG+mMkq$(HW}`pS+r_98wR`zaE*Aeo}3N@z2!$Tc3)*>JYS&YbzfX+ znv#pRZ!q!`esi>lNF}&9Vtry|%Cl8$Hk%Qj3EwQ#4&s6sdh4U7r>hY6G7!)=;BLs^ zuUo(W!vjhTNcR7S9JmVbok=(M!)!15EW$p04lROdQJHvt5;*%{a}DiP-@67j|KKS& zygKmu_gZOLBvfh1os+Fk@Li`xKUf>MaL?P!g_FPDUwvA+bJwhE{;4W}k%6r{uPW2T zB@@^!@gi%j6e5(^a&K1D4+HbRXANnIdBGN4Lgdrq0l^SxfpO)m*TU+KtA5B-OCt2h z(4neNMB$tbVgZ9FR>Js{DN)BjhCByyndVrBi14lUUpBX<|7c)oZ zi?|FGN()zXD4-bT@>>6F`BucRxTLbsF>%aK53Q|)wb|23$}YHC9&hRGOtrU}9Kl?P z*66awTx|Xz4Z^Ij0}!f?A^j2#dUtAYSKv(onS;e|P<3_j0GV|jXgD(%41xtVOw5#v z#is#+0xX`!*XUBtkxg${B7BqK(RYZrmw(d$t2d;TfaYsf2g>g_p#eByPM z=HqqR&7nMjh@}_tX|M?wW~tQyU#?9O{g^N*yTfmzoijJGS1&1bqml_k(YxGcgWSlK zgM@_(^Z1rtrX0noXNF9v3T?YPYQhE&Wz;liM-CtB=CrszTUtvd6&GvN89@EVG(tTZ z7BoE!ST}RKgXt+GBnVH%YPYx4U1~f7J zm^yEyUoH##Lv&Ex*9!e;LFFV^&M=eV){j!JbvBOy`itJtj0fwg<}zop=k(c^4Gyc6 zkd-^pXkS`iWb-$jloM<0@FNQ~~P@Us%?Yi6F1f@Cy<{lq-{ZZ2_sp0d* zA$Y=dDzK&D%0JA%K(P|ie!FvM#{<3D%2IdW|B59wVscHFv#957dl@mm`5_1jx<`R> zZEr#_b+^;;6Gp%uhigpHv!||v@MXUDAJa-Y-SK%=&%k7><(?Y7Z)@63h1m%; zvOW~T1EBv)F4LDL3^cxnB^Jp zos8tfKF!}rhR_86x-o4~!LrMVB7o5l%HFeidE*_X$=wNz5ZmMh?;L%Jq?lmN!{q~S zlFE8?4p%(-<4vDB?WQrl=EDA^WY?Lu=@ntE6FagLo8GfUkVdgEUV@GfThkO5q#z9z z2m92*9EeMI56pBDequ@BM8Q>$S3$lgw+Yqe{oA2jW1(m&8)DiYr;fR~mYB1V5RvO3 zCC59vQ!qiM5ZJ{!B5O@oaVy_MQ&rdyVx!2JVfiBU3FG>h9~l6v3}(vYdFEo?t3G20 zNe!L+d7w`tMy$Iww6Zvmi)n)x{v~B7w;tu$OCy2L`RhcmZJR}x*6{1wAl74l{!P*( z28bdmc$OJXFE?7Vs*ps;3iMSpDGI|sPf+hC95MHSN#!q1<40kunb90wgMat{!hUqp zo;61#C=ZRTN8vtRTvwj_#XWq9QXE&Il5SO68$xa~m zMl0a4Fc))1qXQ)ZZsOQ+E=vB>#+C-|=qfx&qV~@%pkN0mGJ$~NrG@$clpCr=!xdwj zcnRV<5H+mOxqLw+>QT-n8IhwyTh3ru2oW+^R7U>8OnM|Rvs44Y8jQ zwTbf9I2R-Xt4az3LIZ_0&>vsZt$|E;je;PXv+>&RpNZX4#0g(GY>G@mfUz=num!?} z)@0RB#&7I;63A(}gK#=1lCDcdTGjlL}F# z>+t+Eb&XEZE&FIQV6xI$?El$^@}N^OWQbh_^?MAls)MpMLEdlskcW*>l%z+9qa+S| z^1W@brBgjr?ulS0wgK0#zyrtRm_fINUm;hHwXOcpNMOZQu0U&?2+1FO2I*<+4J+gH z0&8OdZzn@`cgx2)ldKHQhV&qVmp1{J6GkFB^ly18(_ zUl-T;32q{M3srU13P%dy=wu7xA)0+D*00T{?^=m>K}OXZU#*-3L)H zlfguS`d{j{sCglwOOu!_TDd@M9BnV;@6*{931P$SeTPO0(m;;5kxn9J}9p4Lg;8E~$>n?K1PMh9tnTHA^g-F$X;xdMR)bEu%Yq1JpmT{q zL~q3=o(`(_9f2Il$A8oRX49|1b4LjU4dYWm{)Jrs<#ExPDS#_^A5Za=yAbFGtL=15 z`HG?WEqw6FV?Y#00MD{35MMst%=knGcZp5rh0{XTNdac}O1usW9$jZ z$g?B_u)JUmIgXh8eH~wukzEJ!mR8h3$sQ)y^*wvqLG&(7UBnI=qA8Rf$X~l)YiqPo zx4790xF0c~LLPn3tt2w1KWPW~Y8h*7NR$1{k(-kkuoum%;3gPNQIawkud3WMN$YXq zJHKFn`Ixi2SHUF-B|aGyM7zR3!`t%1_|rXsYz^D$=RYzl6nE{Z%r)L@1S@9RO!^Ml zV4=cpqexCWCzB0zi{e*R7?(3jJEiQ1kiyg%}l(A3D8_{4a?V=`Ez!jsE}*uMMjqCR&iR31P0 zOFR|NJpb$jt~s)XuXZ1O*`JCzJDI+}g12c;_%Q1&kt)u`Hz8j0L=Hv^$8JfhOPCOZ zcO;E?cQ38k^LqDd41OXX#=C|!!NpR|AF^={5^`lyZlK8xZYz+quO|-4*Rayurx5P2UcMi0EN zgc5t@Q!8w6GIVaDHmy4A&3_KO2=sSc!xjCQPAlCltfW!Vg4UGqjK5y55ojZ;oKrw_<*!p+QS^U_{eR)D#@b7c>iTf7OLj97@M<@S z?<#-rw8pDo?lMa@1%Kov7$X00aBoG9@vN%K5tIMB8&}sLgyk&W{=N5fe=V$rxtKF) zna3z%jM&9o>fV4z&a)og&*piXrS)OU{NNHVY+!a3z4c-6T&m^gZ_94=ks$W?{%Xmk z0nGWaf_fy~DVMAzd!w7P91{@QBz$W@Fos8@4XGze$Ed{*x?4WJjcf0?N5ME)m?9@J z7R-Qq2#A0z|N{LzYKFNW55`II^6PO zC8vpAZje9Ox_yo3_)n#3G7!gd$*b!mrl=u-MWgE@xDfYmzcsV z5?C+hX1!b==h%vHL6i5;C@M$2ClzVY!eb=WkG8>i#zk!-#4cIpiMyYzF?KepI$ykB zg>Z#-$e#?~*tFNMTP%DsdX~T~r-%}>LTqQq&;*@l4z@jNIQo%sBcVQ~U#IV0g@b-Iz8_y&ubrsYMR9pqn=Mxr;kwMrN&D6$n1 zaHzmA)$x)!D1&yMH7HIX(j(q5FuoyQvz@>w!k+H%+S~?GetO2~RFbx*fxp4_XwNoK zQGec``V+7~bI)+y;{W#)1QCjv)fy_yP*)rayZ8vr>>j6%wL{<=r3tBpb}SJ6au zXo9G(-qu)cWouB~0vF?37G)ExDkpVg9=Yrr?1U-cm!JL#xcd>El>zArbJ^fui$Mu* zhd(-PM5QS;Tp7#I#$QI0yi$0kpdTVY+= zBvC_L()A>WM^jJgV-6RVg}h9yYC0Zl6SFt@wP4GhG;h9AvMGn{!%321`P~cB^w56oap9vbBlc`alJk4jmTyP_Dn?z)%isAvNw0b-S9j6g z6~~t7L|tiQ&``jcNPD%+?pXRwF*mFmQN`%Ox`PfK%0~e!^;F03C}rfK2I7~OT+Wj< zCqv>w`lrPe>kdIhplz3N@`p(D;|2x6Yd4W-7?1b0CI5joU2v_8@zZ`0ktc>|Rf3&R zB(S(lXDMvwYYJNv*UUk|ucDhu7)^|cXR8PHVz{Q=0#*m|PruEJlFP)9RiM>-h-T|b z28>Nl>E1eHm4a}o8s*YyyDP;#{6|cejkU)! z*kxRIQS(h;C1gL7+vJHk9N4~*#gz*z`j~4fsqlpaO&@S07VxK4F4h`*B@Ij$Y+s}hbX zZV}ULX0Jrd3Y+V;NV6~?f?Gqwv`HM~mexX3u@@t*_{$!Fa$en<_4t3gO+p%?$3toE z_fL0%ZVkngQ*?dV6w`a2Z3DqyAi zqYdz(x@(%#W7VH_Y@`v)g3u5v_~Z6Lyw{aVzw**4F>S{1aDL(g za=qacgJK6j2@scD_As&b>Z>30eU^N+^8%omd3F?ImQ9)w8tbh1?@I|_( zl~K4K8xs_9E`ZO^8|B26$x^X&G@&P}W~+|*DQY=ea)?80pT}JLkB0ZLRT*t5u=Mzo z^s}#OGhszCr=f~Lm>%Hh3cLxd;-@J0b!Zk-ho5H-;`yt-#kZojNf3l$fqlWNi_Y`K z9XzqS;2$+MaN@&O_$~)U5FVyN%7`3*S;ba%&PUa)k385E5zdzP88%stpv9r&M zoh`-%Hld;?2@{5|Vl)U-HGmm*pJy})Ei5>LfC+K)IXhxfW@&ybWbSON3B1 zrfcx3gKgk1lu@vo+{-c@nm{*>&7RP&2lL$gbB~iuy&DZ8#Lpf5+jy!#t0e_;fsM}W zG_~~#LSZH00h382dav-;=(Py7&`{W)SRswXv$;LG(Z*93B#a;i#Oymipk45XuujBs zewz^c zEVmG}Vwpd!d%!57;eUrI5EP@&HPb!kvf;}O5i6eKTe%CZf=P%y6k>wu6W+!? zv`Kq8H6iq}KXEi?{z_m9?h;T0*d-7dbCGpxG(0TuOBSfHb$YCU8Z{fqjXWo)Zr%<( zYwF+$i(E>6q}rBRWZYYYc9jyamV0s-M)iC2XY(jhzX}XZODlRDh%NZ&$4ImBxB5-< ziIv&54~g-JM99Kt?}F8pwdYzgpMJr{8f3?k{2m{Wulz0cVRWy(hOMIA6_S&hTJ~H}!S^I7$ zVLd4nGT_y~X{hZkyqtHSWn0kFfRL#3kezR#T3PB5r}pLN-0YtD&VXYkmntti2}$|X zm>ZNL@o8UDIYL0yt-+_(K)v>ryke%6{Qe~DMP3dx%PlHh zdX>uDX~?o6ddfTey5wxy(P%M#e~6)}TPK2x8wR77aweB;&I^Hr18lMThP$YdBtxw$ zUr&w058eQNA_0m_t39!L@+L0PjsE~EgkH3>{JdG}2eGhPiKuq4bMIqya9|%0Z?-Uy z%r{F3Q0Dd)jdxnA4P_v5fk7q7ZE#@MD}E@4bRdAasp?o1;gW8J+jt&QakH_au(rF( zE{%e$vwJ(#1g96lL&a+m2u+Evl*=+bnhlcsR^hs>1wsZbU|x>nrFQ>M1QWj zYUr}{8?(LPN|P(&ut}>2BZibr{bAlQ!>XcX<|VQ)C;_Kba_yA_7A!UT;{|o)7!Ll| z6Ckp-=7~l#rk1CK3VVf4Lt>2gL*g%?Bx-=3C%-8#ElWmnT_>wfeefsusB~=ecMXE- z2e{GBgrXsJX`*;UIyki{T~Cj(7NGR3b(cR9rKqG;+ZEZro3~sp8~)Lt~dvZYIy-K_>b)q zG8E~YK@AjqmW?D>?rvCD*4fyXVn_i6k*|Ad`{Pv1lD%BKjqZ_k(IqIL+Xu;R&xs;g z6falHRK#nMqgt=dWzSt`ObKz%Laur#)bZo9*%TKR=c{NbA6Kf~xAb1g8O`Z+A%m#a z9<;*C@NTLRQ_4iK8gd|#`Qa}MuwM;w@bM(&dbE1^w{RJn*@4Ol~QmRiHZVSR>v~{H1DPfux6cLRM>kb{r3-96t z>XX#o)S4&uqyE_3TwgvPG>&AZK1)V+^b<68TN8^sFABR~?(`ytzr>w|lvjDF8#^(` z49X@`-liq&;k0p&zLWsH!a{{4qZ$Ey2@xF)g$Pqu7fgFihC0cTsk9Oj12@Ze{8P8% z>-+fLeN7F{a;OPv3XWhTU{^%4Szsr6)cs?McL&xm0=R*~)4fY1_oR+wefZh?{)U#g zjA{2`hkF843(L$1!;SZi1lue>-hFT#tqAsKPr?&idf$f*-|3L&ToGgO=ks8JmSK>m z^fALXu~fZf64a9+>mAUwwt=l(3s;;+HiXH*^MIrf6-C;SeD4QT6!JHJ)}IGD)Ok-) zH!;+Yf_if1{?0v|BnS;=!>2#2d46=~AOrSXc5BD04RgQvzMoDD+(JlS<@x0{cQ{(U zu8FpdzckRDxYI@^=eCeNqx){n_8a&IbEuOe;PyS#M%+l5L|+n{H-0dM_S9c^nis22 z19T-esl-V=-uumj=7$-qU>%A3ABQkq=w>#ivE4RHZdoT4#T4!vIk+Kz1CsttzZ_3e2K_yOw$!xq6;IpC*;=g zMF7+~-%p727IU6)VuJ(PN-1NXlF=g`k|_!NpNYNdN_?pFvqg^GuQr4z!5bDYnPe|{ zb+Ncv`m>S4KThS!xdk|RTXT2RNX6dksMwdn6uT>>qMnRY>??j0_-G{IoDY`%`@)0n zfGTA}k&X4q&jJI9&soav%V!1siX|3ZXv&hGDR-sRdIsRg+%yoi2{~7TLN=!kSNWIf z`(X^iM;Tv-0$~=hUX`&+b@k$!%1Oglb|%I8<48!iBL!!58(Rsg6c&WWUuabB;%PK@ zdHSXJAghEyx%%;*mYo!;54N_kQgE;6?hf&S&qvPZ+1e7%Nx3$-~TJVT4)1 z%?W7&dPF~M^wJP{8~~D&o4ipjDTnL@6A~%=wASEF)YAIOL{~Bv$3^r%X{d>RU)%LN zsEzoi2xxBEe}k+kV~v_sJ!;ViPfmgI0$b_v-k65lzvxKO1&1JgT^FG)5frWJCQf7` zK&B#kXA*rQzTiD`baAmwG#?>7HV!K&{dyfR=VUF0e1rN7uDu&%7=@X#u*DpyTbiF=2FbhSTf&UC)zlrzi)y(;PXE4T+qtb@fJ@bv4iY_#;<+!unEQq zWnt8*@C{&jN0s9BhL@)cV|GF+KBAK3Fcqw<+TT?Xp`ilmj%Hll`?edMOpGaEE@b`=f3qlS6a!K+`ZrclQ zcb4mtn=CvsG^9Ud734O#JAHoIZoeUe)3!ILWc|4B@l_+I1)iRJZLd*M7nx>_>viUu zL5|)^>_m#>Ks)ThGO?p(KG|%2{q8y)eOtIRIJl_?UcS$7@i!b%3CDZs&NI~FVj>uP z(6XWGboldP*2mr*|I*v1ls^!)2;rdRu~rKaqUIa9UaN+Ts4At*sWU&=CUtRepEwf! zE9#l|xY|0Wp)*s8p)C|MkwELk7kQxq(Pt3%{yse1xoR|tF=q67N zK*RHaW2ddOm`djLxC%<`oAD`QU|>znjeK|(MCsdvecOYC;g9a$-i89(7Ech;-h<7X&H6 z2;@lIh&eU4CpHTc8BZ#xTSI3LzWwIvl?|lS#wprfpkIEK;q3&sk{PlU z8SZ$YOIB|ry5SZUZ;d+&VdG#QicaQI-_l?~KP9;xW^GyO;>I1Q6fJGhsk}~FIQ~1s zsx;E%GzqRJnaX>XZ-X_0@FQ}YxS^gL2x}GW&907YAG@mp_NC)ddPz=?{9V?@hl}?? z{`Dx^9+#!q$YsiA%>Vi6&~`1Ls%?UfT0I zsScYc`%CNDo=4gW8rPLb)s0cbu*9-Dcql%O8uVaQANa;tO`El!?(6L1A_&phb+f^r zUOW)>e(URz%HTK_L|-+ra-K~TJ&<42Sv3;Iurw~BdMBYdbkl56@SAD>O)F5v%|diBu9wt6c~16ft+|K`cXU})g-AdXD~285xW zIYiIk$Rs2guzdJK!P}t_k(BKUC7W{Q4slLzl$803XNd8JMUC#+PsZzF+Fes3wzXp} zen34`qjMd!&tG1m$`Au&n$5<aNaY1npNs@K zOIT=Owow?~!R1Z#hKL(6LLgHe7O&;ZJu0KZDrf%RX~|C%D!{)`yi55`5s_DKYliA8 zd)cTwU6BJP2_oHu`0M(dftRbs?o;afM180)Wh(KTDH;n@CnJ(H!5ejPg;KFtAdk^H z;ZR!NYlq)as7Qc^uv9GPLrcGZ_EWCtqoEnfgqfAMJM=Ui>0j$pikHfQdjn5j7kLes zo#*ab9y6GOMPm>OTB=NxQcA#^dn@cZm}uZQ5%l#{hmS?#swkSaEigp zT3}0N^4UtS8=UX4lkFrf>mF3H18>0^Cjh?ZC)bR6#%T!r600XowC%uzGU?WiihD~8 z#bN+c^CfVaPN>L1HI=@5!Naft)h4r%<4g~~%?U9p7)67{vXVK-E<7W2D4f~EIgDV- z@9Sc0{K!RV2hi;Qoi@No$r?_l?$1bCl2i)w0cS+9RoXe+F7MrGt+@{oMctW`S0Fxz z6Xz2mi@~FxC{9(U?Zj6ksKj#giLWSe98r$PhU82-Fg@bJCA2XS&YJpJt92^48aL*2 z#g?(W{J}~L5`L|hf*j>&vrlLsnAK^k_r2*@EkuCWGhNeYBJPj!TZXeNZ<%AsoTva4 zjwkn}2(0W@9!QF31qOzwyEm<9`i*K#Gy%Lnpgn|N>;Gi`8Vc&KhH9VuFW&zCh z372$nr{|)=hXQAOxu5sa05d;Xll0BkBYVTHw~4LuC1kLxnAC0im6mHP3Vbns8yEnMtEU{T?y8~Fe{3b{IxZkn`hyZ9qrC_Uq%z%_R)DinW;XObxjjsFf>Az{*)@Z zjGV{mD6`AI2rkqu2Ijd^DG-p4!*nkvmM?Cuo4E^1+kAplcEs7Y8XYYoWkC(&=8hSg zn8Eux~OrH$s>Wo8pv?5PY@Z4@eat^dx_ub|7(LxY8B@%LYYltzpF8#!9$*4>AQGIS#fNa%dWif;t7|+&@WV ze1S{YVKfBEFmKDew1GtiIV~N>GyK)SaR;cC>U|NH7om)F?%<%Z(GbehZ0SwU){>pY67BUj&>Y?qdcw% zct2p40rPSHyxo)W313Otvzxrs>>jD3gP;}Y<$G1<<^(Zqo#~{u^kGDqcF9Vrrc{@g z{hC{m9AKoAWAmJzn;~UInUYKe|Mu=|Qagq>T)ktE11-CMTN5aRHqVd2pQ`dZT^`60 zJABLgEMf9~bTQsiOUfW^{kC?=3G^);yAsYWT?D&BTWVsXYAQ$Us$zvokgUmHq zB{82QA0;PiEB+&5$+twdMYg93VvwWg`QsYwknNiE?fVHwddZY*6JpQh2jRH86d==^ z2FCplTdScu)e(y3!$Irb%je&hJ8-(bA@k^s`@CaRuZ1vxJb^XLOR2SZ^yR_<(5=i; zGFM_Iqnm~^ zb583H@kN)}Bw8wJQ*B*o>}l=;CyqJJtP!;9fq4`ewemiJ0w-&Q=TX(**X-}x%TDSB zWSbMK$L3lQjSZ>rU@$->Nsc;G9#M7>ODtI`mps{r^PdTg801t&zqB~Vk2>CND)$o$ zHt=eA!48MZzu)Jb;~;ZvgogPLjffVa)i+&jplH+{g0^_~99^JQv&KbQ3fY+7QVPZ7 zW=vt~>imC}Y?+d=iDfXf8N##mMZL``~W5;l4h( zGv>`-$~8oBpuV{Gr913ZXwvS&5IqWxw*O47)m;ef|%@A$0gqIvM9dHX+)X{F|HI_ZOF+ymZ|Lx zIL9|-o;E(i>ZYJZyAy?f#JFYDENGnHiRwP>&L8@YLLWK#zW0gr3GFEh{{ zST8i|OyKL?tPtsf8w7-UM7YcbjU3#u@A|N0tpRB@L?N|xlfY4KD6a z%9>>uZ6s3>Ixr*D9)bwlx#_NX_a65CWhrZXp9Xkr?iehkvfuGDuVmg?C%`<^T?1^>%+4tri&AvaGA{NX7 z=4?jLAX->3P>})c1skKmVh7~(J3}?HBDN>~c3mT}Vj)Xgzr}(z4&=vGQrCWhw|1$N z6Xl~dSKHLo4NJNP*J05LcfilPUuvXerx_@5cK!L~C8&7m&cZ#?@q%xidB#@C$Wx#` zRi2N;o>OWa0UC*y@79AO!t~$PvNOj+AovTb|FlzsgZy4L^dXLuX*C6(6!Tr{`Gc&GEQZ+FaaM0 zp%YCpDy3IvU}8RT*~~^v&{}F&b8>o$@UL#lRd!L3i3eDz$u^T35gyZsIqGzLyMa+s zj)fFfURGI4L=TETv%5;xW3fC9&jtce_xu*ke;Qt%{owt6eS>Nc)@Kro>)ar$x3{{$ zL;j~h@MB`Gb488pN1I3g{!`RVX^zFU(}v0>0TaZ@awGd7!a!Cfjy~V?QNs<2+1t55;o-;!-fYZBAN@VE-uILKpuVvIr{L%9=DJxSjy zd{)1c!Fr{l5V+M3_CaA(h+mFOA&0VtsF&Cw&N*Q^B41kXn?bWH*py?3<)WcjOeDd`W)<+w zE_g=Xh35$|)!SRyTBnxVeIo+~LB;R{Dk>TjBFe;M2**irP(TdZN9#P_kx-%l`&QhS zv*ygzMJO6mW~RjhRZ3c;r=NUcMyl3=RI)+G6Suy2-o_S@_sI-%`jE=2C`+mN zWSKB6zpsO27jH-)Zq`{YB&FiJp!CH@Ao_<#m|y~XfQs0!9r)OK{G|e9tu=Wqid4pSErfNo+zB6D+u9*eLE0ge&UTZ& zOc4SN;EjtEI*%K+lVWmTfQ zR%fj6ebQId*SZ(Nc2wvI_HxR_=>C>1mxTPW1gpRhmyOW#UnO=q+@FD z)m4C}SGYeqA>fQ8%18G@?#ZT6Y*fXNV z=D`kbPu>va2t|8&4EE+cYOz0bYWFT^Sr}s5d5``cqj0?H8-F1sv3A;~o8NOI;*?j7 zEmCt9rYLBPrPbh6i+@s{)j^4c3|+=Qe1MK!3l82D4bi&Ym`Ut&vvY=mQ=%mNf4uYm z-vx2}jom4K33I{P%2}_c)istH**65>(Wv|drufqnARs`Hl6?Z89LdSwR^9tNm7Mg? z57p|J6bnM$-CQ+}7Ccj)8x@@YF3DyrLq?(M$6}t{-^5pW5HJiN z7BN+UsAW%XDDAD#N`)|8K*Q%HP0m5ek`zY#kS&7TJeu~I(WaXnRmPZvB-A!@Oo$1C z$CYOLvf904;Da9y+Z))w_jc2D?O9`3%jDlT0J<`hYYuvD;&d8?5aN}0J@mM|8Gr`C z!m&t)u(-QHlfFJk7-)&O?H>GDU^-Fp_B6x}k)Xj2ae>NresI#E^XO{*pztSGa*Wsf z&a!oo<`0lv{*BSX-gOcV7A8qP@(DU{ix}-iZ$fxpeZw1d@NkMJ@FNb)V%-G>_8MO} z?~mPEOztM({HY^J7Qp1&^QVanDpW~ab6h-0DdbO@V={AIGJxh1)+t{A-|E$yL0l=$ z=kFp;8rA8~_v53k1ICZ2ihxfF$pTeD-5}(8Ik=b|a{#>(=ycwk5fcI^_uIYg*!k@BA$j{~mz{^!SJX|FQ=01w$SsR8IY5QU#ZRbvnAaowf z{))+(g9@-hm=!dN9$U`9XxOEG#-bxNK163%!P~DhiX%qM*XU`oCN@{oV9>yTu~NpyuSB~cBZl5lTzmU|msGR!ZPP7c0K2J4b5;?f-qL}}i1VrGSW8OU z7pX7WG1W1PL)2KEgpm)8$jG{bYn(PW!1j$h(XItVWU)I7U#eM}HfsQw4CInTRF z)Jai&l#oR^hQ^)b^o%8AMy*Frmt1q~i@ z>jT4vfK3GGMQ=G&TKu(M-c<=r=P~aV{gvAk7|U~towx2Jk1locMV(YNTDmPwuIAW^ z_ht`2HCRVbtZc`IgVsR#W6i4!nXJxl+1O-0TY~9U zrJ`Whd72u_*2K%V6bR)q_;+y~mmx6%b+G`obDNTR2!B7iIin?{M`5G0T5e$#U>-X< zJv-fAt=XD5Egf_IEG&=lK?p7!zVU?LEert`d@wvh z8oqr)X?FagAiHa0ZeRas-7tUhF-`KjQNv);1 zDNPJ;HOcPpyGb|cV{~ka)L&51Itr;VbGPcsGzhITd=4VFI_Ui@c{Y|CDbor(iSWq* z0{?xN(tZvrH(l$utMK z=y|;oUv-k46LpY08W!8gQ1XnN1)it$Jo;#eD;vN-p+H^qDQQ=9g~Zp%l#aZ?ftje6 zF!&VVxdA0kP{@&;F}P|7(It(S?x+V=yWcXvA4#xRnr<0{2S+86x(~1^8|_mTO$F=j zf3QsE>*Du7CQ+b85nbqCtg%jZSr)AO`k}AkwD?()&>v&$ZWi}YNTsB_DXEmD84=ZE zIPV**u10zIfsx_p{wTz`_o6bM%?oUxEc=(4zbLJ2RfgOw(u(+}1`G_H$R&$BA-Fo| ze4YkJ8cjrvC)`fMuwS1F_Zv%QuPCPlmf4s{5@PIqY`WFkFX7h}by}s0j5Q z|9xEvNeSU@76~J5v8u~6cJCRA&sPvAzL%pMM*I0<#fAu}ijshPO5EO&!ddD+9(4`P zWT&H`Kc6MI0mn~&vT^I)EzH4pzjR+YqfpsFIV}B*ON22QM~(C?0uop^PSTN>FKV+$u{sUc_A@lnd{HP^X6YJa#NXba}&RW-%Z6K7|A^v(S!5338j< zkh?H4U0{r7GyGQnhQ({eX{G(8W0e4BGYXc-aN?88zVw z@--p|)zWTFh!77F~woKeBHYsCnS~)2q1)Lm`yu}ZOHr8Z~2?Txx zJZRtCpCjirI^$O+YW(!6PJ%r7y6lp+AY*{doSbDvFs>MaT}9u&k8kZG9+PmG)B@4} z349(nV_tW~HQF{rRWD)I`gkiCSSdyRefU9{T(XqH_6|?r%pUE|2PD{rn+S=9N3Tj8 zU$4U~4Fj8fX^mA;%`f9+TE9x6+PETnw9T+H+)~&;&8#G_yhD z-l7Yw9;$}6pKcvDMasBQTqv$j=N7?@hVEhoYw!w8ky$XtRAmdNwGt2uD#JG%iVUoD zE&UH;skiUKL)dJ>=MuEGMg;H59#+!B<1hje{tY@I2|qeXWS<3Dxp>hENCKl6rk`Dfx4b4r*lRmHCcw- z>N?YiM9Wj7qjV=^%cUhl>X*4Ml0*b8QwfVDx3>Pdw!Xt zhN@lRrA(Hi@tD^4P+khr8}QBQ%$#7n?q3ahy$ki$p2&Dd4S0B>kFcMNPD0`#Hc5|g z2q<^dP}>i?2gB2BQ5MW@6ph6%4FP1S@tgEkluk#W@AMKN^O{Y!xsUb1z0L%*$Lkay z@WfD>V#{FBhzb4{dr~@bKx|1QEk82x1;4Ca{Rmq11zCOM+@di&JC~>P)FlEI+b_d< zSI(Rh{DsR` z$sy=mq!a(i2Z@(9_Ybg zR6T6_7JfD~Ar?i>n-tBE@qv;BQnDB(Pu)JXBKAR&bGR`45*K^jcJ#o)f^}??eheHo z1?~b2O4A;GB$#K*n*=etd?NgxuH%`ix;3iHJ4oZfzSOAIS)FUPF+C!I>k`X}&iY9x zBIymzwweq`6juG^C>XE2kmcs+Szzi=+n?~?LHTrJKbt(tH)F^dmDtHk5?18a-4-kL z4%nt|O?4qG)!i5~n6Gc2hzxU%JPD%WEj%lPS~dCN zXSz`+gtg|!d&lJ;28yg!(B&{l&#Z(Ke*b=)jobebY@dSt%icdTldb|a77+My&L9}*|J_x8p%k++=kgLUFkGo^%ZGGc_1i#y&WydKdXPgHO zkm^d?Rv>&EGg#VCnhMdISM~3Hn;NQ_^|%d8V6Hl+_RW4sz(!^9fEt0 z&{h7qam$NsC}C+}-OpELx)BamTjbo^P}$aASOYiyCJv#{k8Y62SQ@K`7^`LiXV%>x zUJ_HX!UMu~m5jrxl<5xgW(;Pa^Jl}1nl%RcML;FTx9AeIcl;K6yo64PMWg12q41|paQ$D=w&z$;1_7B!c0!hO#AQAwI$o?DGvRKCKN0#DKXgkBIuNcyz zIa33CC(U}mTmzQ;@Y3aZ$@NF4o;mENS;cNZV+Bw%pJ&JzK5HGAH_)pY``ZVmG(_LX zu;<_rsm44O`laq$7&15>Vy$L2b}AEGkOoc_0kXMTuzuR9TrP)!9dcecvB3Tw(tG%2 z_te3LY-Nk@I*-wl?PjDSYFrNcGEJTQq9WQkYnryys{Hv1cj&}Q(PqY$c~zoD z{&;vRB;>&OJL~VF%A_e*ND72g)DW13-|U6%)yKK*m}JGPE`?H-d=%iAmK!K6iJwZ9l;@k&f2L@Xwi#>oB0*`((5oMM@o zE{rNo?{{IEqMeuMbG`_kKpP&FzSJ&jpbJ7eOw!ehX0%%_CvlUHa4}3}xp;51trNS} z28)1*bo1un(tU=^1G8_f^oC6cIG zjPr5O?dMiMV(5MmKWa{44cg`)9|FDgE8@upWZe6KppMNs+n=HTTJKWC=SZ5I92N^IF4BOgR>=2Ax zsNBaZS17bSIi?g<5aG?D{W?ukujVBtep%?Qj$MCz?>7JBM` z!B5LhC)X#Bi&VVkwx(f1Li(PT6rDTRug9RrnAxo-W!ws(D>=+FZg|rp1!NV!hLb=w z8?u-W&C|94#vtwKq46D#S0eZN7g%Ye8PB~s(OW=|>fk%a^y49cf@d=FS05S@1xCzR z9*&MYd8=r!!2mrz~~q_|a_A%u$Sh%dMn@Co+>*=dWQ_!;k>f@m9O; zA7OuTh_cMiRPP^&)ALy|cr!1n@V!bw$3-?_7?$k@5fTwOT!ElmC=hxHQo4k|cYjZU zx2J=pQR{FIT=yfXe_}c68nSHwI)__a_A#>IP5q~bKYP@#_h~J7&unnykE#89^o00# zn`oAtbzdQ=hddtA#Vd_bgj+hv{l#j%_imKT#m++J?(sTkkW+5*UDQb8qE>PSN&8xW zOvq?H1MsC!eLZXY1Iq92t2I^LMSOZr5F#w?Fetaq02Jv3| z>-`{i$1+~YQwme})JsMFz&wRQF0=!HRVq5@ApjWic>U;`*6+2!ivCs@nti|vDe}xi zLrJ0qE7)nAm_lrG!=AbttNz+0FXlgyVs3l_^NMluD{C8u6A zZ`TmEp<^z~k64Kq5 z`jL(WpRa)k`rn=%D45_BMchlglN0mAXx;@RZmRb4IZMqz^58nUV;jU1h8#(qM)-|ho#JkNP zOL2g>J6>CFw`-WVaEOviSOkbaz)pARN0_x0w)GPcu)w1pVLMF4FgdvcnXqUYXfu_e zy#@5a;XsC9dKWTQuGJhoZEv&~one@)$OX*}f~F)5rcwLL{bTf9iv0<2DGnAz*WL*W z4;_^cG)h0NE~jI~)}~f-_(YMEl-=!dTmKt;daQ8-{Z4~NI`_=&e;O9Fb1XFpyUeiC zhh9uON77V1YPEId0RL5@mv8jK2PPb9Y z)ytO!tlT_zvc&fX!?hd=3gQTYJ-7CE&x>azR_!ONtqDEWFhykyIw4*pR(Er}#8uhf zp*uOtwAz$b;qjV?!i;?uykCa?z*Bg!Cw7)@|A4EX1nZM|3lX|E2=n$ZIRslExGuli z^e<$OJ8$Cw-?dW)g*@+R_TxR)EZ#qVq+nK(rI@)dJ}2Soosny->jZjM4Houhx-Y}3 z_Q2A>r%mvno^E`qVRXcG!p3V-$Zk6SEX@5E#?b^bj~R33JC193BmCyDn=5 zwxa?c;OflpeuY0rvNg`S(yWdFjOWtc2evHUP{%^!sIM~40BfqLE^GI@j3w#?p#0~m zlZWBd;~=qH7{IL;hW0l)7ZBPD>}5Ao2yickssXAL){nt8j~ zy|nM!=Uk%g#N)ZY*7-SBa8s0+g=f0QB!B8> zk1C9;KfMXvtJuW7Z-T@kmYKm3r>=SiI6AfThz>ni8Q9c6`JC!G9RDkB{h@k%n{_FY z)9CFA*V`xzh2~6ReYDqtn2U?Sllcn%UY;*OIgJ^@!}QtxFK~p&pJX}ms!29(%sNAT zX^jHyz!Cz#hL%2{Dp>bdR?oTYvc&mU=!o?K53nl+YU2{SB+y~*0u=R`-*}!CjrS>3 zB^ig?o8@7*rwi=L)7_YW@Q5f847$Q1qZM^TYzUQu#<)>Fn4HVV^0@0;_PpZC8^i3a z$h%}bNnum|P2Pro1f1+!?dgdOqt|%E-cH#$#5i!y6F6b?3LcUg<_B zD-@mZE_}6$4TZ&Y*%Hkk$|i%!(a6u-)02Vw9acTtT2%F@ICeY|9IG+xx482Uo*)6Y zpyeK7vuo^cHjWVrh{(zTVvVPT&etNO=?*^XIVt$~s%>yG z{~5lX=~2VBLwaKQVtg(QdpTA#dj9_$&5U45;8(+kM|EnSDR2Z2Q_|*6Z z64SuK(#P&?5ynIftbrI4>?tuPPaX@LNugZiVYYjRCR4dX@Ly;zj5se-Qx2NRk(4EG z3*FjzOeCwUrF@x9e|9XpdX;p#0@TllF2K>c`u3h(ZQ0$U5L|%zVe-*s6OGp3!gk8& zZ-spu0^D-nav$o!xd2&q_=|TobG==9hRh;+ZE3*4ze`LgKN4ouW%Ep{Z%9rmj}Nkv zz&sw$VO72Kn}XwtY_Q~Ts5Xdna0voF$!}3&3kycagwsXmPkR0x#~Z$}&wVl_KqNOm zlE^Q7#oOj%@ZCw1+V8`vUsP8}K6WG}MxzW+Bc>N+ z-8Hg=(jQ0^>hIXwAc@|;f>3>cj#?W4+G!Fl=PAO)OyOF}Z0PIQKXA_-_%t-=1{o69vBMW`QSL?U8aB;(-RfRO}4ZXGaU=uZc>#C zzmb%PYbvpl=8!wNm7}WY+*r#Oy{fz1CdCmt>4fRaL3|#~z!|Px1nv*iaXzBqB<9M= znL}JLYIs)kC00nb!%*k*n996n%L zrVCCWfwm>x;5Q5l2yRSfc|*l!%K-iVVu8!0?y;_s8hk+n=AWS7T}1)Iw7xdMl+Z;A zrO;yPCQA;PZsrrH1q&eF9T~CgFS67{zL4AhM5Sl=7?R*_J|JZ(UfsEwWRZ*1=wda^ z+sH|XXndfwydZv}7Pm&*#kjUMy4-RG7FXctf3l4h42(8`RVS*J_9cEjzdv_ zt4_FfNXmUYRu|W10_5x%l{K9F7XO8A#7k|eaHpO@HOC)?X1WoOkkZ3!AT(A#ulN>hdFwC(~9DqjSRK@gb&@+W3{c zmhteaO#Ic@)cOezzuP(k-)b&VtLmefFpYzRvN%zjO2<4Q-f(V70gwH9;umYF!5P0BiZ>;37%zZpC~P~3&Md{3as}y?%iEy3c@&{ z?*tZz9m`w{xEzi{moFkIFV1RE^9@~*^iE(#6`oYYawrbJVNem<9W|Cu^*hT9S1k3( zqkP$6u+=Q(HKtC(16R$y8umsN#z8~p42;9>6nHsz;iD^;%L1$8|%*KinW8&6Eq_V>I_aGR!on8W@+MjbXZ( z!^p3>`oqU%^3)|6)9(~OT<;=VVK%70GzswA(Y`2m1)q2w$Jt$lF>)Mgpda)VkCaH% zC8){ZIhp+nAW8!L-uMca<4D#fQn`YAwZS3{d!2q2Vl}>{8LI9hdMH$SD_EXX0u^z1>`MNiEyX3Mqnj%~Pcg2olGQ zKPC1!08CZzSYm&C^DKAKP`wmQYMDh;>Ex5ic=Dd9aaoaglTVD6sRJFk^;YpUuwYo3 zZMwql|B|i)Sz@F=_S84ERU6|!7eK68)?Xn@9+;Ats;$#`GddypY1Ica*o&uH=*3}d zi?LS|fn=s(g`=}X*~hM=22(A8?<5~CGC5b$%)iZe2u_0G_J5fm);dW+f?ZW!81--E z8;zsS%&>CrhzlanYHiXGF^FrtPMoWJuL|c@Ifn969k6+_eC1rMFckWNlqDh)d?`sl zpT_7BZ62o$g(`-nU;bQwmH+7!M@}3t;+<&#U8-vpB<~-;c`DQe$gv+tGU0V)0XMlW zDr5N`3SMK<&E6XYWPdz7H_ z8ds&1$WZ#gCm#2W76F&@>Y7T03$}05mO*r|jS2!rCB=;hPRph4?)tZJ7LggRu%T=P z$$}NMd&)2PI|SSRe_#e2_Dk0Hd!u&yH!ie&4~=>|Y*^5McMo&-H7)B@iYA%dQLkt# z({1!W(`ek|l}<_-q2DFqG%a6nTR-hkFU}Qna}k3CUR@lhktBZ_^j*W(oWpMP=JOFF z?A>7=Q5KaCk~TaSZ>oJ^v@g!Yvm5>%V-chvttG}j|NVH;gYp&T2i(1Zyup4^H=naf z@w{iJR@LLE@3t`)lc5X}kF(y&U=NY+tibtS@;-RoR-U}wH@Nm*` zG6d{Qh;N^;cR1LJuh*=!w!*m0_mQi{fK~F>H07QxB`?}oS8jNNpIcGN_aG?tV8X}Q zlUDsOZ-_|5)?L8GJY#a$FO60yPtI2i=65%vg#H9%Uv>WD!tc=U)*lunWb658l-t}> zHxt&POmgIC2cbYDcNuPYH-1ofeG`4oqPs>4-+lE46uFxFFOsqm-g70FcFFK_XY3(T zwMiXi8z83(QwfGq(2|BP)5b|)t(qwb=32s^PDBc%*7on3=mU{-lRi6@_ol|Pl98K`yvvRl zWR`eUVIkrx+h7y03O~^9OzZ|-oT!&6)D@a1@(=7{0`oQ$F9dV9JYdIV zU!c~pCgbA`=~{a55O`6uy$hmia$h9z_jRT00Idtyd~X^ z-xHj{X^mx8T>CkS4NrMlAZ`>pG0MtQHKt+75}cxz9GaN@DQcj&%tw$1p>8pwf2Ok` z8o$0$ssOA-e1Qs@{inIu^w0$DHPn3JqG9i(=o)aTS3U=>fZLYES^aB}wM0}Z9j{Bl zPeh4EzwG_IURWOa$q7r#MQ$Lv8EIwQqz3#7c=&FbW3O~&i;WBM%kH}seWezK$~A8R zjpqJBZVw?=5aB|;iF^w6dI9r5* z+i=n!>&So6b4uPPZUJ4Geck;qG@+*zRe?ss6&o3=lVgCzqte{Vl{6~Yf({I?4Mk4I zof?RTKc6pykm|E%A2s2esyX;*)+C-2@c~BM3&1%RZ9%f?p9ccN`ma-(LOsO7_&|1P`N^7x)iGt$8XAfw~Pq|2MEu@ObL@Fi5x}U|rXWg$#|E0h5$P zJzIvmLl}a)%pf;$=zKQkyWIM&fS(+ym6>nKw4;zC1*YzK1=9I=;tro*4Q||ecZHj_ z#E^gOh`lBt;4MgTng=h7B>)E@7%13HlGl&Yj~jwR|swZ zEB}gqFQ`3)Oauz>&*sTk0#h%(QouW&gE+oMBh3+vjJkYK#8I*Kifpnj$q5Fl-Z#wI zj#(x+!;Gps1ir?d;2c|$Z8HU7xQP0CT$@x5o1{bk?6mb@TD)6%_h|Wj7rG5|*oFI5 z`bR|n;N*c(g4>|~278yOiS@#LGFfqzJ$T$&_~h9-=F?Gv=$?N}DrHxB4S3D1PD7xu zDD>T;0TAD)F#Q9AF3M!F(hc__8J>hdjj-Jy3wG7vkq(lhvB;d1Rpyr6BVbN1_}q*r zFULMk{>g`+6vQ|)FD7*?jqU$`vkT;~{UD^2AejdPU=7;NXNm}i0Em*Ouk8j8BXZ@i z{~8{sW87x>KH9bq<@3&Z0V`qFw2%oS<5-(#QCj7Op0*s?jgWv+8~AJO@k6rUi8h$z#j%7mZm+~vh&W_u z@+_RAq`_NOx9CDmkHmg9=m1HEt|75QPI#e_Km;^;CW0TmClJ_{IpikI2JNbpkdb8{D|MENV&RIb2xIv{TJxw&XvVTQrMwYNhd1Y40`V=I zOr(Sfu!!5(SLQ*}1Zf;7nms~mKG^?ATSn9#%is=NiCg)Aq6BGPds^yt@l&Pj#ml#e zZG!gBT!p&IsNRSe&b7Cr@BzrbZ1e7oXy>ScFIkccK3K;4$;4%TIG-@~7 zR3%jZ9Or>hsbfEsP7++4%B7*bfvWF zb{lWh|4U|N0EnaTDc>EgsmlQoNF{7(i(VO{L6MjD43r$JzdO-A9t0N3v0M}si6`_! za^q?THY0z;m)IUsOMbn`$@4Nwak12JC;aq>Mco>alse4^{K;D_kv)t+et2!$dE^)0 zpk%-%{}e?19+*!^gCQAX$YO~znc}ans=%q< zAMWa0eni6`qgDcryh$47Gy=yBnVZ268zF_2FC+P+lF9Wuiofni8tc9Wa+mDBk<-+b ztx@*pGR~VSe^?j0kV(Dfl-R{1hZEF(kj6H>YCtl4Hk8bxoHOq@s zOGK*4%sl23&?@&||AW$@iDW4UTXAFxFI;u_62I|1Y-EURDAtvI<6sqh)Xk};IRw}= zADn<1MJ+M;XWlc(MqnQ++MPk+722iFswWbFapPHqa4f(^oerZN5Hs|PNI}ENCqiqw z!rgKn>+qFo_LUM(WYDQ-c_i)HY2!HUg{fmKf(D;oQ9s;kA}hWE->*j`u8JA2(H(8U z3Tr7CskXyhh4%~LwjwZ|7T;m<6Ywa2CSlxe&MMUk@7M?KHV`WDTrR6r_szR-a)d7%wRrxFaGtw_i&nH?o>5U@{9B(%wXwTY}3R?i-dsx~5{w zVf!{um;(;Vm&;Op-Jrq1tNv$0Omri>$6DDQ(ryn!0s8m$by#g!3K(5Tz8^=VP&E6& z6rMhP3sUx*0ZL-88uh(aw&sLNfhGQu0Q#O5z|E6(eT{Dr>p zt+1415Z|7_ESZX62L|6-It|UC{I+`(3nnR7uAlm;szMjHbJ>}xx+X}__CCsDok6ou zzO+&+#6CGwFJ78_ylu91V%XN!s<&mfdZjP0jz$E{J!Yujf@VBP7N_pmvYCG@P{?pO zRGq&xiI+QHFd8!LO)3>J~Rv2cy+J*DhCEZG?&tI5FElw$aw`?meDUQ0j#&1BJ{i zILh5n(>-#5!^(dSfkOi!r{b{ST1EOcyz#x|edTPai%L>>+p2jQQVo9v()O@pd{i+i z;Pvl`Nqfwnz<8J>R=nF*)57u9>EZ?~#ffy6_;|8;ye+TSx!lYZ?bWjHaLA^Y$>6D{ zrt{fxQSZcT0X&zHd+XUcXSu&y(dUtcS;usa`hIy+X}w(B_U- z5!hlap!HgMmhtpD(&+*%V@8Ir7#vU)rG;2kE5%Z)KHx%wLuDx78WTeQ@a^)!mSPd2 zbxSy@M{wVzCQ$OZ?xG1L1ar^U(!oGlG~A`5qf=nkS!@_-rv}>HIv;Cji=pwgIDL{Y z6FHDohw8YD8Am*8R3ny>84;pp@HLn1E~_sgxY19YEinW<_9{~>zuA@51|IPRrg3v1 zfzYLOUug-({8tvak?78IJ5F_S9@k1qB0&G`;nR5lZQ9t5pOA^B&l zpV!o><-Oepw1b@^YyaZU2GVynzXp_CI#BT?yEIAFwgJ=>p+RG-b>R5V0t6s`dg@;b zgFI?w;k&1PLfRhA``7G7)-Tzp8S_>!e6N}m@r2fga{fz*WZ!}eKxM*vQ%iT_|6A{r zEs&pIYUeOK&&gWQBf}u5t(~c<62;mEhFRfUd22DC_)Qu@X+$q=8R_C7{Of})={R)D z>@=UoD(wdZtRLkY3ODJ6G4y%5&<2;P6Yrg{1GEqve z{E89;llg2{O)ezHVK>Dvq}(#pcQh~08C22y+Yt7S%i=tp`l(|8xp5uGgprs z69H9ACDF}~T(eqja+Y?LdIvcXoj=RM>_k6Aj1!B};n)2#bC^nGmFF;AKd*?ty@2nLIoeyjNkwEcf><`&$g<(jWIY^_jp34?Ka) zNPkEdgyJSK-O%rOcFj@KnUz)oo!cv(g@{0qjroblTK{b#x)#9$9aGh|`V@c;@9>qZ zi4-vWf`$DPVykD=Ru#CJTMd!o5-39@F1W~`K!G!K_U6E=zPSj0@m;Rf1Tmz51RVCL zWxw2azTD|`hhlvbDv5@Ol0^^KJ5Imerm-Ut$)Co4aC;zD0~R=Yss*rul9m%T)yK-5{5brx3d5YEQX7DA%6<9|^A zW^s;n*C$)EPJ-^|b{zjN(&G$k{ka{&alA!UZgWvZ<-#KQKJO}6uTy(R-okXR6`P7r zBuaZ^s)Kz?;2$pqgCD&XW%s9eg_qc;$(qovIUr2@OZ-MR1;9}l#+j)8fBANmUzjB0 zCZ0DyYmZl+8zeP&YC-9=|6)AFd%UiSVkTU$xn(M&ye;UVD2JdV=Z8g%vspdydpN1P zt9NLgwBv?>)F?-_4Z?W02}*KG2I-zjIxiPmV2KX?uI)Y%p^X)sX2$Y-e;4om5vfR$+BPQ@G(_BI<&yvl|9a0I zoY0kl1K6bbA%Q@X5{6$91S)fz77?r|&5@YTRb=t8gSVL|$`3=q21jW^O{fT?eY2L} zNLeA!x7$M3R*Z1?0vd$slYFyFnQj;mKopN*{&0Py^HhPq+rb!LO{5L7TQgE9H3C)Y zW~WYLO>)luT{ujzZs$RSWw<;cRc`P+P#6518C3Y3P-c;%HS{-p3P!Bn5(~z zco8Yp5JIcjc{aQKScU9GD-mtb|pdQu##3K zzcn~NjmlikV(wFP>t{0G#e;&yb?54qE}VoF_M7FuSL2p;9!=8~ek?y2Fra{q<7i!I z;A5X>eV-qC7E5|aI%kOI7-=~J?b!n=-u$n-T?_g%nv+;>vN=Z6l|y0&do@;Hu8Nu* z1t9!{{cR3X`cFrm)kD}VL1Tq8h!*&ZCv}T&O!=z6z=sd8SO8su`fS@Pt171H^v6Ju zbZzl!qovMBbFN$=|G-3E3944eHhYzG_&0QUbsD3&&N|W9BSO|MTnt^4rEqn@=Nwy? zR_V%M>dae_gBec5`Tr^AEW4s`psf$W3@|j(jUY;QcXxMpI7kj1(w#$hcS?7cbSsS@ zARWWd@aOTqdOpEj_q^NZ3+%Oi=j<()CH&|8dac1zOzA>1pJI37jDcX;V?I=I0fCek zmj>zgt+!n~8yki-_VWSu9hUgY4`pp$eI$M1u7+%A4cCD%c)F_wJ`hxwknXnr z2i@umNp=f!l5WGByZ;Cu%$R!P6(@Z-F@i62A^(g%hkWhoXL_aR4AVfAtq54M-+q)G zkXHbKS&W=d!lt6F*d~W-F9+6}k1Rd1&lAmG6uG*gA&&a|B{_>prpY`GNM_TVA6d=Z z^y3+~i&Nf*f(aYeoE-Qw_(~_K>Uk*PG{Tj-kvKm{7wrsJV-0 zJAiC!VKbVy{iDdJZ~5#GUlN<^Pm%02Wt;(!2)JGn)rP)Km>ns@$8BIcFNO4M*zF58 z<$W9)Ot9!ed)2X1JkKL4gs=vPQi1Or%OpWEVKw;6lQ`-)P_iVpF&L_sUKNB8QA?wR z@f$`ZI-eWVbS=bTP)u39dtM-K_Mto%MV!GNYQufVI2b$kc{sv5_9#iH9z7_(Y#|gI zD(5Q5h!m;RN;$c&^ZL@E(o%DWVMrk#OY4u! zYTh5j${}Cbop5Muv_?Dq=E6{Es^8bdiP9{^6+r~0*R&2^?!O@8qE%V8!eUUJ`7-y^ z@_n5ZHhz8c*wU@B93;=0b4Cd@9zA@tw6C|uO;}84I6LlL?3uWpx%uot^6Z6RZPm4e z6j~w^FH5Bi!qkX~tbW$S6kifaKPxsz{>9Uobt0q>0S`Q?XNN7*7xAD~sz`$0|6dF1 zDC}a9OISQ6EQ+srhHj=m8O1Ap;WvkUBu!PjxvA!?r$oxd) zj7t`WZt&~yw)Trp6I#z47F0W)q|oHy+2B?r4RbxGx|E&8lw&Zqbx_i1oHm7+Q?xfv z=v4S!6T1v>Fx$94_u?%slMO%U2yLOzH`ueAB z$WzaDV2=Q6m$2NpikcZfH1A$Nd(oxOz~_w zycfsCsBKrVKw74`6fCxt&{XeDP~JjU|0+&c%?yW>Egoew3sPpWjeT1x)}kuhpK2?J zy*{WYN0A3;|6<@1QbcT;MN{{{b&DVcWX~z+PR<3mfcaww?bbk>QB)|<>e0%u_Ck}5 z_^eto9yvMYjyKtO`KC8dwrT!$y~*jWV&Y0zo&>Qq_kgr!ybNyy#;MIz=n0q=Mqpgv z|9vfM(>CUt(-huL)0~n6vC`|1kSy8x`KGWbilKSC3;&XG%=Dr7NgSzo5d@8$HTPiC zqXQB@3iT#`6mV=6v}7-u`sSw0yCcs)&Y5+#H6PX){&i6WP;!OjA0_+^m!y-!zn&=C zWHhPNpvWhZCflRT(&MKy!Wv_bzL65U^Lxgs{XDh2yJ(kg2oi6v$gvZwzXLKx+j7$a z){gzKcBTCoMSkg?6z=xi46z&FmMDJ9oY#Vor@H(S3ZX%A2HOb&)qdu~YPrGpE} z-nrN-HD8@tao-E}E8?I`4vvaD4XQd>!wD`#l$J^-Kaxw$7P^7zdcKkN!;Tnf(J)O_ zdTl~FHGeg$$ab%eo6TM=r(X*(4;lxjLk7nDJy6ju6voKSF#Cp`3*Doo%u6

G*`K#scH}rk5L{p@m^CA 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-get-involved-rtl.webp b/src/wp-admin/images/about-header-get-involved-rtl.webp new file mode 100644 index 0000000000000000000000000000000000000000..4cd5b89c61c004a837e3b1d9abed5b22588a7eb0 GIT binary patch literal 15424 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-get-involved.webp b/src/wp-admin/images/about-header-get-involved.webp new file mode 100644 index 0000000000000000000000000000000000000000..33a6708b9f2faded335e4de5d1d804c488d571db GIT binary patch literal 18168 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-privacy-rtl.webp b/src/wp-admin/images/about-header-privacy-rtl.webp new file mode 100644 index 0000000000000000000000000000000000000000..0ee585216df5ee340a7d2ef49561ddba6db08036 GIT binary patch literal 13612 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 literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-header-privacy.webp b/src/wp-admin/images/about-header-privacy.webp new file mode 100644 index 0000000000000000000000000000000000000000..5178051483f757ecaf301296831cffa005bfc8ef GIT binary patch literal 10926 zcmeHscTiK`zisG6njj!G0@5LL=>(~QAVrE`C@Q@pO?r_g2q-NGLJ*K9ML;3+CcRgw zQbVsnN+2XRerN97``+C9uD_Z4=gZ7FIWy<%&;ESYTA#J|oMWh^p;0IR0GO()=$q)v zJRt`F05rH`galxU54f+R|Dc-`0H9>;a-Ek!Vw{UCTdmY|0J*PunerDi(qjZ2oxwA; zwXQuI4}M-<^UYUyyUaWJb=A5W^RUT(F77Z)uHA3WDE~TL74rEMxyB_|C?fX1!!t)C-w;ZzyF6Fxjx!r1Yf=G%Qn-|!c>Ny&M!fq znKKB-H^QPe)A#Tm2=e!jOo=4A_14y~bvA(F?t-0GtW3(-N>j8R|Iz}O-8Q`ybgSPUh-3+ zdA~G&9b`lC_?CpjGJ^it`_I5JH=qv~;yW9g^I-s;~)5)pC@qI&A-ga}cJK0mRy6NBXf z@S&xiAp=Qa=uX5Pcnin7$H#sBrKMS%Uv?U@FANY#7lE!zvkiqManBq}1w@3t#AW!n zJ{6n(eUdP5G(QB6{ZT8~S;K8M?ebJs*CL1HzI39+(V|YF4Y}`PlW$eIVMr40Xu&O@F;~R5YQueSi zg09XJ^_B!4WJvLh>2YMhp00^?lM>_uWK&|pXTF&l)tWHRwzyKf=7K{hA zYGQ{j$=yh!wjVG+J@FC|05*7_7DhZ#)wrX@eHEEM?}0+ud!l^4c%mK?7@$0epn6I_ z5Q6M$NFP5>RLHppN(+a0G!DH>bsTcCG-*k7tH^q44^-(qJP3wEc$o?kvOy0CnU#Zt zV4oN%K?c^Ix_YB4n5^_xr!5onqDM=C;Dg6o`fGTt$u4-41 zToud631&|e^lTNG#khh5Z^!rd9IPVE_TfQYFCZxR4Jd2@$AekSz#%ZMKSrXy zIB590rIAuAJyax!1X_s(K!Insp`qKiL9Ne;aM0j`mZArGezhTP1mbjq%U}ivUcVy* z^SK$0Zm@-;-+U?#a_B@%1bCpvr9Dw|AV`Z9BM5w;1ZoWegTQDXn-KncVDrtF-k|aN zjA3>DkuGnLwm+!Q>;3SbD-<<2eixF81fn-PIc7eNl4RZ33i?_fHjKL{Pyo(Cw!X_o z3=w%N705A;qO85}vZ?PeK0Dz+fG_l7xw3EYV^{3o4@aeLI=Q;7OMS@lria3O$)PYW zQYfsM5gNJz5CEo^t0N}#PBjrHhs#LBAx_vh*0|i)kaT)$NH3~Y2f~n+kw!Q=5(L3? zb;8ke+{HmN(#&bpMK=sk7d{ZBYX)5Qx1k~-kprfF%gEOU%gFqSTx6e?rao$`2)v5q z^+4TpKW%_?ia}aDSwTy4@%{F{x)Aa5o+zb7T&v^6xL^kfQDyCWP7Um<51-FZXFjA0~TqbDc!4E{tQa8f>V<+OLR4($_lD?6WuN)4pMR-uR zG&~4l4@bx1#G85pm#hyQJsW@%?b`wSUmb`WjUK4EIuBI1BJMV>rb1y{Z^+$F(}TR# zMu$BpW=tTkr`Vl}w{ehrXFOUH6ki z9XVh%q=x7ufGAzz?C`fDq~-82Bt%65)Oth;Y7NA-d9!77KQ9h*e?1(LI5NX6;OGJd z2nLY?M~9<|gS`3a(nj365Q14AC?#C)-o&}&!WtaiPmjY{o*^x%f)}R(Ur5W5E6!+C zAt65qAebl|5w-qsbQivnl2Zp_;&2Vw1zbj6!*JYI-~{$)4f)55c}en+$2fy+SB11( z;sjR51_l0%9FS)1M%1-N4!}fI5Gi#52B^G1c+eOfj%OTnkymhZ$6|5Nw@?KEScv$I zv=PNc9AUo8NOh}Kqz`VE30$U7s%2!O)qO-KLcvIBHgN!|*oL^0UPHbBEh8W6tso!z zts;B6^N}mWAlMl0_SrJhhpjhA{vPbJ*Eau%?PmpOxtG~J#-0s2ek{sY906W>v;{HT z6!!)_-mEsv85pgP9OizU^Kc82In3=1D)Dl}joN`k593Y^!?xRy#D7jhQQlec&rWcS z9q>3iK4k}@vbib;MJLhX_BVGLH~@fmfq2~@X97M}tz zde>Ii%9_@4#?vGN@JuTf0|y>syV0ze0qi=~_J|Vw0=0x*8nIla)*o4BFGEYAMX#AI zTYdfBTEd)iHn7kG`<*YeQ7zZhahQ`|PcJ5dLr2}OfYPK6^`QvLA{Y@ri#YwEjq-?i7_5Xk1e;3xjLD+0%1K;Us9v)Ibr?R7ECIa7rsjR)#S zK$zy`y-&m9VSy!>gkrC^x$HZk`A)2Bd?XF9t+^PPe!PRC|NKChu>;ngYh@GoDOtTZ zZH%1fr~Q*CcGgF~|1}|ad~b}`d;301_}H)E;ag8J-v4^G|0bPuy++*>n#RcCO07G! zZ2b$(?*J!dH~+o}T-fb2lXo{8X*hB=NJw8>CiZjvOR8=w5{l*&pa;DT41Mh_9h)<} z)Vl)enIFbY9^W{@TWSl6kN#&C|04)-%=)A|r~Cdh{ZC)Z(08(C$Ajxh|Gt2O!m?cA z-8N-1j8t9aYF6McpLnf*6#?Z27B!d6t850TF3fv-Lo}=Gw8h z=Hl;lQTXLjDy9Cju>tX2^^@RUhfiS_|AIrQI-o0gyPq~0eP(rVF&&TF*R>vXjQST0 zPI1L5wP`w%EPcQ;eu-SBPw``8aejMB-)BJ5-+HD_bsF;h8cFj+-m#VK%uRafBl5k! z?{*teHPQNv^EaunO*ARriMJnE)T#)v*>D4Qh(+I{|2_@?9rzO>+c)1FNMjwtr)W1R z+tu^J&azv5{r=71c}4QjmcJG_+uY(%xH2Nur`l|EWj2Z~pw|6d;UAL{-;gq%*-3E&5S zD#~9vKZ84f@YPMMj0i>s^FA55ad6RiC-M1oQl4bB{SOBC@4;7>^@NPbl@0ma64!oF z8go1*qk2M=Cu~gR!K5EbS{|aP%~`Z& z^|3U)skvog{jit*FBk52?KEwUWEv~KZ&eb+swx3AQtC64+h~W1y=d4~K}7_IH`=kn zL~T;hChkEcf4Mbi1GAq_Kc_FX7Q-tdrse;cN?jHA>M{7^d?1&jlL5ENMDvc&5xJtM ztvB^9c?6HUZi`&(3di5=HL6I~p3rlc8J{^2$Z#X^YgRku%2#)S`)}089Ro{B*Tkee zC$&UL3!&y|_O-}TlRWDJl@@ig7yW;=(eWTJXQ$`-W+u2Z^JeCG@c3ow)61+NIpBjr z*usL5Y1B|jPKJ$6bZ*6SN*{?7I>`?ug9q)F2IGj!He!#z*(;5-6_`uytM}2m;LqFj zj8rcqVeas8akLw8~ym7e&4EiQi|`D=IrXqbRPX(#snv9}kkR#JiOeaZ-OjylkH-!s~81R?(J@ zHnyrKZdcswg%D+01T(gLS>|R*xy7q_@xR$XfG8h{#TX{qrZggQAFQww$s7CJW>}uQ ztpKUQh||_YDO%Zc+=yA@T&!5s{@ueO`3jOn_eS43L6MK=SbE&XR4z&Jmc{lux$s}D zkIyMcNvlG!oZ1cJTs=0Wl+r{$b8-k9N$Wo}@5S!Md3l9;lkLhMJ&{M}!{_MFL)#A4 z4t`ENY-N!}Dg!Xs0yW%=%)k9rVui~u$Iem}+%pXy0VDOWizC%0V=?1Pmoi0G??@Q; zRc#qk>IO{lpLCT&z}z3Ljqc5m5(Je?au$SMhEBaS!>aiQ5rvPLVs7xQNVm4VP4{&h zS|**Qk|3~Cvvqxz_Z02{n$VuYuCAWX)2!+#wcg8J6xPNV!T z`KpNLoQIn*%Cz#DCJ|xw3OCgk}C#w6*0ST6F<>2EO}A_lQG&{`#Aj> zJ4NGn-tIeu8wJuNgZ_ZvJ3!@tzC1 zIS|(J{OVnDmqmo8BuLh5DKZ>Qu7LX)n?dQTArrTr38MCe}ng+rq;#1NiFyY@6 zEYoS%#l*HV#i^FmMMX(Y|HQ!K$2iOKArpPK?9qenlu9JPa?&bw`h{ub7p2=kZAC(R>LAh|5~~8H~ddX0s{2( zOUtoHrDk&M@SKq4U}ZM9R_W*$2B37;v0MspSijgOT%Wy|P|BqF}F&qFnq+`{@p*3xX`tweCEgY1Wd8&8~(PTgB=&c3q&W)`S1H*Hza=xJS`SK zp;PdNaorW&(3oer@ym=TCZJ9-y35J+&|{f(CvlD0j29#jpd~zAAn61n78&%W>HQO# zFbP$L7C|Z7O>Mt9vnXsGRFV2vKWWZ)TRL|H+2i*jReyLXQFaC?KYCUvo|Sp0A(im< z*Ci%o)(>uQPV$@g%v3PJhO}q<+Cq29Lt$2`(oOu;ZZTpnpOvX8H_YUa4u+O@VcM4do<;DDjBm*4u zH$zFe7z)P@HkMk(G*JnpL(~KH{okkxIr?Zmw6_`)6_=T%0Jv%Xu?j{QqCUse3gd?m zB2=%$iaPNBxTU)ZT(6EAb9^3HBp~u@EK-_}@RR;mgQLzFg1sW1``mEI?Im)e;^63Sf29%`}R0gp^1(lnNUH$y&$PT zIg@-x=KY>)MKMhWZMDdz!`aU?=0CwGYAh+~r>b@sJwb(KhfV&kllQdJ9#61|D-+r;=@%-w>vjAfZ!MsHq|aWWi~Fbq0EBVdJuqbW@oR`% zyqc;?qCm@oI5lL~@7}=x-Bvqg99>NKmBsTGrm@c_eB&hyY(84_o7R8E(P%1es@g#- zuXcuZ`o2UzdlurJg0?Um@1aCdcMx0xqNrAB0*si49%K*c8P-RSQiu~goSYuLcK|qS znSLVhJgO*pRI5+ULF*$=(F6sauowOf4@<-&l2B+p(-N91DR4UsHw$^fM{eu2Qt-42 z9dln{VFk0He2~XuFQH1PZJ(dRmIdDK`ii?%zQnwH6G)WJS2Ps3UQq8Me=c7+Cc^wd zAuU%$k=%E9$}e~FI1LWuZmzN#t7}LJhAbdfH{qORFv%^eY!sY5nyX?89q(QABtKn)%FZBI$A?m3*|d%WoB8oBrw$F zP7|*N8QmQ!-1s)%-J1AgpH}hg?1Dp|Q=P7@+H3hrl$MpDl_NMGXgUGm*d*Oe`h4i# zZSVSp{|2VVAktDmhvKZdst*~y(t&8n4#mpdbdS_EG#S-W%W6eXPvBckmKi050Z7X? z?g%j5v5wD0Du^FKg)TBWrg`f83)Wu3wm1TTiZP@#T#v=z?b6&LA?r+~rkr*~FpMDUY z7ypuDFwlrI>@wx7jx~yqo2L|TR;I%Rx;s$y?1}uk1PYJSS397~QEM7xaJEY_w(lfx zYgZ!q*AS056B>_pR>VFmTHxl4L%ERl#vk{@Cu!K9FQ&HQw~5b}C7O(L;@Y?WvdeWo z#s9mjMW?mIARXdDj2w}0woDX3v{V{?np3OXR9yTrS*1VqbnVBW1mM=4!d7}BLCXdA z6<^Yj%6PM)W9VsK<(=%La;Z)8dt=(jD(D6{!>GTETxFPr5KV&HHy%9cs`MCYLuWFsnYMZWog*S-7B=iSfBHiS|cKPNI zmYiR*LMP~f2{iVq8o-ih%-Gk2J#kl3g-(I=@33RhWcr&ri`kk53?)S4XQ|gh zEL3p@v3c%)@;5rWr0Lm~f-$ic44}UE__~9IB@Z_^0BY)N1 z5K6%#irK#D8~9e=m);cSO}%85A;1^QNN-o8(&(5H=Bx$e$y`Spzvw>*vfi5kjOan# zT^AigY24PjA#|M9lJA~Q9|8T;T!AV3JadVEY6L9wuGB{f7dpZmF!hHYd*s4|2d7bA z;^RgRmbv^lc!gd{&S@~W^sP#uK=ENu&Ltu%uQiqrHt-uoYb);Fo7+q4Ju!%y>)o^{ zrK#jzGt8wETpr+SipsYT8PSOkqzssnqPkQGas`%lt~4EmiWLnoVY!-UqxE-%Fwd8# zIFf#nemZ#G$idI`(Bx(nO&OnuHB5mHLN4~~RPD47>vA~XCkgz zKv9$7q=_mC;NG9~!KnOt^8-~+KtpqQ2XmY%QmRu>j_*q0it=iKp!eYmEE|)=ih`5c zfm0}%;jo<#r=PSp%E6iGrG19yxY1bYh-rJcvmL+eJB`l=cKN>u^NtStIq@EA3L1Am ztJkn`E%aLgT8RQY?^7l}e|V?`dc=Vh1)dYJMyIj__zkVwrRGy%DLYtiHO9UPvoo%G zQ<@q?D4E3Zq1IHo+wHhbWkZm zf~31Q>`yJO*0i}+dkAFBP~GzRZ?X}$>Rp*FQ^Chrwu&BhZgH)p2IslPV-Y97Nt>Pw z>*?3s4;BbVaGstC*?C${Wm$rkA9x)3L#N?~!t}UR{ZU=Eazq&QGp?iZ2u&%utX^Gc zO{wh2!%^QY#=1o{G6V0|BY|G>JIN@}lmeHWJ>PxeA^VTFguHmoY1}lZyIHV=ch0Pd zFYF%^e#e-$=A+^|=U;vKanT3i8Pv5k)7Cw0d*6ED^G53I&vG9{-%N(8*E))8;@J`XOxKU2KFZTpMe zXX&3#jOZzv`KX!po4O z(T$}|1GM+z{u-@sczu&n-n%k#FPLwGSH7=zN6dNA?lu2?2B}~yisD-_#sIAQVmkk3 zn_VeJ$V*+f+}zBE63%Zt)6Nd%Jx)zvR=*lJNe~Luv#mRg_6pFNrv-g+Akp0C*AXjl zo-nCW!?*G-AQ08jd0l9f=hMQ2$C>Y7a(hfqE|BipKet2hIhQlyQ64uq^{8=PZGN#| zpK?!q-8#lTe{ihtsog&A-V6mN!Ne1ra2UwGFu3k;2SJVBG9`;8aWPDGAQ_UcJyxoc_?%!W18MJ=!l$OTfivQGRu_iZ2 zliL7RKezHe?vqsI9X!TIA{up1ujK&iGxKiF>V}!RpZIe?4^gZ+he)?8BQ3dAI}YeJ z)k#X^>;d#xnE5s7OvXBtO&df`3?E}^IeZjsr`Ga1r@3Auge9*?QgTx8-*SQL zzi=r#5)STd**JXB{ln+w!hEze{kNGMHOu=Ju}$7Rv@-##s;gadbQ4LfER4JMtM8vW zMaHg{frP%_jbcDA>|r(AG6C6PgO_7M*mE~_Io{c4nav*hagl?lVVUETD#tbM+KUbK z0TY##Bza{VD2dp6bPU&CZ^El8&}&w-SK*vt7sx0zIi; z6Hi81baZtEVFYfT#Cf<57g1@wU*jz%?6^ zSjLq8Lf>fkJu#3-%3F8sr4#X*wPxQjyg)*SunW*flh+H;;?F;k`VhU$aO3=q}*@T|TZfWHrskgP0tZ5s4)!i?@b)p@Qhx&Q0P?Nl}eY~b_j!ZIVj!oZe- zDl#lVnR04rw85o`p9oy)uvhWB&Y_GiwZe zW(ogqHrrYF=a{w+99_cE(C*G&0xNK{1$~;?hmc23;aWk8UzhyMRBjfM=_yVGS12pK zLd}q8JTkb?sM^!RHE$L}gHmhGI?;b=UHHk&@ytHpd*m|QU)OoX%GgXs|A%hjhYN~c zXKFpK1Rh?!TM>oPl$hgL2z?9zt*Ze+Sjes9yAO319w`yG~tBch#_CtqY`B>krKq`S_xbzTfK01(PR z<&HmzCDQzP*Fhv(NEsZp({no3eyiYj=KVkiTIHN_$-soPi|9dhL4n%0(o%#0-eI}9 zSIiq!jRu*rgQ4`AfG}v`)nS-H5Oq;nQ_o0cg$0jdGGm8^k3d9rfw~kWCxaoS`0po0 z0x~CHP~a%5yb02u`sho|&Jtp_d64Ri>1$2&#^&3#XK&+wnW?&7?{G1EVBPaM8uzIrM&8vb#Q>;tnLWcD;rO_>ftFHQyH))m87QMP$l&VjjB0~;>s z*5if-su`}8dNu2k~Ep1UxJ2d_|*h_r^6?{NfzmGN7pDU ZZjSimhYYND#ozdATz9!XT?7r_-vE>|XN3R& literal 0 HcmV?d00001 diff --git a/src/wp-admin/images/about-release-badge.svg b/src/wp-admin/images/about-release-badge.svg index f2894d8b5030f..751068ebe62ed 100644 --- a/src/wp-admin/images/about-release-badge.svg +++ b/src/wp-admin/images/about-release-badge.svg @@ -1,13 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/src/wp-admin/images/about-release-logo.svg b/src/wp-admin/images/about-release-logo.svg index 15c35b521b8de..d497949fe8b74 100644 --- a/src/wp-admin/images/about-release-logo.svg +++ b/src/wp-admin/images/about-release-logo.svg @@ -1,40 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/src/wp-admin/privacy.php b/src/wp-admin/privacy.php index 29dda79f0090b..4c47063ef8fc7 100644 --- a/src/wp-admin/privacy.php +++ b/src/wp-admin/privacy.php @@ -25,7 +25,7 @@
- <?php echo esc_attr( $header_alt_text ); ?> + <?php echo esc_attr( $header_alt_text ); ?>
From b0990925d7d5f0ec7dfee2dcb28ec8b63541429e Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 14 May 2026 21:53:46 +0000 Subject: [PATCH 095/106] Tests: Add unit tests for `wp_admin_viewport_meta()`. Follow-up to [48412]. Props pbearne. Fixes #65187. git-svn-id: https://develop.svn.wordpress.org/trunk@62366 602fd350-edb4-49c9-b593-d223f7449a82 --- .../misc/WpAdminViewportMeta_Test.php | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php diff --git a/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php b/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php new file mode 100644 index 0000000000000..d651d4d1206e3 --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php @@ -0,0 +1,62 @@ +expectOutputString( $expected ); + wp_admin_viewport_meta(); + } + + /** + * Data provider for test_wp_admin_viewport_meta(). + * + * @return array + */ + public function data_wp_admin_viewport_meta(): array { + return array( + 'default value' => array( + 'filter_value' => null, + 'expected' => '', + ), + 'custom filtered value' => array( + 'filter_value' => 'width=device-width,initial-scale=2.0', + 'expected' => '', + ), + 'empty filtered value' => array( + 'filter_value' => '', + 'expected' => '', + ), + 'escaped filtered value' => array( + 'filter_value' => 'width=device-width; content=">', + 'expected' => '' ) . '">', + ), + ); + } +} From 165d83ed362f633875e8b94f45910b74237e1026 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 15 May 2026 23:47:07 +0000 Subject: [PATCH 096/106] Tests: Add unit tests for `wp_page_reload_on_back_button_js()`. Follow-up to [37619]. Props pbearne. Fixes #65193. git-svn-id: https://develop.svn.wordpress.org/trunk@62367 602fd350-edb4-49c9-b593-d223f7449a82 --- .../misc/WpPageReloadOnBackButtonJs_Test.php | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/WpPageReloadOnBackButtonJs_Test.php diff --git a/tests/phpunit/tests/admin/includes/misc/WpPageReloadOnBackButtonJs_Test.php b/tests/phpunit/tests/admin/includes/misc/WpPageReloadOnBackButtonJs_Test.php new file mode 100644 index 0000000000000..2f66a52d09361 --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/WpPageReloadOnBackButtonJs_Test.php @@ -0,0 +1,25 @@ +assertStringContainsString( '', $output ); + } +} From aa60d9da0769c064463942592f5e59852cd2ea89 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Sat, 16 May 2026 05:03:42 +0000 Subject: [PATCH 097/106] Script Loader: Warn when classic scripts with module dependencies lack footer/defer. A classic script with `module_dependencies` may be evaluated before the script modules import map is printed if it loads blocking in the document head, causing a "Failed to resolve module specifier" error on dynamic imports. * Trigger `_doing_it_wrong()` from `_wp_scripts_add_args_data()` when a classic script provides `module_dependencies` without setting `in_footer` to `true` or using a `defer` loading `strategy`, and document this requirement in the `wp_register_script()` and `wp_enqueue_script()` docblocks. * Remove the `module_dependencies` arg from the `wp-codemirror` script registration in favor of passing the espree module URL directly through `wp_get_code_editor_settings()`. This avoids registering `espree` as a publicly-available script module when it is only ever used internally as a private implementation detail of the code editor. * Add a `console.warn()` in `wp.codeEditor.initialize()` when invoked before `DOMContentLoaded`, so developers are alerted if the function is called too early for the import map to have been parsed. * Add PHPStan types which were missing when `module_dependencies` were initially introduced. * Harden `WP_Scripts::add_data()` against non-string `strategy` values being passed to `sprintf()`. Developed in https://github.com/WordPress/wordpress-develop/pull/11788 Follow-up to r61587. Props khokansardar, westonruter, jonsurrell, jorbin. See #61500, #64238. Fixes #65165. git-svn-id: https://develop.svn.wordpress.org/trunk@62368 602fd350-edb4-49c9-b593-d223f7449a82 --- .../lib/codemirror/javascript-lint.js | 7 +- src/js/_enqueues/wp/code-editor.js | 6 + src/wp-includes/class-wp-scripts.php | 4 +- src/wp-includes/functions.wp-scripts.php | 126 +++++++--- src/wp-includes/general-template.php | 34 +-- src/wp-includes/script-loader.php | 3 +- src/wp-includes/script-modules.php | 7 - tests/phpunit/includes/abstract-testcase.php | 4 +- tests/phpunit/tests/dependencies/scripts.php | 235 ++++++++++++++++++ .../tests/script-modules/wpScriptModules.php | 4 + 10 files changed, 372 insertions(+), 58 deletions(-) diff --git a/src/js/_enqueues/lib/codemirror/javascript-lint.js b/src/js/_enqueues/lib/codemirror/javascript-lint.js index 592d077b80914..2c96798a20ae3 100644 --- a/src/js/_enqueues/lib/codemirror/javascript-lint.js +++ b/src/js/_enqueues/lib/codemirror/javascript-lint.js @@ -30,6 +30,7 @@ import CodeMirror from 'codemirror'; * @property {boolean} [es3] - "This option tells JSHint that your code needs to adhere to ECMAScript 3 specification. Use this option if you need your program to be executable in older browsers—such as Internet Explorer 6/7/8/9—and other legacy JavaScript environments." * @property {boolean} [module] - "This option informs JSHint that the input code describes an ECMAScript 6 module. All module code is interpreted as strict mode code." * @property {'implied'} [strict] - "This option requires the code to run in ECMAScript 5's strict mode." + * @property {string} [espreeModuleUrl] - The URL to the espree script module. */ /** @@ -42,9 +43,13 @@ import CodeMirror from 'codemirror'; * @returns {Promise} */ async function validator( text, options ) { + if ( ! options.espreeModuleUrl ) { + return []; + } + const errors = /** @type {CodeMirrorLintError[]} */ []; try { - const espree = await import( /* webpackIgnore: true */ 'espree' ); + const espree = await import( /* webpackIgnore: true */ options.espreeModuleUrl ); espree.parse( text, { ...getEspreeOptions( options ), loc: true, diff --git a/src/js/_enqueues/wp/code-editor.js b/src/js/_enqueues/wp/code-editor.js index 86d5e03254166..ed8be9d6a5580 100644 --- a/src/js/_enqueues/wp/code-editor.js +++ b/src/js/_enqueues/wp/code-editor.js @@ -2,6 +2,8 @@ * @output wp-admin/js/code-editor.js */ +/* global console */ + /* eslint-env es2020 */ if ( 'undefined' === typeof window.wp ) { @@ -412,6 +414,10 @@ if ( 'undefined' === typeof window.wp.codeEditor ) { * @return {CodeEditorInstance} Instance. */ wp.codeEditor.initialize = function initialize( textarea, settings ) { + if ( document.readyState === 'loading' ) { + console.warn( 'wp.codeEditor.initialize() ran too early. Invoke this function in a `DOMContentLoaded` event listener.' ); + } + let $textarea; if ( 'string' === typeof textarea ) { $textarea = $( '#' + textarea ); diff --git a/src/wp-includes/class-wp-scripts.php b/src/wp-includes/class-wp-scripts.php index cb37b2b653877..6f633d465bb2c 100644 --- a/src/wp-includes/class-wp-scripts.php +++ b/src/wp-includes/class-wp-scripts.php @@ -885,7 +885,7 @@ public function add_data( $handle, $key, $value ) { sprintf( /* translators: 1: $strategy, 2: $handle */ __( 'Invalid strategy `%1$s` defined for `%2$s` during script registration.' ), - $value, + is_string( $value ) ? $value : gettype( $value ), $handle ), '6.3.0' @@ -897,7 +897,7 @@ public function add_data( $handle, $key, $value ) { sprintf( /* translators: 1: $strategy, 2: $handle */ __( 'Cannot supply a strategy `%1$s` for script `%2$s` because it is an alias (it lacks a `src` value).' ), - $value, + is_string( $value ) ? $value : gettype( $value ), $handle ), '6.3.0' diff --git a/src/wp-includes/functions.wp-scripts.php b/src/wp-includes/functions.wp-scripts.php index 59e4e54a1a1ad..5e9589252124b 100644 --- a/src/wp-includes/functions.wp-scripts.php +++ b/src/wp-includes/functions.wp-scripts.php @@ -71,19 +71,30 @@ function _wp_scripts_maybe_doing_it_wrong( $function_name, $handle = '' ) { /** * Adds the data for the recognized args and warns for unrecognized args. * + * @see wp_enqueue_script() + * @see wp_register_script() + * * @ignore * @since 7.0.0 * * @param WP_Scripts $wp_scripts WP_Scripts instance. * @param string $handle Script handle. * @param array $args Array of extra args for the script. + * + * @phpstan-param non-empty-string $handle + * @phpstan-param array{ + * in_footer?: bool, + * strategy?: 'async'|'defer', + * fetchpriority?: 'low'|'auto'|'high', + * module_dependencies?: array, + * } $args */ -function _wp_scripts_add_args_data( WP_Scripts $wp_scripts, string $handle, array $args ) { +function _wp_scripts_add_args_data( WP_Scripts $wp_scripts, string $handle, array $args ): void { $allowed_keys = array( 'strategy', 'in_footer', 'fetchpriority', 'module_dependencies' ); $unknown_keys = array_diff( array_keys( $args ), $allowed_keys ); if ( ! empty( $unknown_keys ) ) { $trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 ); - $function_name = ( $trace[1]['class'] ?? '' ) . ( $trace[1]['type'] ?? '' ) . $trace[1]['function']; + $function_name = ( $trace[1]['class'] ?? '' ) . ( $trace[1]['type'] ?? '' ) . ( $trace[1]['function'] ?? __FUNCTION__ ); _doing_it_wrong( $function_name, sprintf( @@ -97,7 +108,8 @@ function _wp_scripts_add_args_data( WP_Scripts $wp_scripts, string $handle, arra ); } - if ( ! empty( $args['in_footer'] ) ) { + $in_footer = ! empty( $args['in_footer'] ); + if ( $in_footer ) { $wp_scripts->add_data( $handle, 'group', 1 ); } if ( ! empty( $args['strategy'] ) ) { @@ -108,6 +120,31 @@ function _wp_scripts_add_args_data( WP_Scripts $wp_scripts, string $handle, arra } if ( ! empty( $args['module_dependencies'] ) ) { $wp_scripts->add_data( $handle, 'module_dependencies', $args['module_dependencies'] ); + + /* + * A classic script with module dependencies must either be printed in the + * footer or use the 'defer' loading strategy. Otherwise, the script may be + * evaluated before the script modules import map is printed, causing + * dynamic imports to fail with a "Failed to resolve module specifier" error. + */ + $is_deferred = 'defer' === ( $args['strategy'] ?? null ); + if ( ! $in_footer && ! $is_deferred ) { + $trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 ); + $function_name = ( $trace[1]['class'] ?? '' ) . ( $trace[1]['type'] ?? '' ) . ( $trace[1]['function'] ?? __FUNCTION__ ); + _doing_it_wrong( + $function_name, + sprintf( + /* translators: 1: 'module_dependencies', 2: Script handle, 3: 'in_footer', 4: 'strategy', 5: 'defer'. */ + __( 'When the %1$s arg is provided, the "%2$s" script must either be printed in the footer (%3$s set to true) or use a deferred loading %4$s (%5$s) so that the import map is printed before the script is evaluated.' ), + 'module_dependencies', + $handle, + 'in_footer', + 'strategy', + 'defer' + ), + '7.0.0' + ); + } } } @@ -204,25 +241,39 @@ function wp_add_inline_script( $handle, $data, $position = 'after' ) { * @since 6.9.0 The $fetchpriority parameter of type string was added to the $args parameter of type array. * @since 7.0.0 The $module_dependencies parameter of type string[] was added to the $args parameter of type array. * - * @param string $handle Name of the script. Should be unique. - * @param string|false $src Full URL of the script, or path of the script relative to the WordPress root directory. - * If source is set to false, script is an alias of other scripts it depends on. - * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. - * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL - * as a query string for cache busting purposes. If version is set to false, a version - * number is automatically added equal to current installed WordPress version. - * If set to null, no version is added. - * @param array>>|bool $args { + * @param string $handle Name of the script. Should be unique. + * @param string|false $src Full URL of the script, or path of the script relative to the WordPress root directory. + * If source is set to false, script is an alias of other scripts it depends on. + * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. + * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL + * as a query string for cache busting purposes. If version is set to false, a version + * number is automatically added equal to current installed WordPress version. + * If set to null, no version is added. + * @param array|bool $args { * Optional. An array of extra args for the script. Default empty array. * Otherwise, it may be a boolean in which case it determines whether the script is printed in the footer. Default false. * - * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. - * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. - * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. - * @type array> $module_dependencies Optional. IDs for module dependencies loaded via dynamic import. Default empty array. + * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. + * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. + * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. + * @type array $module_dependencies Optional. IDs for module dependencies loaded via dynamic import. Default empty array. * For the full data format, see the `$deps` param of {@see wp_register_script_module()}. + * When provided, the script must either be printed in the footer (with + * `in_footer` set to true) or use a deferred loading `strategy` (`defer`), + * so that the script modules import map is printed before the script + * is evaluated. Otherwise dynamic imports may fail to resolve. * } * @return bool Whether the script has been registered. True on success, false on failure. + * + * @phpstan-param non-empty-string $handle + * @phpstan-param non-empty-string|false $src + * @phpstan-param non-empty-string[] $deps + * @phpstan-param array{ + * in_footer?: bool, + * strategy?: 'async'|'defer', + * fetchpriority?: 'low'|'auto'|'high', + * module_dependencies?: array, + * }|bool $args */ function wp_register_script( $handle, $src, $deps = array(), $ver = false, $args = array() ) { if ( ! is_array( $args ) ) { @@ -386,24 +437,38 @@ function wp_deregister_script( $handle ) { * @since 6.9.0 The $fetchpriority parameter of type string was added to the $args parameter of type array. * @since 7.0.0 The $module_dependencies parameter of type string[] was added to the $args parameter of type array. * - * @param string $handle Name of the script. Should be unique. - * @param string $src Full URL of the script, or path of the script relative to the WordPress root directory. - * Default empty. - * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. - * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL - * as a query string for cache busting purposes. If version is set to false, a version - * number is automatically added equal to current installed WordPress version. - * If set to null, no version is added. - * @param array>>|bool $args { + * @param string $handle Name of the script. Should be unique. + * @param string $src Full URL of the script, or path of the script relative to the WordPress root directory. + * Default empty. + * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. + * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL + * as a query string for cache busting purposes. If version is set to false, a version + * number is automatically added equal to current installed WordPress version. + * If set to null, no version is added. + * @param array|bool $args { * Optional. An array of extra args for the script. Default empty array. * Otherwise, it may be a boolean in which case it determines whether the script is printed in the footer. Default false. * - * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. - * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. - * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. - * @type array> $module_dependencies Optional. IDs for module dependencies loaded via dynamic import. Default empty array. - * For the full data format, see the `$deps` param of {@see wp_register_script_module()}. + * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. + * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. + * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. + * @type array $module_dependencies Optional. IDs for module dependencies loaded via dynamic import. Default empty array. + * For the full data format, see the `$deps` param of {@see wp_register_script_module()}. + * When provided, the script must either be printed in the footer (with + * `in_footer` set to true) or use a deferred loading `strategy` (`defer`), + * so that the script modules import map is printed before the script + * is evaluated. Otherwise dynamic imports may fail to resolve. * } + * + * @phpstan-param non-empty-string $handle + * @phpstan-param string $src + * @phpstan-param non-empty-string[] $deps + * @phpstan-param array{ + * in_footer?: bool, + * strategy?: 'async'|'defer', + * fetchpriority?: 'low'|'auto'|'high', + * module_dependencies?: array, + * }|bool $args */ function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $args = array() ) { _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); @@ -411,6 +476,7 @@ function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $ $wp_scripts = wp_scripts(); if ( $src || ! empty( $args ) ) { + /** @var array{ 0: non-empty-string, 1?: string } $_handle */ $_handle = explode( '?', $handle ); if ( ! is_array( $args ) ) { $args = array( diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index 47e2aeb2ebb05..34233c35b0cc3 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -4155,27 +4155,31 @@ function wp_get_code_editor_settings( $args ) { 'outline-none' => true, ), 'jshint' => array( - 'esversion' => 11, - 'module' => str_ends_with( $args['file'] ?? '', '.mjs' ), + 'esversion' => 11, + 'module' => str_ends_with( $args['file'] ?? '', '.mjs' ), + + // This script module URL is intentionally referenced here instead of registering an espree script module + // in wp_default_script_modules(). This is a first stab at a core-only private module. + 'espreeModuleUrl' => add_query_arg( 'ver', '9.6.1', includes_url( 'js/codemirror/espree.min.js' ) ), // The following JSHint *linting rule* options are copied from // . // Parsing-related options such as `esversion` (and, in other contexts, `es5`, `es3`, `module`, `strict`) // are honored by the Espree-based integration, but these linting-rule options are not interpreted by Espree // and are kept only for compatibility/documentation with the original JSHint configuration. - 'boss' => true, - 'curly' => true, - 'eqeqeq' => true, - 'eqnull' => true, - 'expr' => true, - 'immed' => true, - 'noarg' => true, - 'nonbsp' => true, - 'quotmark' => 'single', - 'undef' => true, - 'unused' => true, - 'browser' => true, - 'globals' => array( + 'boss' => true, + 'curly' => true, + 'eqeqeq' => true, + 'eqnull' => true, + 'expr' => true, + 'immed' => true, + 'noarg' => true, + 'nonbsp' => true, + 'quotmark' => 'single', + 'undef' => true, + 'unused' => true, + 'browser' => true, + 'globals' => array( '_' => false, 'Backbone' => false, 'jQuery' => false, diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 42d42b3f8781d..f4fad38f3eefe 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -1200,9 +1200,8 @@ function wp_default_scripts( $scripts ) { ); $scripts->add( 'wp-codemirror', '/wp-includes/js/codemirror/codemirror.min.js', array(), '5.65.20' ); - did_action( 'init' ) && $scripts->add_data( 'wp-codemirror', 'module_dependencies', array( 'espree' ) ); $scripts->add( 'csslint', '/wp-includes/js/codemirror/csslint.js', array(), '1.0.5' ); - $scripts->add( 'esprima', '/wp-includes/js/codemirror/esprima.js', array(), '4.0.1' ); // Deprecated. Use 'espree' script module. + $scripts->add( 'esprima', '/wp-includes/js/codemirror/esprima.js', array(), '4.0.1' ); // Deprecated. $scripts->add( 'jshint', '/wp-includes/js/codemirror/fakejshint.js', array( 'esprima' ), '2.9.5' ); // Deprecated. $scripts->add( 'jsonlint', '/wp-includes/js/codemirror/jsonlint.js', array(), '1.6.3' ); $scripts->add( 'htmlhint', '/wp-includes/js/codemirror/htmlhint.js', array(), '1.8.0' ); diff --git a/src/wp-includes/script-modules.php b/src/wp-includes/script-modules.php index b3a89fdf71844..32863a6a8ab00 100644 --- a/src/wp-includes/script-modules.php +++ b/src/wp-includes/script-modules.php @@ -219,13 +219,6 @@ function wp_default_script_modules() { $module_deps = $script_module_data['module_dependencies'] ?? array(); wp_register_script_module( $script_module_id, $path, $module_deps, $script_module_data['version'], $args ); } - - wp_register_script_module( - 'espree', - includes_url( 'js/codemirror/espree.min.js' ), - array(), - '9.6.1' - ); } /** diff --git a/tests/phpunit/includes/abstract-testcase.php b/tests/phpunit/includes/abstract-testcase.php index 3a5d52b0706a9..b8e8598362ec5 100644 --- a/tests/phpunit/includes/abstract-testcase.php +++ b/tests/phpunit/includes/abstract-testcase.php @@ -18,7 +18,9 @@ abstract class WP_UnitTestCase_Base extends PHPUnit_Adapter_TestCase { protected $expected_deprecated = array(); protected $caught_deprecated = array(); protected $expected_doing_it_wrong = array(); - protected $caught_doing_it_wrong = array(); + + /** @var non-empty-string[] */ + protected $caught_doing_it_wrong = array(); protected static $hooks_saved = array(); protected static $ignore_files; diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 5f1c30fe4cf47..41c9673915b93 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -8,6 +8,20 @@ * @covers ::wp_script_add_data * @covers ::wp_add_inline_script * @covers ::wp_set_script_translations + * + * @phpstan-type ScriptArgs array{ + * in_footer?: bool, + * strategy?: 'async'|'defer', + * fetchpriority?: 'low'|'auto'|'high', + * module_dependencies?: array, + * } + * @phpstan-type WpEnqueueScriptArgs array{ + * 0: non-empty-string, // $handle + * 1?: non-empty-string, // $src + * 2?: non-empty-string[], // $deps + * 3?: null|bool|string, // $version + * 4?: ScriptArgs, + * } */ class Tests_Dependencies_Scripts extends WP_UnitTestCase { @@ -1396,6 +1410,223 @@ public function data_add_data_module_dependencies_validation(): array { ); } + /** + * Tests that registering a script with `module_dependencies` triggers `_doing_it_wrong` + * when the script is not printed in the footer and does not use the `defer` strategy. + * + * @ticket 65165 + * + * @covers ::wp_register_script + * @covers ::wp_enqueue_script + * @covers ::_wp_scripts_add_args_data + * + * @dataProvider data_module_dependencies_require_footer_or_defer + * + * @param callable-string $function_name Function name to call. + * @param array $args Arguments to pass to the function. + * @param bool $should_warn Whether the call is expected to trigger a `_doing_it_wrong` warning. + * + * @phpstan-param WpEnqueueScriptArgs $args + */ + public function test_module_dependencies_require_footer_or_defer( string $function_name, array $args, bool $should_warn ): void { + if ( $should_warn ) { + $this->setExpectedIncorrectUsage( $function_name ); + } + + call_user_func_array( $function_name, $args ); + + if ( $should_warn ) { + $this->assertStringContainsString( + 'module_dependencies', + $this->caught_doing_it_wrong[ $function_name ], + 'The _doing_it_wrong message should reference module_dependencies.' + ); + $this->assertStringContainsString( + 'in_footer', + $this->caught_doing_it_wrong[ $function_name ], + 'The _doing_it_wrong message should reference the in_footer requirement.' + ); + $this->assertStringContainsString( + 'defer', + $this->caught_doing_it_wrong[ $function_name ], + 'The _doing_it_wrong message should reference the defer strategy.' + ); + } else { + $this->assertArrayNotHasKey( + $function_name, + $this->caught_doing_it_wrong, + 'No _doing_it_wrong warning should be triggered when in_footer is true or strategy is defer.' + ); + } + } + + /** + * Data provider for {@see self::test_module_dependencies_require_footer_or_defer()}. + * + * @phpstan-return array + */ + public function data_module_dependencies_require_footer_or_defer(): array { + $base_args = array( + '/script.js', + array(), + null, + ); + + return array( + 'register_blocking_warns' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'module-deps-blocking-register' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + ), + ) + ), + 'should_warn' => true, + ), + 'enqueue_blocking_warns' => array( + 'function_name' => 'wp_enqueue_script', + 'args' => array_merge( + array( 'module-deps-blocking-enqueue' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + ), + ) + ), + 'should_warn' => true, + ), + 'register_async_warns' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'module-deps-async-register' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'strategy' => 'async', + ), + ) + ), + 'should_warn' => true, + ), + 'enqueue_async_warns' => array( + 'function_name' => 'wp_enqueue_script', + 'args' => array_merge( + array( 'module-deps-async-enqueue' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'strategy' => 'async', + ), + ) + ), + 'should_warn' => true, + ), + 'register_in_footer_does_not_warn' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'module-deps-footer-register' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'in_footer' => true, + ), + ) + ), + 'should_warn' => false, + ), + 'enqueue_in_footer_does_not_warn' => array( + 'function_name' => 'wp_enqueue_script', + 'args' => array_merge( + array( 'module-deps-footer-enqueue' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'in_footer' => true, + ), + ) + ), + 'should_warn' => false, + ), + 'register_defer_does_not_warn' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'module-deps-defer-register' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'strategy' => 'defer', + ), + ) + ), + 'should_warn' => false, + ), + 'enqueue_defer_does_not_warn' => array( + 'function_name' => 'wp_enqueue_script', + 'args' => array_merge( + array( 'module-deps-defer-enqueue' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'strategy' => 'defer', + ), + ) + ), + 'should_warn' => false, + ), + 'register_footer_and_defer_no_warn' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'module-deps-footer-defer-register' ), + $base_args, + array( + array( + 'module_dependencies' => array( 'foo' ), + 'in_footer' => true, + 'strategy' => 'defer', + ), + ) + ), + 'should_warn' => false, + ), + 'register_no_module_deps_no_warn' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'no-module-deps-register' ), + $base_args, + array( array() ) + ), + 'should_warn' => false, + ), + 'register_empty_module_deps_no_warn' => array( + 'function_name' => 'wp_register_script', + 'args' => array_merge( + array( 'empty-module-deps-register' ), + $base_args, + array( + array( + 'module_dependencies' => array(), + ), + ) + ), + 'should_warn' => false, + ), + ); + } + /** * Data provider. * @@ -3169,6 +3400,7 @@ public function test_wp_enqueue_code_editor_when_php_file_will_be_passed() { 'unused', 'browser', 'globals', + 'espreeModuleUrl', ), array_keys( $wp_enqueue_code_editor['jshint'] ) ); @@ -3252,6 +3484,7 @@ public function test_wp_enqueue_code_editor_when_generated_array_by_compact_will 'unused', 'browser', 'globals', + 'espreeModuleUrl', ), array_keys( $wp_enqueue_code_editor['jshint'] ) ); @@ -3349,6 +3582,7 @@ public function test_wp_enqueue_code_editor_when_generated_array_by_array_merge_ 'unused', 'browser', 'globals', + 'espreeModuleUrl', ), array_keys( $wp_enqueue_code_editor['jshint'] ) ); @@ -3443,6 +3677,7 @@ public function test_wp_enqueue_code_editor_when_simple_array_will_be_passed() { 'unused', 'browser', 'globals', + 'espreeModuleUrl', ), array_keys( $wp_enqueue_code_editor['jshint'] ) ); diff --git a/tests/phpunit/tests/script-modules/wpScriptModules.php b/tests/phpunit/tests/script-modules/wpScriptModules.php index 330736431dffd..09b5a91e2896f 100644 --- a/tests/phpunit/tests/script-modules/wpScriptModules.php +++ b/tests/phpunit/tests/script-modules/wpScriptModules.php @@ -2041,6 +2041,7 @@ public function test_included_module_appears_in_importmap() { array( 'classic-dependency' ), false, array( + 'strategy' => 'defer', 'module_dependencies' => array( 'example', array( @@ -2109,6 +2110,7 @@ public function test_import_map_includes_dependencies_of_classic_scripts_recursi array(), false, array( + 'in_footer' => true, 'module_dependencies' => array( 'classic-transitive-dependency' ), ) ); @@ -2118,6 +2120,7 @@ public function test_import_map_includes_dependencies_of_classic_scripts_recursi array( 'classic-transitive-dep' ), false, array( + 'in_footer' => true, 'module_dependencies' => array( 'not-enqueued' ), ) ); @@ -2153,6 +2156,7 @@ public function test_wp_scripts_doing_it_wrong_for_missing_script_module_depende array(), null, array( + 'strategy' => 'defer', 'module_dependencies' => array( 'does-not-exist' ), ) ); From 31a8ce49797f926956b277e18686890136ab584a Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 16 May 2026 23:45:50 +0000 Subject: [PATCH 098/106] Tests: Add unit tests for `wp_doc_link_parse()`. Follow-up to [10607]. Props pbearne. Fixes #65182. git-svn-id: https://develop.svn.wordpress.org/trunk@62369 602fd350-edb4-49c9-b593-d223f7449a82 --- .../includes/misc/WpDocLinkParse_Test.php | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/WpDocLinkParse_Test.php diff --git a/tests/phpunit/tests/admin/includes/misc/WpDocLinkParse_Test.php b/tests/phpunit/tests/admin/includes/misc/WpDocLinkParse_Test.php new file mode 100644 index 0000000000000..298cd3d77cbac --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/WpDocLinkParse_Test.php @@ -0,0 +1,103 @@ +assertSame( $expected, wp_doc_link_parse( $content ) ); + } + + /** + * Data provider for test_wp_doc_link_parse(). + * + * @return array + */ + public function data_wp_doc_link_parse(): array { + return array( + 'empty string' => array( + 'content' => '', + 'expected' => array(), + ), + 'null (invalid type)' => array( + 'content' => null, + 'expected' => array(), + ), + 'simple function call' => array( + 'content' => '', + 'expected' => array( 'get_header' ), + ), + 'multiple unique functions' => array( + 'content' => '', + 'expected' => array( 'get_header', 'wp_footer' ), + ), + 'duplicate functions' => array( + 'content' => '', + 'expected' => array( '_e' ), + ), + 'function call with space' => array( + 'content' => '', + 'expected' => array( 'is_array' ), + ), + 'sorted output' => array( + 'content' => '', + 'expected' => array( 'alpha', 'zeta' ), + ), + 'local function definition' => array( + 'content' => '', + 'expected' => array(), + ), + 'class method call' => array( + 'content' => 'my_method(); ?>', + 'expected' => array(), + ), + 'static class method call' => array( + 'content' => '', + 'expected' => array( 'my_static_method' ), // token_get_all() handles :: differently. + ), + 'mixed content' => array( + 'content' => 'method(); + esc_html( "test" ); + ?>', + 'expected' => array( 'esc_html', 'wp_remote_get' ), + ), + ); + } + + /** + * Tests the `documentation_ignore_functions` filter. + * + * @ticket 65182 + */ + public function test_wp_doc_link_parse_filter() { + $filter = function ( $ignore ) { + $ignore[] = 'wp_remote_get'; + return $ignore; + }; + + add_filter( 'documentation_ignore_functions', $filter ); + $result = wp_doc_link_parse( '' ); + remove_filter( 'documentation_ignore_functions', $filter ); + + $this->assertSame( array( 'esc_html' ), $result ); + } +} From 5a96ff4d54a97955b02ac3c20f3ae7f21185232f Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 17 May 2026 22:50:21 +0000 Subject: [PATCH 099/106] Tests: Correct some test class names. Follow-up to [62313], [62352], [62366]. See #64894. git-svn-id: https://develop.svn.wordpress.org/trunk@62370 602fd350-edb4-49c9-b593-d223f7449a82 --- .../admin/includes/misc/CustomizerMobileViewportMeta_Test.php | 2 +- .../admin/includes/misc/UpdateOptionNewAdminEmail_Test.php | 2 +- tests/phpunit/tests/admin/includes/misc/UrlShorten_Test.php | 2 +- .../tests/admin/includes/misc/WpAdminViewportMeta_Test.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/misc/CustomizerMobileViewportMeta_Test.php b/tests/phpunit/tests/admin/includes/misc/CustomizerMobileViewportMeta_Test.php index 4a7f5cda98875..fd29f47220568 100644 --- a/tests/phpunit/tests/admin/includes/misc/CustomizerMobileViewportMeta_Test.php +++ b/tests/phpunit/tests/admin/includes/misc/CustomizerMobileViewportMeta_Test.php @@ -5,7 +5,7 @@ * * @covers ::_customizer_mobile_viewport_meta */ -class Tests_Admin_Includes_Misc_Customizer_Mobile_Viewport_Meta_Test extends WP_UnitTestCase { +class Tests_Admin_Includes_Misc_CustomizerMobileViewportMeta_Test extends WP_UnitTestCase { /** * Tests _customizer_mobile_viewport_meta(). diff --git a/tests/phpunit/tests/admin/includes/misc/UpdateOptionNewAdminEmail_Test.php b/tests/phpunit/tests/admin/includes/misc/UpdateOptionNewAdminEmail_Test.php index 8dd2c48e85da0..1a9a42da77258 100644 --- a/tests/phpunit/tests/admin/includes/misc/UpdateOptionNewAdminEmail_Test.php +++ b/tests/phpunit/tests/admin/includes/misc/UpdateOptionNewAdminEmail_Test.php @@ -5,7 +5,7 @@ * * @covers ::update_option_new_admin_email */ -class Admin_Includes_Misc_UpdateOptionNewAdminEmail_Test extends WP_UnitTestCase { +class Tests_Admin_Includes_Misc_UpdateOptionNewAdminEmail_Test extends WP_UnitTestCase { /** * @ticket 59520 diff --git a/tests/phpunit/tests/admin/includes/misc/UrlShorten_Test.php b/tests/phpunit/tests/admin/includes/misc/UrlShorten_Test.php index f5ddd943fed5b..8146f4f3b0e40 100644 --- a/tests/phpunit/tests/admin/includes/misc/UrlShorten_Test.php +++ b/tests/phpunit/tests/admin/includes/misc/UrlShorten_Test.php @@ -5,7 +5,7 @@ * * @covers ::url_shorten */ -class Admin_Includes_Misc_UrlShorten_Test extends WP_UnitTestCase { +class Tests_Admin_Includes_Misc_UrlShorten_Test extends WP_UnitTestCase { public function test_url_shorten() { $tests = array( diff --git a/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php b/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php index d651d4d1206e3..4323afb3ece45 100644 --- a/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php +++ b/tests/phpunit/tests/admin/includes/misc/WpAdminViewportMeta_Test.php @@ -5,7 +5,7 @@ * * @covers ::wp_admin_viewport_meta */ -class Tests_Admin_Includes_Misc_Wp_Admin_Viewport_Meta_Test extends WP_UnitTestCase { +class Tests_Admin_Includes_Misc_WpAdminViewportMeta_Test extends WP_UnitTestCase { /** * Tests wp_admin_viewport_meta() output. From 5307e2da177a4e964aad0500bd9133b5cb22454b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 18 May 2026 22:35:25 +0000 Subject: [PATCH 100/106] Tests: Add unit tests for `wp_admin_canonical_url()`. Follow-up to [31736]. Props pbearne. Fixes #65192. git-svn-id: https://develop.svn.wordpress.org/trunk@62371 602fd350-edb4-49c9-b593-d223f7449a82 --- .../misc/WpAdminCanonicalUrl_Test.php | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/WpAdminCanonicalUrl_Test.php diff --git a/tests/phpunit/tests/admin/includes/misc/WpAdminCanonicalUrl_Test.php b/tests/phpunit/tests/admin/includes/misc/WpAdminCanonicalUrl_Test.php new file mode 100644 index 0000000000000..bf51c161e85c1 --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/WpAdminCanonicalUrl_Test.php @@ -0,0 +1,133 @@ +server_orig = $_SERVER; + } + + public function tear_down() { + $_SERVER = $this->server_orig; + + parent::tear_down(); + } + + /** + * Tests wp_admin_canonical_url(). + * + * @ticket 65192 + * + * @dataProvider data_wp_admin_canonical_url + * + * @param array $server_vars `$_SERVER` variables to set. + * @param string $expected Expected output substring. + */ + public function test_wp_admin_canonical_url( array $server_vars, $expected ) { + foreach ( $server_vars as $key => $value ) { + $_SERVER[ $key ] = $value; + } + + ob_start(); + wp_admin_canonical_url(); + $output = ob_get_clean(); + + $this->assertStringContainsString( $expected, $output ); + $this->assertStringContainsString( '