Skip to content

Revisions: Specify block level diff status via aria-label - #77779

Merged
t-hamano merged 22 commits into
WordPress:trunkfrom
himanshupathak95:fix/77530-block-level-diff-aria-labels
Jul 22, 2026
Merged

t-hamano merged 22 commits into
WordPress:trunkfrom
himanshupathak95:fix/77530-block-level-diff-aria-labels

Conversation

@himanshupathak95

@himanshupathak95 himanshupathak95 commented Apr 29, 2026 •

Copy link
Copy Markdown
Contributor

What?

Part of #77530

Adds an aria-label to blocks in the revisions canvas that reflects their diff status (added, removed, or modified).

Why?

Screen reader users had no programmatic indication of a block's diff status when browsing the revisions canvas. Navigating to a changed block would only announce the block type (e.g. "Paragraph block") with no mention of what changed.

How

  • Introduces a private BlockAriaLabelOverrideContext in block-editor to handle block aria-labels
  • Updates useBlockProps and the Paragraph block to consume this private context, falling back to the default block label if no override is found.
  • Wraps blocks in this context within the revisions filter only when a diff status is present, preventing nested blocks from inheriting diff labels.
  • Adds comprehensive E2E test coverage asserting that Modified, Removed, and Added blocks announce correctly in the revisions canvas, while unchanged blocks keep their defaults.

Testing Instructions

  1. Create a post with several blocks (Paragraph, Heading, Image, etc.)
  2. Save, then edit some blocks - change text, remove a block, add a new one.
  3. Save again to create multiple revisions.
  4. Open the revisions panel from the editor sidebar.
  5. Use the slider to compare two revisions.
  6. Navigate through the blocks in the canvas.
  7. Verify the aria label depicts the diff status, e.g., "Modified Block: Paragraph", "Removed Block: Image".

Screenshots or screencast

Before

Screen.Recording.2026-04-28.at.19.26.39.mov

After

Screen.Recording.2026-04-28.at.16.54.14.mov

@github-actions github-actions Bot added the [Package] Editor /packages/editor label Apr 29, 2026
@himanshupathak95
himanshupathak95 force-pushed the fix/77530-block-level-diff-aria-labels branch 2 times, most recently from 8352414 to 50879fd Compare April 29, 2026 14:06
@himanshupathak95
himanshupathak95 marked this pull request as ready for review April 29, 2026 14:08
@github-actions

github-actions Bot commented Apr 29, 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: himanshupathak95 <abcd95@git.wordpress.org>
Co-authored-by: cbravobernal <cbravobernal@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: aaronjorbin <jorbin@git.wordpress.org>
Co-authored-by: joedolson <joedolson@git.wordpress.org>

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

@t-hamano t-hamano added [Type] Bug An existing feature does not function as intended [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Feature] History History, undo, redo, revisions, autosave. labels May 11, 2026
@github-project-automation github-project-automation Bot moved this to 🔎 Needs Review in WordPress 7.0 Editor Tasks May 11, 2026
@t-hamano t-hamano mentioned this pull request May 11, 2026
11 of 19 tasks
Comment on lines +126 to +147
const blockRef = useRef();
useBlockElementRef( block.clientId, blockRef );

useEffect( () => {
const el = blockRef.current;
if ( ! el || ! diffStatus ) {
el?.removeAttribute( 'aria-label' );
return;
}

const blockTitle = getBlockType( block.name )?.title;
if ( ! blockTitle ) {
return;
}

const diffLabel = getDiffStatusLabel( diffStatus, blockTitle );
if ( ! diffLabel ) {
return;
}

el.setAttribute( 'aria-label', diffLabel );
}, [ block.clientId, diffStatus, block.name ] );

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.

I feel this approach is risky because it modifies the DOM from the outside, which should be managed by other components themselves, leading to unpredictable behavior.

I haven't tested it, but is it possible to inject the diff label via wrapperProps?

diff --git a/packages/editor/src/components/post-revisions-preview/revisions-canvas.js b/packages/editor/src/components/post-revisions-preview/revisions-canvas.js
index 0e9552dff01..852a27803db 100644
--- a/packages/editor/src/components/post-revisions-preview/revisions-canvas.js
+++ b/packages/editor/src/components/post-revisions-preview/revisions-canvas.js
@@ -9,7 +9,7 @@ import clsx from 'clsx';
 import { Spinner } from '@wordpress/components';
 import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
 import { useSelect } from '@wordpress/data';
-import { useEffect, useRef } from '@wordpress/element';
+import { useEffect } from '@wordpress/element';
 import { addFilter } from '@wordpress/hooks';
 import { getBlockType } from '@wordpress/blocks';
 import { sprintf, __ } from '@wordpress/i18n';
@@ -26,9 +26,7 @@ import {
 } from './diff-format-types';
 import { useDiffMarkers } from './diff-markers';
 
