Skip to content

Fix: Tabs block: Start with empty tab labels with placeholders - #81009

Merged
t-hamano merged 7 commits into
WordPress:trunkfrom
hbhalodia:fix/issue-80957
Aug 4, 2026
Merged

t-hamano merged 7 commits into
WordPress:trunkfrom
hbhalodia:fix/issue-80957

Conversation

@hbhalodia

Copy link
Copy Markdown
Contributor

What?

Closes #80957

Why?

  • PR removes the default labels for tablist from panel, and adds the placeholder with an attribute.

How?

  • Updated the tabs block to include the placeholders instead of labels on default tabs addition.

Testing Instructions

  1. Open post/page.
  2. Add the tabs block.
  3. You will see the tab list with placeholder, Tab Title instead of Tab label.
  4. For patterns, template - pass placeholder attribute and use that pattern, you would notice the placeholder is what you have added for pattern.

Testing Instructions for Keyboard

  • None

Use of AI Tools

  • Claude Code, Opus 5.
  • For drafting implementation, spec test. Implementation was reviewed by me.
  • For detailed description of PR which is shown below.

AI Summary

What?

Closes #80957

Tabs now start out untitled. Instead of inserting two tabs literally labelled "Tab", the Tabs block inserts two tabs with an empty label that render a "Tab title" placeholder in the editor. core/tab-panel also gains an optional placeholder attribute so patterns and templates can replace that prompt with something contextual, e.g. "Ingredient group" or "Question".

Why?

The hardcoded __( 'Tab' ) default meant every new tab arrived pre-filled with a word nobody wants to keep:

  • Authors had to select and delete "Tab" before typing a real title, on every tab.
  • Publishing without editing shipped a row of tabs all named "Tab" — meaningless to readers and to screen reader users.
  • It was inconsistent with the rest of the library. Paragraph, Heading, List Item, and Details all start empty and prompt for content rather than pre-filling it.

The Tab List block already had a __( 'Tab title' ) placeholder in place — it was simply never visible, because the label was never empty. This change lets that placeholder do its job, and adds the pattern-level override suggested in the issue.

How?

File Change
packages/block-library/src/tab-panels/edit.js Insertion template is now [ [ 'core/tab-panel' ], [ 'core/tab-panel' ] ] — the label: __( 'Tab' ) defaults are gone
packages/block-library/src/tabs/use-tab-actions.js insertTab creates core/tab-panel with no attributes, so tabs added via the toolbar or Enter are also untitled
packages/block-library/src/tab-panel/block.json New optional placeholder string attribute
packages/block-library/src/tab-list/edit.js Each tab's RichText uses its panel's placeholder, falling back to __( 'Tab title' )
packages/block-library/src/tab-panel/README.md Regenerated via npm run docs:blocks-detail
packages/block-library/CHANGELOG.md Changelog entry
test/e2e/specs/editor/blocks/tabs.spec.js New Tab labels describe block, 3 tests

Implementation notes:

  • The placeholder attribute lives on core/tab-panel, next to label. The label is a tab-panel attribute that Tab List renders on its behalf, so its placeholder belongs in the same place. This matches the existing placeholder attribute convention in Paragraph, Heading, List Item, Details, and Post Title.
  • It is editor-only. tab-list/save.js passes no placeholder to RichText.Content, so nothing is added to the saved markup or the front end.
  • It is per panel, and nothing propagates it. Each core/tab-panel declares its own prompt; a tab the author adds afterwards falls back to "Tab title". Making added tabs inherit a sibling's prompt would need the attribute to move up to core/tabs/core/tab-list and reach the labels through block context — deliberately out of scope here.
  • No deprecation or migration needed. label already defaulted to ""; only the values written at insertion time changed. Existing posts parse and serialize byte-for-byte identically, and placeholder has no default, so it is absent from markup unless a pattern sets it.

Testing Instructions

  1. Create a new post and insert a Tabs block.

  2. Both tabs are empty and show a greyed-out "Tab title" prompt. Open the code editor (Ctrl+Shift+Alt+M) and confirm the tab panels carry no label attribute.

  3. Click the first tab and type a title. The placeholder disappears on that tab only; the second tab still prompts.

  4. With a tab selected, click Add tab in the block toolbar. The new tab is empty and shows the prompt. Same when pressing Enter at the end of an existing tab label.

  5. Confirm no regression on existing content: paste the markup below into the code editor, switch back to the visual editor, and check the tabs still read "Tab 1" / "Tab 2" with no block validation warning.

    <!-- wp:tabs -->
    <div class="wp-block-tabs"><!-- wp:tab-list -->
    <div role="tablist" class="wp-block-tab-list"><button type="button" role="tab">Tab 1</button><button type="button" role="tab">Tab 2</button></div>
    <!-- /wp:tab-list -->
    
    <!-- wp:tab-panels -->
    <div class="wp-block-tab-panels"><!-- wp:tab-panel {"label":"Tab 1"} -->
    <section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
    <p>Panel 1</p>
    <!-- /wp:paragraph --></section>
    <!-- /wp:tab-panel -->
    
    <!-- wp:tab-panel {"label":"Tab 2"} -->
    <section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
    <p>Panel 2</p>
    <!-- /wp:paragraph --></section>
    <!-- /wp:tab-panel --></div>
    <!-- /wp:tab-panels --></div>
    <!-- /wp:tabs -->
  6. Publish a post with untitled tabs and view the front end. The tab buttons render empty — expected, and the same as publishing an empty Heading. Tab switching still works.

Testing the placeholder override

A. Quickest check — no PHP required
  1. New post → Options (⋮) → Code editor.
  2. Paste this and switch back to the Visual editor:
<!-- wp:tabs -->
<div class="wp-block-tabs"><!-- wp:tab-list -->
<div role="tablist" class="wp-block-tab-list"><button type="button" role="tab"></button><button type="button" role="tab"></button></div>
<!-- /wp:tab-list -->

