diff --git a/.eslintrc.js b/.eslintrc.js
index 6626a55a762d1..402c16ec5c80f 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -116,9 +116,15 @@ const restrictedSyntax = [
},
{
selector:
- 'CallExpression[callee.name=/^(__|_x|_n|_nx)$/] > Literal[value=/^toggle\\b/i]',
+ 'CallExpression[callee.name=/^(__|_x|_n|_nx)$/] > Literal[value=/toggle\\b/i]',
message: "Avoid using the verb 'Toggle' in translatable strings",
},
+ {
+ selector:
+ 'CallExpression[callee.name=/^(__|_x|_n|_nx)$/] > Literal[value=/(?data['content']['raw'] ) ) {
- return $response;
- }
+ /**
+ * Hooks into the REST API response for the Posts endpoint and adds the first and last inner blocks.
+ *
+ * @since 6.6.0
+ * @since 6.8.0 Support non-`wp_navigation` post types.
+ *
+ * @param WP_REST_Response $response The response object.
+ * @param WP_Post $post Post object.
+ * @return WP_REST_Response The response object.
+ */
+ function gutenberg_insert_hooked_blocks_into_rest_response( $response, $post ) {
+ if ( empty( $response->data['content']['raw'] ) ) {
+ return $response;
+ }
- $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'
- );
+ $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'
+ );
- // If the rendered content was previously empty, we leave it like that.
- if ( empty( $response->data['content']['rendered'] ) ) {
- return $response;
- }
+ // If the rendered content was previously empty, we leave it like that.
+ if ( empty( $response->data['content']['rendered'] ) ) {
+ return $response;
+ }
- // No need to inject hooked blocks twice.
- $priority = has_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object' );
- if ( false !== $priority ) {
- remove_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object', $priority );
- }
+ // No need to inject hooked blocks twice.
+ $priority = has_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object' );
+ if ( false !== $priority ) {
+ remove_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object', $priority );
+ }
- /** This filter is documented in wp-includes/post-template.php */
- $response->data['content']['rendered'] = apply_filters(
- 'the_content',
- $response->data['content']['raw']
- );
+ /** This filter is documented in wp-includes/post-template.php */
+ $response->data['content']['rendered'] = apply_filters(
+ 'the_content',
+ $response->data['content']['raw']
+ );
+
+ // Add back the filter.
+ if ( false !== $priority ) {
+ add_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object', $priority );
+ }
- // Add back the filter.
- if ( false !== $priority ) {
- add_filter( 'the_content', 'apply_block_hooks_to_content_from_post_object', $priority );
+ return $response;
}
+ remove_filter( 'rest_prepare_page', 'insert_hooked_blocks_into_rest_response' );
+ add_filter( 'rest_prepare_page', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
+
+ remove_filter( 'rest_prepare_post', 'insert_hooked_blocks_into_rest_response' );
+ add_filter( 'rest_prepare_post', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
- return $response;
+ remove_filter( 'rest_prepare_wp_block', 'insert_hooked_blocks_into_rest_response' );
+ add_filter( 'rest_prepare_wp_block', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
}
-add_filter( 'rest_prepare_page', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
-add_filter( 'rest_prepare_post', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
-add_filter( 'rest_prepare_wp_block', 'gutenberg_insert_hooked_blocks_into_rest_response', 10, 2 );
/**
* Updates the wp_postmeta with the list of ignored hooked blocks
diff --git a/lib/compat/wordpress-6.8/post.php b/lib/compat/wordpress-6.8/post.php
index 2477e94f7393c..b205e9dc81b89 100644
--- a/lib/compat/wordpress-6.8/post.php
+++ b/lib/compat/wordpress-6.8/post.php
@@ -4,23 +4,16 @@
* Set the default editor mode for the page post type to `template-locked`.
*
* Note: This backports into `create_initial_post_types` in WordPress Core.
- *
- * @param array $args Array of post type arguments.
- * @return array Updated array of post type arguments.
*/
-function gutenberg_update_page_editor_support( $args ) {
- if ( empty( $args['supports'] ) ) {
- return $args;
+function gutenberg_update_page_editor_support() {
+ // Avoid enabling the editor for pages when it's not supported.
+ // This is plugin specific safeguard.
+ if ( ! post_type_supports( 'page', 'editor' ) ) {
+ return;
}
- $editor_support_key = array_search( 'editor', $args['supports'], true );
- if ( false !== $editor_support_key ) {
- unset( $args['supports'][ $editor_support_key ] );
- $args['supports']['editor'] = array(
- 'default-mode' => 'template-locked',
- );
+ if ( wp_is_block_theme() ) {
+ add_post_type_support( 'page', 'editor', array( 'default-mode' => 'template-locked' ) );
}
-
- return $args;
}
-add_action( 'register_page_post_type_args', 'gutenberg_update_page_editor_support' );
+add_action( 'init', 'gutenberg_update_page_editor_support' );
diff --git a/lib/compat/wordpress-6.8/rest-api.php b/lib/compat/wordpress-6.8/rest-api.php
index fc68077b67f76..f6844184ea610 100644
--- a/lib/compat/wordpress-6.8/rest-api.php
+++ b/lib/compat/wordpress-6.8/rest-api.php
@@ -80,7 +80,7 @@ function gutenberg_add_default_template_types_to_index( WP_REST_Response $respon
* @param WP_Post_Type $post_type Post type object.
* @return array
*/
-function gutenberg_modify_post_collection_paramt( $query_params, WP_Post_Type $post_type ) {
+function gutenberg_modify_post_collection_param( $query_params, WP_Post_Type $post_type ) {
if ( 'post' === $post_type->name && ! isset( $query_params['ignore_sticky'] ) ) {
$query_params['ignore_sticky'] = array(
'description' => __( 'Whether to ignore sticky posts or not.' ),
@@ -91,7 +91,7 @@ function gutenberg_modify_post_collection_paramt( $query_params, WP_Post_Type $p
return $query_params;
}
-add_filter( 'rest_post_collection_params', 'gutenberg_modify_post_collection_paramt', 10, 2 );
+add_filter( 'rest_post_collection_params', 'gutenberg_modify_post_collection_param', 10, 2 );
/**
* Modify posts query based on `ignore_sticky` parameter.
diff --git a/package-lock.json b/package-lock.json
index fc677548195ff..5c4445331576d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "gutenberg",
- "version": "20.2.0",
+ "version": "20.3.0-rc.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "gutenberg",
- "version": "20.2.0",
+ "version": "20.3.0-rc.1",
"hasInstallScript": true,
"license": "GPL-2.0-or-later",
"workspaces": [
@@ -48711,7 +48711,7 @@
},
"packages/a11y": {
"name": "@wordpress/a11y",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -48725,7 +48725,7 @@
},
"packages/annotations": {
"name": "@wordpress/annotations",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -48753,7 +48753,7 @@
},
"packages/api-fetch": {
"name": "@wordpress/api-fetch",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -48767,7 +48767,7 @@
},
"packages/autop": {
"name": "@wordpress/autop",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -48779,7 +48779,7 @@
},
"packages/babel-plugin-import-jsx-pragma": {
"name": "@wordpress/babel-plugin-import-jsx-pragma",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -48791,7 +48791,7 @@
},
"packages/babel-plugin-makepot": {
"name": "@wordpress/babel-plugin-makepot",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"deepmerge": "^4.3.0",
@@ -48808,7 +48808,7 @@
},
"packages/babel-preset-default": {
"name": "@wordpress/babel-preset-default",
- "version": "8.17.0",
+ "version": "8.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/core": "7.25.7",
@@ -49939,7 +49939,7 @@
},
"packages/base-styles": {
"name": "@wordpress/base-styles",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -49948,7 +49948,7 @@
},
"packages/blob": {
"name": "@wordpress/blob",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -49960,7 +49960,7 @@
},
"packages/block-directory": {
"name": "@wordpress/block-directory",
- "version": "5.17.1",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -49996,7 +49996,7 @@
},
"packages/block-editor": {
"name": "@wordpress/block-editor",
- "version": "14.12.0",
+ "version": "14.13.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50096,7 +50096,7 @@
},
"packages/block-library": {
"name": "@wordpress/block-library",
- "version": "9.17.0",
+ "version": "9.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50162,7 +50162,7 @@
},
"packages/block-serialization-default-parser": {
"name": "@wordpress/block-serialization-default-parser",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -50174,7 +50174,7 @@
},
"packages/block-serialization-spec-parser": {
"name": "@wordpress/block-serialization-spec-parser",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"pegjs": "^0.10.0",
@@ -50187,7 +50187,7 @@
},
"packages/blocks": {
"name": "@wordpress/blocks",
- "version": "14.6.0",
+ "version": "14.7.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50241,7 +50241,7 @@
},
"packages/browserslist-config": {
"name": "@wordpress/browserslist-config",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -50250,7 +50250,7 @@
},
"packages/commands": {
"name": "@wordpress/commands",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50489,7 +50489,7 @@
},
"packages/components": {
"name": "@wordpress/components",
- "version": "29.3.0",
+ "version": "29.4.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@ariakit/react": "^0.4.15",
@@ -50580,7 +50580,7 @@
},
"packages/compose": {
"name": "@wordpress/compose",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50617,7 +50617,7 @@
},
"packages/core-commands": {
"name": "@wordpress/core-commands",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50646,7 +50646,7 @@
},
"packages/core-data": {
"name": "@wordpress/core-data",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50691,7 +50691,7 @@
},
"packages/create-block": {
"name": "@wordpress/create-block",
- "version": "4.60.0",
+ "version": "4.61.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@inquirer/prompts": "^7.2.0",
@@ -50718,7 +50718,7 @@
},
"packages/create-block-interactive-template": {
"name": "@wordpress/create-block-interactive-template",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -50727,7 +50727,7 @@
},
"packages/create-block-tutorial-template": {
"name": "@wordpress/create-block-tutorial-template",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -50736,7 +50736,7 @@
},
"packages/customize-widgets": {
"name": "@wordpress/customize-widgets",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50774,7 +50774,7 @@
},
"packages/data": {
"name": "@wordpress/data",
- "version": "10.17.0",
+ "version": "10.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50803,7 +50803,7 @@
},
"packages/data-controls": {
"name": "@wordpress/data-controls",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50821,7 +50821,7 @@
},
"packages/dataviews": {
"name": "@wordpress/dataviews",
- "version": "4.13.0",
+ "version": "4.14.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@ariakit/react": "^0.4.15",
@@ -50848,7 +50848,7 @@
},
"packages/date": {
"name": "@wordpress/date",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50863,7 +50863,7 @@
},
"packages/dependency-extraction-webpack-plugin": {
"name": "@wordpress/dependency-extraction-webpack-plugin",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"json2php": "^0.0.7"
@@ -50878,7 +50878,7 @@
},
"packages/deprecated": {
"name": "@wordpress/deprecated",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50891,7 +50891,7 @@
},
"packages/docgen": {
"name": "@wordpress/docgen",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/core": "7.25.7",
@@ -50912,7 +50912,7 @@
},
"packages/dom": {
"name": "@wordpress/dom",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50925,7 +50925,7 @@
},
"packages/dom-ready": {
"name": "@wordpress/dom-ready",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -50937,7 +50937,7 @@
},
"packages/e2e-test-utils": {
"name": "@wordpress/e2e-test-utils",
- "version": "11.17.0",
+ "version": "11.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -50959,7 +50959,7 @@
},
"packages/e2e-test-utils-playwright": {
"name": "@wordpress/e2e-test-utils-playwright",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"change-case": "^4.1.2",
@@ -50985,7 +50985,7 @@
},
"packages/e2e-tests": {
"name": "@wordpress/e2e-tests",
- "version": "8.17.0",
+ "version": "8.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@wordpress/e2e-test-utils": "file:../e2e-test-utils",
@@ -51023,7 +51023,7 @@
},
"packages/edit-post": {
"name": "@wordpress/edit-post",
- "version": "8.17.1",
+ "version": "8.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51070,7 +51070,7 @@
},
"packages/edit-site": {
"name": "@wordpress/edit-site",
- "version": "6.17.1",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51133,7 +51133,7 @@
},
"packages/edit-widgets": {
"name": "@wordpress/edit-widgets",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51176,7 +51176,7 @@
},
"packages/editor": {
"name": "@wordpress/editor",
- "version": "14.17.1",
+ "version": "14.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51238,7 +51238,7 @@
},
"packages/element": {
"name": "@wordpress/element",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51257,7 +51257,7 @@
},
"packages/env": {
"name": "@wordpress/env",
- "version": "10.17.0",
+ "version": "10.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@inquirer/prompts": "^7.2.0",
@@ -51306,7 +51306,7 @@
},
"packages/escape-html": {
"name": "@wordpress/escape-html",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -51318,7 +51318,7 @@
},
"packages/eslint-plugin": {
"name": "@wordpress/eslint-plugin",
- "version": "22.3.0",
+ "version": "22.4.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/eslint-parser": "7.25.7",
@@ -51387,7 +51387,7 @@
},
"packages/fields": {
"name": "@wordpress/fields",
- "version": "0.9.0",
+ "version": "0.10.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51429,7 +51429,7 @@
},
"packages/format-library": {
"name": "@wordpress/format-library",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51457,7 +51457,7 @@
},
"packages/hooks": {
"name": "@wordpress/hooks",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -51469,7 +51469,7 @@
},
"packages/html-entities": {
"name": "@wordpress/html-entities",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -51481,7 +51481,7 @@
},
"packages/i18n": {
"name": "@wordpress/i18n",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51501,7 +51501,7 @@
},
"packages/icons": {
"name": "@wordpress/icons",
- "version": "10.17.0",
+ "version": "10.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51515,7 +51515,7 @@
},
"packages/interactivity": {
"name": "@wordpress/interactivity",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@preact/signals": "^1.3.0",
@@ -51528,7 +51528,7 @@
},
"packages/interactivity-router": {
"name": "@wordpress/interactivity-router",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@wordpress/a11y": "file:../a11y",
@@ -51541,7 +51541,7 @@
},
"packages/interface": {
"name": "@wordpress/interface",
- "version": "9.2.0",
+ "version": "9.3.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51569,7 +51569,7 @@
},
"packages/is-shallow-equal": {
"name": "@wordpress/is-shallow-equal",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -51581,7 +51581,7 @@
},
"packages/jest-console": {
"name": "@wordpress/jest-console",
- "version": "8.17.0",
+ "version": "8.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51597,7 +51597,7 @@
},
"packages/jest-preset-default": {
"name": "@wordpress/jest-preset-default",
- "version": "12.17.0",
+ "version": "12.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@wordpress/jest-console": "file:../jest-console",
@@ -51614,7 +51614,7 @@
},
"packages/jest-puppeteer-axe": {
"name": "@wordpress/jest-puppeteer-axe",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@axe-core/puppeteer": "^4.0.0",
@@ -51636,7 +51636,7 @@
},
"packages/keyboard-shortcuts": {
"name": "@wordpress/keyboard-shortcuts",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51654,7 +51654,7 @@
},
"packages/keycodes": {
"name": "@wordpress/keycodes",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51667,7 +51667,7 @@
},
"packages/lazy-import": {
"name": "@wordpress/lazy-import",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"execa": "^4.0.2",
@@ -51681,7 +51681,7 @@
},
"packages/list-reusable-blocks": {
"name": "@wordpress/list-reusable-blocks",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51704,7 +51704,7 @@
},
"packages/media-utils": {
"name": "@wordpress/media-utils",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51721,7 +51721,7 @@
},
"packages/notices": {
"name": "@wordpress/notices",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51738,7 +51738,7 @@
},
"packages/npm-package-json-lint-config": {
"name": "@wordpress/npm-package-json-lint-config",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -51750,7 +51750,7 @@
},
"packages/nux": {
"name": "@wordpress/nux",
- "version": "9.17.0",
+ "version": "9.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51773,7 +51773,7 @@
},
"packages/patterns": {
"name": "@wordpress/patterns",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51803,7 +51803,7 @@
},
"packages/plugins": {
"name": "@wordpress/plugins",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51827,7 +51827,7 @@
},
"packages/postcss-plugins-preset": {
"name": "@wordpress/postcss-plugins-preset",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@wordpress/base-styles": "file:../base-styles",
@@ -51896,7 +51896,7 @@
},
"packages/postcss-themes": {
"name": "@wordpress/postcss-themes",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -51908,7 +51908,7 @@
},
"packages/preferences": {
"name": "@wordpress/preferences",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51934,7 +51934,7 @@
},
"packages/preferences-persistence": {
"name": "@wordpress/preferences-persistence",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51947,7 +51947,7 @@
},
"packages/prettier-config": {
"name": "@wordpress/prettier-config",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -51959,7 +51959,7 @@
},
"packages/primitives": {
"name": "@wordpress/primitives",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51976,7 +51976,7 @@
},
"packages/priority-queue": {
"name": "@wordpress/priority-queue",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -51989,7 +51989,7 @@
},
"packages/private-apis": {
"name": "@wordpress/private-apis",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -52001,7 +52001,7 @@
},
"packages/project-management-automation": {
"name": "@wordpress/project-management-automation",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@actions/core": "1.9.1",
@@ -52029,7 +52029,7 @@
},
"packages/react-i18n": {
"name": "@wordpress/react-i18n",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52185,7 +52185,7 @@
},
"packages/readable-js-assets-webpack-plugin": {
"name": "@wordpress/readable-js-assets-webpack-plugin",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -52197,7 +52197,7 @@
},
"packages/redux-routine": {
"name": "@wordpress/redux-routine",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52240,7 +52240,7 @@
},
"packages/reusable-blocks": {
"name": "@wordpress/reusable-blocks",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52267,7 +52267,7 @@
},
"packages/rich-text": {
"name": "@wordpress/rich-text",
- "version": "7.17.0",
+ "version": "7.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52291,7 +52291,7 @@
},
"packages/router": {
"name": "@wordpress/router",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52312,7 +52312,7 @@
},
"packages/scripts": {
"name": "@wordpress/scripts",
- "version": "30.10.0",
+ "version": "30.11.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/core": "7.25.7",
@@ -52450,7 +52450,7 @@
},
"packages/server-side-render": {
"name": "@wordpress/server-side-render",
- "version": "5.17.0",
+ "version": "5.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52476,7 +52476,7 @@
},
"packages/shortcode": {
"name": "@wordpress/shortcode",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52489,7 +52489,7 @@
},
"packages/style-engine": {
"name": "@wordpress/style-engine",
- "version": "2.17.0",
+ "version": "2.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52502,7 +52502,7 @@
},
"packages/stylelint-config": {
"name": "@wordpress/stylelint-config",
- "version": "23.9.0",
+ "version": "23.10.0",
"license": "MIT",
"dependencies": {
"@stylistic/stylelint-plugin": "^3.0.1",
@@ -52613,7 +52613,7 @@
},
"packages/sync": {
"name": "@wordpress/sync",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52634,7 +52634,7 @@
},
"packages/token-list": {
"name": "@wordpress/token-list",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
@@ -52646,7 +52646,7 @@
},
"packages/undo-manager": {
"name": "@wordpress/undo-manager",
- "version": "1.17.0",
+ "version": "1.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52659,7 +52659,7 @@
},
"packages/upload-media": {
"name": "@wordpress/upload-media",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52686,7 +52686,7 @@
},
"packages/url": {
"name": "@wordpress/url",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52699,7 +52699,7 @@
},
"packages/viewport": {
"name": "@wordpress/viewport",
- "version": "6.17.0",
+ "version": "6.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52729,7 +52729,7 @@
},
"packages/warning": {
"name": "@wordpress/warning",
- "version": "3.17.0",
+ "version": "3.18.0",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -52738,7 +52738,7 @@
},
"packages/widgets": {
"name": "@wordpress/widgets",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7",
@@ -52766,7 +52766,7 @@
},
"packages/wordcount": {
"name": "@wordpress/wordcount",
- "version": "4.17.0",
+ "version": "4.18.0",
"license": "GPL-2.0-or-later",
"dependencies": {
"@babel/runtime": "7.25.7"
diff --git a/package.json b/package.json
index 3d0194fb941bb..5459c72eb1472 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "gutenberg",
- "version": "20.2.0",
+ "version": "20.3.0-rc.1",
"private": true,
"description": "A new WordPress editor experience.",
"author": "The WordPress Contributors",
diff --git a/packages/a11y/CHANGELOG.md b/packages/a11y/CHANGELOG.md
index 1d1cd67af3f9b..fd74179d52ace 100644
--- a/packages/a11y/CHANGELOG.md
+++ b/packages/a11y/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/a11y/package.json b/packages/a11y/package.json
index a3a82f38284b3..bd38351dc08c7 100644
--- a/packages/a11y/package.json
+++ b/packages/a11y/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/a11y",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Accessibility (a11y) utilities for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/annotations/CHANGELOG.md b/packages/annotations/CHANGELOG.md
index fdcd5be5577ae..4bd66ad29cc8c 100644
--- a/packages/annotations/CHANGELOG.md
+++ b/packages/annotations/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/annotations/package.json b/packages/annotations/package.json
index 70af684c11b3d..f36523a6a6d69 100644
--- a/packages/annotations/package.json
+++ b/packages/annotations/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/annotations",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Annotate content in the Gutenberg editor.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/api-fetch/CHANGELOG.md b/packages/api-fetch/CHANGELOG.md
index 9e53a80788570..addb72db662c7 100644
--- a/packages/api-fetch/CHANGELOG.md
+++ b/packages/api-fetch/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/api-fetch/package.json b/packages/api-fetch/package.json
index 43a52dc89fe36..8c6d91542dbd0 100644
--- a/packages/api-fetch/package.json
+++ b/packages/api-fetch/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/api-fetch",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "Utility to make WordPress REST API requests.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/autop/CHANGELOG.md b/packages/autop/CHANGELOG.md
index edba622956be3..8daf97afc88e2 100644
--- a/packages/autop/CHANGELOG.md
+++ b/packages/autop/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/autop/package.json b/packages/autop/package.json
index 8c187d2ecedee..aa29e8c277da4 100644
--- a/packages/autop/package.json
+++ b/packages/autop/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/autop",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress's automatic paragraph functions `autop` and `removep`.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/babel-plugin-import-jsx-pragma/CHANGELOG.md b/packages/babel-plugin-import-jsx-pragma/CHANGELOG.md
index d74cc123def45..9a8440fe6c493 100644
--- a/packages/babel-plugin-import-jsx-pragma/CHANGELOG.md
+++ b/packages/babel-plugin-import-jsx-pragma/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/babel-plugin-import-jsx-pragma/package.json b/packages/babel-plugin-import-jsx-pragma/package.json
index a0003205b6b6b..0752261edc577 100644
--- a/packages/babel-plugin-import-jsx-pragma/package.json
+++ b/packages/babel-plugin-import-jsx-pragma/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/babel-plugin-import-jsx-pragma",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Babel transform plugin for automatically injecting an import to be used as the pragma for the React JSX Transform plugin.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/babel-plugin-makepot/CHANGELOG.md b/packages/babel-plugin-makepot/CHANGELOG.md
index b3a1bafe646f6..ce3b825fd0f89 100644
--- a/packages/babel-plugin-makepot/CHANGELOG.md
+++ b/packages/babel-plugin-makepot/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/babel-plugin-makepot/package.json b/packages/babel-plugin-makepot/package.json
index 20c3957796c3b..5d81bc61f4d0a 100644
--- a/packages/babel-plugin-makepot/package.json
+++ b/packages/babel-plugin-makepot/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/babel-plugin-makepot",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "WordPress Babel internationalization (i18n) plugin.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/babel-preset-default/CHANGELOG.md b/packages/babel-preset-default/CHANGELOG.md
index aa827876828c5..625ef7f09e863 100644
--- a/packages/babel-preset-default/CHANGELOG.md
+++ b/packages/babel-preset-default/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 8.18.0 (2025-02-12)
+
## 8.17.0 (2025-01-29)
## 8.16.0 (2025-01-15)
diff --git a/packages/babel-preset-default/package.json b/packages/babel-preset-default/package.json
index e1e43984e69f2..220d9317ccc1a 100644
--- a/packages/babel-preset-default/package.json
+++ b/packages/babel-preset-default/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/babel-preset-default",
- "version": "8.17.0",
+ "version": "8.18.0",
"description": "Default Babel preset for WordPress development.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/base-styles/CHANGELOG.md b/packages/base-styles/CHANGELOG.md
index e4aceae936710..7c3ef6a48774b 100644
--- a/packages/base-styles/CHANGELOG.md
+++ b/packages/base-styles/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/base-styles/package.json b/packages/base-styles/package.json
index 63590daa9c178..c87d3c18e8dc3 100644
--- a/packages/base-styles/package.json
+++ b/packages/base-styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/base-styles",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Base SCSS utilities and variables for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/blob/CHANGELOG.md b/packages/blob/CHANGELOG.md
index be1d924dd4576..2b12b40acd9be 100644
--- a/packages/blob/CHANGELOG.md
+++ b/packages/blob/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/blob/package.json b/packages/blob/package.json
index 9a0b10a416bec..85b897653f904 100644
--- a/packages/blob/package.json
+++ b/packages/blob/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/blob",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Blob utilities for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/block-directory/CHANGELOG.md b/packages/block-directory/CHANGELOG.md
index 0ac19bd45c864..589ed8b0008d4 100644
--- a/packages/block-directory/CHANGELOG.md
+++ b/packages/block-directory/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/block-directory/package.json b/packages/block-directory/package.json
index f7750c2e49f17..7d9e15bc06940 100644
--- a/packages/block-directory/package.json
+++ b/packages/block-directory/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/block-directory",
- "version": "5.17.1",
+ "version": "5.18.0",
"description": "Extend editor with block directory features to search, download and install blocks.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/block-editor/CHANGELOG.md b/packages/block-editor/CHANGELOG.md
index 18bb4d23d0a7a..b96bfe7a20b95 100644
--- a/packages/block-editor/CHANGELOG.md
+++ b/packages/block-editor/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 14.13.0 (2025-02-12)
+
## 14.12.0 (2025-01-29)
## 14.11.0 (2025-01-15)
diff --git a/packages/block-editor/package.json b/packages/block-editor/package.json
index bb247c1d28356..2a60409071843 100644
--- a/packages/block-editor/package.json
+++ b/packages/block-editor/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/block-editor",
- "version": "14.12.0",
+ "version": "14.13.0",
"description": "Generic block editor.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/block-editor/src/components/background-image-control/index.js b/packages/block-editor/src/components/background-image-control/index.js
index 3411d7d3ee8a9..62bffb54218c5 100644
--- a/packages/block-editor/src/components/background-image-control/index.js
+++ b/packages/block-editor/src/components/background-image-control/index.js
@@ -313,12 +313,6 @@ function BackgroundImageControls( {
// Drag and drop callback, restricting image to one.
const onFilesDrop = ( filesList ) => {
- if ( filesList?.length > 1 ) {
- onUploadError(
- __( 'Only one image can be used as a background image.' )
- );
- return;
- }
getSettings().mediaUpload( {
allowedTypes: [ IMAGE_BACKGROUND_TYPE ],
filesList,
@@ -326,6 +320,7 @@ function BackgroundImageControls( {
onSelectMedia( image );
},
onError: onUploadError,
+ multiple: false,
} );
};
diff --git a/packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js b/packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js
index b8432d1669f28..4862acd63d548 100644
--- a/packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js
+++ b/packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js
@@ -93,7 +93,7 @@ export default function AspectRatioDropdown( { toggleProps } ) {
{
slug: 'original',
name: __( 'Original' ),
- aspect: defaultAspect,
+ ratio: defaultAspect,
},
...( showDefaultRatios
? defaultRatios
diff --git a/packages/block-editor/src/components/media-placeholder/index.js b/packages/block-editor/src/components/media-placeholder/index.js
index e19e350f959b2..3d6578dcd39c2 100644
--- a/packages/block-editor/src/components/media-placeholder/index.js
+++ b/packages/block-editor/src/components/media-placeholder/index.js
@@ -227,6 +227,7 @@ export function MediaPlaceholder( {
filesList: files,
onFileChange: setMedia,
onError,
+ multiple,
} );
};
diff --git a/packages/block-editor/src/components/tool-selector/index.js b/packages/block-editor/src/components/tool-selector/index.js
index 8c4b5c86c4082..c4c216cbe68a7 100644
--- a/packages/block-editor/src/components/tool-selector/index.js
+++ b/packages/block-editor/src/components/tool-selector/index.js
@@ -95,7 +95,7 @@ function ToolSelector( props, ref ) {
{ __(
- 'Tools provide different sets of interactions for blocks. Toggle between simplified content tools (Write) and advanced visual editing tools (Design).'
+ 'Tools provide different sets of interactions for blocks. Choose between simplified content tools (Write) and advanced visual editing tools (Design).'
) }
>
diff --git a/packages/block-editor/src/components/writing-flow/use-tab-nav.js b/packages/block-editor/src/components/writing-flow/use-tab-nav.js
index 46c40d56fe96d..7f06cfe651db3 100644
--- a/packages/block-editor/src/components/writing-flow/use-tab-nav.js
+++ b/packages/block-editor/src/components/writing-flow/use-tab-nav.js
@@ -125,6 +125,10 @@ export default function useTabNav() {
return;
}
+ if ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {
+ return;
+ }
+
const isShift = event.shiftKey;
const direction = isShift ? 'findPrevious' : 'findNext';
const nextTabbable = focus.tabbable[ direction ]( event.target );
diff --git a/packages/block-editor/src/hooks/layout.js b/packages/block-editor/src/hooks/layout.js
index 54a376a0c6a4f..003a680940b97 100644
--- a/packages/block-editor/src/hooks/layout.js
+++ b/packages/block-editor/src/hooks/layout.js
@@ -257,7 +257,7 @@ function LayoutPanelPure( {
'Nested blocks use content width with options for full and wide widths.'
)
: __(
- 'Nested blocks will fill the width of this container. Toggle to constrain.'
+ 'Nested blocks will fill the width of this container.'
)
}
/>
diff --git a/packages/block-library/CHANGELOG.md b/packages/block-library/CHANGELOG.md
index 0a0f9ca66f054..b988f7d107fa6 100644
--- a/packages/block-library/CHANGELOG.md
+++ b/packages/block-library/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 9.18.0 (2025-02-12)
+
## 9.17.0 (2025-01-29)
## 9.16.0 (2025-01-15)
diff --git a/packages/block-library/package.json b/packages/block-library/package.json
index 87f1171783453..66d4fdcf9bad5 100644
--- a/packages/block-library/package.json
+++ b/packages/block-library/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/block-library",
- "version": "9.17.0",
+ "version": "9.18.0",
"description": "Block library for the WordPress editor.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/block-library/src/site-logo/edit.js b/packages/block-library/src/site-logo/edit.js
index d2d2327736fd7..f1ba371bfb35e 100644
--- a/packages/block-library/src/site-logo/edit.js
+++ b/packages/block-library/src/site-logo/edit.js
@@ -499,11 +499,6 @@ export default function LogoEdit( {
};
const onFilesDrop = ( filesList ) => {
- if ( filesList?.length > 1 ) {
- onUploadError( __( 'Only one image can be used as a site logo.' ) );
- return;
- }
-
getSettings().mediaUpload( {
allowedTypes: ALLOWED_MEDIA_TYPES,
filesList,
@@ -515,6 +510,7 @@ export default function LogoEdit( {
onInitialSelectLogo( image );
},
onError: onUploadError,
+ multiple: false,
} );
};
diff --git a/packages/block-library/src/social-link/editor.scss b/packages/block-library/src/social-link/editor.scss
index d61cf7c1a7cf5..af818d82eba49 100644
--- a/packages/block-library/src/social-link/editor.scss
+++ b/packages/block-library/src/social-link/editor.scss
@@ -16,6 +16,7 @@
height: auto;
font-weight: inherit;
font-family: inherit;
+ margin: 0;
// This rule ensures social link buttons display correctly in template parts.
opacity: 1;
diff --git a/packages/block-serialization-default-parser/CHANGELOG.md b/packages/block-serialization-default-parser/CHANGELOG.md
index 650eee5b822ba..c6d17488c91f2 100644
--- a/packages/block-serialization-default-parser/CHANGELOG.md
+++ b/packages/block-serialization-default-parser/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/block-serialization-default-parser/package.json b/packages/block-serialization-default-parser/package.json
index 45718ca769be6..742d5c10804ff 100644
--- a/packages/block-serialization-default-parser/package.json
+++ b/packages/block-serialization-default-parser/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/block-serialization-default-parser",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Block serialization specification parser for WordPress posts.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/block-serialization-spec-parser/CHANGELOG.md b/packages/block-serialization-spec-parser/CHANGELOG.md
index 8757648ae3549..d9db0a9c0b54a 100644
--- a/packages/block-serialization-spec-parser/CHANGELOG.md
+++ b/packages/block-serialization-spec-parser/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/block-serialization-spec-parser/package.json b/packages/block-serialization-spec-parser/package.json
index f188e9cd25660..03251c27157ca 100644
--- a/packages/block-serialization-spec-parser/package.json
+++ b/packages/block-serialization-spec-parser/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/block-serialization-spec-parser",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Block serialization specification parser for WordPress posts.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md
index 4cf4167097034..b83f66306873e 100644
--- a/packages/blocks/CHANGELOG.md
+++ b/packages/blocks/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 14.7.0 (2025-02-12)
+
## 14.6.0 (2025-01-29)
## 14.5.0 (2025-01-15)
diff --git a/packages/blocks/package.json b/packages/blocks/package.json
index 92410b54ba19a..8a0dc2f8c03c4 100644
--- a/packages/blocks/package.json
+++ b/packages/blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/blocks",
- "version": "14.6.0",
+ "version": "14.7.0",
"description": "Block API for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/browserslist-config/CHANGELOG.md b/packages/browserslist-config/CHANGELOG.md
index 122123b959678..14eb691cc8bb8 100644
--- a/packages/browserslist-config/CHANGELOG.md
+++ b/packages/browserslist-config/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/browserslist-config/package.json b/packages/browserslist-config/package.json
index 1253719c4724c..87a9ad4f38972 100644
--- a/packages/browserslist-config/package.json
+++ b/packages/browserslist-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/browserslist-config",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "WordPress Browserslist shared configuration.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/commands/CHANGELOG.md b/packages/commands/CHANGELOG.md
index cd8b74233cfeb..4a14b3d3c3c8a 100644
--- a/packages/commands/CHANGELOG.md
+++ b/packages/commands/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/commands/package.json b/packages/commands/package.json
index 5e2d57f7d92fb..27872b34a2979 100644
--- a/packages/commands/package.json
+++ b/packages/commands/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/commands",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "Handles the commands menu.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md
index a0f32cb9772ed..5336ad99124d4 100644
--- a/packages/components/CHANGELOG.md
+++ b/packages/components/CHANGELOG.md
@@ -2,6 +2,17 @@
## Unreleased
+### Enhancement
+- `BorderControlDropdown`, `BorderControl`: Reset button is always visible. ([#69066](https://github.com/WordPress/gutenberg/pull/69066)).
+
+### Internal
+
+- `NumberControl`: Fix invalid HTML attributes for infinite bounds ([#69033](https://github.com/WordPress/gutenberg/pull/69033)).
+
+## 29.4.0 (2025-02-12)
+
+- `FontSizePicker`: Remove Custom option from dropdown to prevent unexpected context changes during keyboard navigation ([#69038](https://github.com/WordPress/gutenberg/pull/69038)).
+
- `ComboboxControl`: Add an `isLoading` prop to show a loading spinner ([#68990](https://github.com/WordPress/gutenberg/pull/68990))
## 29.3.0 (2025-01-29)
diff --git a/packages/components/package.json b/packages/components/package.json
index 29a62cd7c49ff..f3c4f655f31a3 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/components",
- "version": "29.3.0",
+ "version": "29.4.0",
"description": "UI components for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/components/src/border-control/border-control-dropdown/component.tsx b/packages/components/src/border-control/border-control-dropdown/component.tsx
index 707497ae2993c..23ee902df5ffc 100644
--- a/packages/components/src/border-control/border-control-dropdown/component.tsx
+++ b/packages/components/src/border-control/border-control-dropdown/component.tsx
@@ -157,7 +157,7 @@ const BorderControlDropdown = (
onStyleChange,
popoverContentClassName,
popoverControlsClassName,
- resetButtonClassName,
+ resetButtonWrapperClassName,
size,
__unstablePopoverProps,
...otherProps
@@ -173,7 +173,7 @@ const BorderControlDropdown = (
enableStyle
);
- const showResetButton = color || ( style && style !== 'none' );
+ const enableResetButton = color || ( style && style !== 'none' );
const dropdownPosition = __experimentalIsRenderedInSidebar
? 'bottom left'
: undefined;
@@ -199,9 +199,7 @@ const BorderControlDropdown = (
);
- const renderContent: DropdownComponentProps[ 'renderContent' ] = ( {
- onClose,
- } ) => (
+ const renderContent: DropdownComponentProps[ 'renderContent' ] = () => (
<>
@@ -224,22 +222,20 @@ const BorderControlDropdown = (
/>
) }
-
- { showResetButton && (
-
+
{
onReset();
- onClose();
} }
+ disabled={ ! enableResetButton }
+ accessibleWhenDisabled
__next40pxDefaultSize
>
{ __( 'Reset' ) }
-
- ) }
+
+
>
);
diff --git a/packages/components/src/border-control/border-control-dropdown/hook.ts b/packages/components/src/border-control/border-control-dropdown/hook.ts
index 5366babc266c6..daba828fa64f2 100644
--- a/packages/components/src/border-control/border-control-dropdown/hook.ts
+++ b/packages/components/src/border-control/border-control-dropdown/hook.ts
@@ -76,8 +76,8 @@ export function useBorderControlDropdown(
return cx( styles.borderControlPopoverContent );
}, [ cx ] );
- const resetButtonClassName = useMemo( () => {
- return cx( styles.resetButton );
+ const resetButtonWrapperClassName = useMemo( () => {
+ return cx( styles.resetButtonWrapper );
}, [ cx ] );
return {
@@ -94,7 +94,7 @@ export function useBorderControlDropdown(
onReset,
popoverContentClassName,
popoverControlsClassName,
- resetButtonClassName,
+ resetButtonWrapperClassName,
size,
__experimentalIsRenderedInSidebar,
};
diff --git a/packages/components/src/border-control/styles.ts b/packages/components/src/border-control/styles.ts
index a678b6f362308..0109c0598e85b 100644
--- a/packages/components/src/border-control/styles.ts
+++ b/packages/components/src/border-control/styles.ts
@@ -147,16 +147,10 @@ export const borderControlPopoverControls = css`
export const borderControlPopoverContent = css``;
export const borderColorIndicator = css``;
-export const resetButton = css`
- justify-content: center;
- width: 100%;
-
- /* Override button component styling */
- && {
- border-top: ${ CONFIG.borderWidth } solid ${ COLORS.gray[ 400 ] };
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
+export const resetButtonWrapper = css`
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 12px;
`;
export const borderSlider = () => css`
diff --git a/packages/components/src/font-size-picker/font-size-picker-select.tsx b/packages/components/src/font-size-picker/font-size-picker-select.tsx
index b33c382f3393e..fcc80355ddd19 100644
--- a/packages/components/src/font-size-picker/font-size-picker-select.tsx
+++ b/packages/components/src/font-size-picker/font-size-picker-select.tsx
@@ -20,21 +20,8 @@ const DEFAULT_OPTION: FontSizePickerSelectOption = {
value: undefined,
};
-const CUSTOM_OPTION: FontSizePickerSelectOption = {
- key: 'custom',
- name: __( 'Custom' ),
-};
-
const FontSizePickerSelect = ( props: FontSizePickerSelectProps ) => {
- const {
- __next40pxDefaultSize,
- fontSizes,
- value,
- disableCustomFontSizes,
- size,
- onChange,
- onSelectCustom,
- } = props;
+ const { __next40pxDefaultSize, fontSizes, value, size, onChange } = props;
const areAllSizesSameUnit = !! getCommonSizeUnit( fontSizes );
@@ -59,12 +46,10 @@ const FontSizePickerSelect = ( props: FontSizePickerSelectProps ) => {
hint,
};
} ),
- ...( disableCustomFontSizes ? [] : [ CUSTOM_OPTION ] ),
];
- const selectedOption = value
- ? options.find( ( option ) => option.value === value ) ?? CUSTOM_OPTION
- : DEFAULT_OPTION;
+ const selectedOption =
+ options.find( ( option ) => option.value === value ) ?? DEFAULT_OPTION;
return (
{
}: {
selectedItem: FontSizePickerSelectOption;
} ) => {
- if ( selectedItem === CUSTOM_OPTION ) {
- onSelectCustom();
- } else {
- onChange( selectedItem.value );
- }
+ onChange( selectedItem.value );
} }
size={ size }
/>
diff --git a/packages/components/src/font-size-picker/test/index.tsx b/packages/components/src/font-size-picker/test/index.tsx
index 34e8ce17c67fa..b3612029df362 100644
--- a/packages/components/src/font-size-picker/test/index.tsx
+++ b/packages/components/src/font-size-picker/test/index.tsx
@@ -127,7 +127,7 @@ describe( 'FontSizePicker', () => {
screen.getByRole( 'combobox', { name: 'Font size' } )
);
const options = screen.getAllByRole( 'option' );
- expect( options ).toHaveLength( 8 );
+ expect( options ).toHaveLength( 7 );
expect( options[ 0 ] ).toHaveAccessibleName( 'Default' );
expect( options[ 1 ] ).toHaveAccessibleName( 'Tiny 8' );
expect( options[ 2 ] ).toHaveAccessibleName( 'Small 12' );
@@ -135,7 +135,6 @@ describe( 'FontSizePicker', () => {
expect( options[ 4 ] ).toHaveAccessibleName( 'Large 20' );
expect( options[ 5 ] ).toHaveAccessibleName( 'Extra Large 30' );
expect( options[ 6 ] ).toHaveAccessibleName( 'xx-large 40' );
- expect( options[ 7 ] ).toHaveAccessibleName( 'Custom' );
} );
test.each( [
@@ -186,7 +185,6 @@ describe( 'FontSizePicker', () => {
}
);
- commonSelectTests( fontSizes );
commonTests( fontSizes );
} );
@@ -231,7 +229,7 @@ describe( 'FontSizePicker', () => {
screen.getByRole( 'combobox', { name: 'Font size' } )
);
const options = screen.getAllByRole( 'option' );
- expect( options ).toHaveLength( 8 );
+ expect( options ).toHaveLength( 7 );
expect( options[ 0 ] ).toHaveAccessibleName( 'Default' );
expect( options[ 1 ] ).toHaveAccessibleName( 'Tiny 8px' );
expect( options[ 2 ] ).toHaveAccessibleName( 'Small 1em' );
@@ -239,7 +237,6 @@ describe( 'FontSizePicker', () => {
expect( options[ 4 ] ).toHaveAccessibleName( 'Large' );
expect( options[ 5 ] ).toHaveAccessibleName( 'Extra Large 30px' );
expect( options[ 6 ] ).toHaveAccessibleName( 'xx-large 40px' );
- expect( options[ 7 ] ).toHaveAccessibleName( 'Custom' );
} );
test.each( [
@@ -327,7 +324,6 @@ describe( 'FontSizePicker', () => {
}
);
- commonSelectTests( fontSizes );
commonTests( fontSizes );
} );
@@ -523,24 +519,6 @@ describe( 'FontSizePicker', () => {
);
}
- function commonSelectTests( fontSizes: FontSize[] ) {
- it( 'shows custom input when Custom is selected', async () => {
- const user = userEvent.setup();
- const onChange = jest.fn();
- await render(
-
- );
- await user.click(
- screen.getByRole( 'combobox', { name: 'Font size' } )
- );
- await user.click(
- screen.getByRole( 'option', { name: 'Custom' } )
- );
- expect( screen.getByLabelText( 'Custom' ) ).toBeVisible();
- expect( onChange ).not.toHaveBeenCalled();
- } );
- }
-
function commonTests( fontSizes: FontSize[] ) {
it( 'shows custom input when value is unknown', async () => {
await render(
diff --git a/packages/components/src/mobile/bottom-sheet/switch-cell.native.js b/packages/components/src/mobile/bottom-sheet/switch-cell.native.js
index 3e00756b1a7dc..0ada3fafc5672 100644
--- a/packages/components/src/mobile/bottom-sheet/switch-cell.native.js
+++ b/packages/components/src/mobile/bottom-sheet/switch-cell.native.js
@@ -57,7 +57,7 @@ export default function BottomSheetSwitchCell( props ) {
accessibilityRole="none"
accessibilityHint={
/* translators: accessibility text (hint for switches) */
- __( 'Double tap to toggle setting' )
+ __( 'Double tap to change setting' )
}
onPress={ onPress }
editable={ false }
diff --git a/packages/components/src/number-control/index.tsx b/packages/components/src/number-control/index.tsx
index 6dd1af4024af7..e890746e275e8 100644
--- a/packages/components/src/number-control/index.tsx
+++ b/packages/components/src/number-control/index.tsx
@@ -229,8 +229,8 @@ function UnforwardedNumberControl(
hideHTMLArrows={ spinControls !== 'native' }
isDragEnabled={ isDragEnabled }
label={ label }
- max={ max }
- min={ min }
+ max={ max === Infinity ? undefined : max }
+ min={ min === -Infinity ? undefined : min }
ref={ mergedRef }
required={ required }
step={ step }
diff --git a/packages/compose/CHANGELOG.md b/packages/compose/CHANGELOG.md
index 99fcb659f8b0e..c8ded48801871 100644
--- a/packages/compose/CHANGELOG.md
+++ b/packages/compose/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/compose/package.json b/packages/compose/package.json
index 4e9eb19d13acb..b8c4aa18863d7 100644
--- a/packages/compose/package.json
+++ b/packages/compose/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/compose",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "WordPress higher-order components (HOCs).",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/core-commands/CHANGELOG.md b/packages/core-commands/CHANGELOG.md
index 6fc42e7161dbc..5e8040c6c0fa4 100644
--- a/packages/core-commands/CHANGELOG.md
+++ b/packages/core-commands/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/core-commands/package.json b/packages/core-commands/package.json
index aa9fd5653c0b1..01e9fc74967e2 100644
--- a/packages/core-commands/package.json
+++ b/packages/core-commands/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/core-commands",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "WordPress core reusable commands.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/core-data/CHANGELOG.md b/packages/core-data/CHANGELOG.md
index a19879790fc70..40d6b0306aab6 100644
--- a/packages/core-data/CHANGELOG.md
+++ b/packages/core-data/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/core-data/package.json b/packages/core-data/package.json
index e6f84c7bd15e3..b6a3cac623470 100644
--- a/packages/core-data/package.json
+++ b/packages/core-data/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/core-data",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "Access to and manipulation of core WordPress entities.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/core-data/src/dynamic-entities.ts b/packages/core-data/src/dynamic-entities.ts
index 51b579cb0cfcf..7db8865fded64 100644
--- a/packages/core-data/src/dynamic-entities.ts
+++ b/packages/core-data/src/dynamic-entities.ts
@@ -18,6 +18,7 @@ export type WPEntityTypes< C extends ET.Context = 'edit' > = {
Site: ET.Settings< C >;
Status: ET.PostStatusObject< C >;
Taxonomy: ET.Taxonomy< C >;
+ Term: ET.Term< C >;
Theme: ET.Theme< C >;
UnstableBase: ET.UnstableBase< C >;
User: ET.User< C >;
diff --git a/packages/core-data/src/entity-types/index.ts b/packages/core-data/src/entity-types/index.ts
index 68087a74005b2..893de59cde548 100644
--- a/packages/core-data/src/entity-types/index.ts
+++ b/packages/core-data/src/entity-types/index.ts
@@ -17,6 +17,7 @@ import type { PostRevision } from './post-revision';
import type { Settings } from './settings';
import type { Sidebar } from './sidebar';
import type { Taxonomy } from './taxonomy';
+import type { Term } from './term';
import type { Theme } from './theme';
import type { User } from './user';
import type { Type } from './type';
@@ -46,6 +47,7 @@ export type {
Taxonomy,
TemplatePartArea,
TemplateType,
+ Term,
Theme,
Type,
Updatable,
@@ -105,6 +107,7 @@ export interface PerPackageEntityRecords< C extends Context > {
| Settings< C >
| Sidebar< C >
| Taxonomy< C >
+ | Term< C >
| Theme< C >
| User< C >
| Type< C >
diff --git a/packages/core-data/src/entity-types/term.ts b/packages/core-data/src/entity-types/term.ts
new file mode 100644
index 0000000000000..f007832d7e755
--- /dev/null
+++ b/packages/core-data/src/entity-types/term.ts
@@ -0,0 +1,57 @@
+/**
+ * Internal dependencies
+ */
+import type { Context, ContextualField, OmitNevers } from './helpers';
+
+import type { BaseEntityRecords as _BaseEntityRecords } from './base-entity-records';
+
+declare module './base-entity-records' {
+ export namespace BaseEntityRecords {
+ export interface Term< C extends Context > {
+ /**
+ * Unique identifier for the term.
+ */
+ id: number;
+ /**
+ * Number of published posts for the term.
+ */
+ count: ContextualField< number, 'view' | 'edit', C >;
+ /**
+ * HTML description of the term.
+ */
+ description: ContextualField< string, 'view' | 'edit', C >;
+ /**
+ * URL of the term.
+ */
+ link: string;
+ /**
+ * HTML title for the term.
+ */
+ name: string;
+ /**
+ * An alphanumeric identifier for the term unique to its type.
+ */
+ slug: string;
+ /**
+ * Type attribution for the term.
+ */
+ taxonomy: string;
+ /**
+ * The parent term ID. Only present for hierarchical taxonomies.
+ */
+ parent?: number;
+ /**
+ * Meta fields.
+ */
+ meta: ContextualField<
+ Record< string, string >,
+ 'view' | 'edit',
+ C
+ >;
+ }
+ }
+}
+
+export type Term< C extends Context = 'edit' > = OmitNevers<
+ _BaseEntityRecords.Term< C >
+>;
diff --git a/packages/create-block-interactive-template/package.json b/packages/create-block-interactive-template/package.json
index 00f3515c2e289..6501444743372 100644
--- a/packages/create-block-interactive-template/package.json
+++ b/packages/create-block-interactive-template/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/create-block-interactive-template",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Template for @wordpress/create-block to create interactive blocks with the Interactivity API.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/create-block-tutorial-template/CHANGELOG.md b/packages/create-block-tutorial-template/CHANGELOG.md
index 42d82d1a2d289..c65692d09c95e 100644
--- a/packages/create-block-tutorial-template/CHANGELOG.md
+++ b/packages/create-block-tutorial-template/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/create-block-tutorial-template/package.json b/packages/create-block-tutorial-template/package.json
index 8d6cd268a879b..10a5e1277487c 100644
--- a/packages/create-block-tutorial-template/package.json
+++ b/packages/create-block-tutorial-template/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/create-block-tutorial-template",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "This is a template for @wordpress/create-block that creates an example 'Copyright Date' block. This block is used in the official WordPress block development Quick Start Guide.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/create-block/CHANGELOG.md b/packages/create-block/CHANGELOG.md
index 9d9a3e3bce59e..3e01a8f358f9a 100644
--- a/packages/create-block/CHANGELOG.md
+++ b/packages/create-block/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.61.0 (2025-02-12)
+
## 4.60.0 (2025-01-29)
## 4.59.0 (2025-01-15)
diff --git a/packages/create-block/package.json b/packages/create-block/package.json
index 477eb0f98dd85..4dd1f6bb537af 100644
--- a/packages/create-block/package.json
+++ b/packages/create-block/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/create-block",
- "version": "4.60.0",
+ "version": "4.61.0",
"description": "Generates PHP, JS and CSS code for registering a block for a WordPress plugin.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/customize-widgets/CHANGELOG.md b/packages/customize-widgets/CHANGELOG.md
index afded4c24a04f..b6968613edcda 100644
--- a/packages/customize-widgets/CHANGELOG.md
+++ b/packages/customize-widgets/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/customize-widgets/package.json b/packages/customize-widgets/package.json
index b30cf8ae4db38..dedd5c57b3eaa 100644
--- a/packages/customize-widgets/package.json
+++ b/packages/customize-widgets/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/customize-widgets",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Widgets blocks in Customizer Module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/data-controls/CHANGELOG.md b/packages/data-controls/CHANGELOG.md
index 331beda591a48..d27535c0537dc 100644
--- a/packages/data-controls/CHANGELOG.md
+++ b/packages/data-controls/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/data-controls/package.json b/packages/data-controls/package.json
index a4045e68fa173..732035ece891d 100644
--- a/packages/data-controls/package.json
+++ b/packages/data-controls/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/data-controls",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "A set of common controls for the @wordpress/data api.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/data/CHANGELOG.md b/packages/data/CHANGELOG.md
index 2442244b677de..42360d3a3da21 100644
--- a/packages/data/CHANGELOG.md
+++ b/packages/data/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 10.18.0 (2025-02-12)
+
## 10.17.0 (2025-01-29)
## 10.16.0 (2025-01-15)
diff --git a/packages/data/package.json b/packages/data/package.json
index 7a90897d453bd..afa25b3fae697 100644
--- a/packages/data/package.json
+++ b/packages/data/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/data",
- "version": "10.17.0",
+ "version": "10.18.0",
"description": "Data module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/dataviews/CHANGELOG.md b/packages/dataviews/CHANGELOG.md
index 8c644d78a9163..5166e76b32369 100644
--- a/packages/dataviews/CHANGELOG.md
+++ b/packages/dataviews/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.14.0 (2025-02-12)
+
## 4.13.0 (2025-01-29)
## 4.12.0 (2025-01-15)
diff --git a/packages/dataviews/package.json b/packages/dataviews/package.json
index 60161082ff10d..55f4917f1d2e4 100644
--- a/packages/dataviews/package.json
+++ b/packages/dataviews/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/dataviews",
- "version": "4.13.0",
+ "version": "4.14.0",
"description": "DataViews is a component that provides an API to render datasets using different types of layouts (table, grid, list, etc.).",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/date/CHANGELOG.md b/packages/date/CHANGELOG.md
index 4790ab7220deb..114af3feb1c34 100644
--- a/packages/date/CHANGELOG.md
+++ b/packages/date/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/date/package.json b/packages/date/package.json
index b68fd0789a11f..a26b2e7653a20 100644
--- a/packages/date/package.json
+++ b/packages/date/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/date",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Date module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/dependency-extraction-webpack-plugin/CHANGELOG.md b/packages/dependency-extraction-webpack-plugin/CHANGELOG.md
index 1003bccd93d84..480b5e1b52921 100644
--- a/packages/dependency-extraction-webpack-plugin/CHANGELOG.md
+++ b/packages/dependency-extraction-webpack-plugin/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/dependency-extraction-webpack-plugin/package.json b/packages/dependency-extraction-webpack-plugin/package.json
index 8dee3f6a2a35e..ab2a3f95fae7f 100644
--- a/packages/dependency-extraction-webpack-plugin/package.json
+++ b/packages/dependency-extraction-webpack-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/dependency-extraction-webpack-plugin",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "Extract WordPress script dependencies from webpack bundles.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/deprecated/CHANGELOG.md b/packages/deprecated/CHANGELOG.md
index e685d814f4c0c..539cb39ccad97 100644
--- a/packages/deprecated/CHANGELOG.md
+++ b/packages/deprecated/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/deprecated/package.json b/packages/deprecated/package.json
index c1637380b22b7..add1e21d17d0b 100644
--- a/packages/deprecated/package.json
+++ b/packages/deprecated/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/deprecated",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Deprecation utility for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/docgen/CHANGELOG.md b/packages/docgen/CHANGELOG.md
index 5279b376fe1c5..eb7e73753d3c2 100644
--- a/packages/docgen/CHANGELOG.md
+++ b/packages/docgen/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/docgen/package.json b/packages/docgen/package.json
index 9083dcf2e4c9e..6485bb4c08695 100644
--- a/packages/docgen/package.json
+++ b/packages/docgen/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/docgen",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Autogenerate public API documentation from exports and JSDoc comments.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/dom-ready/CHANGELOG.md b/packages/dom-ready/CHANGELOG.md
index 90e953a9416b7..92148075cbca8 100644
--- a/packages/dom-ready/CHANGELOG.md
+++ b/packages/dom-ready/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/dom-ready/package.json b/packages/dom-ready/package.json
index 9ae59ee939260..0e3607ca7cf22 100644
--- a/packages/dom-ready/package.json
+++ b/packages/dom-ready/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/dom-ready",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Execute callback after the DOM is loaded.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/dom/CHANGELOG.md b/packages/dom/CHANGELOG.md
index 83931d4c6e9af..5d17028aca9bb 100644
--- a/packages/dom/CHANGELOG.md
+++ b/packages/dom/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/dom/package.json b/packages/dom/package.json
index 0c1d83bacbdcf..3159b9f8ba990 100644
--- a/packages/dom/package.json
+++ b/packages/dom/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/dom",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "DOM utilities module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/e2e-test-utils-playwright/CHANGELOG.md b/packages/e2e-test-utils-playwright/CHANGELOG.md
index 4df25e7f9c9e4..481b259efeedb 100644
--- a/packages/e2e-test-utils-playwright/CHANGELOG.md
+++ b/packages/e2e-test-utils-playwright/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/e2e-test-utils-playwright/package.json b/packages/e2e-test-utils-playwright/package.json
index 010c5077aefe3..66663694405bc 100644
--- a/packages/e2e-test-utils-playwright/package.json
+++ b/packages/e2e-test-utils-playwright/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/e2e-test-utils-playwright",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "End-To-End (E2E) test utils for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/e2e-test-utils/CHANGELOG.md b/packages/e2e-test-utils/CHANGELOG.md
index 2b615ef3784d0..488124de222a4 100644
--- a/packages/e2e-test-utils/CHANGELOG.md
+++ b/packages/e2e-test-utils/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 11.18.0 (2025-02-12)
+
## 11.17.0 (2025-01-29)
## 11.16.0 (2025-01-15)
diff --git a/packages/e2e-test-utils/package.json b/packages/e2e-test-utils/package.json
index 03b8ee6e7b8e5..8fc8109d1c0ec 100644
--- a/packages/e2e-test-utils/package.json
+++ b/packages/e2e-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/e2e-test-utils",
- "version": "11.17.0",
+ "version": "11.18.0",
"description": "End-To-End (E2E) test utils for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/e2e-tests/CHANGELOG.md b/packages/e2e-tests/CHANGELOG.md
index fdcedc5da91c3..ebc0b397dd6b7 100644
--- a/packages/e2e-tests/CHANGELOG.md
+++ b/packages/e2e-tests/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 8.18.0 (2025-02-12)
+
## 8.17.0 (2025-01-29)
## 8.16.0 (2025-01-15)
diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json
index 275080914f405..7fc5a4c022a7c 100644
--- a/packages/e2e-tests/package.json
+++ b/packages/e2e-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/e2e-tests",
- "version": "8.17.0",
+ "version": "8.18.0",
"description": "End-To-End (E2E) tests for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/edit-post/CHANGELOG.md b/packages/edit-post/CHANGELOG.md
index 234a05ca71566..640eae7a0e4b0 100644
--- a/packages/edit-post/CHANGELOG.md
+++ b/packages/edit-post/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 8.18.0 (2025-02-12)
+
## 8.17.0 (2025-01-29)
## 8.16.0 (2025-01-15)
diff --git a/packages/edit-post/package.json b/packages/edit-post/package.json
index 0403f1b952eef..3c0ff9d714f82 100644
--- a/packages/edit-post/package.json
+++ b/packages/edit-post/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/edit-post",
- "version": "8.17.1",
+ "version": "8.18.0",
"description": "Edit Post module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/edit-site/CHANGELOG.md b/packages/edit-site/CHANGELOG.md
index 0d50909a8d8b7..6e4cef953d03c 100644
--- a/packages/edit-site/CHANGELOG.md
+++ b/packages/edit-site/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/edit-site/package.json b/packages/edit-site/package.json
index 637032e303e9e..74d0313524dfa 100644
--- a/packages/edit-site/package.json
+++ b/packages/edit-site/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/edit-site",
- "version": "6.17.1",
+ "version": "6.18.0",
"description": "Edit Site Page module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/edit-site/src/components/add-new-template/add-custom-generic-template-modal-content.js b/packages/edit-site/src/components/add-new-template/add-custom-generic-template-modal-content.js
index 746fd6c5314c3..46f9ee1ecdc8c 100644
--- a/packages/edit-site/src/components/add-new-template/add-custom-generic-template-modal-content.js
+++ b/packages/edit-site/src/components/add-new-template/add-custom-generic-template-modal-content.js
@@ -51,6 +51,7 @@ function AddCustomGenericTemplateModalContent( { onClose, createTemplate } ) {
placeholder={ defaultTitle }
disabled={ isBusy }
help={ __(
+ // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
'Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.'
) }
/>
diff --git a/packages/edit-site/src/components/layout/style.scss b/packages/edit-site/src/components/layout/style.scss
index caf7dd78da4b3..16813e8ac0494 100644
--- a/packages/edit-site/src/components/layout/style.scss
+++ b/packages/edit-site/src/components/layout/style.scss
@@ -262,6 +262,10 @@ html.canvas-mode-edit-transition::view-transition-group(toggle) {
}
}
+.edit-site-layout__area__404 {
+ margin: $canvas-padding;
+}
+
.edit-site .components-editor-notices__snackbar {
position: fixed;
right: 0;
diff --git a/packages/edit-site/src/components/save-panel/index.js b/packages/edit-site/src/components/save-panel/index.js
index 95ec9b9ffc8c4..0327022b03f2b 100644
--- a/packages/edit-site/src/components/save-panel/index.js
+++ b/packages/edit-site/src/components/save-panel/index.js
@@ -31,7 +31,11 @@ const { EntitiesSavedStatesExtensible, NavigableRegion } =
unlock( privateApis );
const { useLocation } = unlock( routerPrivateApis );
-const EntitiesSavedStatesForPreview = ( { onClose, renderDialog } ) => {
+const EntitiesSavedStatesForPreview = ( {
+ onClose,
+ renderDialog,
+ variant,
+} ) => {
const isDirtyProps = useEntitiesSavedStatesIsDirty();
let activateSaveLabel;
if ( isDirtyProps.isDirty ) {
@@ -76,22 +80,28 @@ const EntitiesSavedStatesForPreview = ( { onClose, renderDialog } ) => {
saveEnabled: true,
saveLabel: activateSaveLabel,
renderDialog,
+ variant,
} }
/>
);
};
-const _EntitiesSavedStates = ( { onClose, renderDialog } ) => {
+const _EntitiesSavedStates = ( { onClose, renderDialog, variant } ) => {
if ( isPreviewingTheme() ) {
return (
);
}
return (
-
+
);
};
@@ -130,12 +140,10 @@ export default function SavePanel() {
- <_EntitiesSavedStates onClose={ onClose } />
+ <_EntitiesSavedStates onClose={ onClose } variant="inline" />
) : null;
}
diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-main/index.js b/packages/edit-site/src/components/sidebar-navigation-screen-main/index.js
index abcc7183f6604..f4114782853ce 100644
--- a/packages/edit-site/src/components/sidebar-navigation-screen-main/index.js
+++ b/packages/edit-site/src/components/sidebar-navigation-screen-main/index.js
@@ -77,7 +77,7 @@ export function MainSidebarNavigationContent( { isBlockBasedTheme = true } ) {
);
}
-export default function SidebarNavigationScreenMain() {
+export default function SidebarNavigationScreenMain( { customDescription } ) {
const isBlockBasedTheme = useSelect(
( select ) => select( coreStore ).getCurrentTheme()?.is_block_theme,
[]
@@ -91,19 +91,24 @@ export default function SidebarNavigationScreenMain() {
setEditorCanvasContainerView( undefined );
}, [ setEditorCanvasContainerView ] );
+ let description;
+ if ( customDescription ) {
+ description = customDescription;
+ } else if ( isBlockBasedTheme ) {
+ description = __(
+ 'Customize the appearance of your website using the block editor.'
+ );
+ } else {
+ description = __(
+ 'Explore block styles and patterns to refine your site'
+ );
+ }
+
return (
) : (
-
+
);
}
diff --git a/packages/edit-site/src/components/site-editor-routes/notfound.js b/packages/edit-site/src/components/site-editor-routes/notfound.js
new file mode 100644
index 0000000000000..ee15e28e06f25
--- /dev/null
+++ b/packages/edit-site/src/components/site-editor-routes/notfound.js
@@ -0,0 +1,27 @@
+/**
+ * WordPress dependencies
+ */
+import { __ } from '@wordpress/i18n';
+
+/**
+ * Internal dependencies
+ */
+import SidebarNavigationScreenMain from '../sidebar-navigation-screen-main';
+
+export const notFoundRoute = {
+ name: 'notfound',
+ path: '*',
+ areas: {
+ sidebar: ,
+ mobile: (
+
+ ),
+ content: (
+
+ { __( '404 (Not Found)' ) }
+
+ ),
+ },
+};
diff --git a/packages/edit-site/src/components/site-hub/index.js b/packages/edit-site/src/components/site-hub/index.js
index 91324356d0197..2c23122ceeaf1 100644
--- a/packages/edit-site/src/components/site-hub/index.js
+++ b/packages/edit-site/src/components/site-hub/index.js
@@ -28,8 +28,8 @@ import { privateApis as routerPrivateApis } from '@wordpress/router';
import { store as editSiteStore } from '../../store';
import SiteIcon from '../site-icon';
import { unlock } from '../../lock-unlock';
-const { useHistory } = unlock( routerPrivateApis );
import { SidebarNavigationContext } from '../sidebar';
+const { useLocation, useHistory } = unlock( routerPrivateApis );
const SiteHub = memo(
forwardRef( ( { isTransparent }, ref ) => {
@@ -117,29 +117,25 @@ export default SiteHub;
export const SiteHubMobile = memo(
forwardRef( ( { isTransparent }, ref ) => {
+ const { path } = useLocation();
const history = useHistory();
const { navigate } = useContext( SidebarNavigationContext );
- const { dashboardLink, isBlockTheme, homeUrl, siteTitle } = useSelect(
- ( select ) => {
- const { getSettings } = unlock( select( editSiteStore ) );
-
- const { getEntityRecord, getCurrentTheme } =
- select( coreStore );
- const _site = getEntityRecord( 'root', 'site' );
- return {
- dashboardLink: getSettings().__experimentalDashboardLink,
- isBlockTheme: getCurrentTheme()?.is_block_theme,
- homeUrl: getEntityRecord( 'root', '__unstableBase' )?.home,
- siteTitle:
- ! _site?.title && !! _site?.url
- ? filterURLForDisplay( _site?.url )
- : _site?.title,
- };
- },
- []
- );
+ const { dashboardLink, homeUrl, siteTitle } = useSelect( ( select ) => {
+ const { getSettings } = unlock( select( editSiteStore ) );
+ const { getEntityRecord } = select( coreStore );
+ const _site = getEntityRecord( 'root', 'site' );
+ return {
+ dashboardLink: getSettings().__experimentalDashboardLink,
+ homeUrl: getEntityRecord( 'root', '__unstableBase' )?.home,
+ siteTitle:
+ ! _site?.title && !! _site?.url
+ ? filterURLForDisplay( _site?.url )
+ : _site?.title,
+ };
+ }, [] );
const { open: openCommandCenter } = useDispatch( commandsStore );
+ const isRoot = path === '/';
return (
@@ -160,7 +156,7 @@ export const SiteHubMobile = memo(
transform: 'scale(0.5)',
borderRadius: 4,
} }
- { ...( ! isBlockTheme
+ { ...( isRoot
? {
href: dashboardLink,
label: __( 'Go to the Dashboard' ),
diff --git a/packages/edit-site/src/components/welcome-guide/page.js b/packages/edit-site/src/components/welcome-guide/page.js
index 41bb80342280c..f9a26d9959306 100644
--- a/packages/edit-site/src/components/welcome-guide/page.js
+++ b/packages/edit-site/src/components/welcome-guide/page.js
@@ -57,6 +57,7 @@ export default function WelcomeGuidePage() {
{ __(
+ // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
'It’s now possible to edit page content in the site editor. To customise other parts of the page like the header and footer switch to editing the template using the settings sidebar.'
) }
diff --git a/packages/edit-widgets/CHANGELOG.md b/packages/edit-widgets/CHANGELOG.md
index b7b4bfa52be62..aa43f83757c83 100644
--- a/packages/edit-widgets/CHANGELOG.md
+++ b/packages/edit-widgets/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/edit-widgets/package.json b/packages/edit-widgets/package.json
index f04357aab48f4..5a1d7e9c77934 100644
--- a/packages/edit-widgets/package.json
+++ b/packages/edit-widgets/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/edit-widgets",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "Widgets Page module for WordPress..",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/edit-widgets/src/components/sidebar/widget-areas.js b/packages/edit-widgets/src/components/sidebar/widget-areas.js
index c7b49c10b9746..c34739fdd4db2 100644
--- a/packages/edit-widgets/src/components/sidebar/widget-areas.js
+++ b/packages/edit-widgets/src/components/sidebar/widget-areas.js
@@ -33,6 +33,7 @@ export default function WidgetAreas( { selectedWidgetAreaId } ) {
let description;
if ( ! selectedWidgetArea ) {
description = __(
+ // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
'Widget Areas are global parts in your site’s layout that can accept blocks. These vary by theme, but are typically parts like your Sidebar or Footer.'
);
} else if ( selectedWidgetAreaId === 'wp_inactive_widgets' ) {
diff --git a/packages/editor/CHANGELOG.md b/packages/editor/CHANGELOG.md
index 35590b79c75c3..89f375387da66 100644
--- a/packages/editor/CHANGELOG.md
+++ b/packages/editor/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 14.18.0 (2025-02-12)
+
## 14.17.0 (2025-01-29)
## 14.16.0 (2025-01-15)
diff --git a/packages/editor/README.md b/packages/editor/README.md
index 923345ab5a78c..d0140df088845 100644
--- a/packages/editor/README.md
+++ b/packages/editor/README.md
@@ -402,6 +402,7 @@ _Parameters_
- _props_ `Object`: The component props.
- _props.close_ `Function`: The function to close the dialog.
- _props.renderDialog_ `boolean`: Whether to render the component with modal dialog behavior.
+- _props.variant_ `string`: Changes the layout of the component. When an `inline` value is provided, the action buttons are rendered at the end of the component instead of at the start.
_Returns_
@@ -500,6 +501,7 @@ _Parameters_
- _$0.onError_ `Function`: Function called when an error happens.
- _$0.onFileChange_ `Function`: Function called each time a file or a temporary representation of the file is available.
- _$0.onSuccess_ `Function`: Function called after the final representation of the file is available.
+- _$0.multiple_ `boolean`: Whether to allow multiple files to be uploaded.
### MediaUploadCheck
diff --git a/packages/editor/package.json b/packages/editor/package.json
index 3b40e5965b6a3..0e22a564c61f4 100644
--- a/packages/editor/package.json
+++ b/packages/editor/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/editor",
- "version": "14.17.1",
+ "version": "14.18.0",
"description": "Enhanced block editor for WordPress posts.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/editor/src/components/entities-saved-states/entity-record-item.js b/packages/editor/src/components/entities-saved-states/entity-record-item.js
index e8219c4cca7ae..ba2e93088be93 100644
--- a/packages/editor/src/components/entities-saved-states/entity-record-item.js
+++ b/packages/editor/src/components/entities-saved-states/entity-record-item.js
@@ -64,6 +64,7 @@ export default function EntityRecordItem( { record, checked, onChange } ) {
}
checked={ checked }
onChange={ onChange }
+ className="entities-saved-states__change-control"
/>
{ hasPostMetaChanges && (
diff --git a/packages/editor/src/components/entities-saved-states/entity-type-list.js b/packages/editor/src/components/entities-saved-states/entity-type-list.js
index 71041dd9aebab..7cdf4c41e0f1f 100644
--- a/packages/editor/src/components/entities-saved-states/entity-type-list.js
+++ b/packages/editor/src/components/entities-saved-states/entity-type-list.js
@@ -94,7 +94,11 @@ export default function EntityTypeList( {
}
return (
-
+
{ list.map( ( record ) => {
return (
diff --git a/packages/editor/src/components/entities-saved-states/index.js b/packages/editor/src/components/entities-saved-states/index.js
index 200473cccff70..c30fea995827d 100644
--- a/packages/editor/src/components/entities-saved-states/index.js
+++ b/packages/editor/src/components/entities-saved-states/index.js
@@ -1,3 +1,8 @@
+/**
+ * External dependencies
+ */
+import clsx from 'clsx';
+
/**
* WordPress dependencies
*/
@@ -32,15 +37,21 @@ function identity( values ) {
* @param {Object} props The component props.
* @param {Function} props.close The function to close the dialog.
* @param {boolean} props.renderDialog Whether to render the component with modal dialog behavior.
+ * @param {string} props.variant Changes the layout of the component. When an `inline` value is provided, the action buttons are rendered at the end of the component instead of at the start.
*
* @return {React.ReactNode} The rendered component.
*/
-export default function EntitiesSavedStates( { close, renderDialog } ) {
+export default function EntitiesSavedStates( {
+ close,
+ renderDialog,
+ variant,
+} ) {
const isDirtyProps = useIsDirty();
return (
);
@@ -60,6 +71,7 @@ export default function EntitiesSavedStates( { close, renderDialog } ) {
* @param {boolean} props.isDirty Flag indicating if there are dirty entities.
* @param {Function} props.setUnselectedEntities Function to set unselected entities.
* @param {Array} props.unselectedEntities Array of unselected entities.
+ * @param {string} props.variant Changes the layout of the component. When an `inline` value is provided, the action buttons are rendered at the end of the component instead of at the start.
*
* @return {React.ReactNode} The rendered component.
*/
@@ -74,6 +86,7 @@ export function EntitiesSavedStatesExtensible( {
isDirty,
setUnselectedEntities,
unselectedEntities,
+ variant = 'default',
} ) {
const saveButtonRef = useRef();
const { saveDirtyEntities } = unlock( useDispatch( editorStore ) );
@@ -109,83 +122,100 @@ export function EntitiesSavedStatesExtensible( {
const [ saveDialogRef, saveDialogProps ] = useDialog( {
onClose: () => dismissPanel(),
} );
- const dialogLabel = useInstanceId( EntitiesSavedStatesExtensible, 'label' );
- const dialogDescription = useInstanceId(
+ const dialogLabelId = useInstanceId(
+ EntitiesSavedStatesExtensible,
+ 'entities-saved-states__panel-label'
+ );
+ const dialogDescriptionId = useInstanceId(
EntitiesSavedStatesExtensible,
- 'description'
+ 'entities-saved-states__panel-description'
);
const selectItemsToSaveDescription = !! dirtyEntityRecords.length
? __( 'Select the items you want to save.' )
: undefined;
+ const isInline = variant === 'inline';
+
+ const actionButtons = (
+ <>
+
+ { __( 'Cancel' ) }
+
+
+ saveDirtyEntities( {
+ onSave,
+ dirtyEntityRecords,
+ entitiesToSkip: unselectedEntities,
+ close,
+ } )
+ }
+ className="editor-entities-saved-states__save-button"
+ >
+ { saveLabel }
+
+ >
+ );
+
return (
-
-
- { __( 'Cancel' ) }
-
-
- saveDirtyEntities( {
- onSave,
- dirtyEntityRecords,
- entitiesToSkip: unselectedEntities,
- close,
- } )
- }
- className="editor-entities-saved-states__save-button"
- >
- { saveLabel }
-
-
+ { ! isInline && (
+
+ { actionButtons }
+
+ ) }
-
-
+
+
{ __( 'Are you ready to save?' ) }
- { additionalPrompt }
-
- { isDirty
- ? createInterpolateElement(
- sprintf(
- /* translators: %d: number of site changes waiting to be saved. */
- _n(
- 'There is %d site change waiting to be saved.',
- 'There are %d site changes waiting to be saved.',
+
+ { additionalPrompt }
+
+ { isDirty
+ ? createInterpolateElement(
+ sprintf(
+ /* translators: %d: number of site changes waiting to be saved. */
+ _n(
+ 'There is %d site change waiting to be saved.',
+ 'There are %d site changes waiting to be saved.',
+ dirtyEntityRecords.length
+ ),
dirtyEntityRecords.length
),
- dirtyEntityRecords.length
- ),
- { strong: }
- )
- : selectItemsToSaveDescription }
-
+ { strong:
}
+ )
+ : selectItemsToSaveDescription }
+
+
{ sortedPartitionedSavables.map( ( list ) => {
@@ -198,6 +228,16 @@ export function EntitiesSavedStatesExtensible( {
/>
);
} ) }
+
+ { isInline && (
+
+ { actionButtons }
+
+ ) }
);
}
diff --git a/packages/editor/src/components/entities-saved-states/style.scss b/packages/editor/src/components/entities-saved-states/style.scss
index e2c320678c322..d35feffa69308 100644
--- a/packages/editor/src/components/entities-saved-states/style.scss
+++ b/packages/editor/src/components/entities-saved-states/style.scss
@@ -16,14 +16,49 @@
}
}
-.entities-saved-states__description-heading {
- font-size: $default-font-size;
+.entities-saved-states__panel.is-inline {
+ .entities-saved-states__text-prompt {
+ padding: 0;
+ }
+
+ .entities-saved-states__panel-body {
+ padding-left: 0;
+ padding-right: 0;
+ border: 0;
+
+ > h2 {
+ margin-left: -1 * $grid-unit-20;
+ margin-right: -1 * $grid-unit-20;
+ margin-bottom: 0;
+
+ button {
+ font-size: $font-size-x-small;
+ text-transform: uppercase;
+ }
+ }
+ }
+
+ .entities-saved-states__text-prompt--header-wrapper {
+ display: none;
+ }
+
+ .entities-saved-states__text-prompt--changes-count {
+ margin-top: 0;
+ margin-bottom: $grid-unit-10;
+ }
+
+ .entities-saved-states__panel-footer {
+ margin-top: $grid-unit-20;
+ }
+}
+
+.entities-saved-states__change-control {
+ flex: 1;
}
.entities-saved-states__changes {
- color: $gray-700;
- font-size: $helptext-font-size;
- margin: $grid-unit-10 $grid-unit-20 0 $grid-unit-20;
+ font-size: $default-font-size;
+ margin: $grid-unit-05 $grid-unit-20 0 $grid-unit-30;
list-style: disc;
li {
diff --git a/packages/editor/src/components/page-attributes/parent.js b/packages/editor/src/components/page-attributes/parent.js
index bd2861766c334..56381f448abc4 100644
--- a/packages/editor/src/components/page-attributes/parent.js
+++ b/packages/editor/src/components/page-attributes/parent.js
@@ -61,47 +61,63 @@ export const getItemPriority = ( name, searchValue ) => {
export function PageAttributesParent() {
const { editPost } = useDispatch( editorStore );
const [ fieldValue, setFieldValue ] = useState( false );
- const { isHierarchical, parentPostId, parentPostTitle, pageItems } =
- useSelect(
- ( select ) => {
- const { getPostType, getEntityRecords, getEntityRecord } =
- select( coreStore );
- const { getCurrentPostId, getEditedPostAttribute } =
- select( editorStore );
- const postTypeSlug = getEditedPostAttribute( 'type' );
- const pageId = getEditedPostAttribute( 'parent' );
- const pType = getPostType( postTypeSlug );
- const postId = getCurrentPostId();
- const postIsHierarchical = pType?.hierarchical ?? false;
- const query = {
- per_page: 100,
- exclude: postId,
- parent_exclude: postId,
- orderby: 'menu_order',
- order: 'asc',
- _fields: 'id,title,parent',
- };
+ const {
+ isHierarchical,
+ parentPostId,
+ parentPostTitle,
+ pageItems,
+ isLoading,
+ } = useSelect(
+ ( select ) => {
+ const {
+ getPostType,
+ getEntityRecords,
+ getEntityRecord,
+ isResolving,
+ } = select( coreStore );
+ const { getCurrentPostId, getEditedPostAttribute } =
+ select( editorStore );
+ const postTypeSlug = getEditedPostAttribute( 'type' );
+ const pageId = getEditedPostAttribute( 'parent' );
+ const pType = getPostType( postTypeSlug );
+ const postId = getCurrentPostId();
+ const postIsHierarchical = pType?.hierarchical ?? false;
+ const query = {
+ per_page: 100,
+ exclude: postId,
+ parent_exclude: postId,
+ orderby: 'menu_order',
+ order: 'asc',
+ _fields: 'id,title,parent',
+ };
- // Perform a search when the field is changed.
- if ( !! fieldValue ) {
- query.search = fieldValue;
- }
+ // Perform a search when the field is changed.
+ if ( !! fieldValue ) {
+ query.search = fieldValue;
+ }
- const parentPost = pageId
- ? getEntityRecord( 'postType', postTypeSlug, pageId )
- : null;
+ const parentPost = pageId
+ ? getEntityRecord( 'postType', postTypeSlug, pageId )
+ : null;
- return {
- isHierarchical: postIsHierarchical,
- parentPostId: pageId,
- parentPostTitle: parentPost ? getTitle( parentPost ) : '',
- pageItems: postIsHierarchical
- ? getEntityRecords( 'postType', postTypeSlug, query )
- : null,
- };
- },
- [ fieldValue ]
- );
+ return {
+ isHierarchical: postIsHierarchical,
+ parentPostId: pageId,
+ parentPostTitle: parentPost ? getTitle( parentPost ) : '',
+ pageItems: postIsHierarchical
+ ? getEntityRecords( 'postType', postTypeSlug, query )
+ : null,
+ isLoading: postIsHierarchical
+ ? isResolving( 'getEntityRecords', [
+ 'postType',
+ postTypeSlug,
+ query,
+ ] )
+ : false,
+ };
+ },
+ [ fieldValue ]
+ );
const parentOptions = useMemo( () => {
const getOptionsFromTree = ( tree, level = 0 ) => {
@@ -187,6 +203,7 @@ export function PageAttributesParent() {
onFilterValueChange={ debounce( handleKeydown, 300 ) }
onChange={ handleChange }
hideLabelFromVision
+ isLoading={ isLoading }
/>
);
}
diff --git a/packages/editor/src/components/post-featured-image/index.js b/packages/editor/src/components/post-featured-image/index.js
index acf366506cc41..cf7ba1664b8ba 100644
--- a/packages/editor/src/components/post-featured-image/index.js
+++ b/packages/editor/src/components/post-featured-image/index.js
@@ -125,6 +125,7 @@ function PostFeaturedImage( {
noticeOperations.removeAllNotices();
noticeOperations.createErrorNotice( message );
},
+ multiple: false,
} );
}
@@ -345,6 +346,7 @@ const applyWithDispatch = withDispatch(
noticeOperations.removeAllNotices();
noticeOperations.createErrorNotice( message );
},
+ multiple: false,
} );
},
onRemoveImage() {
diff --git a/packages/editor/src/components/post-template/create-new-template-modal.js b/packages/editor/src/components/post-template/create-new-template-modal.js
index 69d31b7f8f714..9a89cf385ebab 100644
--- a/packages/editor/src/components/post-template/create-new-template-modal.js
+++ b/packages/editor/src/components/post-template/create-new-template-modal.js
@@ -126,6 +126,7 @@ export default function CreateNewTemplateModal( { onClose } ) {
placeholder={ DEFAULT_TITLE }
disabled={ isBusy }
help={ __(
+ // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
'Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.'
) }
/>
diff --git a/packages/editor/src/components/preferences-modal/index.js b/packages/editor/src/components/preferences-modal/index.js
index fcca1b00e9bb2..b848288598698 100644
--- a/packages/editor/src/components/preferences-modal/index.js
+++ b/packages/editor/src/components/preferences-modal/index.js
@@ -88,7 +88,7 @@ function PreferencesModalContents( { extraSections = {} } ) {
scope="core"
featureName="showListViewByDefault"
help={ __(
- 'Opens the List View sidebar by default.'
+ 'Opens the List View panel by default.'
) }
label={ __( 'Always open List View' ) }
/>
diff --git a/packages/editor/src/components/sidebar/header.js b/packages/editor/src/components/sidebar/header.js
index ed2f7f89fe6e7..b5d9aaa26707c 100644
--- a/packages/editor/src/components/sidebar/header.js
+++ b/packages/editor/src/components/sidebar/header.js
@@ -22,7 +22,7 @@ const SidebarHeader = ( _, ref ) => {
return {
documentLabel:
// translators: Default label for the Document sidebar tab, not selected.
- getPostTypeLabel() || _x( 'Document', 'noun, sidebar' ),
+ getPostTypeLabel() || _x( 'Document', 'noun, panel' ),
};
}, [] );
diff --git a/packages/editor/src/components/sidebar/index.js b/packages/editor/src/components/sidebar/index.js
index 601bcd8f311bb..6784aafeb57ff 100644
--- a/packages/editor/src/components/sidebar/index.js
+++ b/packages/editor/src/components/sidebar/index.js
@@ -103,7 +103,7 @@ const SidebarContent = ( {
headerClassName="editor-sidebar__panel-tabs"
title={
/* translators: button label text should, if possible, be under 16 characters. */
- _x( 'Settings', 'sidebar button label' )
+ _x( 'Settings', 'panel button label' )
}
toggleShortcut={ keyboardShortcut }
icon={ isRTL() ? drawerLeft : drawerRight }
diff --git a/packages/editor/src/utils/media-upload/index.js b/packages/editor/src/utils/media-upload/index.js
index 0d970d91ce745..02b2a039330d6 100644
--- a/packages/editor/src/utils/media-upload/index.js
+++ b/packages/editor/src/utils/media-upload/index.js
@@ -28,6 +28,7 @@ const noop = () => {};
* @param {Function} $0.onError Function called when an error happens.
* @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.
* @param {Function} $0.onSuccess Function called after the final representation of the file is available.
+ * @param {boolean} $0.multiple Whether to allow multiple files to be uploaded.
*/
export default function mediaUpload( {
additionalData = {},
@@ -37,6 +38,7 @@ export default function mediaUpload( {
onError = noop,
onFileChange,
onSuccess,
+ multiple = true,
} ) {
const { getCurrentPost, getEditorSettings } = select( editorStore );
const {
@@ -92,5 +94,6 @@ export default function mediaUpload( {
onError( message );
},
wpAllowedMimeTypes,
+ multiple,
} );
}
diff --git a/packages/element/CHANGELOG.md b/packages/element/CHANGELOG.md
index 5300441670dbf..62591286563ca 100644
--- a/packages/element/CHANGELOG.md
+++ b/packages/element/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/element/package.json b/packages/element/package.json
index d7f3e32155c67..de87f14a255e4 100644
--- a/packages/element/package.json
+++ b/packages/element/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/element",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "Element React module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/env/CHANGELOG.md b/packages/env/CHANGELOG.md
index 03be7a7bbc56c..a5015f745f3a0 100644
--- a/packages/env/CHANGELOG.md
+++ b/packages/env/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 10.18.0 (2025-02-12)
+
## 10.17.0 (2025-01-29)
### Enhancements
diff --git a/packages/env/package.json b/packages/env/package.json
index bdf8766aa5869..c55d652d16ded 100644
--- a/packages/env/package.json
+++ b/packages/env/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/env",
- "version": "10.17.0",
+ "version": "10.18.0",
"description": "A zero-config, self contained local WordPress environment for development and testing.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/escape-html/CHANGELOG.md b/packages/escape-html/CHANGELOG.md
index 3ec127fd9d5da..686bdc161900a 100644
--- a/packages/escape-html/CHANGELOG.md
+++ b/packages/escape-html/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/escape-html/package.json b/packages/escape-html/package.json
index 9a7555c3b32d3..74f87b4b6d434 100644
--- a/packages/escape-html/package.json
+++ b/packages/escape-html/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/escape-html",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Escape HTML utils.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md
index 60630bae0e01f..21139f7840cb8 100644
--- a/packages/eslint-plugin/CHANGELOG.md
+++ b/packages/eslint-plugin/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 22.4.0 (2025-02-12)
+
## 22.3.0 (2025-01-29)
## 22.2.0 (2025-01-15)
diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json
index c315891896fcc..e5a94005723ae 100644
--- a/packages/eslint-plugin/package.json
+++ b/packages/eslint-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/eslint-plugin",
- "version": "22.3.0",
+ "version": "22.4.0",
"description": "ESLint plugin for WordPress development.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/fields/CHANGELOG.md b/packages/fields/CHANGELOG.md
index 8123d0f3caf11..a210c1064f65c 100644
--- a/packages/fields/CHANGELOG.md
+++ b/packages/fields/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 0.10.0 (2025-02-12)
+
## 0.9.0 (2025-01-29)
## 0.8.0 (2025-01-15)
diff --git a/packages/fields/package.json b/packages/fields/package.json
index adc59764b331a..3fc981c70d1a2 100644
--- a/packages/fields/package.json
+++ b/packages/fields/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/fields",
- "version": "0.9.0",
+ "version": "0.10.0",
"description": "DataViews is a component that provides an API to render datasets using different types of layouts (table, grid, list, etc.).",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/format-library/CHANGELOG.md b/packages/format-library/CHANGELOG.md
index 222be010c4f1d..f075414e1a8c3 100644
--- a/packages/format-library/CHANGELOG.md
+++ b/packages/format-library/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/format-library/package.json b/packages/format-library/package.json
index 33ea404cf1476..242789018725b 100644
--- a/packages/format-library/package.json
+++ b/packages/format-library/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/format-library",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Format library for the WordPress editor.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/hooks/CHANGELOG.md b/packages/hooks/CHANGELOG.md
index 38183ebd88b8b..4702fc18f98f1 100644
--- a/packages/hooks/CHANGELOG.md
+++ b/packages/hooks/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/hooks/package.json b/packages/hooks/package.json
index 4fe1add4725bc..ea5ba2ec15cb2 100644
--- a/packages/hooks/package.json
+++ b/packages/hooks/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/hooks",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress hooks library.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/html-entities/CHANGELOG.md b/packages/html-entities/CHANGELOG.md
index fd9f1e9f0f7be..845e384b22f3c 100644
--- a/packages/html-entities/CHANGELOG.md
+++ b/packages/html-entities/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/html-entities/package.json b/packages/html-entities/package.json
index b00d18fbf70b5..4758c77647640 100644
--- a/packages/html-entities/package.json
+++ b/packages/html-entities/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/html-entities",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "HTML entity utilities for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md
index cdc5a75c6f640..90bc438dcdb48 100644
--- a/packages/i18n/CHANGELOG.md
+++ b/packages/i18n/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 883b75b06bd1f..bb444a8f881f7 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/i18n",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "WordPress internationalization (i18n) library.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/icons/CHANGELOG.md b/packages/icons/CHANGELOG.md
index c07908788420e..2b0e895051920 100644
--- a/packages/icons/CHANGELOG.md
+++ b/packages/icons/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 10.18.0 (2025-02-12)
+
## 10.17.0 (2025-01-29)
## 10.16.0 (2025-01-15)
diff --git a/packages/icons/package.json b/packages/icons/package.json
index 128dfe44490a0..a40eee4a9a512 100644
--- a/packages/icons/package.json
+++ b/packages/icons/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/icons",
- "version": "10.17.0",
+ "version": "10.18.0",
"description": "WordPress Icons package, based on dashicon.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/interactivity-router/CHANGELOG.md b/packages/interactivity-router/CHANGELOG.md
index 5213eff2c29f4..bbedead66bc2a 100644
--- a/packages/interactivity-router/CHANGELOG.md
+++ b/packages/interactivity-router/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
### Bug Fixes
- Fix CSS rule order in some constructed style sheets. ([#68923](https://github.com/WordPress/gutenberg/pull/68923))
diff --git a/packages/interactivity-router/README.md b/packages/interactivity-router/README.md
index efb52e59be2b5..b79e6b310e239 100644
--- a/packages/interactivity-router/README.md
+++ b/packages/interactivity-router/README.md
@@ -80,7 +80,7 @@ Example:
Post 2
Post 3
-
+ Page 2
```
diff --git a/packages/interactivity-router/package.json b/packages/interactivity-router/package.json
index 9962d60bd2e1d..1dfc1ac9464c4 100644
--- a/packages/interactivity-router/package.json
+++ b/packages/interactivity-router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/interactivity-router",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Package that exposes state and actions from the `core/router` store, part of the Interactivity API.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/interactivity/CHANGELOG.md b/packages/interactivity/CHANGELOG.md
index ef99d6974d6eb..cbc34cbc18231 100644
--- a/packages/interactivity/CHANGELOG.md
+++ b/packages/interactivity/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/interactivity/package.json b/packages/interactivity/package.json
index f109c40f43305..53cf888b1a60b 100644
--- a/packages/interactivity/package.json
+++ b/packages/interactivity/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/interactivity",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "Package that provides a standard and simple way to handle the frontend interactivity of Gutenberg blocks.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/interface/CHANGELOG.md b/packages/interface/CHANGELOG.md
index 98c616216900b..ca51ac2a1b4c5 100644
--- a/packages/interface/CHANGELOG.md
+++ b/packages/interface/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 9.3.0 (2025-02-12)
+
## 9.2.0 (2025-01-29)
## 9.1.0 (2025-01-15)
diff --git a/packages/interface/package.json b/packages/interface/package.json
index 0cadb6070b9fc..9d6c80bbaa85e 100644
--- a/packages/interface/package.json
+++ b/packages/interface/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/interface",
- "version": "9.2.0",
+ "version": "9.3.0",
"description": "Interface module for WordPress. The package contains shared functionality across the modern JavaScript-based WordPress screens.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/is-shallow-equal/CHANGELOG.md b/packages/is-shallow-equal/CHANGELOG.md
index d36971b392045..deb2aaae6deac 100644
--- a/packages/is-shallow-equal/CHANGELOG.md
+++ b/packages/is-shallow-equal/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/is-shallow-equal/package.json b/packages/is-shallow-equal/package.json
index d8be6a2c005c2..dde3b465f0abb 100644
--- a/packages/is-shallow-equal/package.json
+++ b/packages/is-shallow-equal/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/is-shallow-equal",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Test for shallow equality between two objects or arrays.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/jest-console/CHANGELOG.md b/packages/jest-console/CHANGELOG.md
index cb017e3a3bc67..fa6b98dfb46ee 100644
--- a/packages/jest-console/CHANGELOG.md
+++ b/packages/jest-console/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 8.18.0 (2025-02-12)
+
## 8.17.0 (2025-01-29)
## 8.16.0 (2025-01-15)
diff --git a/packages/jest-console/package.json b/packages/jest-console/package.json
index 78492c7f74ee1..5fe48359d639d 100644
--- a/packages/jest-console/package.json
+++ b/packages/jest-console/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/jest-console",
- "version": "8.17.0",
+ "version": "8.18.0",
"description": "Custom Jest matchers for the Console object.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/jest-preset-default/CHANGELOG.md b/packages/jest-preset-default/CHANGELOG.md
index dd03a156c395a..7678d8a49aac3 100644
--- a/packages/jest-preset-default/CHANGELOG.md
+++ b/packages/jest-preset-default/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 12.18.0 (2025-02-12)
+
## 12.17.0 (2025-01-29)
## 12.16.0 (2025-01-15)
diff --git a/packages/jest-preset-default/package.json b/packages/jest-preset-default/package.json
index b9bc50436ebc7..4e5d5b8b55769 100644
--- a/packages/jest-preset-default/package.json
+++ b/packages/jest-preset-default/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/jest-preset-default",
- "version": "12.17.0",
+ "version": "12.18.0",
"description": "Default Jest preset for WordPress development.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/jest-puppeteer-axe/CHANGELOG.md b/packages/jest-puppeteer-axe/CHANGELOG.md
index 31c317a204058..2609ffa6cdac4 100644
--- a/packages/jest-puppeteer-axe/CHANGELOG.md
+++ b/packages/jest-puppeteer-axe/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/jest-puppeteer-axe/package.json b/packages/jest-puppeteer-axe/package.json
index dd6ebdf841cba..ae6a5379f6182 100644
--- a/packages/jest-puppeteer-axe/package.json
+++ b/packages/jest-puppeteer-axe/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/jest-puppeteer-axe",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "Axe API integration with Jest and Puppeteer.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/keyboard-shortcuts/CHANGELOG.md b/packages/keyboard-shortcuts/CHANGELOG.md
index 2833f565d36aa..970c6e865eefb 100644
--- a/packages/keyboard-shortcuts/CHANGELOG.md
+++ b/packages/keyboard-shortcuts/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/keyboard-shortcuts/package.json b/packages/keyboard-shortcuts/package.json
index 5aefa31c6c08b..7f6592ec87f74 100644
--- a/packages/keyboard-shortcuts/package.json
+++ b/packages/keyboard-shortcuts/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/keyboard-shortcuts",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Handling keyboard shortcuts.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/keycodes/CHANGELOG.md b/packages/keycodes/CHANGELOG.md
index dd21373711334..6a902d911f0ec 100644
--- a/packages/keycodes/CHANGELOG.md
+++ b/packages/keycodes/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/keycodes/package.json b/packages/keycodes/package.json
index a1bef731fef7f..bea73ad185cb9 100644
--- a/packages/keycodes/package.json
+++ b/packages/keycodes/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/keycodes",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Keycodes utilities for WordPress. Used to check for keyboard events across browsers/operating systems.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/lazy-import/CHANGELOG.md b/packages/lazy-import/CHANGELOG.md
index 2411e89c9cfcf..3e3511261c566 100644
--- a/packages/lazy-import/CHANGELOG.md
+++ b/packages/lazy-import/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/lazy-import/package.json b/packages/lazy-import/package.json
index 0f18de9cc0cb6..8ece16ebad621 100644
--- a/packages/lazy-import/package.json
+++ b/packages/lazy-import/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/lazy-import",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Lazily import a module, installing it automatically if missing.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/list-reusable-blocks/CHANGELOG.md b/packages/list-reusable-blocks/CHANGELOG.md
index 5a4bd4f9f29e4..7ffc1fcd9bb4b 100644
--- a/packages/list-reusable-blocks/CHANGELOG.md
+++ b/packages/list-reusable-blocks/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/list-reusable-blocks/package.json b/packages/list-reusable-blocks/package.json
index 92db7b36d0760..dc8332889546b 100644
--- a/packages/list-reusable-blocks/package.json
+++ b/packages/list-reusable-blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/list-reusable-blocks",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Adding Export/Import support to the reusable blocks listing.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/media-utils/CHANGELOG.md b/packages/media-utils/CHANGELOG.md
index b7d27a0681c4b..9720f3f9ac81f 100644
--- a/packages/media-utils/CHANGELOG.md
+++ b/packages/media-utils/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/media-utils/README.md b/packages/media-utils/README.md
index ddf18efb28833..a87aaf89618d9 100644
--- a/packages/media-utils/README.md
+++ b/packages/media-utils/README.md
@@ -56,6 +56,7 @@ _Parameters_
- _$0.onFileChange_ `UploadMediaArgs[ 'onFileChange' ]`: Function called each time a file or a temporary representation of the file is available.
- _$0.wpAllowedMimeTypes_ `UploadMediaArgs[ 'wpAllowedMimeTypes' ]`: List of allowed mime types and file extensions.
- _$0.signal_ `UploadMediaArgs[ 'signal' ]`: Abort signal.
+- _$0.multiple_ `UploadMediaArgs[ 'multiple' ]`: Whether to allow multiple files to be uploaded.
### validateFileSize
diff --git a/packages/media-utils/package.json b/packages/media-utils/package.json
index 984dcea29c9f4..90c3023e4ef1d 100644
--- a/packages/media-utils/package.json
+++ b/packages/media-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/media-utils",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "WordPress Media Upload Utils.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/media-utils/src/utils/test/upload-media.ts b/packages/media-utils/src/utils/test/upload-media.ts
index b5075255ad4c8..ee6276557ed79 100644
--- a/packages/media-utils/src/utils/test/upload-media.ts
+++ b/packages/media-utils/src/utils/test/upload-media.ts
@@ -196,4 +196,18 @@ describe( 'uploadMedia', () => {
);
expect( uploadToServer ).not.toHaveBeenCalled();
} );
+
+ it( 'should throw error when multiple files are selected in single file upload mode', async () => {
+ const onError = jest.fn();
+ await uploadMedia( {
+ filesList: [ imageFile, xmlFile ],
+ onError,
+ multiple: false,
+ } );
+
+ expect( onError ).toHaveBeenCalledWith(
+ new Error( 'Only one file can be used here.' )
+ );
+ expect( uploadToServer ).not.toHaveBeenCalled();
+ } );
} );
diff --git a/packages/media-utils/src/utils/upload-media.ts b/packages/media-utils/src/utils/upload-media.ts
index ff3f718076512..4b600f983c571 100644
--- a/packages/media-utils/src/utils/upload-media.ts
+++ b/packages/media-utils/src/utils/upload-media.ts
@@ -42,6 +42,8 @@ interface UploadMediaArgs {
wpAllowedMimeTypes?: Record< string, string > | null;
// Abort signal.
signal?: AbortSignal;
+ // Whether to allow multiple files to be uploaded.
+ multiple?: boolean;
}
/**
@@ -57,6 +59,7 @@ interface UploadMediaArgs {
* @param $0.onFileChange Function called each time a file or a temporary representation of the file is available.
* @param $0.wpAllowedMimeTypes List of allowed mime types and file extensions.
* @param $0.signal Abort signal.
+ * @param $0.multiple Whether to allow multiple files to be uploaded.
*/
export function uploadMedia( {
wpAllowedMimeTypes,
@@ -67,7 +70,13 @@ export function uploadMedia( {
onError,
onFileChange,
signal,
+ multiple = true,
}: UploadMediaArgs ) {
+ if ( ! multiple && filesList.length > 1 ) {
+ onError?.( new Error( __( 'Only one file can be used here.' ) ) );
+ return;
+ }
+
const validFiles = [];
const filesSet: Array< Partial< Attachment > | null > = [];
diff --git a/packages/notices/CHANGELOG.md b/packages/notices/CHANGELOG.md
index d38828c40a4ff..678edeaf97341 100644
--- a/packages/notices/CHANGELOG.md
+++ b/packages/notices/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/notices/package.json b/packages/notices/package.json
index c3ca8915eb2e3..444601e732598 100644
--- a/packages/notices/package.json
+++ b/packages/notices/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/notices",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "State management for notices.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/npm-package-json-lint-config/CHANGELOG.md b/packages/npm-package-json-lint-config/CHANGELOG.md
index 620f409b37b5f..6240050bc156d 100644
--- a/packages/npm-package-json-lint-config/CHANGELOG.md
+++ b/packages/npm-package-json-lint-config/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/npm-package-json-lint-config/package.json b/packages/npm-package-json-lint-config/package.json
index a99d198f9f081..ffe288165b767 100644
--- a/packages/npm-package-json-lint-config/package.json
+++ b/packages/npm-package-json-lint-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/npm-package-json-lint-config",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "WordPress npm-package-json-lint shareable configuration.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/nux/CHANGELOG.md b/packages/nux/CHANGELOG.md
index f4e5e988fef88..0e77064fb80d7 100644
--- a/packages/nux/CHANGELOG.md
+++ b/packages/nux/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 9.18.0 (2025-02-12)
+
## 9.17.0 (2025-01-29)
## 9.16.0 (2025-01-15)
diff --git a/packages/nux/package.json b/packages/nux/package.json
index 70d3fb5cd95fd..e39643d45021d 100644
--- a/packages/nux/package.json
+++ b/packages/nux/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/nux",
- "version": "9.17.0",
+ "version": "9.18.0",
"description": "NUX (New User eXperience) module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/patterns/CHANGELOG.md b/packages/patterns/CHANGELOG.md
index 8f586f1b3ae6b..96b7af1c85bb6 100644
--- a/packages/patterns/CHANGELOG.md
+++ b/packages/patterns/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/patterns/package.json b/packages/patterns/package.json
index 5300e9c0e907d..bbe86c12d2d37 100644
--- a/packages/patterns/package.json
+++ b/packages/patterns/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/patterns",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Management of user pattern editing.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/plugins/CHANGELOG.md b/packages/plugins/CHANGELOG.md
index de23659ea2d06..19203ad557526 100644
--- a/packages/plugins/CHANGELOG.md
+++ b/packages/plugins/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/plugins/package.json b/packages/plugins/package.json
index 1ca540e79f96f..77bc059699026 100644
--- a/packages/plugins/package.json
+++ b/packages/plugins/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/plugins",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "Plugins module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/postcss-plugins-preset/CHANGELOG.md b/packages/postcss-plugins-preset/CHANGELOG.md
index 904557314f5f2..f4843dcef722b 100644
--- a/packages/postcss-plugins-preset/CHANGELOG.md
+++ b/packages/postcss-plugins-preset/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/postcss-plugins-preset/package.json b/packages/postcss-plugins-preset/package.json
index 9fd2ac28deebc..5d53c1018acaa 100644
--- a/packages/postcss-plugins-preset/package.json
+++ b/packages/postcss-plugins-preset/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/postcss-plugins-preset",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "PostCSS sharable plugins preset for WordPress development.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/postcss-themes/CHANGELOG.md b/packages/postcss-themes/CHANGELOG.md
index a7212372d4aa3..12f435ac16cce 100644
--- a/packages/postcss-themes/CHANGELOG.md
+++ b/packages/postcss-themes/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/postcss-themes/package.json b/packages/postcss-themes/package.json
index 2756c600a4067..73959bef12ab5 100644
--- a/packages/postcss-themes/package.json
+++ b/packages/postcss-themes/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/postcss-themes",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "PostCSS plugin to generate theme colors.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/preferences-persistence/CHANGELOG.md b/packages/preferences-persistence/CHANGELOG.md
index b2606dac7e0b8..891fae3f0ea9e 100644
--- a/packages/preferences-persistence/CHANGELOG.md
+++ b/packages/preferences-persistence/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/preferences-persistence/package.json b/packages/preferences-persistence/package.json
index 8813cad82f6d4..b06673bf17be7 100644
--- a/packages/preferences-persistence/package.json
+++ b/packages/preferences-persistence/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/preferences-persistence",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "Persistence utilities for `wordpress/preferences`.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/preferences/CHANGELOG.md b/packages/preferences/CHANGELOG.md
index 7136304f71f4d..7b3031cf84a03 100644
--- a/packages/preferences/CHANGELOG.md
+++ b/packages/preferences/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/preferences/package.json b/packages/preferences/package.json
index 56778fc4f5f45..2ae1a363f8023 100644
--- a/packages/preferences/package.json
+++ b/packages/preferences/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/preferences",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Utilities for managing WordPress preferences.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/prettier-config/CHANGELOG.md b/packages/prettier-config/CHANGELOG.md
index 5bbed9a6ec253..8dc0f13d35a61 100644
--- a/packages/prettier-config/CHANGELOG.md
+++ b/packages/prettier-config/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json
index 80a617a8f2bd5..ed2b142a9d905 100644
--- a/packages/prettier-config/package.json
+++ b/packages/prettier-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/prettier-config",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress Prettier shared configuration.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/primitives/CHANGELOG.md b/packages/primitives/CHANGELOG.md
index ca06f8f317ab4..897fd9bc003d0 100644
--- a/packages/primitives/CHANGELOG.md
+++ b/packages/primitives/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/primitives/package.json b/packages/primitives/package.json
index 24ba82c2957af..b1dfdf1a07141 100644
--- a/packages/primitives/package.json
+++ b/packages/primitives/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/primitives",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress cross-platform primitives.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/priority-queue/CHANGELOG.md b/packages/priority-queue/CHANGELOG.md
index 54c266542c2a5..9ee8272cebff8 100644
--- a/packages/priority-queue/CHANGELOG.md
+++ b/packages/priority-queue/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/priority-queue/package.json b/packages/priority-queue/package.json
index a7c446c7ccf7f..24e72b2e6ca60 100644
--- a/packages/priority-queue/package.json
+++ b/packages/priority-queue/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/priority-queue",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Generic browser priority queue.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/private-apis/CHANGELOG.md b/packages/private-apis/CHANGELOG.md
index d64c9e3f07a13..136a5bc225061 100644
--- a/packages/private-apis/CHANGELOG.md
+++ b/packages/private-apis/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/private-apis/package.json b/packages/private-apis/package.json
index 46d8e742b9183..e9afd612c85b1 100644
--- a/packages/private-apis/package.json
+++ b/packages/private-apis/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/private-apis",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "Internal experimental APIs for WordPress core.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/project-management-automation/CHANGELOG.md b/packages/project-management-automation/CHANGELOG.md
index 48ffdc4d03138..65339afded4a4 100644
--- a/packages/project-management-automation/CHANGELOG.md
+++ b/packages/project-management-automation/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/project-management-automation/package.json b/packages/project-management-automation/package.json
index 327df2a6036e1..4d54d5d8dc2f0 100644
--- a/packages/project-management-automation/package.json
+++ b/packages/project-management-automation/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/project-management-automation",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "GitHub Action that implements various automation to assist with managing the Gutenberg GitHub repository.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/react-i18n/CHANGELOG.md b/packages/react-i18n/CHANGELOG.md
index d5bfec54bd5f4..dd21b385ad82e 100644
--- a/packages/react-i18n/CHANGELOG.md
+++ b/packages/react-i18n/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/react-i18n/package.json b/packages/react-i18n/package.json
index 54a42f88855a7..179ff73c6703b 100644
--- a/packages/react-i18n/package.json
+++ b/packages/react-i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/react-i18n",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "React bindings for @wordpress/i18n.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/readable-js-assets-webpack-plugin/CHANGELOG.md b/packages/readable-js-assets-webpack-plugin/CHANGELOG.md
index cd2b86202aad2..cab0024f1b29c 100644
--- a/packages/readable-js-assets-webpack-plugin/CHANGELOG.md
+++ b/packages/readable-js-assets-webpack-plugin/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/readable-js-assets-webpack-plugin/package.json b/packages/readable-js-assets-webpack-plugin/package.json
index bfd3fb573ca2f..fc4841d2a87b8 100644
--- a/packages/readable-js-assets-webpack-plugin/package.json
+++ b/packages/readable-js-assets-webpack-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/readable-js-assets-webpack-plugin",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Generate a readable JS file for each JS asset.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/redux-routine/CHANGELOG.md b/packages/redux-routine/CHANGELOG.md
index a0cb80b0c0e4c..d9dd064173024 100644
--- a/packages/redux-routine/CHANGELOG.md
+++ b/packages/redux-routine/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/redux-routine/package.json b/packages/redux-routine/package.json
index 5a75aef5c5a19..43b6e155df5bd 100644
--- a/packages/redux-routine/package.json
+++ b/packages/redux-routine/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/redux-routine",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Redux middleware for generator coroutines.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/reusable-blocks/CHANGELOG.md b/packages/reusable-blocks/CHANGELOG.md
index 7c61ee2f0256f..8ab2f36ff5b54 100644
--- a/packages/reusable-blocks/CHANGELOG.md
+++ b/packages/reusable-blocks/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/reusable-blocks/package.json b/packages/reusable-blocks/package.json
index e34d36dd4c8b8..ba0e48edfc828 100644
--- a/packages/reusable-blocks/package.json
+++ b/packages/reusable-blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/reusable-blocks",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "Reusable blocks utilities.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/rich-text/CHANGELOG.md b/packages/rich-text/CHANGELOG.md
index 137a982adce9e..99dab2b6d7d54 100644
--- a/packages/rich-text/CHANGELOG.md
+++ b/packages/rich-text/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 7.18.0 (2025-02-12)
+
## 7.17.0 (2025-01-29)
## 7.16.0 (2025-01-15)
diff --git a/packages/rich-text/package.json b/packages/rich-text/package.json
index 9f7a576813456..ffdb4d3afc99b 100644
--- a/packages/rich-text/package.json
+++ b/packages/rich-text/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/rich-text",
- "version": "7.17.0",
+ "version": "7.18.0",
"description": "Rich text value and manipulation API.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md
index 36ed9891d807e..856f3659685b0 100644
--- a/packages/router/CHANGELOG.md
+++ b/packages/router/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/router/package.json b/packages/router/package.json
index 9ddd8ef1ab9f2..019f00bb33e4e 100644
--- a/packages/router/package.json
+++ b/packages/router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/router",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "Router API for WordPress pages.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/scripts/CHANGELOG.md b/packages/scripts/CHANGELOG.md
index f5ad9b8eb3436..5924f9a938095 100644
--- a/packages/scripts/CHANGELOG.md
+++ b/packages/scripts/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 30.11.0 (2025-02-12)
+
## 30.10.0 (2025-01-29)
## 30.9.0 (2025-01-15)
diff --git a/packages/scripts/package.json b/packages/scripts/package.json
index 675c25c0b5480..31cb6f70a10c2 100644
--- a/packages/scripts/package.json
+++ b/packages/scripts/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/scripts",
- "version": "30.10.0",
+ "version": "30.11.0",
"description": "Collection of reusable scripts for WordPress development.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/server-side-render/CHANGELOG.md b/packages/server-side-render/CHANGELOG.md
index ffb662d503db5..65e86fe2f2539 100644
--- a/packages/server-side-render/CHANGELOG.md
+++ b/packages/server-side-render/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 5.18.0 (2025-02-12)
+
## 5.17.0 (2025-01-29)
## 5.16.0 (2025-01-15)
diff --git a/packages/server-side-render/package.json b/packages/server-side-render/package.json
index 70fcfa4997807..ad4511d3b4c63 100644
--- a/packages/server-side-render/package.json
+++ b/packages/server-side-render/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/server-side-render",
- "version": "5.17.0",
+ "version": "5.18.0",
"description": "The component used with WordPress to server-side render a preview of dynamic blocks to display in the editor.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/shortcode/CHANGELOG.md b/packages/shortcode/CHANGELOG.md
index bd36355f27790..5eb36c1395979 100644
--- a/packages/shortcode/CHANGELOG.md
+++ b/packages/shortcode/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/shortcode/package.json b/packages/shortcode/package.json
index b96126f5c344b..9da8902e6309c 100644
--- a/packages/shortcode/package.json
+++ b/packages/shortcode/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/shortcode",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Shortcode module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/style-engine/CHANGELOG.md b/packages/style-engine/CHANGELOG.md
index d1d0fc4c95090..5bdb3fa37adfa 100644
--- a/packages/style-engine/CHANGELOG.md
+++ b/packages/style-engine/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 2.18.0 (2025-02-12)
+
## 2.17.0 (2025-01-29)
## 2.16.0 (2025-01-15)
diff --git a/packages/style-engine/package.json b/packages/style-engine/package.json
index 5ce48d4e7da0f..9aa95d240eb9e 100644
--- a/packages/style-engine/package.json
+++ b/packages/style-engine/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/style-engine",
- "version": "2.17.0",
+ "version": "2.18.0",
"description": "A suite of parsers and compilers for WordPress styles.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/stylelint-config/CHANGELOG.md b/packages/stylelint-config/CHANGELOG.md
index dc326ef3b07f7..3d8e93519d175 100644
--- a/packages/stylelint-config/CHANGELOG.md
+++ b/packages/stylelint-config/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 23.10.0 (2025-02-12)
+
## 23.9.0 (2025-01-29)
## 23.8.0 (2025-01-15)
diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json
index 4c6ccffcc0c53..dbaba3adc7da0 100644
--- a/packages/stylelint-config/package.json
+++ b/packages/stylelint-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/stylelint-config",
- "version": "23.9.0",
+ "version": "23.10.0",
"description": "stylelint config for WordPress development.",
"author": "The WordPress Contributors",
"license": "MIT",
diff --git a/packages/sync/CHANGELOG.md b/packages/sync/CHANGELOG.md
index bbd1aaf688db4..eccfc5a851cd7 100644
--- a/packages/sync/CHANGELOG.md
+++ b/packages/sync/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/sync/package.json b/packages/sync/package.json
index 45200f2068e3c..871dff74c13a8 100644
--- a/packages/sync/package.json
+++ b/packages/sync/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/sync",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "Sync Data.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/token-list/CHANGELOG.md b/packages/token-list/CHANGELOG.md
index 0878eb5989bc5..6aba8cca74cc0 100644
--- a/packages/token-list/CHANGELOG.md
+++ b/packages/token-list/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/token-list/package.json b/packages/token-list/package.json
index cb067e63ca787..440c99d53f21c 100644
--- a/packages/token-list/package.json
+++ b/packages/token-list/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/token-list",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Constructable, plain JavaScript DOMTokenList implementation, supporting non-browser runtimes.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/undo-manager/CHANGELOG.md b/packages/undo-manager/CHANGELOG.md
index da4c45158d651..550a82025d72d 100644
--- a/packages/undo-manager/CHANGELOG.md
+++ b/packages/undo-manager/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 1.18.0 (2025-02-12)
+
## 1.17.0 (2025-01-29)
## 1.16.0 (2025-01-15)
diff --git a/packages/undo-manager/package.json b/packages/undo-manager/package.json
index 1cd7f11fdafe2..4024255022d14 100644
--- a/packages/undo-manager/package.json
+++ b/packages/undo-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/undo-manager",
- "version": "1.17.0",
+ "version": "1.18.0",
"description": "A small package to manage undo/redo.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/upload-media/CHANGELOG.md b/packages/upload-media/CHANGELOG.md
index c877455493a7b..17600b46bce9b 100644
--- a/packages/upload-media/CHANGELOG.md
+++ b/packages/upload-media/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 0.3.0 (2025-02-12)
+
## 0.2.0 (2025-01-29)
## 0.1.0 (2025-01-15)
diff --git a/packages/upload-media/package.json b/packages/upload-media/package.json
index 3d4e0171df1f7..e2b44173b7624 100644
--- a/packages/upload-media/package.json
+++ b/packages/upload-media/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/upload-media",
- "version": "0.2.0",
+ "version": "0.3.0",
"description": "Core media upload logic.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/url/CHANGELOG.md b/packages/url/CHANGELOG.md
index eb97783d31cd3..2a24cd002b502 100644
--- a/packages/url/CHANGELOG.md
+++ b/packages/url/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/url/package.json b/packages/url/package.json
index 9ff808bbe1ef2..eff6262667a15 100644
--- a/packages/url/package.json
+++ b/packages/url/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/url",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress URL utilities.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/viewport/CHANGELOG.md b/packages/viewport/CHANGELOG.md
index d5426d9cac711..376a76ae3e882 100644
--- a/packages/viewport/CHANGELOG.md
+++ b/packages/viewport/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 6.18.0 (2025-02-12)
+
## 6.17.0 (2025-01-29)
## 6.16.0 (2025-01-15)
diff --git a/packages/viewport/package.json b/packages/viewport/package.json
index 8a4ae23e02a3c..00c4ea5c073a3 100644
--- a/packages/viewport/package.json
+++ b/packages/viewport/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/viewport",
- "version": "6.17.0",
+ "version": "6.18.0",
"description": "Viewport module for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/warning/CHANGELOG.md b/packages/warning/CHANGELOG.md
index 4d39133ca0e5a..b16e6934e2b3b 100644
--- a/packages/warning/CHANGELOG.md
+++ b/packages/warning/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 3.18.0 (2025-02-12)
+
## 3.17.0 (2025-01-29)
## 3.16.0 (2025-01-15)
diff --git a/packages/warning/package.json b/packages/warning/package.json
index 098986e2c6c03..760a6360f1716 100644
--- a/packages/warning/package.json
+++ b/packages/warning/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/warning",
- "version": "3.17.0",
+ "version": "3.18.0",
"description": "Warning utility for WordPress.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/widgets/CHANGELOG.md b/packages/widgets/CHANGELOG.md
index cac2955edb6b1..85239f3c535b3 100644
--- a/packages/widgets/CHANGELOG.md
+++ b/packages/widgets/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/widgets/package.json b/packages/widgets/package.json
index 782857be40898..7ac9729e0c541 100644
--- a/packages/widgets/package.json
+++ b/packages/widgets/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/widgets",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "Functionality used by the widgets block editor in the Widgets screen and the Customizer.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/packages/wordcount/CHANGELOG.md b/packages/wordcount/CHANGELOG.md
index 03b7132ba4b39..42c87b282a0a5 100644
--- a/packages/wordcount/CHANGELOG.md
+++ b/packages/wordcount/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+## 4.18.0 (2025-02-12)
+
## 4.17.0 (2025-01-29)
## 4.16.0 (2025-01-15)
diff --git a/packages/wordcount/package.json b/packages/wordcount/package.json
index 5fbe5c9d20b82..34690e0d72dc5 100644
--- a/packages/wordcount/package.json
+++ b/packages/wordcount/package.json
@@ -1,6 +1,6 @@
{
"name": "@wordpress/wordcount",
- "version": "4.17.0",
+ "version": "4.18.0",
"description": "WordPress word count utility.",
"author": "The WordPress Contributors",
"license": "GPL-2.0-or-later",
diff --git a/schemas/json/wp-env.json b/schemas/json/wp-env.json
index 2a98cb3d0d263..bc54c6ee9ea2e 100644
--- a/schemas/json/wp-env.json
+++ b/schemas/json/wp-env.json
@@ -149,7 +149,12 @@
"$ref": "#/definitions/wpEnvPropertyNames"
},
{
- "enum": [ "$schema", "env", "testsPort", "lifecycleScripts" ]
+ "enum": [
+ "$schema",
+ "env",
+ "testsPort",
+ "lifecycleScripts"
+ ]
}
]
}