-const { usePrivateStyleOverride, useBlockElementRef } = unlock(
-	blockEditorPrivateApis
-);
+const { usePrivateStyleOverride } = unlock( blockEditorPrivateApis );
 
 // SVG filter for removed blocks: grayscale + red tint
 const REVISION_REMOVED_FILTER_SVG = `
@@ -120,31 +118,14 @@ function getDiffStatusLabel( status, blockTitle ) {
  */
 function withRevisionDiffClasses( BlockListBlock ) {
 	return ( props ) => {
-		const { block, className } = props;
+		const { block, className, wrapperProps } = props;
 		const diffStatus = block?.__revisionDiffStatus?.status;
 
-		const blockRef = useRef();
-		useBlockElementRef( block.clientId, blockRef );
-
-		useEffect( () => {
-			const el = blockRef.current;
-			if ( ! el || ! diffStatus ) {
-				el?.removeAttribute( 'aria-label' );
-				return;
-			}
-
-			const blockTitle = getBlockType( block.name )?.title;
-			if ( ! blockTitle ) {
-				return;
-			}
-
-			const diffLabel = getDiffStatusLabel( diffStatus, blockTitle );
-			if ( ! diffLabel ) {
-				return;
-			}
-
-			el.setAttribute( 'aria-label', diffLabel );
-		}, [ block.clientId, diffStatus, block.name ] );
+		const blockTitle = getBlockType( block.name )?.title;
+		const diffLabel =
+			diffStatus && blockTitle
+				? getDiffStatusLabel( diffStatus, blockTitle )
+				: undefined;
 
 		const enhancedClassName = clsx( className, {
 			'is-revision-added': diffStatus === 'added',
@@ -152,7 +133,16 @@ function withRevisionDiffClasses( BlockListBlock ) {
 			'is-revision-modified': diffStatus === 'modified',
 		} );
 
-		return <BlockListBlock { ...props } className={ enhancedClassName } />;
+		return (
+			<BlockListBlock
+				{ ...props }
+				className={ enhancedClassName }
+				wrapperProps={ {
+					...wrapperProps,
+					...( diffLabel && { 'aria-label': diffLabel } ),
+				} }
+			/>
+		);
 	};
 }

@t-hamano
t-hamano requested a review from ellatrix May 19, 2026 13:14
@himanshupathak95

himanshupathak95 commented May 21, 2026 •

Copy link
Copy Markdown
Contributor Author

So, I was working on this to use the wrapperProps as suggested. I replaced the useBlockElementRef + useEffect + setAttribute with a wrapperProps containing 'aria-label'.

Here's what I found -


useBlockProps assembles the final props with 'aria-label': blockLabel as an explicit key after ...wrapperProps, so the spread is overridden. I think we need to change this to-

-		'aria-label': blockLabel,
+		'aria-label': wrapperProps[ 'aria-label' ] || blockLabel,

Also, I found out that paragraph block ignores blockProps['aria-label']

The Paragraph block sets aria-label explicitly, after spreading { ...blockProps }:

<RichText
identifier="content"
tagName="p"
{ ...blockProps }
value={ content }
onChange={ ( newContent ) =>
setAttributes( { content: newContent } )
}
onMerge={ mergeBlocks }
onReplace={ onReplace }
onRemove={ onRemove }
aria-label={
RichText.isEmpty( content )
? __(
'Empty block; start writing or type forward slash to choose a block'
)
: __( 'Block: Paragraph' )
}

Simplest fix I can think of is to destructure aria-label out of blockProps in paragraph block's edit, and prefer the injected value when it differs from the default. Somethig like this -

const { 'aria-label': injectedAriaLabel, ...restBlockProps } = blockProps;
const defaultLabel = __( 'Block: Paragraph' );

<RichText
    { ...restBlockProps }
    aria-label={
        injectedAriaLabel !== defaultLabel
            ? injectedAriaLabel
            : RichText.isEmpty( content )
            ? __( 'Empty block; start writing or type forward slash to choose a block' )
            : defaultLabel
    }
/>

Does this approach sound good?

@t-hamano

Copy link
Copy Markdown
Contributor

Here's what I found -


useBlockProps assembles the final props with 'aria-label': blockLabel as an explicit key after ...wrapperProps, so the spread is overridden. I think we need to change this to-

-		'aria-label': blockLabel,
+		'aria-label': wrapperProps[ 'aria-label' ] || blockLabel,

This seems like the right approach to me. cc @ellatrix

@himanshupathak95
himanshupathak95 force-pushed the fix/77530-block-level-diff-aria-labels branch from 50879fd to 3547840 Compare May 25, 2026 10:51
@github-actions github-actions Bot added [Package] Block library /packages/block-library [Package] Block editor /packages/block-editor labels May 25, 2026
t-hamano and others added 2 commits July 22, 2026 11:49
The second revision was built by dispatching to `core/block-editor` from
`page.evaluate`, reaching for blocks by index. The indices silently pointed at
the wrong blocks whenever the setup above them changed, and none of the editing
paths a user actually takes were exercised.

Remove the heading through the block toolbar and retype the paragraph through
the keyboard, so the removal and the modification go through the editor. The
two added blocks stay on `editor.insertBlock`, matching how the first revision
is built.

Assert the restored labels before counting the diff labels away, so those
counts can't pass just because the canvas has yet to render. The Row block
announces as "Block: Group" once highlighting is off, since the default wrapper
labels skip variation matching in preview mode; pin that down so the
inconsistency surfaces if the labels change.

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

Copy link
Copy Markdown
Contributor

Sorry for the late reply. I made the following changes.

  • 35294a5 — Only override the block aria-label context when a diff label applies, so the module-level filter no longer wraps every block in every editor.
  • bdf797c — Resolve the diff label block title through useSelect instead of an in-render select() call that bypassed the registry.
  • 89a9fba — Use sentence case for the block diff status labels.
  • b626d0b — Drive the diff aria-label test through the editor instead of page.evaluate with index-based block access.

@joedolson

Copy link
Copy Markdown
Contributor

Not a problem - I was fully aware you wouldn't be available soon when I pinged you.

Comment on lines +191 to +207
// This filter runs for every block in every editor, so the private
// context is only overridden where a diff status actually applies.
if ( ! diffStatus ) {
return (
<BlockListBlock { ...props } className={ enhancedClassName } />
);
}

return (
<BlockDiffLabelProvider
status={ diffStatus }
name={ name }
attributes={ attributes }
>
<BlockListBlock { ...props } className={ enhancedClassName } />
</BlockDiffLabelProvider>
);

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.

This filter is registered at the module level, so it runs for every block in every
editor, not just the revisions canvas. The early return keeps blocks without a
diff status from paying for the extra provider and its useSelect.

@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.

I believe this PR is ready to be merged.

This PR should not introduce any performance regressions or new APIs. I intend to merge this to include it in Beta3.

@t-hamano t-hamano added the Backport to Gutenberg RC Pull request that needs to be backported to a Gutenberg release candidate (RC) label Jul 22, 2026
@t-hamano
t-hamano requested a review from Copilot July 22, 2026 03:59

Copilot AI 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.

Pull request overview

Improves accessibility in the visual revisions canvas by making a block’s revision diff status (added/removed/modified) part of the block’s accessible name, so screen readers can announce what changed when navigating blocks.

Changes:

  • Add an aria-label override pathway via PrivateBlockContext and apply it in the revisions canvas when a block has a diff status.
  • Update useBlockProps to prefer a context-provided ariaLabel over the default computed block label.
  • Add E2E coverage to verify diff-status announcements (including variation-aware titles and non-inheritance for nested blocks) and ensure labels revert when “Show changes” is toggled off.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

File Description
packages/editor/src/components/post-revisions-preview/revisions-canvas.js Wrap diff-status blocks with a private context provider that supplies a status-prefixed aria-label (variation-aware).
packages/block-editor/src/components/block-list/use-block-props/index.js Allow useBlockProps to use a context-provided ariaLabel override for the wrapper accessible name.
packages/block-library/src/paragraph/edit.js Ensure Paragraph’s explicit aria-label respects the private context override (so it doesn’t mask the diff label).
test/e2e/specs/editor/various/revision-diff-aria-labels.spec.js Add E2E assertions for added/removed/modified labels, unchanged defaults, nested non-inheritance, and label restoration when diff highlighting is disabled.

@t-hamano
t-hamano merged commit 2fd6eb7 into WordPress:trunk Jul 22, 2026
51 of 53 checks passed
@github-project-automation github-project-automation Bot moved this from 🦵 Punted to 7.1 to ✅ Done in WordPress 7.0 Editor Tasks Jul 22, 2026
@github-actions github-actions Bot added this to the Gutenberg 23.7 milestone Jul 22, 2026
@t-hamano t-hamano added Backport to WP 7.2 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta and removed Backport to WP Minor Release Pull request that needs to be backported to a WordPress minor release labels Jul 22, 2026
@github-actions github-actions Bot removed the Backport to WP 7.2 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Jul 22, 2026
gutenbergplugin pushed a commit that referenced this pull request Jul 22, 2026
* create a block element reference handle

* set block level aria labels according to the diff

* add status aware aria labels for block diff statuses

* set aria-label for block elements based on diff status

* Add doc block for getDiffStatusLabel function

* remove aria-label from block elements when diff status is not present

* improve line spacing

* streamline aria-label handling for block diff statuses

* enhance aria-label handling for paragraph block based on content state

* update aria-label handling in useBlockProps to prioritize wrapperProps

* use switch case for `getDiffStatusLabel`

* update aria-label handling in ParagraphBlock to use dynamic block type title

* Use a private context for revision diff aria-labels

Replaces the wrapperProps 'aria-label' override channel with a private
BlockAriaLabelOverrideContext, per review feedback:

- useBlockProps reverts to computing the default block label and only
  defers to the private context value, so no new extender-facing API is
  introduced via wrapperProps.
- The paragraph block consumes the same context explicitly instead of
  detecting an injected label by rebuilding and string-comparing the
  default label.
- The revisions filter provides the context around each BlockListBlock
  (always, so nested blocks don't inherit an ancestor's diff label) and
  only looks up the block type when a diff status is present.

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

* Add e2e coverage for revision diff aria-labels

Asserts that blocks in the revisions canvas expose their diff status
through the accessible name (Added/Removed/Modified Block: X) and that
unchanged blocks keep the default label.

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

* Address code review feedback on the context refactor

- The paragraph block consumes the private BlockAriaLabelOverrideContext
  directly for its RichText aria-label, so useBlockProps' public behavior
  is completely untouched (no new inputs honored) — the whole feature
  stays inside private surface area.
- Diff labels resolve the variation-aware block title (e.g. "YouTube",
  "Row") to match how users know the block, instead of the base type
  title. The canvas's default wrapper titles can't be reused for this:
  in preview mode they intentionally skip variation matching.
- The revisions filter always renders the context provider so the element
  tree keeps its shape when a diff status appears or disappears — a
  conditional wrapper would remount the whole block subtree — and so
  nested blocks don't inherit an ancestor's diff label.
- The e2e spec covers variation-aware diff labels via a Group "Row" and
  pins the default-label assertion to the unchanged paragraph.

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

* Fix revision diff aria label overrides

* Revisions: Only override the block aria-label context when a diff label applies

The `editor.BlockListBlock` filter is registered at module level, so it runs
for every block in every editor, not just the revisions canvas. Wrapping each
one in a `PrivateBlockContext.Provider` — with a new context value built on
every render — spread that cost editor-wide with no benefit.

Extract the override into `BlockDiffLabelProvider` and render it only once a
diff label has been resolved. Nested blocks behave the same either way, since
`BlockListBlockProvider` sets up a fresh private context that carries no
`ariaLabel`.

Also drop the `name ?? block.name` and `attributes ?? block.attributes`
fallbacks: both props are always passed to filtered `BlockListBlock`
components.

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

* Revisions: Resolve the diff label block title through useSelect

Calling `select()` directly during render bypasses the registry that the
surrounding components use, so a custom or iframed registry would be ignored,
and the result never reacts to block type or variation registration.

Move the title lookup into `BlockDiffLabelProvider`, which only renders for
blocks that carry a diff status, so the hook stays off the path taken by every
other block in every editor. `getActiveBlockVariation` is not memoized and
walks each variation's `isActive` rules, so having `useSelect` cache the result
also avoids re-running it on every render.

Read `getBlockType` from the same store rather than importing it from
`@wordpress/blocks`, so both lookups go through one registry.

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

* Revisions: Use sentence case for the block diff status labels

"Added Block: %s" put a capital in the middle of a sentence, which neither
matches the existing "Block: %s" wrapper label these strings sit next to, nor
the sentence case the rest of the editor's UI strings follow.

Update the e2e assertions to match the new accessible names.

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

* Revisions: Drive the diff aria-label test through the editor

The second revision was built by dispatching to `core/block-editor` from
`page.evaluate`, reaching for blocks by index. The indices silently pointed at
the wrong blocks whenever the setup above them changed, and none of the editing
paths a user actually takes were exercised.

Remove the heading through the block toolbar and retype the paragraph through
the keyboard, so the removal and the modification go through the editor. The
two added blocks stay on `editor.insertBlock`, matching how the first revision
is built.

Assert the restored labels before counting the diff labels away, so those
counts can't pass just because the canvas has yet to render. The Row block
announces as "Block: Group" once highlighting is off, since the default wrapper
labels skip variation matching in preview mode; pin that down so the
inconsistency surfaces if the labels change.

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

---------

Co-authored-by: himanshupathak95 <abcd95@git.wordpress.org>
Co-authored-by: cbravobernal <cbravobernal@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: aaronjorbin <jorbin@git.wordpress.org>
Co-authored-by: joedolson <joedolson@git.wordpress.org>
@github-actions github-actions Bot added the Backported to WP Core Pull request that has been successfully merged into WP Core label Jul 22, 2026
@github-actions

Copy link
Copy Markdown

I just cherry-picked this PR to the wp/7.1 branch to get it included in the next release: e2549c5

t-hamano added a commit that referenced this pull request Jul 22, 2026
* create a block element reference handle

* set block level aria labels according to the diff

* add status aware aria labels for block diff statuses

* set aria-label for block elements based on diff status

* Add doc block for getDiffStatusLabel function

* remove aria-label from block elements when diff status is not present

* improve line spacing

* streamline aria-label handling for block diff statuses

* enhance aria-label handling for paragraph block based on content state

* update aria-label handling in useBlockProps to prioritize wrapperProps

* use switch case for `getDiffStatusLabel`

* update aria-label handling in ParagraphBlock to use dynamic block type title

* Use a private context for revision diff aria-labels

Replaces the wrapperProps 'aria-label' override channel with a private
BlockAriaLabelOverrideContext, per review feedback:

- useBlockProps reverts to computing the default block label and only
  defers to the private context value, so no new extender-facing API is
  introduced via wrapperProps.
- The paragraph block consumes the same context explicitly instead of
  detecting an injected label by rebuilding and string-comparing the
  default label.
- The revisions filter provides the context around each BlockListBlock
  (always, so nested blocks don't inherit an ancestor's diff label) and
  only looks up the block type when a diff status is present.

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

* Add e2e coverage for revision diff aria-labels

Asserts that blocks in the revisions canvas expose their diff status
through the accessible name (Added/Removed/Modified Block: X) and that
unchanged blocks keep the default label.

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

* Address code review feedback on the context refactor

- The paragraph block consumes the private BlockAriaLabelOverrideContext
  directly for its RichText aria-label, so useBlockProps' public behavior
  is completely untouched (no new inputs honored) — the whole feature
  stays inside private surface area.
- Diff labels resolve the variation-aware block title (e.g. "YouTube",
  "Row") to match how users know the block, instead of the base type
  title. The canvas's default wrapper titles can't be reused for this:
  in preview mode they intentionally skip variation matching.
- The revisions filter always renders the context provider so the element
  tree keeps its shape when a diff status appears or disappears — a
  conditional wrapper would remount the whole block subtree — and so
  nested blocks don't inherit an ancestor's diff label.
- The e2e spec covers variation-aware diff labels via a Group "Row" and
  pins the default-label assertion to the unchanged paragraph.

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

* Fix revision diff aria label overrides

* Revisions: Only override the block aria-label context when a diff label applies

The `editor.BlockListBlock` filter is registered at module level, so it runs
for every block in every editor, not just the revisions canvas. Wrapping each
one in a `PrivateBlockContext.Provider` — with a new context value built on
every render — spread that cost editor-wide with no benefit.

Extract the override into `BlockDiffLabelProvider` and render it only once a
diff label has been resolved. Nested blocks behave the same either way, since
`BlockListBlockProvider` sets up a fresh private context that carries no
`ariaLabel`.

Also drop the `name ?? block.name` and `attributes ?? block.attributes`
fallbacks: both props are always passed to filtered `BlockListBlock`
components.

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

* Revisions: Resolve the diff label block title through useSelect

Calling `select()` directly during render bypasses the registry that the
surrounding components use, so a custom or iframed registry would be ignored,
and the result never reacts to block type or variation registration.

Move the title lookup into `BlockDiffLabelProvider`, which only renders for
blocks that carry a diff status, so the hook stays off the path taken by every
other block in every editor. `getActiveBlockVariation` is not memoized and
walks each variation's `isActive` rules, so having `useSelect` cache the result
also avoids re-running it on every render.

Read `getBlockType` from the same store rather than importing it from
`@wordpress/blocks`, so both lookups go through one registry.

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

* Revisions: Use sentence case for the block diff status labels

"Added Block: %s" put a capital in the middle of a sentence, which neither
matches the existing "Block: %s" wrapper label these strings sit next to, nor
the sentence case the rest of the editor's UI strings follow.

Update the e2e assertions to match the new accessible names.

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

* Revisions: Drive the diff aria-label test through the editor

The second revision was built by dispatching to `core/block-editor` from
`page.evaluate`, reaching for blocks by index. The indices silently pointed at
the wrong blocks whenever the setup above them changed, and none of the editing
paths a user actually takes were exercised.

Remove the heading through the block toolbar and retype the paragraph through
the keyboard, so the removal and the modification go through the editor. The
two added blocks stay on `editor.insertBlock`, matching how the first revision
is built.

Assert the restored labels before counting the diff labels away, so those
counts can't pass just because the canvas has yet to render. The Row block
announces as "Block: Group" once highlighting is off, since the default wrapper
labels skip variation matching in preview mode; pin that down so the
inconsistency surfaces if the labels change.

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

---------

Co-authored-by: himanshupathak95 <abcd95@git.wordpress.org>
Co-authored-by: cbravobernal <cbravobernal@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: aaronjorbin <jorbin@git.wordpress.org>
Co-authored-by: joedolson <joedolson@git.wordpress.org>
@t-hamano

Copy link
Copy Markdown
Contributor

I just cherry-picked this PR to the release/23.6 branch to get it included in the next release: d3847dc

@t-hamano t-hamano removed the Backport to Gutenberg RC Pull request that needs to be backported to a Gutenberg release candidate (RC) label Jul 22, 2026
dd32 pushed a commit to dd32/wordpress-develop that referenced this pull request Jul 22, 2026
This updates the pinned commit hash of the Gutenberg repository from `e73c3c481db0650183f092af157f6e42efe9ee2d` to `4997026b75c922d8a6f77a03d72ed7cad04c7073`.

A full list of changes included in this commit can be found on GitHub: 
WordPress/gutenberg@e73c3c4...4997026

- Notes: Replace blur-deselect bookkeeping with useFocusOutside (WordPress/gutenberg#80222)
- Playlist: Update @SInCE tags to 7.1.0 (WordPress/gutenberg#80317)
- fix playlist block Dimensions Design (WordPress/gutenberg#80312)
- UI: Backport compat overlay fixes to WordPress 7.1 (WordPress/gutenberg#80322)
- Editor: allow selecting which block styles to apply globally (WordPress/gutenberg#79839)
- Global Styles: Reject non-string custom CSS in the REST controller (WordPress/gutenberg#80338)
- Open inspector sidebar when toggling responsive editing (WordPress/gutenberg#80307)
- Client Side Media: Honor image_strip_meta and image_max_bit_depth on the client upload path (WordPress/gutenberg#80218)
- Hide block style variations when state is enabled in global styles (WordPress/gutenberg#80341)
- Media REST API: Fix sideload and finalize for EXIF rotated images (WordPress/gutenberg#80295)
- Fix upload snackbar stuck in uploading state on server-side uploads (WordPress/gutenberg#80345)
- Try fixing responsive layout in Nav block (WordPress/gutenberg#80305)
- Responsive styles: Use viewport dropdown to control states for in-editor global styles sidebar (WordPress/gutenberg#80339)
- RichTextControl: Replace DOM focus tracking with a single React-tree focus boundary (WordPress/gutenberg#80324)
- Notes: Finish WPDS treatment for mention chips (WordPress/gutenberg#80300)
- Notes: Add placeholders to the RichText fields (WordPress/gutenberg#80296)
- Fix upload hang when converting long animated GIFs: decode only the first frame for still outputs (WordPress/gutenberg#80260) (WordPress/gutenberg#80342)
- Device preview dropdown: use active color for device icon when responsive styles are active (WordPress/gutenberg#80346)
- Fix default aspect ratio for lazy loaded Featured image (WordPress/gutenberg#80386)
- Vips/upload-media: consolidate optional params into options objects (WordPress/gutenberg#80330)
- Autocompleters: Don't pre-encode mention search terms (WordPress/gutenberg#80377)
- Animated GIF uploads: generate sub-sizes from the first frame, matching core (WordPress/gutenberg#80268)
- Custom CSS: Fix cascade order against block style variations (WordPress/gutenberg#80340)
- Rich Text: Restore the selection when focus returns to the editable (WordPress/gutenberg#80396)
- Notes: Arm the mention kses allowance on REST note creation (WordPress/gutenberg#80221)
- Fix upload snackbar double-counting a single HEIC upload in Safari (WordPress/gutenberg#80436)
- ContentEditableControl: fix invalid label association with contenteditable div (WordPress/gutenberg#80441)
- Editor: Disable canvas resizing while zoomed out (WordPress/gutenberg#80391)
- Fix Color Picker Cursor Shaking Issue (WordPress/gutenberg#80205) (WordPress/gutenberg#80435)
- Misc fixes for WordPress-Develop 7.0 merges (WordPress/gutenberg#80444)
- Style Book: Restore live global styles updates on the styles route (WordPress/gutenberg#80459)
- Worker threads: reject pending RPC calls on worker failure or termination (WordPress/gutenberg#79955) (WordPress/gutenberg#80421)
- Media: Add timeout and size guardrails to client-side GIF to video conversion (WordPress/gutenberg#80420)
- Post Content: Use the default block appender for empty content (WordPress/gutenberg#80026)
- Block Supports: Handle nested array block gap values properly (WordPress/gutenberg#80464)
- Editor: Restore fixed device preview height for mobile and tablet (WordPress/gutenberg#80466)
- Block Editor: Guard against non-string spacing preset values (WordPress/gutenberg#80467)
- Writing flow: fully select the ancestor when a text selection crosses a nesting boundary (WordPress/gutenberg#80462)
- Block Editor: Reflect inherited Global Styles values in block inspector controls (WordPress/gutenberg#80481)
- Autocomplete: Reference the suggestions list with `aria-controls` and `aria-haspopup` (WordPress/gutenberg#80403) (WordPress/gutenberg#80499)
- Media: Remove the redundant __heicUploadSupport flag (WordPress/gutenberg#80486)
- State control - avoid tertiary variant on toggle to match style of other dropdown toggles (WordPress/gutenberg#80505)
- Icons: Store the sanitized SVG content when registering an icon (WordPress/gutenberg#80508)
- Fix `useHomeEnd` on tabs in mac testing (WordPress/gutenberg#80374)
- Playlist: Fix playback of tracks served without CORS headers (WordPress/gutenberg#80533)
- Redirect editing events to extension handlers under editableRoot (WordPress/gutenberg#80287)
- Writing flow: fully select the items when a selection extends down into a nested item (WordPress/gutenberg#80492)
- Global Styles panels: fix wrong preset committed and shown when two color presets share a hex (WordPress/gutenberg#80497)
- Replaces the `title` attributes used by revision inline diff annotations with `aria-describedby` (WordPress/gutenberg#80440)
- Notes: Remove "Add note" from the inline styles dropdown (WordPress/gutenberg#80531)
- Global Styles: Resolve per-level heading element styles in block inspector controls (WordPress/gutenberg#80495)
- Notes: Render @ mentions as span chips and narrow the kses class allowance (WordPress/gutenberg#80528)
- Revisions: Specify block level diff status via aria-label (WordPress/gutenberg#77779)
- Backport from Core: improve icon name unit tests (WordPress/gutenberg#80552)
- Device type preview: fix collapsing to content height (WordPress/gutenberg#80553)
- Wrap notices in ThemeProvider with 0 corner radius (WordPress/gutenberg#80557)
- Global Styles: Limit the inherited value treatment to the Gutenberg plugin (WordPress/gutenberg#80555)
- Fix crashes when manipulating locked blocks (WordPress/gutenberg#80509)
- Notes: align floating threads with their inline marker (WordPress/gutenberg#79877)

Props wildworks.
See #65529.

git-svn-id: https://develop.svn.wordpress.org/trunk@62824 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Jul 22, 2026
This updates the pinned commit hash of the Gutenberg repository from `e73c3c481db0650183f092af157f6e42efe9ee2d` to `4997026b75c922d8a6f77a03d72ed7cad04c7073`.

A full list of changes included in this commit can be found on GitHub: 
WordPress/gutenberg@e73c3c4...4997026

- Notes: Replace blur-deselect bookkeeping with useFocusOutside (WordPress/gutenberg#80222)
- Playlist: Update @SInCE tags to 7.1.0 (WordPress/gutenberg#80317)
- fix playlist block Dimensions Design (WordPress/gutenberg#80312)
- UI: Backport compat overlay fixes to WordPress 7.1 (WordPress/gutenberg#80322)
- Editor: allow selecting which block styles to apply globally (WordPress/gutenberg#79839)
- Global Styles: Reject non-string custom CSS in the REST controller (WordPress/gutenberg#80338)
- Open inspector sidebar when toggling responsive editing (WordPress/gutenberg#80307)
- Client Side Media: Honor image_strip_meta and image_max_bit_depth on the client upload path (WordPress/gutenberg#80218)
- Hide block style variations when state is enabled in global styles (WordPress/gutenberg#80341)
- Media REST API: Fix sideload and finalize for EXIF rotated images (WordPress/gutenberg#80295)
- Fix upload snackbar stuck in uploading state on server-side uploads (WordPress/gutenberg#80345)
- Try fixing responsive layout in Nav block (WordPress/gutenberg#80305)
- Responsive styles: Use viewport dropdown to control states for in-editor global styles sidebar (WordPress/gutenberg#80339)
- RichTextControl: Replace DOM focus tracking with a single React-tree focus boundary (WordPress/gutenberg#80324)
- Notes: Finish WPDS treatment for mention chips (WordPress/gutenberg#80300)
- Notes: Add placeholders to the RichText fields (WordPress/gutenberg#80296)
- Fix upload hang when converting long animated GIFs: decode only the first frame for still outputs (WordPress/gutenberg#80260) (WordPress/gutenberg#80342)
- Device preview dropdown: use active color for device icon when responsive styles are active (WordPress/gutenberg#80346)
- Fix default aspect ratio for lazy loaded Featured image (WordPress/gutenberg#80386)
- Vips/upload-media: consolidate optional params into options objects (WordPress/gutenberg#80330)
- Autocompleters: Don't pre-encode mention search terms (WordPress/gutenberg#80377)
- Animated GIF uploads: generate sub-sizes from the first frame, matching core (WordPress/gutenberg#80268)
- Custom CSS: Fix cascade order against block style variations (WordPress/gutenberg#80340)
- Rich Text: Restore the selection when focus returns to the editable (WordPress/gutenberg#80396)
- Notes: Arm the mention kses allowance on REST note creation (WordPress/gutenberg#80221)
- Fix upload snackbar double-counting a single HEIC upload in Safari (WordPress/gutenberg#80436)
- ContentEditableControl: fix invalid label association with contenteditable div (WordPress/gutenberg#80441)
- Editor: Disable canvas resizing while zoomed out (WordPress/gutenberg#80391)
- Fix Color Picker Cursor Shaking Issue (WordPress/gutenberg#80205) (WordPress/gutenberg#80435)
- Misc fixes for WordPress-Develop 7.0 merges (WordPress/gutenberg#80444)
- Style Book: Restore live global styles updates on the styles route (WordPress/gutenberg#80459)
- Worker threads: reject pending RPC calls on worker failure or termination (WordPress/gutenberg#79955) (WordPress/gutenberg#80421)
- Media: Add timeout and size guardrails to client-side GIF to video conversion (WordPress/gutenberg#80420)
- Post Content: Use the default block appender for empty content (WordPress/gutenberg#80026)
- Block Supports: Handle nested array block gap values properly (WordPress/gutenberg#80464)
- Editor: Restore fixed device preview height for mobile and tablet (WordPress/gutenberg#80466)
- Block Editor: Guard against non-string spacing preset values (WordPress/gutenberg#80467)
- Writing flow: fully select the ancestor when a text selection crosses a nesting boundary (WordPress/gutenberg#80462)
- Block Editor: Reflect inherited Global Styles values in block inspector controls (WordPress/gutenberg#80481)
- Autocomplete: Reference the suggestions list with `aria-controls` and `aria-haspopup` (WordPress/gutenberg#80403) (WordPress/gutenberg#80499)
- Media: Remove the redundant __heicUploadSupport flag (WordPress/gutenberg#80486)
- State control - avoid tertiary variant on toggle to match style of other dropdown toggles (WordPress/gutenberg#80505)
- Icons: Store the sanitized SVG content when registering an icon (WordPress/gutenberg#80508)
- Fix `useHomeEnd` on tabs in mac testing (WordPress/gutenberg#80374)
- Playlist: Fix playback of tracks served without CORS headers (WordPress/gutenberg#80533)
- Redirect editing events to extension handlers under editableRoot (WordPress/gutenberg#80287)
- Writing flow: fully select the items when a selection extends down into a nested item (WordPress/gutenberg#80492)
- Global Styles panels: fix wrong preset committed and shown when two color presets share a hex (WordPress/gutenberg#80497)
- Replaces the `title` attributes used by revision inline diff annotations with `aria-describedby` (WordPress/gutenberg#80440)
- Notes: Remove "Add note" from the inline styles dropdown (WordPress/gutenberg#80531)
- Global Styles: Resolve per-level heading element styles in block inspector controls (WordPress/gutenberg#80495)
- Notes: Render @ mentions as span chips and narrow the kses class allowance (WordPress/gutenberg#80528)
- Revisions: Specify block level diff status via aria-label (WordPress/gutenberg#77779)
- Backport from Core: improve icon name unit tests (WordPress/gutenberg#80552)
- Device type preview: fix collapsing to content height (WordPress/gutenberg#80553)
- Wrap notices in ThemeProvider with 0 corner radius (WordPress/gutenberg#80557)
- Global Styles: Limit the inherited value treatment to the Gutenberg plugin (WordPress/gutenberg#80555)
- Fix crashes when manipulating locked blocks (WordPress/gutenberg#80509)
- Notes: align floating threads with their inline marker (WordPress/gutenberg#79877)

Props wildworks.
See #65529.
Built from https://develop.svn.wordpress.org/trunk@62824


git-svn-id: http://core.svn.wordpress.org/trunk@62104 1a063a9b-81f0-0310-95a4-ce76da25c4cd
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 `2872d71cde528d82675f14862a1b84e2b8abbaea` to `5a0417990a9404cc2562cdd35e3054cb0d3e546e` (version `23.7.0`).

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

- Release: Fix cherry-pick success detection (WordPress/gutenberg#80249)
- Add Table of Contents e2e user story coverage (WordPress/gutenberg#80199)
- Only include icon library SVGs listed as `public` in the Zip file published to GitHub Container Registry for `wordpress-develop` (WordPress/gutenberg#79338)
- fix: set dataviews popover hover text color (WordPress/gutenberg#80105)
- added missing doc (WordPress/gutenberg#80172)
- DataViews: Fix the unintended gap between `list` layout items when `groupBy` is set (WordPress/gutenberg#80254)
- Social Link: Fix stray closing tag in Tumblr icon markup (WordPress/gutenberg#80257)
- DataViews: Fix the `list` layout ignoring some settings when `groupBy` is set (WordPress/gutenberg#80255)
- Icon block: Show text and background color controls by default. (WordPress/gutenberg#80251)
- DataViews: Add shift-click range selection (WordPress/gutenberg#80046)
- UI: Remove unused direction factor CSS property (WordPress/gutenberg#80269)
- theme: Disallow src in published package (WordPress/gutenberg#80213)
- Fix: stale post edit message in modal (WordPress/gutenberg#79997)
- Icons: Validate SVG icons include viewBox (WordPress/gutenberg#80273)
- Remove obsolete __unstable-large size props (WordPress/gutenberg#80081)
- Responsive Editing: support editing pattern styles (WordPress/gutenberg#80233)
- Tab List: Add toolbar buttons to reorder tabs (WordPress/gutenberg#80107)
- Move image editor styles to the block editor package (WordPress/gutenberg#80165)
- Cover/Accordion: Exit on Enter (WordPress/gutenberg#77301)
- Hide color controls for Navigation and Social Icons when viewport states are active (WordPress/gutenberg#80289)
- Icons: Fix collection unregister not removing icons after core added its own registry (WordPress/gutenberg#80292)
- Widget Dashboard: collapse inline attribute controls into a dropdown (WordPress/gutenberg#80208)
- Notes: increase contrast between avatar border colors (WordPress/gutenberg#80285)
- Playlist: Fix track insertion (WordPress/gutenberg#80200)
- Fix: Allow icon labels to wrap with word breaks and no ellipsis (WordPress/gutenberg#80256)
- Dedupe deprecated prop types in composite components (WordPress/gutenberg#80277)
- Core Abilities: Restore the ready promise and lazy-load via dynamic import (WordPress/gutenberg#79155)
- Notes: Replace blur-deselect bookkeeping with useFocusOutside (WordPress/gutenberg#80222)
- UI: Hook Popover into the wp compat overlay slot (WordPress/gutenberg#80278)
- Playlist: Update @SInCE tags to 7.1.0 (WordPress/gutenberg#80317)
- Remove unused useDeprecated36pxDefaultSizeProp helper. (WordPress/gutenberg#80311)
- fix playlist block Dimensions Design (WordPress/gutenberg#80312)
- UI: Keep the compat overlay slot accessible inside Modal (WordPress/gutenberg#80310)
- Theme: Add typography token showcase (WordPress/gutenberg#80212)
- Cover: Create the initial paragraph when the block gains a background (WordPress/gutenberg#80028)
- Notes: Arm the mention kses allowance on REST note creation (WordPress/gutenberg#80221)
- Check for post lock modal and text, not specific title and button (WordPress/gutenberg#79979)
- Worker threads: reject pending RPC calls on worker failure or termination (WordPress/gutenberg#79955)
- RTC: Fix empty revision from peer autosave (WordPress/gutenberg#79911)
- Client Side Media: Honor image_strip_meta and image_max_bit_depth on the client upload path (WordPress/gutenberg#80218)
- Vips/upload-media: consolidate optional params into options objects (WordPress/gutenberg#80330)
- Editor: allow selecting which block styles to apply globally (WordPress/gutenberg#79839)
- Global Styles: Reject non-string custom CSS in the REST controller (WordPress/gutenberg#80338)
- Open inspector sidebar when toggling responsive editing (WordPress/gutenberg#80307)
- Fix upload hang when converting long animated GIFs: decode only the first frame for still outputs (WordPress/gutenberg#80260)
- Fix: Critical error related to simple-git (WordPress/gutenberg#80102)
- Hide block style variations when state is enabled in global styles (WordPress/gutenberg#80341)
- Media REST API: Fix sideload and finalize for EXIF rotated images (WordPress/gutenberg#80295)
- Fix upload snackbar stuck in uploading state on server-side uploads (WordPress/gutenberg#80345)
- Try fixing responsive layout in Nav block (WordPress/gutenberg#80305)
- tools: Remove redundant parseArgs arguments (WordPress/gutenberg#80327)
- Responsive styles: Use viewport dropdown to control states for in-editor global styles sidebar (WordPress/gutenberg#80339)
- Use Add track instead of only Add (WordPress/gutenberg#80336)
- Interactivity API: refactor directives into self-registering modules (WordPress/gutenberg#79975)
- Fix: Critical error websocket-driver fix (WordPress/gutenberg#80348)
- Release: Resolve commander from the test file in the release CLI test (WordPress/gutenberg#80357)
- Release: Extract npm release lifecycle (WordPress/gutenberg#80190)
- Fix multiple MP3 playlist uploads (WordPress/gutenberg#80101)
- Table of Contents: render front-end list from current post headings (WordPress/gutenberg#80318)
- UI: improve component code readability in Storybook by using arrays for children (WordPress/gutenberg#80352)
- Infra: Use devEngines in root package.json and pin npm version in CI (WordPress/gutenberg#80188)
- Automated Testing: Skip type-checking in bundle size comparison build (WordPress/gutenberg#80366)
- Theme: Update colorjs.io dependency and drop bug workaround (WordPress/gutenberg#80272)
- RichTextControl: Replace DOM focus tracking with a single React-tree focus boundary (WordPress/gutenberg#80324)
- Notes: Finish WPDS treatment for mention chips (WordPress/gutenberg#80300)
- Notes: Add placeholders to the RichText fields (WordPress/gutenberg#80296)
- Fix flaky test in `tabs.spec.js` (WordPress/gutenberg#80373)
- Packages: Update exports to avoid deprecated folder export syntax (WordPress/gutenberg#80270)
- Theme: Widen peer dependency ranges to support new versions of Vite, ESBuild, and Stylelint (WordPress/gutenberg#80267)
- Components: Skip polymorphism prop typings on intersection (WordPress/gutenberg#80364)
- Post Content: Use the default block appender for empty content (WordPress/gutenberg#80026)
- Device preview dropdown: use active color for device icon when responsive styles are active (WordPress/gutenberg#80346)
- Fix default aspect ratio for lazy loaded Featured image (WordPress/gutenberg#80386)
- Docs: Add client-side media processing documentation (WordPress/gutenberg#75895)
- Autocompleters: Don't pre-encode mention search terms (WordPress/gutenberg#80377)
- Animated GIF uploads: generate sub-sizes from the first frame, matching core (WordPress/gutenberg#80268)
- Media: Add timeout and size guardrails to client-side GIF to video conversion (WordPress/gutenberg#80379)
- Widget Primitives: Ship as a script module (WordPress/gutenberg#80149)
- SearchControl: Render the suffix only if there's one. (WordPress/gutenberg#80356)
- Custom CSS: Fix cascade order against block style variations (WordPress/gutenberg#80340)
- React 19: add e2e compat test for boolean inert attribute (WordPress/gutenberg#80397)
- Fix post excerpt rendering to conditionally include space before more… (WordPress/gutenberg#70217)
- Add wp-theme as a style dependency of wp-components (WordPress/gutenberg#80362)
- Dashboard Widgets: declarative actions in the widget schema (WordPress/gutenberg#80363)
- @wordpress/ui: Add Button Storybook example for keyboard shortcut composition (WordPress/gutenberg#80353)
- SlotFill: Validate cross-document SCSS module styles (WordPress/gutenberg#80384)
- Components: migrate ConfirmDialog to SCSS module (WordPress/gutenberg#80394)
- SearchControl: Remove redundant conditional and prop. (WordPress/gutenberg#80406)
- Tools: resolve dependencies independently of the node_modules layout (WordPress/gutenberg#80414)
- Components: Migrate ToggleGroupControl to SCSS Modules (WordPress/gutenberg#80381)
- Rich Text: Restore the selection when focus returns to the editable (WordPress/gutenberg#80396)
- RTC: Use requestAnimationFrame for awareness cursor resize redraws (WordPress/gutenberg#79685)
- Remove __shouldNotWarnDeprecated36pxSize internal prop (WordPress/gutenberg#80323)
- Fix upload snackbar double-counting a single HEIC upload in Safari (WordPress/gutenberg#80371)
- Fix Root `.prettierrc.js` override issue (WordPress/gutenberg#80422)
- Fix Color Picker Cursor Shaking Issue (WordPress/gutenberg#80205)
- Storybook: pre-bundle CJS deps (WordPress/gutenberg#80426)
- ContentEditableControl: fix invalid label association with contenteditable div (WordPress/gutenberg#80344)
- Writing flow: use isMultiSelecting for shift+click (WordPress/gutenberg#80286)
- Added Missing Global Documentation (WordPress/gutenberg#80442)
- Editor: Disable canvas resizing while zoomed out (WordPress/gutenberg#80391)
- Misc fixes for WordPress-Develop 7.0 merges (WordPress/gutenberg#75985)
- RTC: Preserve collaborators' unsaved edits when another user saves (WordPress/gutenberg#79936)
- RTC: Disable Quick Edit while a post is being edited (WordPress/gutenberg#80016)
- Storybook: build the resolve specifier as a URL-style string (WordPress/gutenberg#80416)
- Style Book: Restore live global styles updates on the styles route (WordPress/gutenberg#80459)
- Editor: Restore fixed device preview height for mobile and tablet (WordPress/gutenberg#80271)
- Block Supports: Handle nested array block gap values properly (WordPress/gutenberg#80464)
- Block Editor: Guard against non-string spacing preset values (WordPress/gutenberg#80467)
- Move real-time collaboration code to lib/experimental/collaboration (WordPress/gutenberg#80469)
- RTC: Fix deleted-user test on multisite (WordPress/gutenberg#80463)
- Build: add independent react-18 vendor package (WordPress/gutenberg#80367)
- Fix `useHomeEnd` on tabs in mac testing (WordPress/gutenberg#80374)
- Block Editor: Reflect inherited Global Styles values in block inspector controls (WordPress/gutenberg#77894)
- Media: Remove the redundant __heicUploadSupport flag (WordPress/gutenberg#80452)
- Writing flow: fully select the ancestor when a text selection crosses a nesting boundary (WordPress/gutenberg#80462)
- fix: show add block button when editing a template part inside a template (WordPress/gutenberg#78427)
- Autocomplete: Reference the suggestions list with `aria-controls` and `aria-haspopup` (WordPress/gutenberg#80403)
- Dashboard Widgets: Sanitize help link hrefs. (WordPress/gutenberg#80409)
- State control - avoid tertiary variant on toggle to match style of other dropdown toggles (WordPress/gutenberg#80505)
- Widget Dashboard: measure the header fit and document the chrome (WordPress/gutenberg#80423)
- DataViews/Font Library: Give search fields a fixed width to stop layout shift (WordPress/gutenberg#80315)
- Fix crashes when manipulating locked blocks (WordPress/gutenberg#80509)
- RTC: Use str_contains() in WP_Sync_Config type parsing (WordPress/gutenberg#80476)
- Table of Contents: Use str_contains() instead of strpos() check (WordPress/gutenberg#80418)
- Build: Handle project paths containing spaces in dev script (WordPress/gutenberg#80519)
- Components: migrate SearchControl to SCSS module (WordPress/gutenberg#80474)
- Icons: Store the sanitized SVG content when registering an icon (WordPress/gutenberg#80508)
- Resolve Prettier explicitly for isolated layout (WordPress/gutenberg#80529)
- Playlist: Fix playback of tracks served without CORS headers (WordPress/gutenberg#80533)
- Remove unnecessary __next40pxDefaultSize props from form controls (WordPress/gutenberg#80540)
- GitHub workflows: Fix changelog checks for forked PRs (WordPress/gutenberg#80538)
- Redirect editing events to extension handlers under editableRoot (WordPress/gutenberg#80287)
- Writing flow: fully select the items when a selection extends down into a nested item (WordPress/gutenberg#80492)
- Global Styles panels: fix wrong preset committed and shown when two color presets share a hex (WordPress/gutenberg#80497)
- Replaces the `title` attributes used by revision inline diff annotations with `aria-describedby` (WordPress/gutenberg#80440)
- Account for non-lowercase VIDEO tag in render_block filter (WordPress/gutenberg#80537)
- Components: migrate FormTokenField to SCSS module (WordPress/gutenberg#80472)
- Revisions: Specify block level diff status via aria-label (WordPress/gutenberg#77779)
- Notes: Remove "Add note" from the inline styles dropdown (WordPress/gutenberg#80531)
- Global Styles: Resolve per-level heading element styles in block inspector controls (WordPress/gutenberg#80495)
- Notes: Render @ mentions as span chips and narrow the kses class allowance (WordPress/gutenberg#80528)
- Backport from Core: improve icon name unit tests (WordPress/gutenberg#80552)
- Read the contentEditable attribute in ownsSelection, not isContentEditable (WordPress/gutenberg#80549)
- Device type preview: fix collapsing to content height (WordPress/gutenberg#80553)
- Wrap notices in ThemeProvider with 0 corner radius (WordPress/gutenberg#79523)
- Perf Tests: Fix 'Selecting blocks' metric reporting 0 ms (WordPress/gutenberg#80524)
- Global Styles: Limit the inherited value treatment to the Gutenberg plugin (WordPress/gutenberg#80555)
- RTC: Use array_any() for newer-compaction check in polling sync server (WordPress/gutenberg#80522)
- Fix: Update webpack-dev-server to ^5.2.1 to help with dep alerts (WordPress/gutenberg#80347)
- Notes: align floating threads with their inline marker (WordPress/gutenberg#79877)
- WP Build: avoid infinite worker build loop (WordPress/gutenberg#80361)
- Update view config API versioning (WordPress/gutenberg#80319)
- Docs: Update plugin release docs for GitHub's Release label UI (WordPress/gutenberg#80567)
- Release: Require a working GitHub CLI for cherry-picking (WordPress/gutenberg#80568)
- Improve the various Alignment controls props handling (WordPress/gutenberg#63696)
- Reduce duplicated preset utility implementations (WordPress/gutenberg#80245)
- Dashboard Widgets: harden action `href` sanitization (WordPress/gutenberg#80510)
- Notes: Register the inline note format at import time (WordPress/gutenberg#80576)
- Fix preset round-trip test imports after preset utils consolidation (WordPress/gutenberg#80589)
- ExternalLink: Use shared focus ring mixin (WordPress/gutenberg#80573)
- Combobox, Select, SelectControl: Add Group and GroupLabel (WordPress/gutenberg#80574)
- Query Loop: Add translation context to the 'Offset' setting label (WordPress/gutenberg#80582)
- Media: Stop forcing crossorigin on IMG tags in media templates (WordPress/gutenberg#80532)
- GradientPicker: select by slug so two presets sharing a gradient keep their identity (WordPress/gutenberg#80554)
- Media Editor: Show a loading state while the cropped file loads (WordPress/gutenberg#80460)
- Remove default paragraph from tab-panel template (WordPress/gutenberg#80565)
- Global Styles: Resolve link element styles in block inspector controls for blocks that are links (WordPress/gutenberg#80607)
- Math: Use ValidatedTextareaControl for LaTeX input (WordPress/gutenberg#80500)
- Navigation: Fixes `aria-expanded` not updating on hover submenu inside overlay (WordPress/gutenberg#77563)
- Core Data: Move EntitiesSavedState component out of editor (rebase of WordPress/gutenberg#71948) (WordPress/gutenberg#80485)
- Fix: Pullquote custom line height in the editor. (WordPress/gutenberg#80586)
- Block Tools: Fix empty block appender position inside blocks that capture toolbars (WordPress/gutenberg#80592)
- Editor: Avoid unnecessary term re-fetches in FlatTermSelector (WordPress/gutenberg#80623)
- DependencyExtractionWebpackPlugin: Include extracted styles in the asset version hash (WordPress/gutenberg#80601)
- Base styles: Allow overriding focus ring color in outset-ring__focus (WordPress/gutenberg#80587)
- UI: Add Autocomplete.Row primitive (WordPress/gutenberg#80490)
- Site Editor: Add E2E coverage for view config extensibility (WordPress/gutenberg#80577)
- View config: reject shape-mismatched merges, define empty-array semantics, strip nulls from appended members (WordPress/gutenberg#80571)
- Theme: Update Storybook admin color scheme examples (WordPress/gutenberg#80569)
- Detach core's note mention kses filter in the baseline strip test (WordPress/gutenberg#80656)
- Media REST API: Backport sideload from url path upload size check (WordPress/gutenberg#80659)
- Rich text: remove tabIndex from editable elements again to fix shift+click selection (WordPress/gutenberg#80651)
- Storybook: Remove Emotion as JSX import source (WordPress/gutenberg#80647)
- Gallery: make dynamic mode conversion a single undo level (WordPress/gutenberg#80665)
- Docs: Update iframe guidance for Gutenberg 23.6 (WordPress/gutenberg#80629)
- Background image control: Remove duplicated focus ring (WordPress/gutenberg#80671)
- DataViewsPicker: Add Shift+Click range selection to the `picker-table`, `picker-grid`, and `picker-activity` layouts (WordPress/gutenberg#80413)
- Docs: Require view config filter callbacks to return the container (WordPress/gutenberg#80642)
- Duotone: Dedupe duotone utils into global-styles-engine (WordPress/gutenberg#80598)
- Input: Hide native spin controls for `type="number"` (WordPress/gutenberg#80646)
- Make `useSelectionProps` hook layout agnostic (WordPress/gutenberg#80677)
- Remove redundant @jest-environment jsdom pragma and lint against it (WordPress/gutenberg#80676)
- Base Styles: Remove accent color parameter from input-control (WordPress/gutenberg#80595)
- wp-build: sync the page template preload field list with core-data (WordPress/gutenberg#80648)
- Add progressive-discovery pattern for agent instructions and skills and general guidelines (WordPress/gutenberg#80650)
- Writing flow: extend block selections with shift+arrow when there is no native selection (WordPress/gutenberg#80687)
- Fix cursor position during forward delete of empty blocks (WordPress/gutenberg#77525)
- Global Styles: Extract shared preset management from shadows and font sizes (WordPress/gutenberg#79810)
- Notes: Capture the target block before saving a block-level note (WordPress/gutenberg#80690)
- Rename unit tests, removing `spec.js` to match the convention. (WordPress/gutenberg#80711)
- Used @link for url in inline documentation (WordPress/gutenberg#80716)
- Block Library: Guards against error throwing attribute values (WordPress/gutenberg#80558)
- Theme JSON: Level block-level preset class specificity with :where() (WordPress/gutenberg#80657)
- Notes: Sync the sidebar selection to the inline marker under the caret (WordPress/gutenberg#80610)
- Page List: Use null coalescing operator for parentPageID attribute (WordPress/gutenberg#80728)
- Fix font library navigation page select font size to match DataViews. (WordPress/gutenberg#80617)
- Meta boxes: Match heading styles with Gutenberg panels (WordPress/gutenberg#80670)
- Edit Site: Replace Theme usage in canvas loader with CSS (WordPress/gutenberg#80688)
- Jest: Fix ignore patterns with dots (WordPress/gutenberg#80737)
- Components: Migrate Disabled to SCSS module (WordPress/gutenberg#80643)
- Enhance sandbox component to accept sandbox prop (WordPress/gutenberg#69617)
- Docs: Expand the back-porting to WP Core guide (WordPress/gutenberg#80593)
- Add nvm use instructions to AGENTS.md (WordPress/gutenberg#80755)
- Docs: Clarify agent guidance discovery (WordPress/gutenberg#80753)
- Block Editor: Fix floated blocks overlapping sticky blocks (WordPress/gutenberg#80749)
- Shorten playlist track toolbar button label (WordPress/gutenberg#80759)
- Block supports: Return from layout support before resolving global settings (WordPress/gutenberg#80771)
- Notes: Report save success consistently from note actions (WordPress/gutenberg#80748)
- Dynamic Gallery: Rename toolbar button to Detach and add a modal explaining what will happen (WordPress/gutenberg#80727)
- Docs: Clarify getBlock behavior with inner block controllers (WordPress/gutenberg#80773)
- Update docs for server-side view config filters (WordPress/gutenberg#80744)
- createInterpolateElement: handle unmatched closing tags gracefully (WordPress/gutenberg#80618)
- Components: Remove private Theme component (WordPress/gutenberg#80691)
- Block Editor: Refactor 'URLInput' to function component (WordPress/gutenberg#80721)
- UI: add Dialog vs Drawer design guidance (WordPress/gutenberg#80783)
- Packages: Update date-fns to 4.4.0 (WordPress/gutenberg#80763)
- Theme: Update Color.js to 0.7.1 (WordPress/gutenberg#80762)
- ESLint: Add missing not-recommended components to denylist (WordPress/gutenberg#80754)
- Jest: Update to v30 (breaking) (WordPress/gutenberg#80767)
- Packages: Update memize to 2.1.1 (WordPress/gutenberg#80764)
- ToolsPanel: Migrate styles to an SCSS Module (WordPress/gutenberg#80445)
- RTC: Prevent controlled block synchronization from intercepting undo (WordPress/gutenberg#80503)
- Build Plugin ZIP: don't abort when changelog can't be generated (WordPress/gutenberg#80791)
- RTC: Compact during serialization (WordPress/gutenberg#80707)
- DataForm: Stop card and details validation from hijacking focus (WordPress/gutenberg#80685)
- Only use Flakiness.io in canonical Gutenberg repo. (WordPress/gutenberg#80816)
- Global Styles: Put the inheritance UI behind a Gutenberg experiment (WordPress/gutenberg#80815)
- Add a responsiveEditingEnabled editor setting to hide the Responsive styles option (WordPress/gutenberg#80814)
- iOS: remove jumping hack, add typewriter (WordPress/gutenberg#74596)
- Writing flow: stop the page scrolling on caret moves within blocks taller than the viewport (WordPress/gutenberg#80708)
- List Block: Preserve ordered type on indent (WordPress/gutenberg#75353)
- Block Editor: Try to fix typing performance regression (WordPress/gutenberg#80507)
- Notes: Cancel in-flight hover highlight when focus leaves a note thread (WordPress/gutenberg#80752)
- Make editableRoot a private block setting Symbol, not a public support (WordPress/gutenberg#80820)
- Editor: leave undo to the browser in fields that handle their own undo (WordPress/gutenberg#80768)
- Improve pre-flight npm access checks (WordPress/gutenberg#80334)

Fixes #66065.

git-svn-id: https://develop.svn.wordpress.org/trunk@63533 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 `2872d71cde528d82675f14862a1b84e2b8abbaea` to `5a0417990a9404cc2562cdd35e3054cb0d3e546e` (version `23.7.0`).

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

- Release: Fix cherry-pick success detection (WordPress/gutenberg#80249)
- Add Table of Contents e2e user story coverage (WordPress/gutenberg#80199)
- Only include icon library SVGs listed as `public` in the Zip file published to GitHub Container Registry for `wordpress-develop` (WordPress/gutenberg#79338)
- fix: set dataviews popover hover text color (WordPress/gutenberg#80105)
- added missing doc (WordPress/gutenberg#80172)
- DataViews: Fix the unintended gap between `list` layout items when `groupBy` is set (WordPress/gutenberg#80254)
- Social Link: Fix stray closing tag in Tumblr icon markup (WordPress/gutenberg#80257)
- DataViews: Fix the `list` layout ignoring some settings when `groupBy` is set (WordPress/gutenberg#80255)
- Icon block: Show text and background color controls by default. (WordPress/gutenberg#80251)
- DataViews: Add shift-click range selection (WordPress/gutenberg#80046)
- UI: Remove unused direction factor CSS property (WordPress/gutenberg#80269)
- theme: Disallow src in published package (WordPress/gutenberg#80213)
- Fix: stale post edit message in modal (WordPress/gutenberg#79997)
- Icons: Validate SVG icons include viewBox (WordPress/gutenberg#80273)
- Remove obsolete __unstable-large size props (WordPress/gutenberg#80081)
- Responsive Editing: support editing pattern styles (WordPress/gutenberg#80233)
- Tab List: Add toolbar buttons to reorder tabs (WordPress/gutenberg#80107)
- Move image editor styles to the block editor package (WordPress/gutenberg#80165)
- Cover/Accordion: Exit on Enter (WordPress/gutenberg#77301)
- Hide color controls for Navigation and Social Icons when viewport states are active (WordPress/gutenberg#80289)
- Icons: Fix collection unregister not removing icons after core added its own registry (WordPress/gutenberg#80292)
- Widget Dashboard: collapse inline attribute controls into a dropdown (WordPress/gutenberg#80208)
- Notes: increase contrast between avatar border colors (WordPress/gutenberg#80285)
- Playlist: Fix track insertion (WordPress/gutenberg#80200)
- Fix: Allow icon labels to wrap with word breaks and no ellipsis (WordPress/gutenberg#80256)
- Dedupe deprecated prop types in composite components (WordPress/gutenberg#80277)
- Core Abilities: Restore the ready promise and lazy-load via dynamic import (WordPress/gutenberg#79155)
- Notes: Replace blur-deselect bookkeeping with useFocusOutside (WordPress/gutenberg#80222)
- UI: Hook Popover into the wp compat overlay slot (WordPress/gutenberg#80278)
- Playlist: Update @SInCE tags to 7.1.0 (WordPress/gutenberg#80317)
- Remove unused useDeprecated36pxDefaultSizeProp helper. (WordPress/gutenberg#80311)
- fix playlist block Dimensions Design (WordPress/gutenberg#80312)
- UI: Keep the compat overlay slot accessible inside Modal (WordPress/gutenberg#80310)
- Theme: Add typography token showcase (WordPress/gutenberg#80212)
- Cover: Create the initial paragraph when the block gains a background (WordPress/gutenberg#80028)
- Notes: Arm the mention kses allowance on REST note creation (WordPress/gutenberg#80221)
- Check for post lock modal and text, not specific title and button (WordPress/gutenberg#79979)
- Worker threads: reject pending RPC calls on worker failure or termination (WordPress/gutenberg#79955)
- RTC: Fix empty revision from peer autosave (WordPress/gutenberg#79911)
- Client Side Media: Honor image_strip_meta and image_max_bit_depth on the client upload path (WordPress/gutenberg#80218)
- Vips/upload-media: consolidate optional params into options objects (WordPress/gutenberg#80330)
- Editor: allow selecting which block styles to apply globally (WordPress/gutenberg#79839)
- Global Styles: Reject non-string custom CSS in the REST controller (WordPress/gutenberg#80338)
- Open inspector sidebar when toggling responsive editing (WordPress/gutenberg#80307)
- Fix upload hang when converting long animated GIFs: decode only the first frame for still outputs (WordPress/gutenberg#80260)
- Fix: Critical error related to simple-git (WordPress/gutenberg#80102)
- Hide block style variations when state is enabled in global styles (WordPress/gutenberg#80341)
- Media REST API: Fix sideload and finalize for EXIF rotated images (WordPress/gutenberg#80295)
- Fix upload snackbar stuck in uploading state on server-side uploads (WordPress/gutenberg#80345)
- Try fixing responsive layout in Nav block (WordPress/gutenberg#80305)
- tools: Remove redundant parseArgs arguments (WordPress/gutenberg#80327)
- Responsive styles: Use viewport dropdown to control states for in-editor global styles sidebar (WordPress/gutenberg#80339)
- Use Add track instead of only Add (WordPress/gutenberg#80336)
- Interactivity API: refactor directives into self-registering modules (WordPress/gutenberg#79975)
- Fix: Critical error websocket-driver fix (WordPress/gutenberg#80348)
- Release: Resolve commander from the test file in the release CLI test (WordPress/gutenberg#80357)
- Release: Extract npm release lifecycle (WordPress/gutenberg#80190)
- Fix multiple MP3 playlist uploads (WordPress/gutenberg#80101)
- Table of Contents: render front-end list from current post headings (WordPress/gutenberg#80318)
- UI: improve component code readability in Storybook by using arrays for children (WordPress/gutenberg#80352)
- Infra: Use devEngines in root package.json and pin npm version in CI (WordPress/gutenberg#80188)
- Automated Testing: Skip type-checking in bundle size comparison build (WordPress/gutenberg#80366)
- Theme: Update colorjs.io dependency and drop bug workaround (WordPress/gutenberg#80272)
- RichTextControl: Replace DOM focus tracking with a single React-tree focus boundary (WordPress/gutenberg#80324)
- Notes: Finish WPDS treatment for mention chips (WordPress/gutenberg#80300)
- Notes: Add placeholders to the RichText fields (WordPress/gutenberg#80296)
- Fix flaky test in `tabs.spec.js` (WordPress/gutenberg#80373)
- Packages: Update exports to avoid deprecated folder export syntax (WordPress/gutenberg#80270)
- Theme: Widen peer dependency ranges to support new versions of Vite, ESBuild, and Stylelint (WordPress/gutenberg#80267)
- Components: Skip polymorphism prop typings on intersection (WordPress/gutenberg#80364)
- Post Content: Use the default block appender for empty content (WordPress/gutenberg#80026)
- Device preview dropdown: use active color for device icon when responsive styles are active (WordPress/gutenberg#80346)
- Fix default aspect ratio for lazy loaded Featured image (WordPress/gutenberg#80386)
- Docs: Add client-side media processing documentation (WordPress/gutenberg#75895)
- Autocompleters: Don't pre-encode mention search terms (WordPress/gutenberg#80377)
- Animated GIF uploads: generate sub-sizes from the first frame, matching core (WordPress/gutenberg#80268)
- Media: Add timeout and size guardrails to client-side GIF to video conversion (WordPress/gutenberg#80379)
- Widget Primitives: Ship as a script module (WordPress/gutenberg#80149)
- SearchControl: Render the suffix only if there's one. (WordPress/gutenberg#80356)
- Custom CSS: Fix cascade order against block style variations (WordPress/gutenberg#80340)
- React 19: add e2e compat test for boolean inert attribute (WordPress/gutenberg#80397)
- Fix post excerpt rendering to conditionally include space before more… (WordPress/gutenberg#70217)
- Add wp-theme as a style dependency of wp-components (WordPress/gutenberg#80362)
- Dashboard Widgets: declarative actions in the widget schema (WordPress/gutenberg#80363)
- @wordpress/ui: Add Button Storybook example for keyboard shortcut composition (WordPress/gutenberg#80353)
- SlotFill: Validate cross-document SCSS module styles (WordPress/gutenberg#80384)
- Components: migrate ConfirmDialog to SCSS module (WordPress/gutenberg#80394)
- SearchControl: Remove redundant conditional and prop. (WordPress/gutenberg#80406)
- Tools: resolve dependencies independently of the node_modules layout (WordPress/gutenberg#80414)
- Components: Migrate ToggleGroupControl to SCSS Modules (WordPress/gutenberg#80381)
- Rich Text: Restore the selection when focus returns to the editable (WordPress/gutenberg#80396)
- RTC: Use requestAnimationFrame for awareness cursor resize redraws (WordPress/gutenberg#79685)
- Remove __shouldNotWarnDeprecated36pxSize internal prop (WordPress/gutenberg#80323)
- Fix upload snackbar double-counting a single HEIC upload in Safari (WordPress/gutenberg#80371)
- Fix Root `.prettierrc.js` override issue (WordPress/gutenberg#80422)
- Fix Color Picker Cursor Shaking Issue (WordPress/gutenberg#80205)
- Storybook: pre-bundle CJS deps (WordPress/gutenberg#80426)
- ContentEditableControl: fix invalid label association with contenteditable div (WordPress/gutenberg#80344)
- Writing flow: use isMultiSelecting for shift+click (WordPress/gutenberg#80286)
- Added Missing Global Documentation (WordPress/gutenberg#80442)
- Editor: Disable canvas resizing while zoomed out (WordPress/gutenberg#80391)
- Misc fixes for WordPress-Develop 7.0 merges (WordPress/gutenberg#75985)
- RTC: Preserve collaborators' unsaved edits when another user saves (WordPress/gutenberg#79936)
- RTC: Disable Quick Edit while a post is being edited (WordPress/gutenberg#80016)
- Storybook: build the resolve specifier as a URL-style string (WordPress/gutenberg#80416)
- Style Book: Restore live global styles updates on the styles route (WordPress/gutenberg#80459)
- Editor: Restore fixed device preview height for mobile and tablet (WordPress/gutenberg#80271)
- Block Supports: Handle nested array block gap values properly (WordPress/gutenberg#80464)
- Block Editor: Guard against non-string spacing preset values (WordPress/gutenberg#80467)
- Move real-time collaboration code to lib/experimental/collaboration (WordPress/gutenberg#80469)
- RTC: Fix deleted-user test on multisite (WordPress/gutenberg#80463)
- Build: add independent react-18 vendor package (WordPress/gutenberg#80367)
- Fix `useHomeEnd` on tabs in mac testing (WordPress/gutenberg#80374)
- Block Editor: Reflect inherited Global Styles values in block inspector controls (WordPress/gutenberg#77894)
- Media: Remove the redundant __heicUploadSupport flag (WordPress/gutenberg#80452)
- Writing flow: fully select the ancestor when a text selection crosses a nesting boundary (WordPress/gutenberg#80462)
- fix: show add block button when editing a template part inside a template (WordPress/gutenberg#78427)
- Autocomplete: Reference the suggestions list with `aria-controls` and `aria-haspopup` (WordPress/gutenberg#80403)
- Dashboard Widgets: Sanitize help link hrefs. (WordPress/gutenberg#80409)
- State control - avoid tertiary variant on toggle to match style of other dropdown toggles (WordPress/gutenberg#80505)
- Widget Dashboard: measure the header fit and document the chrome (WordPress/gutenberg#80423)
- DataViews/Font Library: Give search fields a fixed width to stop layout shift (WordPress/gutenberg#80315)
- Fix crashes when manipulating locked blocks (WordPress/gutenberg#80509)
- RTC: Use str_contains() in WP_Sync_Config type parsing (WordPress/gutenberg#80476)
- Table of Contents: Use str_contains() instead of strpos() check (WordPress/gutenberg#80418)
- Build: Handle project paths containing spaces in dev script (WordPress/gutenberg#80519)
- Components: migrate SearchControl to SCSS module (WordPress/gutenberg#80474)
- Icons: Store the sanitized SVG content when registering an icon (WordPress/gutenberg#80508)
- Resolve Prettier explicitly for isolated layout (WordPress/gutenberg#80529)
- Playlist: Fix playback of tracks served without CORS headers (WordPress/gutenberg#80533)
- Remove unnecessary __next40pxDefaultSize props from form controls (WordPress/gutenberg#80540)
- GitHub workflows: Fix changelog checks for forked PRs (WordPress/gutenberg#80538)
- Redirect editing events to extension handlers under editableRoot (WordPress/gutenberg#80287)
- Writing flow: fully select the items when a selection extends down into a nested item (WordPress/gutenberg#80492)
- Global Styles panels: fix wrong preset committed and shown when two color presets share a hex (WordPress/gutenberg#80497)
- Replaces the `title` attributes used by revision inline diff annotations with `aria-describedby` (WordPress/gutenberg#80440)
- Account for non-lowercase VIDEO tag in render_block filter (WordPress/gutenberg#80537)
- Components: migrate FormTokenField to SCSS module (WordPress/gutenberg#80472)
- Revisions: Specify block level diff status via aria-label (WordPress/gutenberg#77779)
- Notes: Remove "Add note" from the inline styles dropdown (WordPress/gutenberg#80531)
- Global Styles: Resolve per-level heading element styles in block inspector controls (WordPress/gutenberg#80495)
- Notes: Render @ mentions as span chips and narrow the kses class allowance (WordPress/gutenberg#80528)
- Backport from Core: improve icon name unit tests (WordPress/gutenberg#80552)
- Read the contentEditable attribute in ownsSelection, not isContentEditable (WordPress/gutenberg#80549)
- Device type preview: fix collapsing to content height (WordPress/gutenberg#80553)
- Wrap notices in ThemeProvider with 0 corner radius (WordPress/gutenberg#79523)
- Perf Tests: Fix 'Selecting blocks' metric reporting 0 ms (WordPress/gutenberg#80524)
- Global Styles: Limit the inherited value treatment to the Gutenberg plugin (WordPress/gutenberg#80555)
- RTC: Use array_any() for newer-compaction check in polling sync server (WordPress/gutenberg#80522)
- Fix: Update webpack-dev-server to ^5.2.1 to help with dep alerts (WordPress/gutenberg#80347)
- Notes: align floating threads with their inline marker (WordPress/gutenberg#79877)
- WP Build: avoid infinite worker build loop (WordPress/gutenberg#80361)
- Update view config API versioning (WordPress/gutenberg#80319)
- Docs: Update plugin release docs for GitHub's Release label UI (WordPress/gutenberg#80567)
- Release: Require a working GitHub CLI for cherry-picking (WordPress/gutenberg#80568)
- Improve the various Alignment controls props handling (WordPress/gutenberg#63696)
- Reduce duplicated preset utility implementations (WordPress/gutenberg#80245)
- Dashboard Widgets: harden action `href` sanitization (WordPress/gutenberg#80510)
- Notes: Register the inline note format at import time (WordPress/gutenberg#80576)
- Fix preset round-trip test imports after preset utils consolidation (WordPress/gutenberg#80589)
- ExternalLink: Use shared focus ring mixin (WordPress/gutenberg#80573)
- Combobox, Select, SelectControl: Add Group and GroupLabel (WordPress/gutenberg#80574)
- Query Loop: Add translation context to the 'Offset' setting label (WordPress/gutenberg#80582)
- Media: Stop forcing crossorigin on IMG tags in media templates (WordPress/gutenberg#80532)
- GradientPicker: select by slug so two presets sharing a gradient keep their identity (WordPress/gutenberg#80554)
- Media Editor: Show a loading state while the cropped file loads (WordPress/gutenberg#80460)
- Remove default paragraph from tab-panel template (WordPress/gutenberg#80565)
- Global Styles: Resolve link element styles in block inspector controls for blocks that are links (WordPress/gutenberg#80607)
- Math: Use ValidatedTextareaControl for LaTeX input (WordPress/gutenberg#80500)
- Navigation: Fixes `aria-expanded` not updating on hover submenu inside overlay (WordPress/gutenberg#77563)
- Core Data: Move EntitiesSavedState component out of editor (rebase of WordPress/gutenberg#71948) (WordPress/gutenberg#80485)
- Fix: Pullquote custom line height in the editor. (WordPress/gutenberg#80586)
- Block Tools: Fix empty block appender position inside blocks that capture toolbars (WordPress/gutenberg#80592)
- Editor: Avoid unnecessary term re-fetches in FlatTermSelector (WordPress/gutenberg#80623)
- DependencyExtractionWebpackPlugin: Include extracted styles in the asset version hash (WordPress/gutenberg#80601)
- Base styles: Allow overriding focus ring color in outset-ring__focus (WordPress/gutenberg#80587)
- UI: Add Autocomplete.Row primitive (WordPress/gutenberg#80490)
- Site Editor: Add E2E coverage for view config extensibility (WordPress/gutenberg#80577)
- View config: reject shape-mismatched merges, define empty-array semantics, strip nulls from appended members (WordPress/gutenberg#80571)
- Theme: Update Storybook admin color scheme examples (WordPress/gutenberg#80569)
- Detach core's note mention kses filter in the baseline strip test (WordPress/gutenberg#80656)
- Media REST API: Backport sideload from url path upload size check (WordPress/gutenberg#80659)
- Rich text: remove tabIndex from editable elements again to fix shift+click selection (WordPress/gutenberg#80651)
- Storybook: Remove Emotion as JSX import source (WordPress/gutenberg#80647)
- Gallery: make dynamic mode conversion a single undo level (WordPress/gutenberg#80665)
- Docs: Update iframe guidance for Gutenberg 23.6 (WordPress/gutenberg#80629)
- Background image control: Remove duplicated focus ring (WordPress/gutenberg#80671)
- DataViewsPicker: Add Shift+Click range selection to the `picker-table`, `picker-grid`, and `picker-activity` layouts (WordPress/gutenberg#80413)
- Docs: Require view config filter callbacks to return the container (WordPress/gutenberg#80642)
- Duotone: Dedupe duotone utils into global-styles-engine (WordPress/gutenberg#80598)
- Input: Hide native spin controls for `type="number"` (WordPress/gutenberg#80646)
- Make `useSelectionProps` hook layout agnostic (WordPress/gutenberg#80677)
- Remove redundant @jest-environment jsdom pragma and lint against it (WordPress/gutenberg#80676)
- Base Styles: Remove accent color parameter from input-control (WordPress/gutenberg#80595)
- wp-build: sync the page template preload field list with core-data (WordPress/gutenberg#80648)
- Add progressive-discovery pattern for agent instructions and skills and general guidelines (WordPress/gutenberg#80650)
- Writing flow: extend block selections with shift+arrow when there is no native selection (WordPress/gutenberg#80687)
- Fix cursor position during forward delete of empty blocks (WordPress/gutenberg#77525)
- Global Styles: Extract shared preset management from shadows and font sizes (WordPress/gutenberg#79810)
- Notes: Capture the target block before saving a block-level note (WordPress/gutenberg#80690)
- Rename unit tests, removing `spec.js` to match the convention. (WordPress/gutenberg#80711)
- Used @link for url in inline documentation (WordPress/gutenberg#80716)
- Block Library: Guards against error throwing attribute values (WordPress/gutenberg#80558)
- Theme JSON: Level block-level preset class specificity with :where() (WordPress/gutenberg#80657)
- Notes: Sync the sidebar selection to the inline marker under the caret (WordPress/gutenberg#80610)
- Page List: Use null coalescing operator for parentPageID attribute (WordPress/gutenberg#80728)
- Fix font library navigation page select font size to match DataViews. (WordPress/gutenberg#80617)
- Meta boxes: Match heading styles with Gutenberg panels (WordPress/gutenberg#80670)
- Edit Site: Replace Theme usage in canvas loader with CSS (WordPress/gutenberg#80688)
- Jest: Fix ignore patterns with dots (WordPress/gutenberg#80737)
- Components: Migrate Disabled to SCSS module (WordPress/gutenberg#80643)
- Enhance sandbox component to accept sandbox prop (WordPress/gutenberg#69617)
- Docs: Expand the back-porting to WP Core guide (WordPress/gutenberg#80593)
- Add nvm use instructions to AGENTS.md (WordPress/gutenberg#80755)
- Docs: Clarify agent guidance discovery (WordPress/gutenberg#80753)
- Block Editor: Fix floated blocks overlapping sticky blocks (WordPress/gutenberg#80749)
- Shorten playlist track toolbar button label (WordPress/gutenberg#80759)
- Block supports: Return from layout support before resolving global settings (WordPress/gutenberg#80771)
- Notes: Report save success consistently from note actions (WordPress/gutenberg#80748)
- Dynamic Gallery: Rename toolbar button to Detach and add a modal explaining what will happen (WordPress/gutenberg#80727)
- Docs: Clarify getBlock behavior with inner block controllers (WordPress/gutenberg#80773)
- Update docs for server-side view config filters (WordPress/gutenberg#80744)
- createInterpolateElement: handle unmatched closing tags gracefully (WordPress/gutenberg#80618)
- Components: Remove private Theme component (WordPress/gutenberg#80691)
- Block Editor: Refactor 'URLInput' to function component (WordPress/gutenberg#80721)
- UI: add Dialog vs Drawer design guidance (WordPress/gutenberg#80783)
- Packages: Update date-fns to 4.4.0 (WordPress/gutenberg#80763)
- Theme: Update Color.js to 0.7.1 (WordPress/gutenberg#80762)
- ESLint: Add missing not-recommended components to denylist (WordPress/gutenberg#80754)
- Jest: Update to v30 (breaking) (WordPress/gutenberg#80767)
- Packages: Update memize to 2.1.1 (WordPress/gutenberg#80764)
- ToolsPanel: Migrate styles to an SCSS Module (WordPress/gutenberg#80445)
- RTC: Prevent controlled block synchronization from intercepting undo (WordPress/gutenberg#80503)
- Build Plugin ZIP: don't abort when changelog can't be generated (WordPress/gutenberg#80791)
- RTC: Compact during serialization (WordPress/gutenberg#80707)
- DataForm: Stop card and details validation from hijacking focus (WordPress/gutenberg#80685)
- Only use Flakiness.io in canonical Gutenberg repo. (WordPress/gutenberg#80816)
- Global Styles: Put the inheritance UI behind a Gutenberg experiment (WordPress/gutenberg#80815)
- Add a responsiveEditingEnabled editor setting to hide the Responsive styles option (WordPress/gutenberg#80814)
- iOS: remove jumping hack, add typewriter (WordPress/gutenberg#74596)
- Writing flow: stop the page scrolling on caret moves within blocks taller than the viewport (WordPress/gutenberg#80708)
- List Block: Preserve ordered type on indent (WordPress/gutenberg#75353)
- Block Editor: Try to fix typing performance regression (WordPress/gutenberg#80507)
- Notes: Cancel in-flight hover highlight when focus leaves a note thread (WordPress/gutenberg#80752)
- Make editableRoot a private block setting Symbol, not a public support (WordPress/gutenberg#80820)
- Editor: leave undo to the browser in fields that handle their own undo (WordPress/gutenberg#80768)
- Improve pre-flight npm access checks (WordPress/gutenberg#80334)

Fixes #66065.
Built from https://develop.svn.wordpress.org/trunk@63533


git-svn-id: http://core.svn.wordpress.org/trunk@62709 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 [Feature] History History, undo, redo, revisions, autosave. [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Package] Block editor /packages/block-editor [Package] Block library /packages/block-library [Package] Editor /packages/editor [Type] Bug An existing feature does not function as intended

Projects

No open projects

Development

Successfully merging this pull request may close these issues.

7 participants