<!-- wp:tab-panels -->
<div class="wp-block-tab-panels"><!-- wp:tab-panel {"placeholder":"Ingredient group"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel -->

<!-- wp:tab-panel {"placeholder":"Cooking step"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel --></div>
<!-- /wp:tab-panels --></div>
<!-- /wp:tabs -->

Expected: the first tab prompts "Ingredient group", the second "Cooking step" — placeholders are per panel and can differ. Typing in either replaces only that tab's prompt. Add a third tab from the toolbar and it falls back to "Tab title".

B. Testing from a pattern

As a theme pattern — drop this in the active block theme as patterns/tabs-placeholder-test.php:

<?php
/**
 * Title: Placeholder test tabs
 * Slug: test/tabs-placeholder
 * Categories: featured
 */
?>
<!-- wp:tabs -->
<div class="wp-block-tabs"><!-- wp:tab-list -->
<div role="tablist" class="wp-block-tab-list"><button type="button" role="tab"></button><button type="button" role="tab"></button></div>
<!-- /wp:tab-list -->

<!-- wp:tab-panels -->
<div class="wp-block-tab-panels"><!-- wp:tab-panel {"placeholder":"Ingredient group"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph {"placeholder":"List the ingredients"} -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel -->

<!-- wp:tab-panel {"placeholder":"Ingredient group"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel --></div>
<!-- /wp:tab-panels --></div>
<!-- /wp:tabs -->

Or as a plugin — drop this in wp-content/mu-plugins/tabs-placeholder-test.php (single-quoted heredoc keeps the markup verbatim):

<?php
/**
 * Plugin Name: Tabs placeholder test
 */
add_action(
	'init',
	static function () {
		register_block_pattern(
			'test/tabs-placeholder',
			array(
				'title'      => 'Placeholder test tabs',
				'categories' => array( 'featured' ),
				'content'    => <<<'HTML'
<!-- wp:tabs -->
<div class="wp-block-tabs"><!-- wp:tab-list -->
<div role="tablist" class="wp-block-tab-list"><button type="button" role="tab"></button><button type="button" role="tab"></button></div>
<!-- /wp:tab-list -->

<!-- wp:tab-panels -->
<div class="wp-block-tab-panels"><!-- wp:tab-panel {"placeholder":"Ingredient group"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel -->

<!-- wp:tab-panel {"placeholder":"Ingredient group"} -->
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph --></section>
<!-- /wp:tab-panel --></div>
<!-- /wp:tab-panels --></div>
<!-- /wp:tabs -->
HTML,
			)
		);
	}
);

Steps: open the inserter → Patterns → Featured → insert "Placeholder test tabs".

Expected: both tabs prompt "Ingredient group" instead of "Tab title". The pattern preview in the inserter shows the prompts too. Nothing appears in the saved markup for the placeholder beyond the attribute itself, and the front end renders empty buttons until the author types.

Keep the two empty <button type="button" role="tab"></button> elements in the Tab List markup — that saved markup is what the front end renders, and useTabListItemsSync refills it from the panel labels once the author types.

C. Testing from a block template

Post type template — wp-content/mu-plugins/tabs-template-test.php:

<?php
/**
 * Plugin Name: Tabs template test
 */
add_action(
	'init',
	static function () {
		register_post_type(
			'placeholder_test',
			array(
				'label'        => 'Placeholder tests',
				'public'       => true,
				'show_in_rest' => true,
				'supports'     => array( 'title', 'editor' ),
				'template'     => array(
					array(
						'core/tabs',
						array(),
						array(
							array( 'core/tab-list' ),
							array(
								'core/tab-panels',
								array(),
								array(
									array( 'core/tab-panel', array( 'placeholder' => 'Question' ) ),
									array( 'core/tab-panel', array( 'placeholder' => 'Question' ) ),
								),
							),
						),
					),
				),
			)
		);
	}
);

Steps: go to Placeholder tests → Add New.

Expected: the Tabs block is pre-inserted with two tabs prompting "Question".

JS equivalent for a custom block's InnerBlocks template or a block variation:

const TEMPLATE = [
	[
		'core/tabs',
		{},
		[
			[ 'core/tab-list' ],
			[
				'core/tab-panels',
				{},
				[
					[ 'core/tab-panel', { placeholder: __( 'Question' ) } ],
					[ 'core/tab-panel', { placeholder: __( 'Question' ) } ],
				],
			],
		],
	],
];
registerBlockVariation( 'core/tabs', {
	name: 'faq-tabs',
	title: __( 'FAQ tabs' ),
	innerBlocks: [
		[ 'core/tab-list' ],
		[
			'core/tab-panels',
			{},
			[
				[ 'core/tab-panel', { placeholder: __( 'Question' ) } ],
				[ 'core/tab-panel', { placeholder: __( 'Question' ) } ],
			],
		],
	],
} );

Testing Instructions for Keyboard

  1. Insert a Tabs block with the keyboard (/tabs then Enter).
  2. Focus lands in the first tab label. It is empty, and a screen reader announces the placeholder — RichText falls back to the placeholder for the editable's aria-label when no explicit label is set, so an untitled tab announces "Tab title" (or the pattern's custom prompt) rather than nothing.
  3. Type a title, press End then Enter — a new untitled tab is added and focused, announcing the placeholder.
  4. Press Backspace on the now-empty label to remove that tab; focus moves to the adjacent tab.
  5. Arrow left/right at the label edges to move the caret between tabs and confirm the matching panel activates.

Automated tests

npm run test:e2e -- test/e2e/specs/editor/blocks/tabs.spec.js

The new Tab labels describe block covers:

  • tabs start empty and prompt for a title,
  • a panel's placeholder attribute overrides the prompt,
  • tabs added from the toolbar stay empty and prompt.

@github-actions github-actions Bot added the [Package] Block library /packages/block-library label Jul 31, 2026
@hbhalodia hbhalodia closed this Jul 31, 2026
@hbhalodia hbhalodia reopened this Jul 31, 2026
@hbhalodia
hbhalodia marked this pull request as ready for review July 31, 2026 08:38
@github-actions

github-actions Bot commented Jul 31, 2026 •

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@shail-mehta shail-mehta added [Type] Enhancement A suggestion for improvement. [Block] Tabs Affects the Tabs Block labels Jul 31, 2026

@t-hamano t-hamano left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR.

I agree with starting from an empty tab label, but I'm not sure if customizable placeholders are really needed. For now, I think we should focus only on starting with an empty tab label in this PR and backport it to 7.1. What do you think?

Another point is that we need to clarify whether empty tab labels should apply not only when adding a new tab but also when inserting a block.

cc @hanneslsm @Mamaduka

@hbhalodia

hbhalodia commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor Author

I agree with starting from an empty tab label, but I'm not sure if customizable placeholders are really needed. For now, I think we should focus only on starting with an empty tab label in this PR and backport it to 7.1. What do you think?

I guess it would be fine, we can create an enhancement ticket for customizable placeholder and limit this to only start with empty label if we need to ship to 7.1. Based on overall descision, I would remove it from PR and update the PR description as well.

Another point is that we need to clarify whether empty tab labels should apply not only when adding a new tab but also when inserting a block.

Can you clarify on this, I see after the testing, When adding the tabs block the labels are not added, instead placeholders are there, and also when adding a tab, the placeholder is added.

Thanks,

@t-hamano

Copy link
Copy Markdown
Contributor

Another point is that we need to clarify whether empty tab labels should apply not only when adding a new tab but also when inserting a block.

Can you clarify on this, I see after the testing, When adding the tabs block the labels are not added, instead placeholders are there, and also when adding a tab, the placeholder is added.

This PR currently works like this.

insert-without-default-label.mp4

I thought it was supposed to work like this.

insert-with-default-label.mp4

I don't have a strong opinion on which approach is better, but after looking at this PR, I'm starting to think that always adding an empty label might make more sense.

Comment thread test/e2e/specs/editor/blocks/tabs.spec.js Outdated
@hbhalodia
hbhalodia requested review from Mamaduka and t-hamano August 3, 2026 04:46
@hanneslsm

Copy link
Copy Markdown

I agree with starting from an empty tab label, but I'm not sure if customizable placeholders are really needed. For now, I think we should focus only on starting with an empty tab label in this PR and backport it to 7.1. What do you think?

A customizable placeholder is currently not highest priority, but it'd be a good enhancement nonetheless. I'd probably change the "tab title" placeholder in some of my patterns to "Feature title" oder "Number".

Another point is that we need to clarify whether empty tab labels should apply not only when adding a new tab but also when inserting a block.

Always empty is good IMO. Everyone will change the prefilled “Tab” text anyway, so we might as well leave it empty from the start.

@t-hamano

t-hamano commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

So, let's adopt an approach that starts from empty. Shall we remove the customizable placeholder attributes for now and backport this PR to 7.1?

@t-hamano t-hamano left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good from my end.

@Mamaduka @hanneslsm, What are your thoughts on backporting this to 7.1?

Update: I noticed the 👍 in #81009 (comment). Let's backport it to 7.1.

@t-hamano t-hamano added the Backport to WP 7.1 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Aug 4, 2026
@t-hamano
t-hamano merged commit 156a134 into WordPress:trunk Aug 4, 2026
47 checks passed
@github-project-automation github-project-automation Bot moved this from 🔎 Needs Review to ✅ Done in WordPress 7.1 Editor Tasks Aug 4, 2026
@github-actions github-actions Bot added this to the Gutenberg 23.8 milestone Aug 4, 2026
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

There was a conflict while trying to cherry-pick the commit to the wp/7.1 branch. Please resolve the conflict manually and create a PR to the wp/7.1 branch.

PRs to wp/7.1 are similar to PRs to trunk, but you should base your PR on the wp/7.1 branch instead of trunk.

# Checkout the wp/7.1 branch instead of trunk.
git checkout wp/7.1

# Create a new branch for your PR.
git checkout -b my-branch

# Cherry-pick the commit.
git cherry-pick 156a13447c91cb3d6a12b507ee75df0592f2b88b

# Check which files have conflicts.
git status

# Resolve the conflict...
# Add the resolved files to the staging area.
git status
git add .
git cherry-pick --continue

# Push the branch to the repository
git push origin my-branch

# Create a PR and set the base to the wp/7.1 branch.
# See https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request.

@t-hamano

t-hamano commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@hbhalodia, do you have the bandwidth to manually backport this PR to 7.1? It should likely only involve resolving changelog file conflicts 👍

t-hamano added a commit that referenced this pull request Aug 4, 2026
New tabs no longer get a default 'Tab' label (#81009), so the assertion
after pressing Enter at the end of a label expects an empty label.

Co-Authored-By: Claude <noreply@anthropic.com>
@hbhalodia

Copy link
Copy Markdown
Contributor Author

Hi @t-hamano, I have created a backport PR - #81197, Let me know if that sounds good?

t-hamano added a commit to hbhalodia/gutenberg that referenced this pull request Aug 5, 2026
These four files were committed by mistake while preparing the manual
backport. They are not part of WordPress#81009 and are not tracked in trunk or
wp/7.1.

Co-Authored-By: Claude <noreply@anthropic.com>
t-hamano added a commit that referenced this pull request Aug 5, 2026
* Fix: Tabs block: Start with empty tab labels with placeholders (#81009)

* Add placeholder instead of tabs label

* Update block docs and add changelog entry

* Updated tests and asserts placeholder check to existing tests

* Remove placeholder attribute

* Remove extra spacing

* Remove extra line

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>

* Remove unrelated .claude/skills files from the backport

These four files were committed by mistake while preparing the manual
backport. They are not part of #81009 and are not tracked in trunk or
wp/7.1.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>
Co-authored-by: Aki Hamano <tetsuaki.hamano@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
@t-hamano t-hamano added Backported to WP Core Pull request that has been successfully merged into WP Core and removed Backport to WP 7.1 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta labels Aug 5, 2026
t-hamano added a commit that referenced this pull request Aug 11, 2026
…lders (#81429)

* Fix: Tabs block: Start with empty tab labels with placeholders (#81009)

* Add placeholder instead of tabs label

* Update block docs and add changelog entry

* Updated tests and asserts placeholder check to existing tests

* Remove placeholder attribute

* Remove extra spacing

* Remove extra line

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>

* Remove unrelated .claude/skills files from the backport

These four files were committed by mistake while preparing the manual
backport. They are not part of #81009 and are not tracked in trunk or
wp/7.1.

Co-Authored-By: Claude <noreply@anthropic.com>

* Update label and template as per new changes

* Remove extra changelog entryi

* Update changelog entry

---------

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
shail-mehta pushed a commit that referenced this pull request Aug 12, 2026
* Add placeholder instead of tabs label

* Update block docs and add changelog entry

* Updated tests and asserts placeholder check to existing tests

* Remove placeholder attribute

* Remove extra spacing

* Remove extra line

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>
shail-mehta pushed a commit that referenced this pull request Aug 12, 2026
…lders (#81429)

* Fix: Tabs block: Start with empty tab labels with placeholders (#81009)

* Add placeholder instead of tabs label

* Update block docs and add changelog entry

* Updated tests and asserts placeholder check to existing tests

* Remove placeholder attribute

* Remove extra spacing

* Remove extra line

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
Co-authored-by: hanneslsm <hanneslsm@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>

* Remove unrelated .claude/skills files from the backport

These four files were committed by mistake while preparing the manual
backport. They are not part of #81009 and are not tracked in trunk or
wp/7.1.

Co-Authored-By: Claude <noreply@anthropic.com>

* Update label and template as per new changes

* Remove extra changelog entryi

* Update changelog entry

---------

Co-authored-by: hbhalodia <hbhalodia@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: Mamaduka <mamaduka@git.wordpress.org>
wporg-sync pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 8, 2026
This updates the pinned commit hash of the Gutenberg repository from `5a0417990a9404cc2562cdd35e3054cb0d3e546e` (version `23.7.0`) to `ae8b34d78e1abc6d1c866fdc00080a1452de82ad` (version `23.8.0`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.7.0..v23.8.0.

- Fix: New route-based admin pages are empty when no JS (WordPress/gutenberg#80628)
- Report flaky tests: declare @types/node (WordPress/gutenberg#80838)
- Storybook e2e: add small, compact and icon examples to button matrix (WordPress/gutenberg#80793)
- ESLint: Drop @eslint/compat fixup for jest-dom and testing-library (WordPress/gutenberg#80842)
- Storybook: Use SelectControl in Motion tokens story (WordPress/gutenberg#80790)
- Writing flow: forward delete an empty paragraph without breaking apart the next block (WordPress/gutenberg#80813)
- ToggleControl: Add "With Visual" Storybook story (WordPress/gutenberg#80803)
- Bump the github-actions group across 1 directory with 5 updates (WordPress/gutenberg#80684)
- Update Ariakit packages (WordPress/gutenberg#80765)
- Components: Update Floating UI to 2.1.9 (WordPress/gutenberg#80761)
- Improve pre-flight npm access checks (WordPress/gutenberg#80334)
- Ensure static checks can run for private mirrors (WordPress/gutenberg#80817)
- Components: Update react-day-picker to 9.14.0 (WordPress/gutenberg#80792)
- Testing: Remove the jest-puppeteer-axe package (WordPress/gutenberg#80775)
- Tools: Use native agent skill discovery (WordPress/gutenberg#80811)
- Table of Contents: Replace "Convert to static list" with confirmed "Detach" action (WordPress/gutenberg#80844)
- Page List: Rename the Edit action to Detach and confirm it in a dialog (WordPress/gutenberg#80847)
- URLInput: Simplify keyboard handling and fix arrow keys with a text selection (WordPress/gutenberg#80780)
- Upload Media: Fail the item when the /finalize request fails (WordPress/gutenberg#80725)
- Jest preset: support self-referencing via exports (WordPress/gutenberg#80837)
- Fix template `modified` and `date` return value for file templates (WordPress/gutenberg#80733)
- Element: Make the package importable in React 19 (WordPress/gutenberg#80053)
- Add CheckboxControl with-visual Storybook story. (WordPress/gutenberg#80849)
- UI: Add Combobox.InputGroup primitive (WordPress/gutenberg#80869)
- Block Editor: Clear the moving animation's z-index when it finishes (WordPress/gutenberg#80824)
- SearchableChipSelect: Add form primitive to @wordpress/ui (WordPress/gutenberg#80779)
- Playlist: Add track icon (WordPress/gutenberg#80959)
- Flaky tests: fix router navigate latest HTML (WordPress/gutenberg#80178)
- Components: Update polymorphism types to allow all attributes when specifying `as` (WordPress/gutenberg#80705)
- Block JSON schema & PHP-only blocks: Add `autoRegister` support (WordPress/gutenberg#80173)
- Boot: Adjust specificity of the image reset styles so components can size their own images (WordPress/gutenberg#80845)
- Components: Opt-in ConfirmDialog for auto-documentation (WordPress/gutenberg#80866)
- RichText: don't apply input transform when there's no onReplace (WordPress/gutenberg#80978)
- Quote: Ensure paragraph placeholder appears after deleting nested blocks (WordPress/gutenberg#77151)
- Block editor: make the Group action wrap blocks with a group transform (WordPress/gutenberg#80891)
- Copy: preserve the block when its entire text is selected (WordPress/gutenberg#80994)
- Add opt-out for block style state controls (WordPress/gutenberg#80956)
- Upgrade Playwright to v1.62 (WordPress/gutenberg#81001)
- List View: Speed up opening by removing a forced style recalculation (WordPress/gutenberg#80929)
- Widget Dashboard: preserve widget chrome flex layout (WordPress/gutenberg#80570)
- Widget Primitives: document actions as verbs, not links (WordPress/gutenberg#80974)
- Core Data: add missing @wordpress/base-styles dependency (WordPress/gutenberg#81012)
- Ignore node_modules in schema integration test globs (WordPress/gutenberg#81013)
- RichText: fix paste handler crash when pasting files (WordPress/gutenberg#81010)
- Docs: Add VS Code setup guidance (WordPress/gutenberg#77913)
- Perf Tests: Merge selection event windows instead of summing durations (WordPress/gutenberg#81002)
- Storybook: move smoke-test deps into the storybook workspace (WordPress/gutenberg#81017)
- Unit Tests: Reorganise the jest config file. (WordPress/gutenberg#80940)
- Performance Tests: Ignore the locally generated artifacts directory (WordPress/gutenberg#81024)
- Editor: Remove sidebar tabs focus sync effect (WordPress/gutenberg#81020)
- Widgets: carry a declarative `icon` through the widget pipeline (WordPress/gutenberg#80969)
- RTC: Remove excess autosave notices (when not useful) (WordPress/gutenberg#80539)
- UI: Use focus styles from base-styles (WordPress/gutenberg#80635)
- Automated Testing: Add Storybook component documentation regression testing (WordPress/gutenberg#80655)
- Pass Playlist controls to track blocks (WordPress/gutenberg#80368)
- Components: Deprecate Surface (WordPress/gutenberg#80943)
- Tabs: Support Home and End keys for keyboard navigation (WordPress/gutenberg#80912)
- Fix typos in code `comments` and `JSDoc` (WordPress/gutenberg#81045)
- Interface: Remove incorrect aria-expanded from pin-to-toolbar button (WordPress/gutenberg#79874)
- List View: Speed up opening by removing a second render pass (WordPress/gutenberg#80935)
- Docs: Use `gutenberg` instead of `Gutenberg` in package name (WordPress/gutenberg#81051)
- Fix ESLint warnings for 'navigateRegionsProps' spread (WordPress/gutenberg#81052)
- Tests: Replace page-level selectors with locators in e2e specs (WordPress/gutenberg#81053)
- RTC: Disable custom autosave controller when RTC is disabled (WordPress/gutenberg#80769)
- Background: Fix the legacy gradient UI where a gradient cannot be selected (WordPress/gutenberg#81056)
- Rename blockStatesEnabled setting to blockStatesEditingEnabled (WordPress/gutenberg#81058)
- Background: Fix the legacy gradient UI where a gradient cannot be selected - Add missing change log (WordPress/gutenberg#81060)
- Declare missing prettier and stylelint workspace dependencies (WordPress/gutenberg#81065)
- Notes: Display shortcut for form action buttons (WordPress/gutenberg#81064)
- View config: lowercase dynamic filter names (WordPress/gutenberg#81068)
- CI: cache the system packages Playwright dowloads for WebKit (WordPress/gutenberg#80846)
- List View: Collapse off-window placeholder rows into a single spacer row (WordPress/gutenberg#80953)
- devops: balance Playwright shards by duration (WordPress/gutenberg#79479)
- Views: honor developer-defined view config overrides (WordPress/gutenberg#80832)
- Components: Migrate ItemGroup to SCSS module (WordPress/gutenberg#80797)
- Test: Add Vitest migration routing guardrails (WordPress/gutenberg#81036)
- Visual revisions: Add a code diff view inside the editor (WordPress/gutenberg#80314)
- Bump actions/labeler from 6.1.0 to 7.0.0 in /.github/workflows (WordPress/gutenberg#80966)
- Visual revisions: add shareable urls (WordPress/gutenberg#79934)
- Fix e2e tests that break when shard rebalancing changes their neighbors (WordPress/gutenberg#81117)
- Query: guard non-scalar queryId to avoid fatal in enhanced pagination (WordPress/gutenberg#80724)
- Replace deprecated useResizeObserver for useScaleCanvas (WordPress/gutenberg#67508)
- CI: Add job timeouts to E2E, static checks, bundle size, and create block (WordPress/gutenberg#80801)
- Allow organization or repository variable to dictate the Actions runner (WordPress/gutenberg#81087)
- List View: Only subscribe to the block subtree for rows that can show images (WordPress/gutenberg#81076)
- Editor: Migrate settings sidebar to Tabs from @wordpress/ui (WordPress/gutenberg#81054)
- Notes: Email users mentioned in a note (WordPress/gutenberg#79606)
- List View: Narrow the dependants of the memoized List View tree (WordPress/gutenberg#81129)
- List View: Pass only minimal required data to sub-tree branches (WordPress/gutenberg#81111)
- DataViews: Add `time` field type and control (WordPress/gutenberg#80830)
- Post Author Biography: Fix horizontal overflow with long unbroken text (WordPress/gutenberg#81018)
- Link Control: Restore the preview title underline (WordPress/gutenberg#81083)
- Views: Add React to the package's dev dependencies (WordPress/gutenberg#81139)
- feat: Add target param in proxy (WordPress/gutenberg#81141)
- Fix: flaky revisions pagination e2e cross-page diff assertion (WordPress/gutenberg#81119)
- Button: Suppress UA focus ring when focused and pressed (WordPress/gutenberg#81113)
- View config: add reference docs (WordPress/gutenberg#81149)
- Editor: Fix document tools button focus ring (WordPress/gutenberg#81115)
- List View: Replace expand/collapse callbacks with reducer dispatch (WordPress/gutenberg#81138)
- CI: resolve Playwright through the workspace that declares it (WordPress/gutenberg#81137)
- CI: build once and reuse the build across e2e tests shards (WordPress/gutenberg#81031)
- Fix: Tabs block: Start with empty tab labels with placeholders (WordPress/gutenberg#81009)
- Interface: Increase footer breadcrumb height to prevent focus ring clipping (WordPress/gutenberg#81145)
- Editor: clarify autosave failure notice (WordPress/gutenberg#76470)
- Theme: Omit color properties when neither provided nor inherited (WordPress/gutenberg#80600)
- Post editor: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81112)
- Core Data: saveDirtyEntities: improve messaging of server errors (WordPress/gutenberg#81151)
- Global Styles: kebab-case preset slugs when converting references to custom properties (WordPress/gutenberg#80583)
- Revise CODEOWNERS for package ownership (removing nerrad) (WordPress/gutenberg#81175)
- Build: Wrap script bundles in an IIFE to contain 'use strict' (WordPress/gutenberg#79792)
- Media: Improve the HEIC upload error and keep any upload errors up until dismissed (WordPress/gutenberg#81130)
- Block Supports: Guard against non-string attribute values to avoid fatal errors (WordPress/gutenberg#80501)
- Video: Hide settings for the GIF variation (WordPress/gutenberg#81142)
- Video: clarify the Video variation description (WordPress/gutenberg#81181)
- Media Editor: Render sidebar tabs via ComplementaryArea's render prop (WordPress/gutenberg#81133)
- Bump docker/login-action (WordPress/gutenberg#80962)
- Bump actions/setup-node from 6.4.0 to 7.0.0 in /.github/setup-node (WordPress/gutenberg#80963)
- fix(admin-ui): reset the wp-admin li margin that misaligns Breadcrumbs (WordPress/gutenberg#81134)
- Bump astral-sh/setup-uv from 8.3.2 to 9.0.0 in /.github/workflows (WordPress/gutenberg#80964)
- Fix/79643 rtc awareness mixed block selection (WordPress/gutenberg#79836)
- Agents: Add a defensive data design skill and route to the copy guide (WordPress/gutenberg#81131)
- ESLint: Ban `@ts-ignore` in favour of `@ts-expect-error` (WordPress/gutenberg#81148)
- Types: Replace remaining `@ts-expect-error` suppressions with proper typing (WordPress/gutenberg#81200)
- Button: turn on the width setting by default in theme.json (WordPress/gutenberg#81196)
- Notes: fix the mention notification email composition (WordPress/gutenberg#81187)
- Edit Widgets: Fix header toolbar button focus ring (WordPress/gutenberg#81176)
- List View: Reduce per-row store subscriptions (WordPress/gutenberg#81136)
- Customizer widgets: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81174)
- Blocks: Declare the `@types/react-is` devDependency (WordPress/gutenberg#81203)
- Widgets editor: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81173)
- PanelColorSettings: Restore the missing space below the panel header (WordPress/gutenberg#81155)
- Remove the editableRoot opt-in from the paragraph block (WordPress/gutenberg#81184)
- Media Attached to: Fix issue with the popover unexpectedly flipping, tweak wording (WordPress/gutenberg#81206)
- Components: Add allowForms prop to SandBox component (WordPress/gutenberg#76471)
- Ensure device preview is always accurate when window is zoomed in (WordPress/gutenberg#81193)
- DataViews: Pass only eligible items to a bulk action callback (WordPress/gutenberg#81198)
- DataViews: Make grid and table item preview aspect ratio configurable (WordPress/gutenberg#79329)
- Block Editor: Return false from isBlockSelected when there is no client ID (WordPress/gutenberg#81212)
- Blocks: Update hpq to 1.4.0 and drop the ts-expect-error suppressions (WordPress/gutenberg#81199)
- DataViews: Fix the between `date` filter losing a manually typed date on blur (WordPress/gutenberg#81150)
- Block Editor: Fix Select all freezing on large posts (WordPress/gutenberg#81210)
- List View: Split the context and drop dead props to cut re-renders on expand and collapse (WordPress/gutenberg#81159)
- Docs: Fix broken Figma links on the design resources page. (WordPress/gutenberg#81166)
- Blocks: Support static block templates in block type settings (WordPress/gutenberg#80027)
- AGENTS: Update development tips section (WordPress/gutenberg#81224)
- URLInput: Skip search requests while an IME composition is in progress (WordPress/gutenberg#80602)
- Components: Deprecate Animate (WordPress/gutenberg#80931)
- Fix: Trunk e2e failures caused by the navigation spec leaving plain permalinks (WordPress/gutenberg#81238)
- Use p elements for callout alerts in components docs (WordPress/gutenberg#81234)
- Storybook: Enable design system theme tool globally (WordPress/gutenberg#81116)
- Media: Cover client-side big image scaling and orphaned files (WordPress/gutenberg#81061)
- Footnotes: guard against invalid post meta values (WordPress/gutenberg#81201)
- Block editor: unify what a new sibling block inherits (WordPress/gutenberg#81250)
- Global Styles: Remove unused duplicate font family preview utilities (WordPress/gutenberg#81194)
- Docs: explain how the theme.json schema fixtures work (WordPress/gutenberg#81263)
- theme.json schema: fix block pseudo-classes and custom states (WordPress/gutenberg#81209)
- List View: Migrate label wrapper to UI Stack and drop Badge from the anchor (WordPress/gutenberg#81266)
- Docs: Remove dependency group import guidance (WordPress/gutenberg#81245)
- ESLint: Define dependency import rules (WordPress/gutenberg#81246)
- Flaky tests: Report as a PR comment only, stop creating issues (WordPress/gutenberg#81218)
- Dashboard Widgets: remove the Hello Dolly download action (WordPress/gutenberg#81272)
- Block Directory: Make downloadable block item labels translatable. (WordPress/gutenberg#81237)
- Icons: move the inline image icon into the library (WordPress/gutenberg#81271)
- Update phpcs, wpcs dependencies (WordPress/gutenberg#81279)
- fix: add optional chaining for empty reusable block (WordPress/gutenberg#81165) (WordPress/gutenberg#81177)
- DataViews: Inline the kebabCase utility from components (WordPress/gutenberg#81284)
- Navigation: Complete the DocBlocks for the responsive container and overlay style helpers (WordPress/gutenberg#80622)
- Style states: fix state deselection when selecting the already selected block (WordPress/gutenberg#81277)
- Fix missing return value in force_filtered_html_on_import footnotes filter (WordPress/gutenberg#81293)
- Packages: Recover July 29 npm release metadata (WordPress/gutenberg#81303)
- Global styles: render element styles set only inside a breakpoint (WordPress/gutenberg#81265)
- Style states: Fix phantom pseudo element style output (WordPress/gutenberg#81291)
- Docs: remove breakpoint-only element style example from global styles guide (WordPress/gutenberg#81308)
- Render viewport state element styles in the editor (WordPress/gutenberg#81307)
- theme.json schema: responsive states belong to blocks (WordPress/gutenberg#81253)
- theme.json schema: allow responsive states on block style variations (WordPress/gutenberg#81309)
- Block Inspector: Disable the 'Edit original' button when the entity ID is missing (WordPress/gutenberg#81288)
- Site Editor: Decode HTML entities in Identity fields (WordPress/gutenberg#81269)
- Document editEntityRecord's options.isCached param (WordPress/gutenberg#81318)
- Theme: Colocate plugin tests with implementations (WordPress/gutenberg#81247)
- Block Editor: Bail out of hasSelectedInnerBlock when there is no clientId (WordPress/gutenberg#81315)
- ESLint: Replace strict config with bulk suppressions (WordPress/gutenberg#81248)
- Block Library: Document security patch releases (WordPress/gutenberg#81295)
- ESLint: Remove legacy import suppressions (WordPress/gutenberg#81338)
- Components: Migrate Spinner styles from Emotion to SCSS module (WordPress/gutenberg#80511)
- DataViews: Use the public `@wordpress/ui` Badge instead of the private one (WordPress/gutenberg#81236)
- Pert Tests: Avoid inflating interaction metrics with startTracing (WordPress/gutenberg#81264)
- Block Editor: Simplify InspectorControlsFill rendering logic (WordPress/gutenberg#81286)
- Keycodes: Make `withIgnoreIMEEvents` a public API (WordPress/gutenberg#81343)
- Docs: Fix broken links to the removed JavaScript build setup guide. (WordPress/gutenberg#81232)
- Markdownlint: disable the MD033 (no-inline-html) rule project-wide (WordPress/gutenberg#81213)
- Docs: Fix typo in block file structure guide (WordPress/gutenberg#81348)
- Playlist: Normalize Waveform Player configuration handling (WordPress/gutenberg#81342)
- Site editor: fix unreadable sidebar hover color (WordPress/gutenberg#81317)
- Global Styles: Migrate font size presets to the shared preset layer (WordPress/gutenberg#79811)
- Block Editor: Convert useBlockVisibility hook to TypeScript (WordPress/gutenberg#80390)
- Scope breakpoint media queries to screen so printing does not look like a resize (WordPress/gutenberg#81367)
- New `kebab-case` package: extract utility and migrate private API calls (WordPress/gutenberg#81294)
- Remove content types experiment (WordPress/gutenberg#81340)
- Editor: Keep the canvas height stable while resizing the canvas (WordPress/gutenberg#81163)
- Dashboard Widgets: add icon and relevance to the widget action envelope (WordPress/gutenberg#81275)
- Playlist: Improve audio conversion and track selection (WordPress/gutenberg#80926)
- Try: Set post navigation link icon to next. (WordPress/gutenberg#81384)
- UI: Derive Base UI direction from WordPress i18n (WordPress/gutenberg#80399)
- DataViews:  Fix `array` field type validation for empty values (WordPress/gutenberg#81378)
- Bump github/codeql-action/upload-sarif (WordPress/gutenberg#81287)
- Bump actions/stale from 10.4.0 to 11.0.0 in /.github/workflows (WordPress/gutenberg#81219)
- Monitor all setup-related composite Actions. (WordPress/gutenberg#81192)
- IconButton: Improve keyboard shortcut accessibility (WordPress/gutenberg#80402)
- Interface: Stop the secondary sidebar animating into place on page load (WordPress/gutenberg#81362)
- Fix: flaky list view paste block styles e2e test (WordPress/gutenberg#81229)
- Docs: Add error message guidance. (WordPress/gutenberg#81143)
- wp-build: Render the no-JS fallback in the generated page templates (WordPress/gutenberg#81365)
- Changed Build Process Link and remove unused tags (WordPress/gutenberg#81360)
- Scripts: Prevent a UTF-8 BOM in the middle of extracted CSS (WordPress/gutenberg#81383)
- Global Styles: Migrate shadows presets to use the preset management layer. (WordPress/gutenberg#79812)
- Global Styles: report border, shadow, outline, filter and dimension changes (WordPress/gutenberg#81407)
- Dashboard Widgets: split action icons into wire and resolved forms (WordPress/gutenberg#81381)
- Block Editor: Fix Escape from the block toolbar and stop redundant last focus dispatches (WordPress/gutenberg#81319)
- Block Mover: Add the keyboard shortcut to the buttons' spoken description (WordPress/gutenberg#81380)
- Format Library: Remove unused CSS rule (WordPress/gutenberg#77831)
- Core Data: Fix post staying dirty after saving edited post meta with RTC enabled (WordPress/gutenberg#81392)
- Widget Dashboard: host-tunable tile spacing via public custom properties (WordPress/gutenberg#81352)
- DataForm: Fix hidden fields validation (WordPress/gutenberg#81377)
- Tools: Make agent setup a workspace (WordPress/gutenberg#81418)
- Test: Add private Vitest config and migrate a pilot test (WordPress/gutenberg#81037)
- Interface: Let CSS own the ComplementaryArea width and use AnimatePresence custom for exit (WordPress/gutenberg#81363)
- Notes: Fix text wrapping for long usernames in collaboration sidebar (WordPress/gutenberg#81406)
- DataViews: vendor `ValidatedSelectControl` (WordPress/gutenberg#81391)
- UI: Add `Calendar` and `RangeCalendar`, moved from `components` private APIs (WordPress/gutenberg#81337)
- Feature: Tabs block: consider using the tab title in the Document Overview instead of a generic "Tab" label (WordPress/gutenberg#81427)
- fix: order site identity changes predictably (WordPress/gutenberg#81283)
- Docs: Fix broken link to the Node.js debugging guide. (WordPress/gutenberg#81398)
- Navigation Overlay Close: Inherit typography and color from the overlay (WordPress/gutenberg#80751)
- Fix: Regression: Tabs block: Start with empty tab labels with placeholders (WordPress/gutenberg#81429)
- components/Menu: Restore Modal focus return when menu items close (WordPress/gutenberg#81164)
- DataViews: Move the rich text control into the editor package (WordPress/gutenberg#81430)
- Components: Remove ValidatedTextControl private API (WordPress/gutenberg#80680)
- Cover: Avoid passing null as the featured image size (WordPress/gutenberg#81444)
- DataViews: vendor `ValidatedNumberControl` (WordPress/gutenberg#81433)
- DataViews: vendor ValidatedCheckboxControl (WordPress/gutenberg#81435)
- DataViews: vendor ValidatedRadioControl (WordPress/gutenberg#81434)
- UI: Upgrade React DayPicker to version 10 (WordPress/gutenberg#81439)
- Block editor: render a real default block in place of the default appender (WordPress/gutenberg#81231)
- Spacing Sizes Control: Make the control label translatable independently of the input aria label. (WordPress/gutenberg#81240)
- Writing flow: stop the caret on containers that do not merge with the text flow (WordPress/gutenberg#81456)
- Remove an unmodified wrapper when all its inner blocks are removed (WordPress/gutenberg#42503)
- Normalize block gap values in layout (WordPress/gutenberg#81460)
- Docs: Add Block Actions Readme (WordPress/gutenberg#69408)
- Block editor: disclose the nested block count of a multi selection (WordPress/gutenberg#80745)
- Fix: flaky autosave shareable URL revisions e2e test. (WordPress/gutenberg#81455)
- Fix empty list block with anchor persisting after backspace deletion (WordPress/gutenberg#77000)
- Docs: Add Block List Readme (WordPress/gutenberg#69432)
- Docs: Add Block Lock Readme (WordPress/gutenberg#69434)
- Backport core fixes for finalize route (WordPress/gutenberg#81465)
- ESLint: Rename root eslint.config.cjs to eslint.config.mjs (WordPress/gutenberg#81468)
- Update 23.8 release branch  (WordPress/gutenberg#81486)
- RTC: Couple RTC and polling provider as an opt-in experiment (WordPress/gutenberg#80658)
- Align collaboration migration version markers with the 23.8.0 release (WordPress/gutenberg#81789)

Fixes #66066.

git-svn-id: https://develop.svn.wordpress.org/trunk@63534 602fd350-edb4-49c9-b593-d223f7449a82
wporg-sync pushed a commit to WordPress/WordPress that referenced this pull request Sep 8, 2026
This updates the pinned commit hash of the Gutenberg repository from `5a0417990a9404cc2562cdd35e3054cb0d3e546e` (version `23.7.0`) to `ae8b34d78e1abc6d1c866fdc00080a1452de82ad` (version `23.8.0`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.7.0..v23.8.0.

- Fix: New route-based admin pages are empty when no JS (WordPress/gutenberg#80628)
- Report flaky tests: declare @types/node (WordPress/gutenberg#80838)
- Storybook e2e: add small, compact and icon examples to button matrix (WordPress/gutenberg#80793)
- ESLint: Drop @eslint/compat fixup for jest-dom and testing-library (WordPress/gutenberg#80842)
- Storybook: Use SelectControl in Motion tokens story (WordPress/gutenberg#80790)
- Writing flow: forward delete an empty paragraph without breaking apart the next block (WordPress/gutenberg#80813)
- ToggleControl: Add "With Visual" Storybook story (WordPress/gutenberg#80803)
- Bump the github-actions group across 1 directory with 5 updates (WordPress/gutenberg#80684)
- Update Ariakit packages (WordPress/gutenberg#80765)
- Components: Update Floating UI to 2.1.9 (WordPress/gutenberg#80761)
- Improve pre-flight npm access checks (WordPress/gutenberg#80334)
- Ensure static checks can run for private mirrors (WordPress/gutenberg#80817)
- Components: Update react-day-picker to 9.14.0 (WordPress/gutenberg#80792)
- Testing: Remove the jest-puppeteer-axe package (WordPress/gutenberg#80775)
- Tools: Use native agent skill discovery (WordPress/gutenberg#80811)
- Table of Contents: Replace "Convert to static list" with confirmed "Detach" action (WordPress/gutenberg#80844)
- Page List: Rename the Edit action to Detach and confirm it in a dialog (WordPress/gutenberg#80847)
- URLInput: Simplify keyboard handling and fix arrow keys with a text selection (WordPress/gutenberg#80780)
- Upload Media: Fail the item when the /finalize request fails (WordPress/gutenberg#80725)
- Jest preset: support self-referencing via exports (WordPress/gutenberg#80837)
- Fix template `modified` and `date` return value for file templates (WordPress/gutenberg#80733)
- Element: Make the package importable in React 19 (WordPress/gutenberg#80053)
- Add CheckboxControl with-visual Storybook story. (WordPress/gutenberg#80849)
- UI: Add Combobox.InputGroup primitive (WordPress/gutenberg#80869)
- Block Editor: Clear the moving animation's z-index when it finishes (WordPress/gutenberg#80824)
- SearchableChipSelect: Add form primitive to @wordpress/ui (WordPress/gutenberg#80779)
- Playlist: Add track icon (WordPress/gutenberg#80959)
- Flaky tests: fix router navigate latest HTML (WordPress/gutenberg#80178)
- Components: Update polymorphism types to allow all attributes when specifying `as` (WordPress/gutenberg#80705)
- Block JSON schema & PHP-only blocks: Add `autoRegister` support (WordPress/gutenberg#80173)
- Boot: Adjust specificity of the image reset styles so components can size their own images (WordPress/gutenberg#80845)
- Components: Opt-in ConfirmDialog for auto-documentation (WordPress/gutenberg#80866)
- RichText: don't apply input transform when there's no onReplace (WordPress/gutenberg#80978)
- Quote: Ensure paragraph placeholder appears after deleting nested blocks (WordPress/gutenberg#77151)
- Block editor: make the Group action wrap blocks with a group transform (WordPress/gutenberg#80891)
- Copy: preserve the block when its entire text is selected (WordPress/gutenberg#80994)
- Add opt-out for block style state controls (WordPress/gutenberg#80956)
- Upgrade Playwright to v1.62 (WordPress/gutenberg#81001)
- List View: Speed up opening by removing a forced style recalculation (WordPress/gutenberg#80929)
- Widget Dashboard: preserve widget chrome flex layout (WordPress/gutenberg#80570)
- Widget Primitives: document actions as verbs, not links (WordPress/gutenberg#80974)
- Core Data: add missing @wordpress/base-styles dependency (WordPress/gutenberg#81012)
- Ignore node_modules in schema integration test globs (WordPress/gutenberg#81013)
- RichText: fix paste handler crash when pasting files (WordPress/gutenberg#81010)
- Docs: Add VS Code setup guidance (WordPress/gutenberg#77913)
- Perf Tests: Merge selection event windows instead of summing durations (WordPress/gutenberg#81002)
- Storybook: move smoke-test deps into the storybook workspace (WordPress/gutenberg#81017)
- Unit Tests: Reorganise the jest config file. (WordPress/gutenberg#80940)
- Performance Tests: Ignore the locally generated artifacts directory (WordPress/gutenberg#81024)
- Editor: Remove sidebar tabs focus sync effect (WordPress/gutenberg#81020)
- Widgets: carry a declarative `icon` through the widget pipeline (WordPress/gutenberg#80969)
- RTC: Remove excess autosave notices (when not useful) (WordPress/gutenberg#80539)
- UI: Use focus styles from base-styles (WordPress/gutenberg#80635)
- Automated Testing: Add Storybook component documentation regression testing (WordPress/gutenberg#80655)
- Pass Playlist controls to track blocks (WordPress/gutenberg#80368)
- Components: Deprecate Surface (WordPress/gutenberg#80943)
- Tabs: Support Home and End keys for keyboard navigation (WordPress/gutenberg#80912)
- Fix typos in code `comments` and `JSDoc` (WordPress/gutenberg#81045)
- Interface: Remove incorrect aria-expanded from pin-to-toolbar button (WordPress/gutenberg#79874)
- List View: Speed up opening by removing a second render pass (WordPress/gutenberg#80935)
- Docs: Use `gutenberg` instead of `Gutenberg` in package name (WordPress/gutenberg#81051)
- Fix ESLint warnings for 'navigateRegionsProps' spread (WordPress/gutenberg#81052)
- Tests: Replace page-level selectors with locators in e2e specs (WordPress/gutenberg#81053)
- RTC: Disable custom autosave controller when RTC is disabled (WordPress/gutenberg#80769)
- Background: Fix the legacy gradient UI where a gradient cannot be selected (WordPress/gutenberg#81056)
- Rename blockStatesEnabled setting to blockStatesEditingEnabled (WordPress/gutenberg#81058)
- Background: Fix the legacy gradient UI where a gradient cannot be selected - Add missing change log (WordPress/gutenberg#81060)
- Declare missing prettier and stylelint workspace dependencies (WordPress/gutenberg#81065)
- Notes: Display shortcut for form action buttons (WordPress/gutenberg#81064)
- View config: lowercase dynamic filter names (WordPress/gutenberg#81068)
- CI: cache the system packages Playwright dowloads for WebKit (WordPress/gutenberg#80846)
- List View: Collapse off-window placeholder rows into a single spacer row (WordPress/gutenberg#80953)
- devops: balance Playwright shards by duration (WordPress/gutenberg#79479)
- Views: honor developer-defined view config overrides (WordPress/gutenberg#80832)
- Components: Migrate ItemGroup to SCSS module (WordPress/gutenberg#80797)
- Test: Add Vitest migration routing guardrails (WordPress/gutenberg#81036)
- Visual revisions: Add a code diff view inside the editor (WordPress/gutenberg#80314)
- Bump actions/labeler from 6.1.0 to 7.0.0 in /.github/workflows (WordPress/gutenberg#80966)
- Visual revisions: add shareable urls (WordPress/gutenberg#79934)
- Fix e2e tests that break when shard rebalancing changes their neighbors (WordPress/gutenberg#81117)
- Query: guard non-scalar queryId to avoid fatal in enhanced pagination (WordPress/gutenberg#80724)
- Replace deprecated useResizeObserver for useScaleCanvas (WordPress/gutenberg#67508)
- CI: Add job timeouts to E2E, static checks, bundle size, and create block (WordPress/gutenberg#80801)
- Allow organization or repository variable to dictate the Actions runner (WordPress/gutenberg#81087)
- List View: Only subscribe to the block subtree for rows that can show images (WordPress/gutenberg#81076)
- Editor: Migrate settings sidebar to Tabs from @wordpress/ui (WordPress/gutenberg#81054)
- Notes: Email users mentioned in a note (WordPress/gutenberg#79606)
- List View: Narrow the dependants of the memoized List View tree (WordPress/gutenberg#81129)
- List View: Pass only minimal required data to sub-tree branches (WordPress/gutenberg#81111)
- DataViews: Add `time` field type and control (WordPress/gutenberg#80830)
- Post Author Biography: Fix horizontal overflow with long unbroken text (WordPress/gutenberg#81018)
- Link Control: Restore the preview title underline (WordPress/gutenberg#81083)
- Views: Add React to the package's dev dependencies (WordPress/gutenberg#81139)
- feat: Add target param in proxy (WordPress/gutenberg#81141)
- Fix: flaky revisions pagination e2e cross-page diff assertion (WordPress/gutenberg#81119)
- Button: Suppress UA focus ring when focused and pressed (WordPress/gutenberg#81113)
- View config: add reference docs (WordPress/gutenberg#81149)
- Editor: Fix document tools button focus ring (WordPress/gutenberg#81115)
- List View: Replace expand/collapse callbacks with reducer dispatch (WordPress/gutenberg#81138)
- CI: resolve Playwright through the workspace that declares it (WordPress/gutenberg#81137)
- CI: build once and reuse the build across e2e tests shards (WordPress/gutenberg#81031)
- Fix: Tabs block: Start with empty tab labels with placeholders (WordPress/gutenberg#81009)
- Interface: Increase footer breadcrumb height to prevent focus ring clipping (WordPress/gutenberg#81145)
- Editor: clarify autosave failure notice (WordPress/gutenberg#76470)
- Theme: Omit color properties when neither provided nor inherited (WordPress/gutenberg#80600)
- Post editor: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81112)
- Core Data: saveDirtyEntities: improve messaging of server errors (WordPress/gutenberg#81151)
- Global Styles: kebab-case preset slugs when converting references to custom properties (WordPress/gutenberg#80583)
- Revise CODEOWNERS for package ownership (removing nerrad) (WordPress/gutenberg#81175)
- Build: Wrap script bundles in an IIFE to contain 'use strict' (WordPress/gutenberg#79792)
- Media: Improve the HEIC upload error and keep any upload errors up until dismissed (WordPress/gutenberg#81130)
- Block Supports: Guard against non-string attribute values to avoid fatal errors (WordPress/gutenberg#80501)
- Video: Hide settings for the GIF variation (WordPress/gutenberg#81142)
- Video: clarify the Video variation description (WordPress/gutenberg#81181)
- Media Editor: Render sidebar tabs via ComplementaryArea's render prop (WordPress/gutenberg#81133)
- Bump docker/login-action (WordPress/gutenberg#80962)
- Bump actions/setup-node from 6.4.0 to 7.0.0 in /.github/setup-node (WordPress/gutenberg#80963)
- fix(admin-ui): reset the wp-admin li margin that misaligns Breadcrumbs (WordPress/gutenberg#81134)
- Bump astral-sh/setup-uv from 8.3.2 to 9.0.0 in /.github/workflows (WordPress/gutenberg#80964)
- Fix/79643 rtc awareness mixed block selection (WordPress/gutenberg#79836)
- Agents: Add a defensive data design skill and route to the copy guide (WordPress/gutenberg#81131)
- ESLint: Ban `@ts-ignore` in favour of `@ts-expect-error` (WordPress/gutenberg#81148)
- Types: Replace remaining `@ts-expect-error` suppressions with proper typing (WordPress/gutenberg#81200)
- Button: turn on the width setting by default in theme.json (WordPress/gutenberg#81196)
- Notes: fix the mention notification email composition (WordPress/gutenberg#81187)
- Edit Widgets: Fix header toolbar button focus ring (WordPress/gutenberg#81176)
- List View: Reduce per-row store subscriptions (WordPress/gutenberg#81136)
- Customizer widgets: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81174)
- Blocks: Declare the `@types/react-is` devDependency (WordPress/gutenberg#81203)
- Widgets editor: Add ThemeProvider for admin color schemes (WordPress/gutenberg#81173)
- PanelColorSettings: Restore the missing space below the panel header (WordPress/gutenberg#81155)
- Remove the editableRoot opt-in from the paragraph block (WordPress/gutenberg#81184)
- Media Attached to: Fix issue with the popover unexpectedly flipping, tweak wording (WordPress/gutenberg#81206)
- Components: Add allowForms prop to SandBox component (WordPress/gutenberg#76471)
- Ensure device preview is always accurate when window is zoomed in (WordPress/gutenberg#81193)
- DataViews: Pass only eligible items to a bulk action callback (WordPress/gutenberg#81198)
- DataViews: Make grid and table item preview aspect ratio configurable (WordPress/gutenberg#79329)
- Block Editor: Return false from isBlockSelected when there is no client ID (WordPress/gutenberg#81212)
- Blocks: Update hpq to 1.4.0 and drop the ts-expect-error suppressions (WordPress/gutenberg#81199)
- DataViews: Fix the between `date` filter losing a manually typed date on blur (WordPress/gutenberg#81150)
- Block Editor: Fix Select all freezing on large posts (WordPress/gutenberg#81210)
- List View: Split the context and drop dead props to cut re-renders on expand and collapse (WordPress/gutenberg#81159)
- Docs: Fix broken Figma links on the design resources page. (WordPress/gutenberg#81166)
- Blocks: Support static block templates in block type settings (WordPress/gutenberg#80027)
- AGENTS: Update development tips section (WordPress/gutenberg#81224)
- URLInput: Skip search requests while an IME composition is in progress (WordPress/gutenberg#80602)
- Components: Deprecate Animate (WordPress/gutenberg#80931)
- Fix: Trunk e2e failures caused by the navigation spec leaving plain permalinks (WordPress/gutenberg#81238)
- Use p elements for callout alerts in components docs (WordPress/gutenberg#81234)
- Storybook: Enable design system theme tool globally (WordPress/gutenberg#81116)
- Media: Cover client-side big image scaling and orphaned files (WordPress/gutenberg#81061)
- Footnotes: guard against invalid post meta values (WordPress/gutenberg#81201)
- Block editor: unify what a new sibling block inherits (WordPress/gutenberg#81250)
- Global Styles: Remove unused duplicate font family preview utilities (WordPress/gutenberg#81194)
- Docs: explain how the theme.json schema fixtures work (WordPress/gutenberg#81263)
- theme.json schema: fix block pseudo-classes and custom states (WordPress/gutenberg#81209)
- List View: Migrate label wrapper to UI Stack and drop Badge from the anchor (WordPress/gutenberg#81266)
- Docs: Remove dependency group import guidance (WordPress/gutenberg#81245)
- ESLint: Define dependency import rules (WordPress/gutenberg#81246)
- Flaky tests: Report as a PR comment only, stop creating issues (WordPress/gutenberg#81218)
- Dashboard Widgets: remove the Hello Dolly download action (WordPress/gutenberg#81272)
- Block Directory: Make downloadable block item labels translatable. (WordPress/gutenberg#81237)
- Icons: move the inline image icon into the library (WordPress/gutenberg#81271)
- Update phpcs, wpcs dependencies (WordPress/gutenberg#81279)
- fix: add optional chaining for empty reusable block (WordPress/gutenberg#81165) (WordPress/gutenberg#81177)
- DataViews: Inline the kebabCase utility from components (WordPress/gutenberg#81284)
- Navigation: Complete the DocBlocks for the responsive container and overlay style helpers (WordPress/gutenberg#80622)
- Style states: fix state deselection when selecting the already selected block (WordPress/gutenberg#81277)
- Fix missing return value in force_filtered_html_on_import footnotes filter (WordPress/gutenberg#81293)
- Packages: Recover July 29 npm release metadata (WordPress/gutenberg#81303)
- Global styles: render element styles set only inside a breakpoint (WordPress/gutenberg#81265)
- Style states: Fix phantom pseudo element style output (WordPress/gutenberg#81291)
- Docs: remove breakpoint-only element style example from global styles guide (WordPress/gutenberg#81308)
- Render viewport state element styles in the editor (WordPress/gutenberg#81307)
- theme.json schema: responsive states belong to blocks (WordPress/gutenberg#81253)
- theme.json schema: allow responsive states on block style variations (WordPress/gutenberg#81309)
- Block Inspector: Disable the 'Edit original' button when the entity ID is missing (WordPress/gutenberg#81288)
- Site Editor: Decode HTML entities in Identity fields (WordPress/gutenberg#81269)
- Document editEntityRecord's options.isCached param (WordPress/gutenberg#81318)
- Theme: Colocate plugin tests with implementations (WordPress/gutenberg#81247)
- Block Editor: Bail out of hasSelectedInnerBlock when there is no clientId (WordPress/gutenberg#81315)
- ESLint: Replace strict config with bulk suppressions (WordPress/gutenberg#81248)
- Block Library: Document security patch releases (WordPress/gutenberg#81295)
- ESLint: Remove legacy import suppressions (WordPress/gutenberg#81338)
- Components: Migrate Spinner styles from Emotion to SCSS module (WordPress/gutenberg#80511)
- DataViews: Use the public `@wordpress/ui` Badge instead of the private one (WordPress/gutenberg#81236)
- Pert Tests: Avoid inflating interaction metrics with startTracing (WordPress/gutenberg#81264)
- Block Editor: Simplify InspectorControlsFill rendering logic (WordPress/gutenberg#81286)
- Keycodes: Make `withIgnoreIMEEvents` a public API (WordPress/gutenberg#81343)
- Docs: Fix broken links to the removed JavaScript build setup guide. (WordPress/gutenberg#81232)
- Markdownlint: disable the MD033 (no-inline-html) rule project-wide (WordPress/gutenberg#81213)
- Docs: Fix typo in block file structure guide (WordPress/gutenberg#81348)
- Playlist: Normalize Waveform Player configuration handling (WordPress/gutenberg#81342)
- Site editor: fix unreadable sidebar hover color (WordPress/gutenberg#81317)
- Global Styles: Migrate font size presets to the shared preset layer (WordPress/gutenberg#79811)
- Block Editor: Convert useBlockVisibility hook to TypeScript (WordPress/gutenberg#80390)
- Scope breakpoint media queries to screen so printing does not look like a resize (WordPress/gutenberg#81367)
- New `kebab-case` package: extract utility and migrate private API calls (WordPress/gutenberg#81294)
- Remove content types experiment (WordPress/gutenberg#81340)
- Editor: Keep the canvas height stable while resizing the canvas (WordPress/gutenberg#81163)
- Dashboard Widgets: add icon and relevance to the widget action envelope (WordPress/gutenberg#81275)
- Playlist: Improve audio conversion and track selection (WordPress/gutenberg#80926)
- Try: Set post navigation link icon to next. (WordPress/gutenberg#81384)
- UI: Derive Base UI direction from WordPress i18n (WordPress/gutenberg#80399)
- DataViews:  Fix `array` field type validation for empty values (WordPress/gutenberg#81378)
- Bump github/codeql-action/upload-sarif (WordPress/gutenberg#81287)
- Bump actions/stale from 10.4.0 to 11.0.0 in /.github/workflows (WordPress/gutenberg#81219)
- Monitor all setup-related composite Actions. (WordPress/gutenberg#81192)
- IconButton: Improve keyboard shortcut accessibility (WordPress/gutenberg#80402)
- Interface: Stop the secondary sidebar animating into place on page load (WordPress/gutenberg#81362)
- Fix: flaky list view paste block styles e2e test (WordPress/gutenberg#81229)
- Docs: Add error message guidance. (WordPress/gutenberg#81143)
- wp-build: Render the no-JS fallback in the generated page templates (WordPress/gutenberg#81365)
- Changed Build Process Link and remove unused tags (WordPress/gutenberg#81360)
- Scripts: Prevent a UTF-8 BOM in the middle of extracted CSS (WordPress/gutenberg#81383)
- Global Styles: Migrate shadows presets to use the preset management layer. (WordPress/gutenberg#79812)
- Global Styles: report border, shadow, outline, filter and dimension changes (WordPress/gutenberg#81407)
- Dashboard Widgets: split action icons into wire and resolved forms (WordPress/gutenberg#81381)
- Block Editor: Fix Escape from the block toolbar and stop redundant last focus dispatches (WordPress/gutenberg#81319)
- Block Mover: Add the keyboard shortcut to the buttons' spoken description (WordPress/gutenberg#81380)
- Format Library: Remove unused CSS rule (WordPress/gutenberg#77831)
- Core Data: Fix post staying dirty after saving edited post meta with RTC enabled (WordPress/gutenberg#81392)
- Widget Dashboard: host-tunable tile spacing via public custom properties (WordPress/gutenberg#81352)
- DataForm: Fix hidden fields validation (WordPress/gutenberg#81377)
- Tools: Make agent setup a workspace (WordPress/gutenberg#81418)
- Test: Add private Vitest config and migrate a pilot test (WordPress/gutenberg#81037)
- Interface: Let CSS own the ComplementaryArea width and use AnimatePresence custom for exit (WordPress/gutenberg#81363)
- Notes: Fix text wrapping for long usernames in collaboration sidebar (WordPress/gutenberg#81406)
- DataViews: vendor `ValidatedSelectControl` (WordPress/gutenberg#81391)
- UI: Add `Calendar` and `RangeCalendar`, moved from `components` private APIs (WordPress/gutenberg#81337)
- Feature: Tabs block: consider using the tab title in the Document Overview instead of a generic "Tab" label (WordPress/gutenberg#81427)
- fix: order site identity changes predictably (WordPress/gutenberg#81283)
- Docs: Fix broken link to the Node.js debugging guide. (WordPress/gutenberg#81398)
- Navigation Overlay Close: Inherit typography and color from the overlay (WordPress/gutenberg#80751)
- Fix: Regression: Tabs block: Start with empty tab labels with placeholders (WordPress/gutenberg#81429)
- components/Menu: Restore Modal focus return when menu items close (WordPress/gutenberg#81164)
- DataViews: Move the rich text control into the editor package (WordPress/gutenberg#81430)
- Components: Remove ValidatedTextControl private API (WordPress/gutenberg#80680)
- Cover: Avoid passing null as the featured image size (WordPress/gutenberg#81444)
- DataViews: vendor `ValidatedNumberControl` (WordPress/gutenberg#81433)
- DataViews: vendor ValidatedCheckboxControl (WordPress/gutenberg#81435)
- DataViews: vendor ValidatedRadioControl (WordPress/gutenberg#81434)
- UI: Upgrade React DayPicker to version 10 (WordPress/gutenberg#81439)
- Block editor: render a real default block in place of the default appender (WordPress/gutenberg#81231)
- Spacing Sizes Control: Make the control label translatable independently of the input aria label. (WordPress/gutenberg#81240)
- Writing flow: stop the caret on containers that do not merge with the text flow (WordPress/gutenberg#81456)
- Remove an unmodified wrapper when all its inner blocks are removed (WordPress/gutenberg#42503)
- Normalize block gap values in layout (WordPress/gutenberg#81460)
- Docs: Add Block Actions Readme (WordPress/gutenberg#69408)
- Block editor: disclose the nested block count of a multi selection (WordPress/gutenberg#80745)
- Fix: flaky autosave shareable URL revisions e2e test. (WordPress/gutenberg#81455)
- Fix empty list block with anchor persisting after backspace deletion (WordPress/gutenberg#77000)
- Docs: Add Block List Readme (WordPress/gutenberg#69432)
- Docs: Add Block Lock Readme (WordPress/gutenberg#69434)
- Backport core fixes for finalize route (WordPress/gutenberg#81465)
- ESLint: Rename root eslint.config.cjs to eslint.config.mjs (WordPress/gutenberg#81468)
- Update 23.8 release branch  (WordPress/gutenberg#81486)
- RTC: Couple RTC and polling provider as an opt-in experiment (WordPress/gutenberg#80658)
- Align collaboration migration version markers with the 23.8.0 release (WordPress/gutenberg#81789)

Fixes #66066.
Built from https://develop.svn.wordpress.org/trunk@63534


git-svn-id: http://core.svn.wordpress.org/trunk@62710 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Backported to WP Core Pull request that has been successfully merged into WP Core [Block] Tabs Affects the Tabs Block [Package] Block library /packages/block-library [Type] Enhancement A suggestion for improvement.

Projects

No open projects

Development

Successfully merging this pull request may close these issues.

Tabs block: Start with empty tab labels with placeholders

5 participants