Skip to content

Media editor: restore original image in modal - #81805

Merged
ramonjd merged 5 commits into
trunkfrom
add/media-editor-restore-original
Oct 6, 2026
Merged

ramonjd merged 5 commits into
trunkfrom
add/media-editor-restore-original

Conversation

@ramonjd

@ramonjd ramonjd commented Aug 19, 2026 •

Copy link
Copy Markdown
Member

What?

Adds Restore original image to the media editor's More options menu. UI for the lineage data from #81803.

Kapture.2026-09-04.at.11.38.22.mp4

Part of #78077. Supersedes #77781.

Note

Based on #81803. Retarget to trunk after #81803 merges.

Why?

A cropped image should offer a way back to its original without hunting for it in the media library.

How?

The action appears in More options when the attachment exposes a root-level edit_root id (see #81803). It discards pending edits and loads the original image and its editable details. Keyboard shortcuts also move into More options for all images.

  • Save without further edits: the block points at the original again. No attachment write.
  • Edit details without cropping: update the original attachment.
  • Crop, then save: a new image is created from the original, not from the crop.
  • Cancel discards the restore.
  • In the experimental media editor route (including site editor v2), Restore then Save opens the original; the edited attachment remains unchanged.
  • Failed details saves show an error and keep the editor open for retry.
  • An explicit Undo callback replaces Image: Restore alt text and caption when undoing a media editor save #82829’s Image-only detection, restoring Image metadata, size and links, and Cover size and automatic overlay while preserving later dim/overlay changes and recalculating contrast. Site Logo uses the ID fallback.

Test plan

  1. Upload an image, crop or rotate it in the media editor, save.
  2. Reopen the edited image in the media editor. More options shows Restore original image.
  3. Click it, save. The block shows the original and no new attachment is created.
  4. Repeat, editing details without cropping: the original is updated. Then try cropping: a new image is created from the original.
  5. Click Restore, then cancel. The discard confirmation appears.
  6. Open an image that was never edited. No restore action.
  7. Use snackbar Undo in Image, Cover and Site Logo, including before Save finishes updating the block and after changing Cover dim/overlay.
  8. Fail a details save: the error appears, edits remain, and retry succeeds.

Follow ups

In-modal restore undo/redo remains a follow-up:

When you set a new image on the canvas it clears the history stack, we need to record how an image is loaded, or at least a RESTORE_SOURCE action. With that in the history, we'd get undo/redo.

@github-actions

github-actions Bot commented Aug 19, 2026 •

Copy link
Copy Markdown

Size Change: -391 B (0%)

Total Size: 7.92 MB

📦 View Changed
Filename Size Change
build/modules/block-library/tabs/view.min.js 864 B +94 B (+12.21%) ⚠️
build/modules/boot/index.min.js 58.2 kB +94 B (+0.16%)
build/modules/edit-site-init/index.min.js 1.8 kB +15 B (+0.84%)
build/modules/workflow/index.min.js 18.6 kB +36 B (+0.19%)
build/scripts/block-directory/index.min.js 43.9 kB -90 B (-0.2%)
build/scripts/block-editor/index.min.js 477 kB +144 B (+0.03%)
build/scripts/block-library/index.min.js 370 kB +698 B (+0.19%)
build/scripts/commands/index.min.js 19.9 kB +35 B (+0.18%)
build/scripts/components/index.min.js 266 kB -38 B (-0.01%)
build/scripts/edit-site/index.min.js 381 kB +119 B (+0.03%)
build/scripts/edit-widgets/index.min.js 22.5 kB -63 B (-0.28%)
build/scripts/editor/index.min.js 581 kB +476 B (+0.08%)
build/scripts/format-library/index.min.js 39.5 kB +159 B (+0.4%)
build/scripts/media-utils/index.min.js 200 kB +175 B (+0.09%)
build/scripts/patterns/index.min.js 12.3 kB +8 B (+0.07%)
build/scripts/preferences/index.min.js 3.37 kB +35 B (+1.05%)
build/scripts/private-apis/index.min.js 1.15 kB +2 B (+0.17%)
build/styles/block-directory/style-rtl.css 2.08 kB -23 B (-1.09%)
build/styles/block-directory/style-rtl.min.css 1.09 kB -19 B (-1.72%)
build/styles/block-directory/style.css 2.08 kB -23 B (-1.09%)
build/styles/block-directory/style.min.css 1.09 kB -19 B (-1.72%)
build/styles/block-editor/content-rtl.css 5.65 kB -39 B (-0.69%)
build/styles/block-editor/content-rtl.min.css 4.13 kB -33 B (-0.79%)
build/styles/block-editor/content.css 5.65 kB -37 B (-0.65%)
build/styles/block-editor/content.min.css 4.13 kB -32 B (-0.77%)
build/styles/block-editor/style-rtl.css 20 kB -79 B (-0.39%)
build/styles/block-editor/style-rtl.min.css 17.1 kB -55 B (-0.32%)
build/styles/block-editor/style.css 20.1 kB -83 B (-0.41%)
build/styles/block-editor/style.min.css 17.1 kB -57 B (-0.33%)
build/styles/block-library/accordion-panel/style-rtl.css 118 B +41 B (+53.25%) 🆘
build/styles/block-library/accordion-panel/style-rtl.min.css 110 B +40 B (+57.14%) 🆘
build/styles/block-library/accordion-panel/style.css 118 B +41 B (+53.25%) 🆘
build/styles/block-library/accordion-panel/style.min.css 110 B +40 B (+57.14%) 🆘
build/styles/block-library/comment-template/style-rtl.css 213 B -8 B (-3.62%)
build/styles/block-library/comment-template/style-rtl.min.css 191 B -9 B (-4.5%)
build/styles/block-library/comment-template/style.css 213 B -7 B (-3.18%)
build/styles/block-library/comment-template/style.min.css 191 B -8 B (-4.02%)
build/styles/block-library/cover/style-rtl.css 2.5 kB -6 B (-0.24%)
build/styles/block-library/cover/style-rtl.min.css 1.83 kB -3 B (-0.16%)
build/styles/block-library/cover/style.css 2.51 kB -7 B (-0.28%)
build/styles/block-library/cover/style.min.css 1.82 kB -3 B (-0.16%)
build/styles/block-library/editor-rtl.css 12.7 kB -33 B (-0.26%)
build/styles/block-library/editor-rtl.min.css 10.4 kB -26 B (-0.25%)
build/styles/block-library/editor.css 12.7 kB -33 B (-0.26%)
build/styles/block-library/editor.min.css 10.4 kB -23 B (-0.22%)
build/styles/block-library/form-input/style-rtl.css 472 B -8 B (-1.67%)
build/styles/block-library/form-input/style-rtl.min.css 370 B -8 B (-2.12%)
build/styles/block-library/form-input/style.css 472 B -8 B (-1.67%)
build/styles/block-library/form-input/style.min.css 370 B -8 B (-2.12%)
build/styles/block-library/gallery/style-rtl.css 3.02 kB -8 B (-0.26%)
build/styles/block-library/gallery/style-rtl.min.css 1.92 kB -3 B (-0.16%)
build/styles/block-library/gallery/style.css 3.02 kB -8 B (-0.26%)
build/styles/block-library/gallery/style.min.css 1.92 kB -2 B (-0.1%)
build/styles/block-library/icon/style-rtl.css 323 B +52 B (+19.19%) ⚠️
build/styles/block-library/icon/style-rtl.min.css 252 B +44 B (+21.15%) 🚨
build/styles/block-library/icon/style.css 323 B +52 B (+19.19%) ⚠️
build/styles/block-library/icon/style.min.css 252 B +44 B (+21.15%) 🚨
build/styles/block-library/image/editor-rtl.css 1.62 kB -7 B (-0.43%)
build/styles/block-library/image/editor-rtl.min.css 652 B -8 B (-1.21%)
build/styles/block-library/image/editor.css 1.62 kB -8 B (-0.49%)
build/styles/block-library/image/editor.min.css 652 B -7 B (-1.06%)
build/styles/block-library/media-text/style-rtl.css 873 B -9 B (-1.02%)
build/styles/block-library/media-text/style-rtl.min.css 552 B -4 B (-0.72%)
build/styles/block-library/media-text/style.css 901 B -8 B (-0.88%)
build/styles/block-library/media-text/style.min.css 550 B -5 B (-0.9%)
build/styles/block-library/playlist-track/style-rtl.css 523 B -5 B (-0.95%)
build/styles/block-library/playlist-track/style-rtl.min.css 489 B -5 B (-1.01%)
build/styles/block-library/playlist-track/style.css 523 B -6 B (-1.13%)
build/styles/block-library/playlist-track/style.min.css 488 B -5 B (-1.01%)
build/styles/block-library/playlist/style-rtl.css 2.29 kB -6 B (-0.26%)
build/styles/block-library/playlist/style-rtl.min.css 2.2 kB -4 B (-0.18%)
build/styles/block-library/playlist/style.css 2.29 kB -5 B (-0.22%)
build/styles/block-library/playlist/style.min.css 2.21 kB -4 B (-0.18%)
build/styles/block-library/query/editor-rtl.css 1.38 kB -20 B (-1.43%)
build/styles/block-library/query/editor-rtl.min.css 438 B -15 B (-3.31%)
build/styles/block-library/query/editor.css 1.38 kB -20 B (-1.43%)
build/styles/block-library/query/editor.min.css 438 B -15 B (-3.31%)
build/styles/block-library/read-more/style-rtl.css 146 B -5 B (-3.31%)
build/styles/block-library/read-more/style-rtl.min.css 131 B -7 B (-5.07%) ✅
build/styles/block-library/read-more/style.css 146 B -5 B (-3.31%)
build/styles/block-library/read-more/style.min.css 131 B -7 B (-5.07%) ✅
build/styles/block-library/reset-rtl.css 936 B -18 B (-1.89%)
build/styles/block-library/reset-rtl.min.css 467 B -13 B (-2.71%)
build/styles/block-library/reset.css 936 B -18 B (-1.89%)
build/styles/block-library/reset.min.css 467 B -13 B (-2.71%)
build/styles/block-library/search/style-rtl.css 1.1 kB -16 B (-1.43%)
build/styles/block-library/search/style-rtl.min.css 668 B -18 B (-2.62%)
build/styles/block-library/search/style.css 1.1 kB -17 B (-1.52%)
build/styles/block-library/search/style.min.css 668 B -19 B (-2.77%)
build/styles/block-library/site-logo/editor-rtl.css 1.12 kB -9 B (-0.8%)
build/styles/block-library/site-logo/editor-rtl.min.css 703 B -6 B (-0.85%)
build/styles/block-library/site-logo/editor.css 1.12 kB -10 B (-0.88%)
build/styles/block-library/site-logo/editor.min.css 698 B -8 B (-1.13%)
build/styles/block-library/site-title/editor-rtl.css 136 B +43 B (+46.24%) 🚨
build/styles/block-library/site-title/editor-rtl.min.css 122 B +37 B (+43.53%) 🚨
build/styles/block-library/site-title/editor.css 136 B +43 B (+46.24%) 🚨
build/styles/block-library/site-title/editor.min.css 122 B +37 B (+43.53%) 🚨
build/styles/block-library/style-rtl.css 22.5 kB +10 B (+0.04%)
build/styles/block-library/style-rtl.min.css 19 kB +4 B (+0.02%)
build/styles/block-library/style.css 22.7 kB +9 B (+0.04%)
build/styles/block-library/style.min.css 19 kB +9 B (+0.05%)
build/styles/block-library/tab-list/style-rtl.css 399 B -12 B (-2.92%)
build/styles/block-library/tab-list/style-rtl.min.css 358 B -11 B (-2.98%)
build/styles/block-library/tab-list/style.css 400 B -13 B (-3.15%)
build/styles/block-library/tab-list/style.min.css 358 B -11 B (-2.98%)
build/styles/block-library/template-part/editor-rtl.css 1.3 kB -22 B (-1.67%)
build/styles/block-library/template-part/editor-rtl.min.css 368 B -19 B (-4.91%) ✅
build/styles/block-library/template-part/editor.css 1.3 kB -22 B (-1.67%)
build/styles/block-library/template-part/editor.min.css 368 B -19 B (-4.91%) ✅
build/styles/block-library/video/style-rtl.css 1.12 kB -7 B (-0.62%)
build/styles/block-library/video/style-rtl.min.css 202 B -4 B (-1.94%)
build/styles/block-library/video/style.css 1.12 kB -7 B (-0.62%)
build/styles/block-library/video/style.min.css 202 B -4 B (-1.94%)
build/styles/commands/style-rtl.css 2.18 kB -9 B (-0.41%)
build/styles/commands/style-rtl.min.css 1.2 kB -8 B (-0.67%)
build/styles/commands/style.css 2.18 kB -8 B (-0.37%)
build/styles/commands/style.min.css 1.2 kB -8 B (-0.66%)
build/styles/components/style-rtl.css 16.2 kB -161 B (-0.98%)
build/styles/components/style-rtl.min.css 13.7 kB -111 B (-0.8%)
build/styles/components/style.css 16.3 kB -173 B (-1.05%)
build/styles/components/style.min.css 13.7 kB -111 B (-0.8%)
build/styles/edit-post/style-rtl.css 3.31 kB -23 B (-0.69%)
build/styles/edit-post/style-rtl.min.css 1.97 kB -18 B (-0.91%)
build/styles/edit-post/style.css 3.32 kB -24 B (-0.72%)
build/styles/edit-post/style.min.css 1.97 kB -20 B (-1.01%)
build/styles/edit-site/style-rtl.css 21.7 kB -73 B (-0.34%)
build/styles/edit-site/style-rtl.min.css 17.8 kB -66 B (-0.37%)
build/styles/edit-site/style.css 21.7 kB -71 B (-0.33%)
build/styles/edit-site/style.min.css 17.8 kB -64 B (-0.36%)
build/styles/edit-widgets/style-rtl.css 5.06 kB -7 B (-0.14%)
build/styles/edit-widgets/style-rtl.min.css 3.64 kB -5 B (-0.14%)
build/styles/edit-widgets/style.css 5.06 kB -7 B (-0.14%)
build/styles/edit-widgets/style.min.css 3.64 kB -5 B (-0.14%)
build/styles/editor/style-rtl.css 31.6 kB -193 B (-0.61%)
build/styles/editor/style-rtl.min.css 27.1 kB -124 B (-0.46%)
build/styles/editor/style.css 31.6 kB -186 B (-0.58%)
build/styles/editor/style.min.css 27.1 kB -123 B (-0.45%)
build/styles/media-utils/style-rtl.css 2.36 kB -4 B (-0.17%)
build/styles/media-utils/style-rtl.min.css 1.33 kB -3 B (-0.22%)
build/styles/media-utils/style.css 2.35 kB -4 B (-0.17%)
build/styles/media-utils/style.min.css 1.33 kB -3 B (-0.22%)

compressed-size-action

@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from ec1a20b to 32f6830 Compare August 27, 2026 07:12
@ramonjd ramonjd self-assigned this Aug 27, 2026
@ramonjd ramonjd added [Type] Enhancement A suggestion for improvement. [Feature] Media Anything that impacts the experience of managing media labels Aug 27, 2026
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 32f6830 to 41a4e8d Compare August 27, 2026 07:43
@github-actions

github-actions Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

Flaky tests detected in 3057c36.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/33363071787
📝 Reported tests:

Should save the changes in /test/e2e/specs/editor/plugins/wp-editor-meta-box.spec.js, passed after 2 failed attempts.
TimeoutError: page.waitForFunction: Timeout 10000ms exceeded.
    at /home/runner/work/gutenberg/gutenberg/test/e2e/specs/editor/plugins/wp-editor-meta-box.spec.js:34:14
TimeoutError: locator.click: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('role=button[name="Visual"i]')

    at /home/runner/work/gutenberg/gutenberg/test/e2e/specs/editor/plugins/wp-editor-meta-box.spec.js:33:55

@github-actions github-actions Bot added the [Package] Core data /packages/core-data label Aug 31, 2026
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 07c10c7 to 1548ddc Compare August 31, 2026 02:26
@github-actions github-actions Bot removed the [Package] Core data /packages/core-data label Aug 31, 2026
@ramonjd
ramonjd marked this pull request as ready for review August 31, 2026 05:56
// link). Fetch the original's record for the URL and natural dimensions
// the cropper needs to seed itself.
const originalId: number | undefined = media?.original_attachment;
const originalRecord = useSelect(

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The modal could load the original through its existing _embed request (built in #81803) but it would be extra payload. Getting the record here puts it into the entity store so it's cached.

The embed link is there for other REST clients though.

@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch 3 times, most recently from f7cd1e0 to dd5fe29 Compare August 31, 2026 07:14

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

Nice work! This is testing pretty well for me so far. I also really like the concept that the media editor can restore to an existing media id. Left a comment, but I'm wondering if we can generalise this a little or set things up for the idea of restoring to ids that aren't just the original (sibling crops, etc). We don't really need to handle anything like that yet, just something I'm curious about as we change the shape of things.

In terms of the UI, I'm wondering if the "Restore original image" button is a bit prominent for the use case? I.e. it's sitting right next to controls that the user will use quite frequently (aspect ratio, zooming, rotating and so on), whereas this is a bit more of a decisive action you're taking on the overall image.

I'm wondering if this is behaviour that we want to make a little harder to reach for. Just a quickly Clauded-mockup but what if we had a settings dropdown at the top of the modal for this? E.g. something like:

Image

Though, if we do explore a sibling crop selector further down the track, we might need to figure out where that would go, too 🤔

In any case, it's a cool feature! I think we just need to figure out the right level of prominence.


In terms of behaviour, the only nits I really ran into is:

  • If I've already made changes in the canvas and then click "Restore original image" then the crop area isn't reset. I'd expect whatever changes I've made in the canvas to be reverted alongside reverting to the original image.
  • There is no undo entry for "Restore original image" — not sure if there's a way around that without making things too complex, but if I've accidentally clicked the restore button, I'd want to be able to revert it. Possibly another argument for hiding the control behind a settings dropdown 🤔

Here's a quick demo of the crop area not being reset:

2026-09-03.15.33.20.mp4

Comment on lines +20 to +31
/**
* When `true`, the media has a lineage root to restore to, so the
* "Restore original image" button is shown. Requires `onRestoreOriginal`.
*/
canRestoreOriginal?: boolean;
/**
* When `true`, the original has already been loaded into the cropper this
* session, so the button is disabled.
*/
isOriginalRestored?: boolean;
/** Load the lineage root into the cropper as a dirty preview. */
onRestoreOriginal?: () => void;

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.

Not a blocker for this PR (we can move things around in follow-ups), but in terms of naming, is it worth us generalising props and so on slightly to just "restoring" rather than restoring to an original?

Just keeping in the back of my mind a potential future UI where we might be able to select through a list of all sibling crops, and so "restoring" might one day be to a sibling crop rather than to the original.

If this idea is a bit too messy for now, feel free to ignore! We can always play around with it in follow-ups.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Good to mention it. I think we could defer it until we need it, maybe some things needs to change to support it so the name change could be part of that refactor.

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 think we could defer it until we need it, maybe some things needs to change to support it so the name change could be part of that refactor.

Totally. So long as things are still private, we can happily rename in follow-ups if and when we need to 👍

@ramonjd

ramonjd commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

@andrewserong Thanks for the great feedback. I had a bit of fun with this and tried some things out:

Kapture.2026-09-04.at.11.38.22.mp4

With nothing to restore (original):

Screenshot 2026-09-04 at 11 38 34 am

what if we had a settings dropdown at the top of the modal for this?

Yes, what if? I tried it out and I think it addresses two things: firstly the location of the restore action, but also it gives a home to the very lonely keyboard button.

Now, this is all YOLO, but I think it's not a bad step forward up until the point where we redesign the UI.

already made changes in the canvas and then click "Restore original image" then the crop area isn't reset

Fixed!

There is no undo entry for "Restore original image" — not sure if there's a way around that without making things too complex, but if I've accidentally clicked the restore button, I'd want to be able to revert it.

This will require some plumbing, but I think we should build it in.

When you set a new image on the canvas it clears the history stack, so we need to record how an image is loaded I think, or at least a RESTORE_SOURCE action. With that in the history, we'd get undo/redo.

A good follow up. I'll note it above.

@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from dd5fe29 to 8293db2 Compare September 4, 2026 01:58
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 1b2464f8-9136-4894-b06f-7dac913fdbd1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

🤖 PR meta 🤖

🎉 Props

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: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>

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

Updated as activity occurs, without notifying anyone named here. Add the props-bot label to refresh.

📦 Bundle size

Size Change: +571 B (+0.01%)

Total Size: 8.29 MB

📦 View Changed
Filename Size Change
build/scripts/block-library/index.min.js 367 kB +106 B (+0.03%)
build/scripts/editor/index.min.js 619 kB +465 B (+0.08%)

e7004cc Run

⚡ Performance

Show the results

Client side metrics exclude the server response time.

front-end-block-theme

Metric d209aac trunk % Change
timeToFirstByte 57.5 ms +10.26% -4.52% 57.9 ms +8.29% -5.27% -0.69%
largestContentfulPaint 98 ms +2.04% -6.12% 92 ms +8.7% -4.35% 6.52%
lcpMinusTtfb 34.65 ms +24.82% -2.6% 34.05 ms +9.4% -2.79% 1.76%
wpBeforeTemplate 28.89 ms +13.19% -4.95% 28.38 ms +13.71% -3.38% 1.8%
wpTemplate 24.44 ms +3.76% -5.36% 24.64 ms +1.91% -4.5% -0.81%
wpTotal 54.03 ms +10.33% -4.85% 54.31 ms +7.62% -5.52% -0.52%
wpMemoryUsage 7.63 MB +0% -0% 7.60 MB +0% -0% 0.46%
wpDbQueries 17 +0% -0% 17 +0% -0% 0%

front-end-classic-theme

Metric d209aac trunk % Change
timeToFirstByte 46.7 ms +4.93% -0.86% 46.7 ms +8.03% -2.46% 0%
largestContentfulPaint 100 ms +4% -0% 100 ms +4% -0% 0%
lcpMinusTtfb 53.75 ms +2.05% -0.84% 53.4 ms +1.97% -2.06% 0.66%
wpBeforeTemplate 26.14 ms +3.44% -0.99% 26.04 ms +7.68% -3.84% 0.38%
wpTemplate 17.55 ms +3.08% -0.8% 17.67 ms +2.55% -2.26% -0.68%
wpTotal 43.71 ms +4.76% -0.53% 43.67 ms +7.69% -2.36% 0.09%
wpMemoryUsage 6.26 MB +0% -0% 6.21 MB +0% -0% 0.71%
wpDbQueries 14 +0% -0% 14 +0% -0% 0%

media-processing

Metric d209aac trunk % Change
mediaProcessingJpeg 397.85 ms +2.15% -0.34% 396.9 ms +1.25% -0.2% 0.24%
mediaProcessingAvif 6044.91 ms +0.25% -0.21% 6049.05 ms +0.28% -0.18% -0.07%
mediaProcessingJpegToAvif 4164.84 ms +0.16% -0.08% 4182.38 ms +0.14% -0.16% -0.42%

media-upload

Metric d209aac trunk % Change
jpegUploadProcessing 1458.35 ms +32.7% -3.5% 1409.43 ms +0.16% -0.24% 3.47%
pngUploadProcessing 172.33 ms +5.74% -1.98% 182.84 ms +10.19% -6.34% -5.75%
largeJpegUploadProcessing 1402.63 ms +1.03% -1% 1407.02 ms +0.95% -0.6% -0.31%
multipleImageUploadProcessing 1533.16 ms +1.37% -0.09% 1569.39 ms +10.92% -1.95% -2.31%

post-editor

Metric d209aac trunk % Change
serverResponse 488.51 ms +9.05% -3.74% 511.05 ms +1.25% -7.81% -4.41%
firstPaint 234.68 ms +6.3% -1.5% 231.78 ms +20.86% -17.57% 1.25%
domContentLoaded 1079.87 ms +2.93% -1.06% 1097.19 ms +1.61% -1.54% -1.58%
loaded 1081.1 ms +2.92% -1.06% 1098.62 ms +1.58% -1.58% -1.59%
firstContentfulPaint 452.23 ms +2.01% -2.61% 453.97 ms +2.93% -3.85% -0.38%
firstBlock 3253.8 ms +1.31% -1.59% 3284.89 ms +0.5% -2.45% -0.95%
type 17.6 ms +3.07% -6.65% 16.56 ms +6.28% -2.9% 6.28%
typeWithoutInspector 15.7 ms +7.58% -1.46% 16.68 ms +2.7% -6.29% -5.88%
typeWithTopToolbar 20.89 ms +4.93% -3.69% 22.11 ms +6.74% -3.08% -5.52%
typeContainer 8.51 ms +3.64% -3.41% 8.09 ms +12.61% -5.44% 5.19%
focus 67.52 ms +8.71% -2.58% 73.85 ms +9.09% -8.21% -8.57%
firstFocus 191.57 ms +0% -0% 228.51 ms +0% -0% -16.17%
selectAll 528.1 ms +6.12% -0.95% 529.7 ms +4.2% -1.31% -0.3%
listViewOpen 63.47 ms +4.25% -8.1% 60.92 ms +6.93% -1.97% 4.19%
inserterOpen 23.04 ms +7.25% -9.38% 24.25 ms +10.89% -11.38% -4.99%
inserterHover 1.99 ms +18.09% -9.05% 2.11 ms +9.95% -11.37% -5.69%
inserterSearch 7.85 ms +6.24% -11.21% 7.64 ms +9.16% -9.16% 2.75%
loadPatterns 661.85 ms +2.21% -5.98% 659.28 ms +2.37% -3.29% 0.39%
wpTotal 478.13 ms +9.02% -3.63% 501.21 ms +1.21% -8.05% -4.6%
wpMemoryUsage 13.18 MB +0% -0% 13.15 MB +0% -0% 0.28%
wpDbQueries 54 +0% -0% 54 +0% -0% 0%

site-editor

Metric d209aac trunk % Change
serverResponse 504.36 ms +6.97% -5.83% 476.69 ms +2.65% -4.18% 5.8%
firstPaint 254.6 ms +17.51% -4.6% 242.95 ms +4.02% -6.12% 4.8%
domContentLoaded 1166.9 ms +2.32% -1.55% 1135.89 ms +0.65% -0.82% 2.73%
loaded 1168.15 ms +2.3% -1.53% 1137.12 ms +0.65% -0.82% 2.73%
firstContentfulPaint 466.49 ms +6.39% -1.71% 449.8 ms +1.63% -1.6% 3.71%
firstBlock 4194.44 ms +2.33% -1% 4120.47 ms +2.46% -1.2% 1.8%
type 18.18 ms +7.92% -5.61% 19.77 ms +2.43% -5.82% -8.04%
navigate 112.8 ms +4.84% -3.69% 113.31 ms +16.4% -10.94% -0.45%
loadPatterns 1305.88 ms +5.12% -3.69% 1384.28 ms +3.8% -4.08% -5.66%
loadPages 1046.19 ms +1.5% -1.72% 1065.93 ms +3.84% -2.11% -1.85%
wpTotal 494.28 ms +7.23% -5.87% 467 ms +2.74% -4.27% 5.84%
wpMemoryUsage 12.14 MB +0% -0% 12.13 MB +0% -0% 0.13%
wpDbQueries 43 +2.33% -0% 43 +2.33% -0% 0%

e7004cc Run

@github-actions github-actions Bot added the [Package] Block library /packages/block-library label Sep 27, 2026
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from fae4b29 to 77e3881 Compare September 27, 2026 07:21
@ramonjd

ramonjd commented Sep 27, 2026 •

Copy link
Copy Markdown
Member Author

This PR got a lot bigger this weekend 😄

Reason being:

  • undo wasn't working. So if you restored to original, the original's metadata for the image block and other blocks weren't restored in the UI
  • the restored image's details weren't being loaded into the details panel's controls

Comment on lines +546 to +549
const undoAttributes = {};
let originalBackgroundColor;
let originalOverlayColor;
let isUndone = false;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Sorry, GPT went overboard and beyond scope. Cleaning up.

@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 72a0ce6 to 8afce33 Compare September 28, 2026 05:02
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch 3 times, most recently from 981d2c1 to 3291c6b Compare October 2, 2026 05:06

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

Nicely done, this is testing well for me! Just giving this a tentative approval — it's working very nicely and I think it'd be good to get this in sooner rather than later so we can play with it earlier in the 7.2 cycle and continue iterating.

I've left a few nitpicky comments: I like the addition of the onUndo callback for the media editor modal — in general I think we should try to keep the contract quite simple, and we've only got id, onUpdate, onUndo, and onClose, so this still feels neat to me 👍

The main questions I had were sort of thinking into the future re: do we want to generalise a bit in our internal language so that it isn't just about restoring an original, but restoring an attachment — i.e the idea of making this a bit more general purpose. Not at all a blocker for now, we can play with that idea in follow-ups.

Like I said, testing well for me, and not pictured in this screengrab: the undo snackbar behaviour worked well for me across the Image and Cover blocks.

2026-10-02.16.04.33.mp4

Also testing nicely for me: the existing caption and alt text syncing, when a crop occurs, when an edit to those fields happens without a crop, and undo restoring the caption and alt text as expected.

LGTM! 🚀

(Also just an FYI ping to @fcoveram re: the UI change here by placing this in the ellipsis dropdown. Again, all stuff we can iterate on, but I like the UI idea here, it seems a good home for the keyboard shortcut, too)


useEffect( () => {
if (
cropperImage ||

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.

Nit-picky code comment / question incoming 😄 :

cropperImage is still in the list of dependencies, so just wondering if this can cause any issues? (I haven't encountered any, it's just that this line stood out to me).

If we need cropperImage in the dependencies but aren't referencing it within the useEffect, is it worth adding a comment as to why we want to track changes to it?

Another idea, if we want to keep cropperImage somewhere in the body, could be to use a more explicit cropperImage === mediaUrl in this line so it's sort of signalling (if there is no url to change, we return before calling setSourceImage).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Geez, well spotted. The effect no longer reads it, so it only causes extra run. I'll fix it up. Thanks for spotting.

Comment on lines +314 to +316
info={ __(
'Discards all edits and loads the unedited file.'
) }

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.

Kinda nitpicky question: should this be "Discards all unsaved edits"? Because it's possible to open up the media editor without making changes and restore back to the original. So technically all the edits still exist in the media library itself as we're not deleting the crop, just moving this instance to refer back to the original.

These help text thingies are always so tricky to capture our intended meaning!

Similarly, is "unedited file" the best way to describe the original image? I can't think of anything better for the moment. And a Claude-based suggestion of "Discards unsaved changes and loads the image this one was edited from" is unwieldy and awkward 😆

Also to be clear: this definitely isn't blocking, wording can be tweaked in follow-ups!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

While we're here. Good suggestion 😄

Comment on lines +572 to +576
// Whether the user has loaded the lineage root into the cropper this
// session. Stays a distinct flag (not derived from the cropper) so a bare
// restore counts as a change even though swapping the source resets the
// cropper's own dirty baseline.
const [ isOriginalRestored, setIsOriginalRestored ] = useState( false );

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.

Not for this PR, but I'm again wondering from looking over the code if we'll have a use case for swapping out the attachment altogether with something that isn't the original (i.e. a sibling crop, or another item from the media library altogether).

The only actionable thing here (for now) would be naming. I like that you've used restoredSource in places as this feels a bit more general purpose to me.

In any case, probably not something to worry about just yet, just noting down the thought for now.

Comment thread packages/block-library/src/image/use-open-image-media-editor-modal.js Outdated
Comment on lines -271 to -275
// The alt text and caption a save overwrote on the block, and the
// attachment it moved the block away from. The media editor's Undo moves
// the block back but reports only that attachment's id and url, so this is
// what lets the update restore the block's own metadata too.
const mediaEditorUndoMetadataRef = useRef();

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.

Just wondering, and not an issue at all, but why remove the ref and use a separate const session? Was there something about the ref approach that wasn't working for us? I don't mind the change, it's just that at first glance I couldn't quite follow why it was changed to using a closure over a standard JS object instead of the existing ref.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Good question.

(I updated session to undoState by the way as per your recommendation)

The way I understand it is, before, the block didn't get told when Undo was clicked.

It worked it out from the next update via the id check

With the undo state, the editor gives each opening its own Undo function specifically for undo, so there's no guessing based on image props.
.
The broader advantage is that each caller undoes its own changes, and the media editor doesn't need to know what they were.

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.

The broader advantage is that each caller undoes its own changes, and the media editor doesn't need to know what they were.

Ah, yes, I think I get you — the undo callback here gets a closure so it can only ever update its particular snapshot of state (for that open/close session) rather than a ref, which is always current.

This might be one of those rare instances where a closure is easier to reason about 😄

Thanks for the explainer!

Base automatically changed from add/attachment-original-lineage to trunk October 5, 2026 11:09
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 3291c6b to 36b2fa6 Compare October 5, 2026 11:22
@ramonjd

ramonjd commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

Thanks for the helpful review @andrewserong I've make those copy/var tweaks. I'l let the CI roll over night and return tomorrow to merge.

@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 36b2fa6 to 59c1085 Compare October 5, 2026 11:43
@ramonjd

ramonjd commented Oct 6, 2026

Copy link
Copy Markdown
Member Author

All naming changes updated. Will merge and we can iterate. Thanks again for the reviews!

Adds a Restore original image action to the media editor's More
options menu, shown when the attachment exposes the edit_root field
recorded by its lineage (#81803).

- Restore loads the root attachment and its editable details, and
  discards pending edits to the derivative.
- Saving an untouched restore repoints the block without writing an
  attachment; transforming first runs /edit against the root.
- Metadata fields are disabled while a restore is pending; detail
  saves retarget the root.
- Image and Cover restore the previous attachment with snackbar Undo.

Squashed end state of the restore-original branch, ported onto the
session cropper engine after the snapshot-history refactors landed on
trunk.
- Drop cropperImage from the canvas effect's dependencies. The effect
  no longer reads it, and setSourceImage ignores an unchanged image.
- Reword the restore help text: restoring discards unsaved changes,
  not saved edits.
- Rename the Image hook's per-opening session object to undoState, so
  it isn't mistaken for the media editor's editing session.
Rename restoredSource to replacementSource and isSourceRestored to
isSourceReplaced, and describe the save retargeting in terms of a
replacement attachment. Restore original image is the only way to swap
one in today, but the same machinery would serve a sibling crop or
another library item. The restore action's own names are unchanged.
@ramonjd
ramonjd force-pushed the add/media-editor-restore-original branch from 44c3c25 to e7004cc Compare October 6, 2026 00:14
@andrewserong

Copy link
Copy Markdown
Contributor

Good stuff. Nice work here! 🎉

@ramonjd
ramonjd merged commit 2bd3c75 into trunk Oct 6, 2026
122 checks passed
@ramonjd
ramonjd deleted the add/media-editor-restore-original branch October 6, 2026 01:34
@github-actions github-actions Bot added this to the Gutenberg 24.2 milestone Oct 6, 2026
wporg-sync pushed a commit to WordPress/wordpress-develop that referenced this pull request Oct 20, 2026
This updates the pinned commit hash of the Gutenberg repository from 954fe7f9e04631c41aec4552acd627a7203a2aad to 7b95ee96b54de2e35886971ccf7eb449c324c830 (version 24.2.0).

A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@954fe7f...7b95ee9

- useServerSideRender: parse messages from caught errors (WordPress/gutenberg#83365)
- Docs: Fix published Vitest migration-guide links (WordPress/gutenberg#83449)
- Fix: Whitespace changes are not shown in the Resolve Block diff. (WordPress/gutenberg#82397)
- Editor: Use SearchableSelect for the post author field (WordPress/gutenberg#83323)
- Docs: Note that block attributes and global styles values are untrusted at render time (WordPress/gutenberg#83473)
- RichText: Remove dead exports and consolidate deprecations (WordPress/gutenberg#83461)
- Inserter: Manage roving tab index to skip re-rendering every item (WordPress/gutenberg#83437)
- SearchableSelectControl: Add to @wordpress/ui (WordPress/gutenberg#80979)
- Try: Bolder "B" icon (WordPress/gutenberg#83321)
- Ignore composer vendor files from top-level gitignore. (WordPress/gutenberg#22283)
- Tests: Add floating notes e2e coverage (WordPress/gutenberg#83477)
- Block Editor: Check the inserter's fallback containers unmemoized (WordPress/gutenberg#83446)
- Packages: Update Ariakit to 0.4.40 (WordPress/gutenberg#83278)
- Tests: Enforce per-call Vitest console expectations (WordPress/gutenberg#83095)
- Theme: Fix virtual modules, root styles, and seed validation (WordPress/gutenberg#83355)
- DataViews: Fix README to describe sort() as receiving field values, not items (WordPress/gutenberg#83483)
- Combobox: Label popup dialogs in stories (WordPress/gutenberg#83476)
- Block editor: Isolate mutable test fixtures (WordPress/gutenberg#83098)
- Blocks: Isolate registration state in tests (WordPress/gutenberg#83099)
- UI: Remove automatic Notice announcements (WordPress/gutenberg#82737)
- Text: Migrate Emotion styles to an SCSS Module (WordPress/gutenberg#82573)
- Block library: Isolate order-sensitive test interactions (WordPress/gutenberg#83101)
- Format Library: unify FormatEditProps to one type, move private types (WordPress/gutenberg#83487)
- UI: Announce selected chips in SearchableChipSelect (WordPress/gutenberg#82863)
- Card: Migrate from Emotion to SCSS modules (WordPress/gutenberg#82577)
- Components: Deprecate the private Menu API (WordPress/gutenberg#82947)
- CustomGradientPicker: Migrate control wrappers to an SCSS module (WordPress/gutenberg#82576)
- Components: Isolate order-sensitive UI tests (WordPress/gutenberg#83103)
- Tests: Isolate mutable configuration fixtures (WordPress/gutenberg#83104)
- Core data: Finish deferred selection updates in RTC test (WordPress/gutenberg#83366)
- Block editor: Wait for final keyboard link suggestions (WordPress/gutenberg#83489)
- Data: Assert and silence resolution error in useSuspenseSelect test (WordPress/gutenberg#83491)
- Tests: Isolate deprecation warning state (WordPress/gutenberg#83107)
- UI: Align selection popup checkmarks with the first label line (WordPress/gutenberg#82942)
- Tests: Resolve Browser Mode commands against the live iframe (WordPress/gutenberg#83495)
- Ensure position type is a string (WordPress/gutenberg#83500)
- MediaUpload: Fix console error when reopening Gallery media library (WordPress/gutenberg#76749)
- Refactor stylelint config detection in lint-style.js (WordPress/gutenberg#79280)
- Docs: Recommend UI Tabs for switching views (WordPress/gutenberg#83516)
- Popover: Close non-modal popovers on iframe interaction (WordPress/gutenberg#83509)
- Typography: List only the weights inside a variable font's range (WordPress/gutenberg#83128)
- Style book: Add link to example text. (WordPress/gutenberg#83448)
- Tests: Add Vitest Browser Mode failure artifacts (WordPress/gutenberg#83093)
- Theme: Make JavaScript token fallback transforms syntax-aware (WordPress/gutenberg#83356)
- Editor: Fix new posts being published with the `auto-draft` slug (WordPress/gutenberg#83518)
- Editor: Gather the View group of the Options menu into submenus (WordPress/gutenberg#82976)
- Tests: Fix PostCSS browser-externalized warnings in Vitest (WordPress/gutenberg#83091)
- Tests: Shuffle test cases in CI (WordPress/gutenberg#83111)
- Update Styles > Blocks description. (WordPress/gutenberg#83515)
- Columns: Remove the column count slider (WordPress/gutenberg#83262)
- BorderControl: Remove `%` from the border width units (WordPress/gutenberg#83492)
- Fields: Fix AuthorView for users who can't edit users (WordPress/gutenberg#83498)
- Update and add justify icons. (WordPress/gutenberg#83519)
- RichText: Refactor useMarkPersistent, fix StrictMode mount mark (WordPress/gutenberg#83463)
- Theme: Improve accessibility, API documentation, and compatibility checks (WordPress/gutenberg#83358)
- Theme: Preserve global token references in Lightning CSS (WordPress/gutenberg#83359)
- Tests: Migrate internal linting to Vitest and remove unused Jest dependencies (WordPress/gutenberg#83502)
- Improve specificity of lightbox button selector (WordPress/gutenberg#70800)
- TextControl: Use design system colors when disabled (WordPress/gutenberg#83307)
- Fix: Image lightbox: overlay becomes unusable (can't close) when it isn't a direct child of `<body>` (WordPress/gutenberg#83480)
- Notes: Extract note selection sync into useNoteSelection hook (WordPress/gutenberg#83528)
- Block Parser: Document `\WP_Block_Parser::$stack` as a list (WordPress/gutenberg#82695)
- CollapsibleCard: Scope the header focus ring to its own trigger (WordPress/gutenberg#81314)
- Fix broken links in docs (WordPress/gutenberg#83545)
- Icons: Use assertEqualHTML() in icons registry tests (WordPress/gutenberg#83544)
- Editor: Merge adjacent revision inline diffs (WordPress/gutenberg#80579)
- Date: Ignore trailing format backslash instead of printing undefined (WordPress/gutenberg#81528)
- Block Supports: Add background-clip block support infrastructure (WordPress/gutenberg#77141)
- Block Editor: Fix translator comments for block count announcements (WordPress/gutenberg#83555)
- Paste: replace non-breaking spaces at the edges of text with regular spaces (WordPress/gutenberg#83464)
- Media Editor: Fix pan drag flooding undo history after wheel zoom (WordPress/gutenberg#83558)
- Rich text: fix iOS double tap selection, preventing focus capture under editable host (WordPress/gutenberg#81042)
- Block editor: migrate state-control badges to UI Badge (WordPress/gutenberg#82608)
- Gallery: Add Order By controls for static gallery, consolidate controls in settings sidebar (WordPress/gutenberg#83438)
- Media editor: show an error when saving attachment details fails (WordPress/gutenberg#83560)
- Position controls: Fix useSelect warning for selected state viewports (WordPress/gutenberg#83570)
- Inserter: Use design system focus ring for previews (WordPress/gutenberg#83126)
- Image: Fix lightbox using thumbnail aspect ratio instead of original image ratio (WordPress/gutenberg#79058)
- Docs: Clarify @wordpress/ui icon color requirements (WordPress/gutenberg#83564)
- docker compose -T if stdin is not a tty (WordPress/gutenberg#78374)
- Storybook: Add new contributing page. (WordPress/gutenberg#83345)
- Widget Primitives: Avoid Vite warnings for runtime widget modules (WordPress/gutenberg#83602)
- Build: Update Vite to 8.3.1 and simplify Storybook tooling (WordPress/gutenberg#83569)
- doc(wp-env) Change core branch from trunk to master in doc (WordPress/gutenberg#83566)
- wp-build: Remove the unused boot, private-apis, and route optional peer dependencies (WordPress/gutenberg#83601)
- CI: Check CHANGELOG presence for published tooling and config packages (WordPress/gutenberg#83577)
- Tests: Enforce Vitest assertion coverage (WordPress/gutenberg#83572)
- Icons: Update heading level icons for optical balance (WordPress/gutenberg#83268)
- ESLint: Add allowUseWithCaution option to use-recommended-components (WordPress/gutenberg#83536)
- Notes: Refactor floating board measurement (WordPress/gutenberg#83485)
- Inserter: Stop re-rendering the block list on block selection change (WordPress/gutenberg#83284)
- Paste: Give each pasted data-URI image unique filename to avoid upload collisions. (WordPress/gutenberg#79480)
- Changelog validator: ignore markdown & configs d46223 (WordPress/gutenberg#83618)
- Font Library: Use UI Menu for collection actions (WordPress/gutenberg#82965)
- Storybook: Show prop descriptions in Canvas controls (WordPress/gutenberg#83581)
- test: Link upstream warning fixes in config (WordPress/gutenberg#83632)
- Storybook: Use one block-editor store module (WordPress/gutenberg#83636)
- Tests: Use strict assertions synced from Core changeset 63934. (WordPress/gutenberg#83619)
- Math: Store cell alignment in the MathML and polyfill alignment and overlines in Chromium (WordPress/gutenberg#83164)
- Storybook: Reuse PostCSS browser resolver in smoke tests (WordPress/gutenberg#83635)
- Editor: Use UI Menu for template options (WordPress/gutenberg#82964)
- RTC: Add a EntitySyncManager interface in core-data (WordPress/gutenberg#83410)
- Term Count: Add margin support (WordPress/gutenberg#83608)
- Archives: Add minimum height support (WordPress/gutenberg#83573)
- Media Editor: Stop the crop pixel snap from recording undo history (WordPress/gutenberg#83571)
- Term Name: Add margin support (WordPress/gutenberg#83606)
- Post Author Biography: Add text indent support (WordPress/gutenberg#83614)
- Code: Add minimum width and height support (WordPress/gutenberg#83574)
- Details: Add minimum width support (WordPress/gutenberg#83576)
- Post Content: Add minimum width support (WordPress/gutenberg#83575)
- Post Excerpt: Add minimum width and height support (WordPress/gutenberg#83578)
- Post Title: Add minimum width and height support (WordPress/gutenberg#83600)
- Footnotes: Add minimum width and height support (WordPress/gutenberg#83579)
- Storybook: Place Notice announcements under Components (WordPress/gutenberg#83617)
- InputControl: Darken the field border on hover (WordPress/gutenberg#83306)
- npm: Switch from legacy-peer-deps to strict-peer-deps (WordPress/gutenberg#81029)
- Term Name: Add minimum width and height support (WordPress/gutenberg#83599)
- Columns: Allow dropping a column at the outer edges (WordPress/gutenberg#83274)
- E2E: Pin the site title in the Interactivity API router specs and give the E2E Storybook build more heap. (WordPress/gutenberg#83474)
- Heading: Add minimum width and height support (WordPress/gutenberg#83580)
- Login/out: Add minimum width and height support (WordPress/gutenberg#83583)
- Verse: Add minimum width support (WordPress/gutenberg#83609)
- Video, Cover: Don't autoplay in the editor when reduced motion is preferred (WordPress/gutenberg#83337)
- Media & Text: Lower the specificity of the content padding (WordPress/gutenberg#83563)
- Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83743)
- Fix peer dependency conflicts left in the lockfile (WordPress/gutenberg#83754)
- Comments Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83744)
- Term Count: Add minimum width and height support (WordPress/gutenberg#83596)
- Read More: Add border style support (WordPress/gutenberg#83735)
- Cover: Don't autoplay embedded background videos when reduced motion is preferred (WordPress/gutenberg#83452)
- No Results: Add minimum width and height support (WordPress/gutenberg#83584)
- RichText: Rename utils.jsx to utils.js (WordPress/gutenberg#83758)
- Quote: Add minimum width support (WordPress/gutenberg#83592)
- Upgrade typescript-eslint to v8.70.1 (WordPress/gutenberg#83760)
- Tabs: Add minimum width support (WordPress/gutenberg#83595)
- Site Tagline: Add minimum width and height support (WordPress/gutenberg#83589)
- Heading: Add text indent support (WordPress/gutenberg#83615)
- Site Title: Add minimum width and height support (WordPress/gutenberg#83593)
- Home Link: Add padding and margin support (WordPress/gutenberg#83607)
- Preformatted: Add minimum width and height support (WordPress/gutenberg#83587)
- Include E2E Storybook sources in docgen (WordPress/gutenberg#83634)
- Extensible Site Editor: Pass custom block categories to the blocks store (WordPress/gutenberg#83762)
- Packages: Declare missing peer dependencies and check them in CI (WordPress/gutenberg#83765)
- Post Terms: Add minimum width and height support (WordPress/gutenberg#83586)
- Group, Cover: Track drop zone element in state (WordPress/gutenberg#83756)
- Global Styles: Add pseudo-state controls for Navigation Link (WordPress/gutenberg#83451)
- storybook: Register playground core blocks once (WordPress/gutenberg#83637)
- Document Outline: Show the design system focus ring instead of legacy box-shadow (WordPress/gutenberg#83755)
- storybook: Update BlockPopover fixture to API version 3 (WordPress/gutenberg#83642)
- Add typing to iAPI's getConfig() (WordPress/gutenberg#71692)
- Components: deprecate Badge (WordPress/gutenberg#82379)
- Block Editor: Fix style / nested attribute overwrite during multi-selection (WordPress/gutenberg#80070)
- Notes: Restrict menu actions for resolution notes and resolved threads (WordPress/gutenberg#73243)
- UI: Add change actions to form primitive stories (WordPress/gutenberg#83591)
- Icons: Support keyword-based search in the icons registry (WordPress/gutenberg#82367)
- Avatar: Explain that avatars use the Gravatar service (WordPress/gutenberg#83567)
- UI: Add item labels and descriptions to remaining popups (WordPress/gutenberg#83493)
- PaletteEdit: Stop changing the slug when renaming a preset (WordPress/gutenberg#83750)
- Storybook: Fix missing block styles in BlockCanvas playground stories (WordPress/gutenberg#81070)
- Tests: Enforce Vitest callback, promise, and title rules (WordPress/gutenberg#83620)
- ItemGroup: Use design system focus ring (WordPress/gutenberg#83764)
- Keep the legacy CheckboxControl visually consistent across viewports (WordPress/gutenberg#83612)
- Media editor: Use UI Menu for crop aspect ratio (WordPress/gutenberg#82968)
- Use strict assertions in override script tests (WordPress/gutenberg#83782)
- Home Link: Add minimum width and height support (WordPress/gutenberg#83582)
- Tab Panels: Add minimum height support (WordPress/gutenberg#83594)
- Post Time to Read: Add minimum width and height support (WordPress/gutenberg#83598)
- Term Description: Add minimum width and height support (WordPress/gutenberg#83597)
- UI: Keep InputLayout chrome at md on small viewports (WordPress/gutenberg#82764)
- Math: Add minimum width and height support (WordPress/gutenberg#83585)
- Tests: Bump undici in the AI development test lockfile (WordPress/gutenberg#83799)
- Bump brace-expansion in /test/ai-development (WordPress/gutenberg#83807)
- Bump js-yaml and promptfoo in /test/ai-development (WordPress/gutenberg#83797)
- Bump fast-uri from 3.1.7 to 3.1.8 (WordPress/gutenberg#83829)
- Update AI Development package versions after npm audit (WordPress/gutenberg#83830)
- Notes: Add show and hide options for floating notes (WordPress/gutenberg#83768)
- Add separators to item popup components (WordPress/gutenberg#83776)
- Components: Align RadioControl colors with UI Radio (WordPress/gutenberg#83270)
- E2E: Mock Openverse in image drag-and-drop inserter test (WordPress/gutenberg#83842)
- FormToggle: Match Switch colors across states (WordPress/gutenberg#83773)
- Bump `@react-spring/web` from 9.4.5 to 10.1.2 (WordPress/gutenberg#83796)
- ColorPalette: Show design system focus ring on custom color button (WordPress/gutenberg#83841)
- Docs: Remove CheckboxControl heading from InspectorControls example (WordPress/gutenberg#83844)
- Base Styles: Default the admin theme color to Blueberry (WordPress/gutenberg#83749)
- Menu: Guard against nesting Group and RadioGroup (WordPress/gutenberg#83792)
- Template Part: Fall back to rendering a template part from the theme file if the db version is unavailable (WordPress/gutenberg#83809)
- Tests: Reset deprecation history in shared Vitest setup (WordPress/gutenberg#83849)
- Menu: Disable triggers instead of roots in consumers (WordPress/gutenberg#83791)
- Playlist: Replace the waveform player patch with its no-autoinit entry (WordPress/gutenberg#83132)
- Update UI Spinner appearance and add a color prop (WordPress/gutenberg#83775)
- UI: Align component names with their semantics (WordPress/gutenberg#83789)
- Checkbox: Prevent rounded themes from making checkboxes circular (WordPress/gutenberg#83526)
- Storybook: Update manifest snapshot for Spinner color prop (WordPress/gutenberg#83856)
- Button: Only open the link popover on explicit user action (WordPress/gutenberg#30166)
- Gallery Lightbox: Prevent image click from closing the dialog when navigation is enabled (WordPress/gutenberg#78898)
- UI: Recommend Checkbox family components (WordPress/gutenberg#83771)
- RadioControl: Keep a 16px visual with a larger hit target (WordPress/gutenberg#83840)
- Table: replace deprecated word-break with overflow-wrap: anywhere (WordPress/gutenberg#82480)
- Tag Cloud: Update styles and add `!important` (WordPress/gutenberg#70224)
- Correctly document the `blockName` property as being nullable (WordPress/gutenberg#70900)
- Add inertValue helper and use it for setting inert attribute (WordPress/gutenberg#83871)
- Enable editableRoot for the list item block for multi-selection on mobile (WordPress/gutenberg#82816)
- Verify localized data retention in override script test (WordPress/gutenberg#83845)
- Tests: Bump ibm-cloud-sdk-core in the AI development test lockfile (WordPress/gutenberg#83887)
- UI: Recommend Notice component (WordPress/gutenberg#82685)
- Fix: MediaUpload `gallery` prop ignores `allowedTypes` (WordPress/gutenberg#78257)
- Media editor: Add a session boundary above the cropper (WordPress/gutenberg#83550)
- DataViews: Measure the container as the data view mounts to avoid a single column flash (WordPress/gutenberg#83752)
- Pullquote: Add minimum width support (WordPress/gutenberg#83588)
- Media editor: Remove initial state seeding from the session (WordPress/gutenberg#83893)
- UI: Add e2e Storybook popup item layout fixtures (WordPress/gutenberg#83488)
- Storybook: Give CI job a distinct name (WordPress/gutenberg#83869)
- Coding standards: Skip anonymous class methods in block library function name sniff (WordPress/gutenberg#83900)
- Pagination: Add border support (WordPress/gutenberg#83745)
- PR meta: Move the props list into the shared comment (WordPress/gutenberg#82302)
- Comments Pagination: Add border support (WordPress/gutenberg#83746)
- Scripts: Resolve default configs without hoisted dependencies (WordPress/gutenberg#83902)
- Image: Fix invalid CSS url() value in circle-mask style (WordPress/gutenberg#82333)
- Query Total: Add minimum width and height support (WordPress/gutenberg#83590)
- Scripts: Treat files passed after --fix as file arguments (WordPress/gutenberg#83521)
- Editor: Remove icon for 'Export' more menu item (WordPress/gutenberg#83901)
- Dashboard Widgets: let a mounted widget declare actions at runtime (WordPress/gutenberg#83877)
- Framework: Switch from hoisted to isolated dependencies (WordPress/gutenberg#83847)
- Test: Run Vitest type graph validation in process (WordPress/gutenberg#83851)
- Remove use-memo-one usage (missing React 19 compat) (WordPress/gutenberg#83952)
- Fix Post Featured Image crash when isLink is enabled (WordPress/gutenberg#81584)
- Experiment: restyle classic wp-admin controls from design system tokens (WordPress/gutenberg#82425)
- Tests: Lint JavaScript Vitest mock imports (WordPress/gutenberg#83783)
- Build: Remove patch-package (WordPress/gutenberg#83982)
- Docs: Update deprecation testing guidance for shared reset (WordPress/gutenberg#83989)
- DataViews: list hideable fields alphabetically in the view config (WordPress/gutenberg#83947)
- Core Data: Rank link suggestions by type, and stop discarding merged results (WordPress/gutenberg#83407)
- Add new react-inert-value package with inertValue helper (WordPress/gutenberg#83987)
- Connectors: Keep a stored API key read-only when it can't be verified (WordPress/gutenberg#83889)
- Navigation: Search every entity type from the link UI (WordPress/gutenberg#83408)
- Tests: Cover translation setup in override script tests (WordPress/gutenberg#83886)
- Build: Update Vite to 8.3.2 and remove the PostCSS browser resolver (WordPress/gutenberg#83992)
- Update readme title to match block name (WordPress/gutenberg#83999)
- RTC: Fix undo breaking for non-synced entities (WordPress/gutenberg#83888)
- CI: Cover the AI development lockfile with Dependabot instead of npm audit (WordPress/gutenberg#83997)
- Latest Posts: Add minimum width and height support (WordPress/gutenberg#83905)
- Avatar: Add shadow support (WordPress/gutenberg#83929)
- Tab List: Add shadow support (WordPress/gutenberg#83922)
- Buttons: Add minimum width and height support (WordPress/gutenberg#83894)
- Social Icons: Add shadow support (WordPress/gutenberg#83920)
- Columns: Add minimum width and height support (WordPress/gutenberg#83895)
- Gallery: Add shadow support (WordPress/gutenberg#83919)
- File: Add shadow support (WordPress/gutenberg#83918)
- Page List: Add minimum width and height support (WordPress/gutenberg#83908)
- Build Tooling: Read npm v12 pack --json output (WordPress/gutenberg#84011)
- Accordion Heading: Add line height support (WordPress/gutenberg#83958)
- Paragraph: Add shadow support (WordPress/gutenberg#83926)
- Media & Text: Add minimum width and height support (WordPress/gutenberg#83906)
- Tests: Patch basic-ftp in AI development dependencies (WordPress/gutenberg#84000)
- Env, E2E: Update dependencies that ran native install scripts (WordPress/gutenberg#84012)
- Tests: Update Vitest to 5.0.3 and Storybook to 10.6.1 (WordPress/gutenberg#83996)
- Search: Add padding support (WordPress/gutenberg#83984)
- Block editor: Honour background skip serialization in the editor (WordPress/gutenberg#83943)
- Framework: Declare React types in the workspaces that use them (WordPress/gutenberg#84013)
- Fit text: Size each block instance in a loop independently (WordPress/gutenberg#83985)
- FocalPointPicker: end a drag released over the editor canvas (WordPress/gutenberg#83348)
- Tests: Cover Menu scroll lock and LinkControl protocols in browsers (WordPress/gutenberg#83991)
- List: Add shadow support (WordPress/gutenberg#83923)
- UI: Add Progress with custom color support (WordPress/gutenberg#83781)
- ESLint: Allow non-module stylesheet imports in unit tests (WordPress/gutenberg#84019)
- Canvas loader: Use UI Progress and pass color via the indicator prop (WordPress/gutenberg#83860)
- Menu: Align group labels and separators with indented item labels. (WordPress/gutenberg#83993)
- react-inert-value: add missing types/react peer dep (WordPress/gutenberg#84024)
- Docs: Refine design system agent guidance (WordPress/gutenberg#84007)
- Navigation: List allowed blocks in the link UI search results + add transformSuggestions to Link Control (WordPress/gutenberg#83652)
- Sync: Remove exposed wp.sync package (WordPress/gutenberg#81999)
- Style: Update color to use CSS variable in edit-site (WordPress/gutenberg#79002)
- Popover: drop the will-change hint once the popover stops moving (WordPress/gutenberg#77359)
- MediaEdit: Show a checkerboard background behind image previews (WordPress/gutenberg#83846)
- Quote: Add button colour support (WordPress/gutenberg#83983)
- Media & Text: Add duotone support (WordPress/gutenberg#83981)
- Gallery: Add duotone support (WordPress/gutenberg#83978)
- Interactivity API Router: Add reactive navigation lifecycle and initiator API (WordPress/gutenberg#83280)
- Notes: Move floating notes into a canvas margin (WordPress/gutenberg#83786)
- Verse: Add text columns and indent support (WordPress/gutenberg#83962)
- Notes: Scroll floating notes with the canvas (WordPress/gutenberg#83852)
- Notes: Add Undo to deleted note snackbar (WordPress/gutenberg#83988)
- Framework: Move @typescript/native from the root to the workspaces that use it (WordPress/gutenberg#84027)
- Repair invalid peer dependencies in the lockfile (WordPress/gutenberg#84062)
- Term Template: Add minimum width and height support (WordPress/gutenberg#83914)
- Fix check type declarations (WordPress/gutenberg#84070)
- Media: track the original attachment id for edited images (WordPress/gutenberg#81803)
- Post Comments Form: Add font family support (WordPress/gutenberg#83967)
- Media Utils: Add `MediaEdit` as a private API (WordPress/gutenberg#84046)
- Build Tools: Fix flaky ESM package types test timeout (WordPress/gutenberg#84068)
- Embed: Add padding support (WordPress/gutenberg#83963)
- Interactivity API: Add a data-wp-html directive (WordPress/gutenberg#83092)
- Typography and "block-default icon polish. (WordPress/gutenberg#84073)
- Release Tooling: Read the npm v12 JSON output shapes (WordPress/gutenberg#84075)
- Menu: Align submenu labels and highlight open parents (WordPress/gutenberg#84031)
- Props Bot: Skip bare reviews that duplicate their review comment runs (WordPress/gutenberg#84076)
- Dataviews: use inertValue in CompositeGrid (WordPress/gutenberg#84072)
- UI: Add Meter (WordPress/gutenberg#83855)
- Media & Text: Add shadow support (WordPress/gutenberg#83976)
- Media editor: restore original image in modal (WordPress/gutenberg#81805)
- List: Add background image, size, and gradient support (WordPress/gutenberg#83935)
- List Item: Add background image, size, and gradient support (WordPress/gutenberg#83936)
- Block Editor: Fix 'Manage allowed blocks' not shown when its the only 'Advanced' control (WordPress/gutenberg#84067)
- Design System: Clarify tooltip labeling and UI review guidance (WordPress/gutenberg#83898)
- Gallery: Add minimum width and height support (WordPress/gutenberg#83897)
- File: Add minimum width and height support (WordPress/gutenberg#83896)
- Media: Return 0 from the edit root lookup when there is no edit root (WordPress/gutenberg#84096)
- Read More: Add minimum width and height support (WordPress/gutenberg#83912)
- UI: Recommend Radio family components (WordPress/gutenberg#83872)
- Latest Comments: Add minimum width and height support (WordPress/gutenberg#83904)
- chore: Use v24 in .nvmrc (WordPress/gutenberg#84061)
- Embed: Add minimum width and height support (WordPress/gutenberg#83903)
- Post Comments Form: Add minimum width and height support (WordPress/gutenberg#83910)
- Post Featured Image: Add border style support (WordPress/gutenberg#83956)
- Buttons: Add shadow support (WordPress/gutenberg#83916)
- Poetry: Add fit text support (WordPress/gutenberg#83980)
- Video: Add duotone support (WordPress/gutenberg#83979)
- Notes: Keep anchor writes out of undo history (WordPress/gutenberg#84079)
- ProgressBar: Use WPDS color tokens (WordPress/gutenberg#83779)
- REST API: Add action-trash link to posts and comments (WordPress/gutenberg#84045)
- RSS: Add minimum width and height support (WordPress/gutenberg#83913)
- Notes: Reset paragraph top margin in floating notes (WordPress/gutenberg#84101)
- Global Styles: Fix popover position in Styles screen (WordPress/gutenberg#84048)
- Block Switcher: Show design system focus ring on pattern previews (WordPress/gutenberg#83933)
- MediaEdit: Use design system focus ring (WordPress/gutenberg#83854)
- Notes: Delete permanently when the trash is disabled (WordPress/gutenberg#84102)
- Release: Rewrite SVN publication scripts in Node.js (WordPress/gutenberg#84034)
- ContentEditableControl: Keep a disabled field focusable (WordPress/gutenberg#84083)
- States: Scope per-instance rules to the block's root element (WordPress/gutenberg#83986)
- List Item: Add shadow support (WordPress/gutenberg#83925)
- DataViews: Truncate filter chips instead of wrapping them (WordPress/gutenberg#83879)
- Experiments: Turn the React 19 experiment on by default (WordPress/gutenberg#83784)
- Notes: Extract NoteReply and lift AddNote gating (WordPress/gutenberg#84106)
- Interactivity API: Remove expired deprecated behaviors (WordPress/gutenberg#84098)
- Breadcrumbs: Fix typo in aria label translation context (WordPress/gutenberg#84112)
- ESLint: Allow generated test titles (WordPress/gutenberg#83995)
- Icons: Add keywords to icon manifest (WordPress/gutenberg#83884)
- Tooltip: Control the hover delay cancellation test clock (WordPress/gutenberg#84113)
- VS Code: Add managed workspace config (WordPress/gutenberg#84025)
- Breadcrumb: fix getMeasurementRender for React 19 (WordPress/gutenberg#84069)
- Notes: Fix flaky thread scroll e2e test (WordPress/gutenberg#84118)
- Detect the database client in the unit test debug step. (WordPress/gutenberg#84089)
- UI: Preserve Autocomplete item type inference (WordPress/gutenberg#84095)
- UI: Recommend Switch family components (WordPress/gutenberg#84097)
- Env: Add an option to choose the MariaDB version (WordPress/gutenberg#83751)
- UI: Preserve Combobox source item generics (WordPress/gutenberg#84094)
- Menu: Tighten spacing, use 16px prefix icons, and cap width at 320px (WordPress/gutenberg#84028)
- Notes: Preserve unsent note and reply drafts (WordPress/gutenberg#84110)
- Theme: Add integration test coverage for seed colors in artifacts (WordPress/gutenberg#81161)
- Progress: Migrate remaining ProgressBar usages and recommend UI Progress (WordPress/gutenberg#84021)
- Components: Fix polymorphism typings leaking `as` prop (WordPress/gutenberg#82704)
- Media & Text: Add background image, size, and gradient support (WordPress/gutenberg#83927)
- Experiments: Use a mock plugin slug that no WordPress build ships in the unrelated-plugin test (WordPress/gutenberg#84133)
- Button: Add background image, size, and gradient support (WordPress/gutenberg#83950)
- Tests: Isolate Ajv per test in wp-env schema tests to avoid order dependence (WordPress/gutenberg#84139)
- Storybook: Read icon keywords from the manifest (WordPress/gutenberg#84127)
- SandBox: Fix embed previews that require a referrer in Safari (WordPress/gutenberg#84014)
- Notes: Restore child notes trashed along with their parent note (WordPress/gutenberg#84100)
- Style states: fix exception when there's no selected block (WordPress/gutenberg#84140)
- Chore: Use v24.20 in  `.nvmrc` config file. (WordPress/gutenberg#84138)
- Security: Opt in to the npm v12 supply-chain defaults (WordPress/gutenberg#82689)
- Docs: Describe isolated dependencies for agents and contributors (WordPress/gutenberg#84141)
- Upgrade code and types to React 19 (WordPress/gutenberg#83941)
- Latest Comments: Add border support (WordPress/gutenberg#84148)
- Add prettier, eslint and stylelint to the root package.json (WordPress/gutenberg#84017)
- FontSizePicker: Migrate Emotion styles to SCSS Modules (WordPress/gutenberg#84126)
- Fields API: Add the server-side registry and REST route (WordPress/gutenberg#84078)
- Block bindings: add support to `icon` attribute of `core/icon` (WordPress/gutenberg#80730)
- VisuallyHidden: Move hiding styles outside CSS cascade layers (WordPress/gutenberg#84114)
- Theme: Generate complete border token modes for Figma testing (WordPress/gutenberg#84035)
- Developer tools: Simplify editor setup and add Zed settings (WordPress/gutenberg#84143)
- Consolidate wp-admin container radiuses onto the design system scale (WordPress/gutenberg#82427)
- CustomGradientPicker: Extend control point targets to the bar height (WordPress/gutenberg#84124)
- Notes: Draw the canvas divider from body so it uses the theme text color (WordPress/gutenberg#84158)
- Icons: Experiment with proportional stroke scaling (WordPress/gutenberg#84081)
- Global Styles: Ignore theme.json values of unexpected types (WordPress/gutenberg#84523)
- React 19 codemod: apply defaultProps when rendering a memo component (WordPress/gutenberg#84568)
- React 19: add new incompatible plugins (WordPress/gutenberg#84607)
- Tests: Fix HTML comparison tests (WordPress/gutenberg#84294)
- Tests: Fix list item unsafe markup test on older WordPress versions (WordPress/gutenberg#84302)
- Experiments: don't invalidate saved option with a legacy key (WordPress/gutenberg#84619)
- Tests: Scope Classic block media checkbox locator (WordPress/gutenberg#84524)

Props mamaduka.
See #66340



git-svn-id: https://develop.svn.wordpress.org/trunk@64587 602fd350-edb4-49c9-b593-d223f7449a82
wporg-sync pushed a commit to WordPress/WordPress that referenced this pull request Oct 20, 2026
This updates the pinned commit hash of the Gutenberg repository from 954fe7f9e04631c41aec4552acd627a7203a2aad to 7b95ee96b54de2e35886971ccf7eb449c324c830 (version 24.2.0).

A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@954fe7f...7b95ee9

- useServerSideRender: parse messages from caught errors (WordPress/gutenberg#83365)
- Docs: Fix published Vitest migration-guide links (WordPress/gutenberg#83449)
- Fix: Whitespace changes are not shown in the Resolve Block diff. (WordPress/gutenberg#82397)
- Editor: Use SearchableSelect for the post author field (WordPress/gutenberg#83323)
- Docs: Note that block attributes and global styles values are untrusted at render time (WordPress/gutenberg#83473)
- RichText: Remove dead exports and consolidate deprecations (WordPress/gutenberg#83461)
- Inserter: Manage roving tab index to skip re-rendering every item (WordPress/gutenberg#83437)
- SearchableSelectControl: Add to @wordpress/ui (WordPress/gutenberg#80979)
- Try: Bolder "B" icon (WordPress/gutenberg#83321)
- Ignore composer vendor files from top-level gitignore. (WordPress/gutenberg#22283)
- Tests: Add floating notes e2e coverage (WordPress/gutenberg#83477)
- Block Editor: Check the inserter's fallback containers unmemoized (WordPress/gutenberg#83446)
- Packages: Update Ariakit to 0.4.40 (WordPress/gutenberg#83278)
- Tests: Enforce per-call Vitest console expectations (WordPress/gutenberg#83095)
- Theme: Fix virtual modules, root styles, and seed validation (WordPress/gutenberg#83355)
- DataViews: Fix README to describe sort() as receiving field values, not items (WordPress/gutenberg#83483)
- Combobox: Label popup dialogs in stories (WordPress/gutenberg#83476)
- Block editor: Isolate mutable test fixtures (WordPress/gutenberg#83098)
- Blocks: Isolate registration state in tests (WordPress/gutenberg#83099)
- UI: Remove automatic Notice announcements (WordPress/gutenberg#82737)
- Text: Migrate Emotion styles to an SCSS Module (WordPress/gutenberg#82573)
- Block library: Isolate order-sensitive test interactions (WordPress/gutenberg#83101)
- Format Library: unify FormatEditProps to one type, move private types (WordPress/gutenberg#83487)
- UI: Announce selected chips in SearchableChipSelect (WordPress/gutenberg#82863)
- Card: Migrate from Emotion to SCSS modules (WordPress/gutenberg#82577)
- Components: Deprecate the private Menu API (WordPress/gutenberg#82947)
- CustomGradientPicker: Migrate control wrappers to an SCSS module (WordPress/gutenberg#82576)
- Components: Isolate order-sensitive UI tests (WordPress/gutenberg#83103)
- Tests: Isolate mutable configuration fixtures (WordPress/gutenberg#83104)
- Core data: Finish deferred selection updates in RTC test (WordPress/gutenberg#83366)
- Block editor: Wait for final keyboard link suggestions (WordPress/gutenberg#83489)
- Data: Assert and silence resolution error in useSuspenseSelect test (WordPress/gutenberg#83491)
- Tests: Isolate deprecation warning state (WordPress/gutenberg#83107)
- UI: Align selection popup checkmarks with the first label line (WordPress/gutenberg#82942)
- Tests: Resolve Browser Mode commands against the live iframe (WordPress/gutenberg#83495)
- Ensure position type is a string (WordPress/gutenberg#83500)
- MediaUpload: Fix console error when reopening Gallery media library (WordPress/gutenberg#76749)
- Refactor stylelint config detection in lint-style.js (WordPress/gutenberg#79280)
- Docs: Recommend UI Tabs for switching views (WordPress/gutenberg#83516)
- Popover: Close non-modal popovers on iframe interaction (WordPress/gutenberg#83509)
- Typography: List only the weights inside a variable font's range (WordPress/gutenberg#83128)
- Style book: Add link to example text. (WordPress/gutenberg#83448)
- Tests: Add Vitest Browser Mode failure artifacts (WordPress/gutenberg#83093)
- Theme: Make JavaScript token fallback transforms syntax-aware (WordPress/gutenberg#83356)
- Editor: Fix new posts being published with the `auto-draft` slug (WordPress/gutenberg#83518)
- Editor: Gather the View group of the Options menu into submenus (WordPress/gutenberg#82976)
- Tests: Fix PostCSS browser-externalized warnings in Vitest (WordPress/gutenberg#83091)
- Tests: Shuffle test cases in CI (WordPress/gutenberg#83111)
- Update Styles > Blocks description. (WordPress/gutenberg#83515)
- Columns: Remove the column count slider (WordPress/gutenberg#83262)
- BorderControl: Remove `%` from the border width units (WordPress/gutenberg#83492)
- Fields: Fix AuthorView for users who can't edit users (WordPress/gutenberg#83498)
- Update and add justify icons. (WordPress/gutenberg#83519)
- RichText: Refactor useMarkPersistent, fix StrictMode mount mark (WordPress/gutenberg#83463)
- Theme: Improve accessibility, API documentation, and compatibility checks (WordPress/gutenberg#83358)
- Theme: Preserve global token references in Lightning CSS (WordPress/gutenberg#83359)
- Tests: Migrate internal linting to Vitest and remove unused Jest dependencies (WordPress/gutenberg#83502)
- Improve specificity of lightbox button selector (WordPress/gutenberg#70800)
- TextControl: Use design system colors when disabled (WordPress/gutenberg#83307)
- Fix: Image lightbox: overlay becomes unusable (can't close) when it isn't a direct child of `<body>` (WordPress/gutenberg#83480)
- Notes: Extract note selection sync into useNoteSelection hook (WordPress/gutenberg#83528)
- Block Parser: Document `\WP_Block_Parser::$stack` as a list (WordPress/gutenberg#82695)
- CollapsibleCard: Scope the header focus ring to its own trigger (WordPress/gutenberg#81314)
- Fix broken links in docs (WordPress/gutenberg#83545)
- Icons: Use assertEqualHTML() in icons registry tests (WordPress/gutenberg#83544)
- Editor: Merge adjacent revision inline diffs (WordPress/gutenberg#80579)
- Date: Ignore trailing format backslash instead of printing undefined (WordPress/gutenberg#81528)
- Block Supports: Add background-clip block support infrastructure (WordPress/gutenberg#77141)
- Block Editor: Fix translator comments for block count announcements (WordPress/gutenberg#83555)
- Paste: replace non-breaking spaces at the edges of text with regular spaces (WordPress/gutenberg#83464)
- Media Editor: Fix pan drag flooding undo history after wheel zoom (WordPress/gutenberg#83558)
- Rich text: fix iOS double tap selection, preventing focus capture under editable host (WordPress/gutenberg#81042)
- Block editor: migrate state-control badges to UI Badge (WordPress/gutenberg#82608)
- Gallery: Add Order By controls for static gallery, consolidate controls in settings sidebar (WordPress/gutenberg#83438)
- Media editor: show an error when saving attachment details fails (WordPress/gutenberg#83560)
- Position controls: Fix useSelect warning for selected state viewports (WordPress/gutenberg#83570)
- Inserter: Use design system focus ring for previews (WordPress/gutenberg#83126)
- Image: Fix lightbox using thumbnail aspect ratio instead of original image ratio (WordPress/gutenberg#79058)
- Docs: Clarify @wordpress/ui icon color requirements (WordPress/gutenberg#83564)
- docker compose -T if stdin is not a tty (WordPress/gutenberg#78374)
- Storybook: Add new contributing page. (WordPress/gutenberg#83345)
- Widget Primitives: Avoid Vite warnings for runtime widget modules (WordPress/gutenberg#83602)
- Build: Update Vite to 8.3.1 and simplify Storybook tooling (WordPress/gutenberg#83569)
- doc(wp-env) Change core branch from trunk to master in doc (WordPress/gutenberg#83566)
- wp-build: Remove the unused boot, private-apis, and route optional peer dependencies (WordPress/gutenberg#83601)
- CI: Check CHANGELOG presence for published tooling and config packages (WordPress/gutenberg#83577)
- Tests: Enforce Vitest assertion coverage (WordPress/gutenberg#83572)
- Icons: Update heading level icons for optical balance (WordPress/gutenberg#83268)
- ESLint: Add allowUseWithCaution option to use-recommended-components (WordPress/gutenberg#83536)
- Notes: Refactor floating board measurement (WordPress/gutenberg#83485)
- Inserter: Stop re-rendering the block list on block selection change (WordPress/gutenberg#83284)
- Paste: Give each pasted data-URI image unique filename to avoid upload collisions. (WordPress/gutenberg#79480)
- Changelog validator: ignore markdown & configs d46223 (WordPress/gutenberg#83618)
- Font Library: Use UI Menu for collection actions (WordPress/gutenberg#82965)
- Storybook: Show prop descriptions in Canvas controls (WordPress/gutenberg#83581)
- test: Link upstream warning fixes in config (WordPress/gutenberg#83632)
- Storybook: Use one block-editor store module (WordPress/gutenberg#83636)
- Tests: Use strict assertions synced from Core changeset 63934. (WordPress/gutenberg#83619)
- Math: Store cell alignment in the MathML and polyfill alignment and overlines in Chromium (WordPress/gutenberg#83164)
- Storybook: Reuse PostCSS browser resolver in smoke tests (WordPress/gutenberg#83635)
- Editor: Use UI Menu for template options (WordPress/gutenberg#82964)
- RTC: Add a EntitySyncManager interface in core-data (WordPress/gutenberg#83410)
- Term Count: Add margin support (WordPress/gutenberg#83608)
- Archives: Add minimum height support (WordPress/gutenberg#83573)
- Media Editor: Stop the crop pixel snap from recording undo history (WordPress/gutenberg#83571)
- Term Name: Add margin support (WordPress/gutenberg#83606)
- Post Author Biography: Add text indent support (WordPress/gutenberg#83614)
- Code: Add minimum width and height support (WordPress/gutenberg#83574)
- Details: Add minimum width support (WordPress/gutenberg#83576)
- Post Content: Add minimum width support (WordPress/gutenberg#83575)
- Post Excerpt: Add minimum width and height support (WordPress/gutenberg#83578)
- Post Title: Add minimum width and height support (WordPress/gutenberg#83600)
- Footnotes: Add minimum width and height support (WordPress/gutenberg#83579)
- Storybook: Place Notice announcements under Components (WordPress/gutenberg#83617)
- InputControl: Darken the field border on hover (WordPress/gutenberg#83306)
- npm: Switch from legacy-peer-deps to strict-peer-deps (WordPress/gutenberg#81029)
- Term Name: Add minimum width and height support (WordPress/gutenberg#83599)
- Columns: Allow dropping a column at the outer edges (WordPress/gutenberg#83274)
- E2E: Pin the site title in the Interactivity API router specs and give the E2E Storybook build more heap. (WordPress/gutenberg#83474)
- Heading: Add minimum width and height support (WordPress/gutenberg#83580)
- Login/out: Add minimum width and height support (WordPress/gutenberg#83583)
- Verse: Add minimum width support (WordPress/gutenberg#83609)
- Video, Cover: Don't autoplay in the editor when reduced motion is preferred (WordPress/gutenberg#83337)
- Media & Text: Lower the specificity of the content padding (WordPress/gutenberg#83563)
- Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83743)
- Fix peer dependency conflicts left in the lockfile (WordPress/gutenberg#83754)
- Comments Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83744)
- Term Count: Add minimum width and height support (WordPress/gutenberg#83596)
- Read More: Add border style support (WordPress/gutenberg#83735)
- Cover: Don't autoplay embedded background videos when reduced motion is preferred (WordPress/gutenberg#83452)
- No Results: Add minimum width and height support (WordPress/gutenberg#83584)
- RichText: Rename utils.jsx to utils.js (WordPress/gutenberg#83758)
- Quote: Add minimum width support (WordPress/gutenberg#83592)
- Upgrade typescript-eslint to v8.70.1 (WordPress/gutenberg#83760)
- Tabs: Add minimum width support (WordPress/gutenberg#83595)
- Site Tagline: Add minimum width and height support (WordPress/gutenberg#83589)
- Heading: Add text indent support (WordPress/gutenberg#83615)
- Site Title: Add minimum width and height support (WordPress/gutenberg#83593)
- Home Link: Add padding and margin support (WordPress/gutenberg#83607)
- Preformatted: Add minimum width and height support (WordPress/gutenberg#83587)
- Include E2E Storybook sources in docgen (WordPress/gutenberg#83634)
- Extensible Site Editor: Pass custom block categories to the blocks store (WordPress/gutenberg#83762)
- Packages: Declare missing peer dependencies and check them in CI (WordPress/gutenberg#83765)
- Post Terms: Add minimum width and height support (WordPress/gutenberg#83586)
- Group, Cover: Track drop zone element in state (WordPress/gutenberg#83756)
- Global Styles: Add pseudo-state controls for Navigation Link (WordPress/gutenberg#83451)
- storybook: Register playground core blocks once (WordPress/gutenberg#83637)
- Document Outline: Show the design system focus ring instead of legacy box-shadow (WordPress/gutenberg#83755)
- storybook: Update BlockPopover fixture to API version 3 (WordPress/gutenberg#83642)
- Add typing to iAPI's getConfig() (WordPress/gutenberg#71692)
- Components: deprecate Badge (WordPress/gutenberg#82379)
- Block Editor: Fix style / nested attribute overwrite during multi-selection (WordPress/gutenberg#80070)
- Notes: Restrict menu actions for resolution notes and resolved threads (WordPress/gutenberg#73243)
- UI: Add change actions to form primitive stories (WordPress/gutenberg#83591)
- Icons: Support keyword-based search in the icons registry (WordPress/gutenberg#82367)
- Avatar: Explain that avatars use the Gravatar service (WordPress/gutenberg#83567)
- UI: Add item labels and descriptions to remaining popups (WordPress/gutenberg#83493)
- PaletteEdit: Stop changing the slug when renaming a preset (WordPress/gutenberg#83750)
- Storybook: Fix missing block styles in BlockCanvas playground stories (WordPress/gutenberg#81070)
- Tests: Enforce Vitest callback, promise, and title rules (WordPress/gutenberg#83620)
- ItemGroup: Use design system focus ring (WordPress/gutenberg#83764)
- Keep the legacy CheckboxControl visually consistent across viewports (WordPress/gutenberg#83612)
- Media editor: Use UI Menu for crop aspect ratio (WordPress/gutenberg#82968)
- Use strict assertions in override script tests (WordPress/gutenberg#83782)
- Home Link: Add minimum width and height support (WordPress/gutenberg#83582)
- Tab Panels: Add minimum height support (WordPress/gutenberg#83594)
- Post Time to Read: Add minimum width and height support (WordPress/gutenberg#83598)
- Term Description: Add minimum width and height support (WordPress/gutenberg#83597)
- UI: Keep InputLayout chrome at md on small viewports (WordPress/gutenberg#82764)
- Math: Add minimum width and height support (WordPress/gutenberg#83585)
- Tests: Bump undici in the AI development test lockfile (WordPress/gutenberg#83799)
- Bump brace-expansion in /test/ai-development (WordPress/gutenberg#83807)
- Bump js-yaml and promptfoo in /test/ai-development (WordPress/gutenberg#83797)
- Bump fast-uri from 3.1.7 to 3.1.8 (WordPress/gutenberg#83829)
- Update AI Development package versions after npm audit (WordPress/gutenberg#83830)
- Notes: Add show and hide options for floating notes (WordPress/gutenberg#83768)
- Add separators to item popup components (WordPress/gutenberg#83776)
- Components: Align RadioControl colors with UI Radio (WordPress/gutenberg#83270)
- E2E: Mock Openverse in image drag-and-drop inserter test (WordPress/gutenberg#83842)
- FormToggle: Match Switch colors across states (WordPress/gutenberg#83773)
- Bump `@react-spring/web` from 9.4.5 to 10.1.2 (WordPress/gutenberg#83796)
- ColorPalette: Show design system focus ring on custom color button (WordPress/gutenberg#83841)
- Docs: Remove CheckboxControl heading from InspectorControls example (WordPress/gutenberg#83844)
- Base Styles: Default the admin theme color to Blueberry (WordPress/gutenberg#83749)
- Menu: Guard against nesting Group and RadioGroup (WordPress/gutenberg#83792)
- Template Part: Fall back to rendering a template part from the theme file if the db version is unavailable (WordPress/gutenberg#83809)
- Tests: Reset deprecation history in shared Vitest setup (WordPress/gutenberg#83849)
- Menu: Disable triggers instead of roots in consumers (WordPress/gutenberg#83791)
- Playlist: Replace the waveform player patch with its no-autoinit entry (WordPress/gutenberg#83132)
- Update UI Spinner appearance and add a color prop (WordPress/gutenberg#83775)
- UI: Align component names with their semantics (WordPress/gutenberg#83789)
- Checkbox: Prevent rounded themes from making checkboxes circular (WordPress/gutenberg#83526)
- Storybook: Update manifest snapshot for Spinner color prop (WordPress/gutenberg#83856)
- Button: Only open the link popover on explicit user action (WordPress/gutenberg#30166)
- Gallery Lightbox: Prevent image click from closing the dialog when navigation is enabled (WordPress/gutenberg#78898)
- UI: Recommend Checkbox family components (WordPress/gutenberg#83771)
- RadioControl: Keep a 16px visual with a larger hit target (WordPress/gutenberg#83840)
- Table: replace deprecated word-break with overflow-wrap: anywhere (WordPress/gutenberg#82480)
- Tag Cloud: Update styles and add `!important` (WordPress/gutenberg#70224)
- Correctly document the `blockName` property as being nullable (WordPress/gutenberg#70900)
- Add inertValue helper and use it for setting inert attribute (WordPress/gutenberg#83871)
- Enable editableRoot for the list item block for multi-selection on mobile (WordPress/gutenberg#82816)
- Verify localized data retention in override script test (WordPress/gutenberg#83845)
- Tests: Bump ibm-cloud-sdk-core in the AI development test lockfile (WordPress/gutenberg#83887)
- UI: Recommend Notice component (WordPress/gutenberg#82685)
- Fix: MediaUpload `gallery` prop ignores `allowedTypes` (WordPress/gutenberg#78257)
- Media editor: Add a session boundary above the cropper (WordPress/gutenberg#83550)
- DataViews: Measure the container as the data view mounts to avoid a single column flash (WordPress/gutenberg#83752)
- Pullquote: Add minimum width support (WordPress/gutenberg#83588)
- Media editor: Remove initial state seeding from the session (WordPress/gutenberg#83893)
- UI: Add e2e Storybook popup item layout fixtures (WordPress/gutenberg#83488)
- Storybook: Give CI job a distinct name (WordPress/gutenberg#83869)
- Coding standards: Skip anonymous class methods in block library function name sniff (WordPress/gutenberg#83900)
- Pagination: Add border support (WordPress/gutenberg#83745)
- PR meta: Move the props list into the shared comment (WordPress/gutenberg#82302)
- Comments Pagination: Add border support (WordPress/gutenberg#83746)
- Scripts: Resolve default configs without hoisted dependencies (WordPress/gutenberg#83902)
- Image: Fix invalid CSS url() value in circle-mask style (WordPress/gutenberg#82333)
- Query Total: Add minimum width and height support (WordPress/gutenberg#83590)
- Scripts: Treat files passed after --fix as file arguments (WordPress/gutenberg#83521)
- Editor: Remove icon for 'Export' more menu item (WordPress/gutenberg#83901)
- Dashboard Widgets: let a mounted widget declare actions at runtime (WordPress/gutenberg#83877)
- Framework: Switch from hoisted to isolated dependencies (WordPress/gutenberg#83847)
- Test: Run Vitest type graph validation in process (WordPress/gutenberg#83851)
- Remove use-memo-one usage (missing React 19 compat) (WordPress/gutenberg#83952)
- Fix Post Featured Image crash when isLink is enabled (WordPress/gutenberg#81584)
- Experiment: restyle classic wp-admin controls from design system tokens (WordPress/gutenberg#82425)
- Tests: Lint JavaScript Vitest mock imports (WordPress/gutenberg#83783)
- Build: Remove patch-package (WordPress/gutenberg#83982)
- Docs: Update deprecation testing guidance for shared reset (WordPress/gutenberg#83989)
- DataViews: list hideable fields alphabetically in the view config (WordPress/gutenberg#83947)
- Core Data: Rank link suggestions by type, and stop discarding merged results (WordPress/gutenberg#83407)
- Add new react-inert-value package with inertValue helper (WordPress/gutenberg#83987)
- Connectors: Keep a stored API key read-only when it can't be verified (WordPress/gutenberg#83889)
- Navigation: Search every entity type from the link UI (WordPress/gutenberg#83408)
- Tests: Cover translation setup in override script tests (WordPress/gutenberg#83886)
- Build: Update Vite to 8.3.2 and remove the PostCSS browser resolver (WordPress/gutenberg#83992)
- Update readme title to match block name (WordPress/gutenberg#83999)
- RTC: Fix undo breaking for non-synced entities (WordPress/gutenberg#83888)
- CI: Cover the AI development lockfile with Dependabot instead of npm audit (WordPress/gutenberg#83997)
- Latest Posts: Add minimum width and height support (WordPress/gutenberg#83905)
- Avatar: Add shadow support (WordPress/gutenberg#83929)
- Tab List: Add shadow support (WordPress/gutenberg#83922)
- Buttons: Add minimum width and height support (WordPress/gutenberg#83894)
- Social Icons: Add shadow support (WordPress/gutenberg#83920)
- Columns: Add minimum width and height support (WordPress/gutenberg#83895)
- Gallery: Add shadow support (WordPress/gutenberg#83919)
- File: Add shadow support (WordPress/gutenberg#83918)
- Page List: Add minimum width and height support (WordPress/gutenberg#83908)
- Build Tooling: Read npm v12 pack --json output (WordPress/gutenberg#84011)
- Accordion Heading: Add line height support (WordPress/gutenberg#83958)
- Paragraph: Add shadow support (WordPress/gutenberg#83926)
- Media & Text: Add minimum width and height support (WordPress/gutenberg#83906)
- Tests: Patch basic-ftp in AI development dependencies (WordPress/gutenberg#84000)
- Env, E2E: Update dependencies that ran native install scripts (WordPress/gutenberg#84012)
- Tests: Update Vitest to 5.0.3 and Storybook to 10.6.1 (WordPress/gutenberg#83996)
- Search: Add padding support (WordPress/gutenberg#83984)
- Block editor: Honour background skip serialization in the editor (WordPress/gutenberg#83943)
- Framework: Declare React types in the workspaces that use them (WordPress/gutenberg#84013)
- Fit text: Size each block instance in a loop independently (WordPress/gutenberg#83985)
- FocalPointPicker: end a drag released over the editor canvas (WordPress/gutenberg#83348)
- Tests: Cover Menu scroll lock and LinkControl protocols in browsers (WordPress/gutenberg#83991)
- List: Add shadow support (WordPress/gutenberg#83923)
- UI: Add Progress with custom color support (WordPress/gutenberg#83781)
- ESLint: Allow non-module stylesheet imports in unit tests (WordPress/gutenberg#84019)
- Canvas loader: Use UI Progress and pass color via the indicator prop (WordPress/gutenberg#83860)
- Menu: Align group labels and separators with indented item labels. (WordPress/gutenberg#83993)
- react-inert-value: add missing types/react peer dep (WordPress/gutenberg#84024)
- Docs: Refine design system agent guidance (WordPress/gutenberg#84007)
- Navigation: List allowed blocks in the link UI search results + add transformSuggestions to Link Control (WordPress/gutenberg#83652)
- Sync: Remove exposed wp.sync package (WordPress/gutenberg#81999)
- Style: Update color to use CSS variable in edit-site (WordPress/gutenberg#79002)
- Popover: drop the will-change hint once the popover stops moving (WordPress/gutenberg#77359)
- MediaEdit: Show a checkerboard background behind image previews (WordPress/gutenberg#83846)
- Quote: Add button colour support (WordPress/gutenberg#83983)
- Media & Text: Add duotone support (WordPress/gutenberg#83981)
- Gallery: Add duotone support (WordPress/gutenberg#83978)
- Interactivity API Router: Add reactive navigation lifecycle and initiator API (WordPress/gutenberg#83280)
- Notes: Move floating notes into a canvas margin (WordPress/gutenberg#83786)
- Verse: Add text columns and indent support (WordPress/gutenberg#83962)
- Notes: Scroll floating notes with the canvas (WordPress/gutenberg#83852)
- Notes: Add Undo to deleted note snackbar (WordPress/gutenberg#83988)
- Framework: Move @typescript/native from the root to the workspaces that use it (WordPress/gutenberg#84027)
- Repair invalid peer dependencies in the lockfile (WordPress/gutenberg#84062)
- Term Template: Add minimum width and height support (WordPress/gutenberg#83914)
- Fix check type declarations (WordPress/gutenberg#84070)
- Media: track the original attachment id for edited images (WordPress/gutenberg#81803)
- Post Comments Form: Add font family support (WordPress/gutenberg#83967)
- Media Utils: Add `MediaEdit` as a private API (WordPress/gutenberg#84046)
- Build Tools: Fix flaky ESM package types test timeout (WordPress/gutenberg#84068)
- Embed: Add padding support (WordPress/gutenberg#83963)
- Interactivity API: Add a data-wp-html directive (WordPress/gutenberg#83092)
- Typography and "block-default icon polish. (WordPress/gutenberg#84073)
- Release Tooling: Read the npm v12 JSON output shapes (WordPress/gutenberg#84075)
- Menu: Align submenu labels and highlight open parents (WordPress/gutenberg#84031)
- Props Bot: Skip bare reviews that duplicate their review comment runs (WordPress/gutenberg#84076)
- Dataviews: use inertValue in CompositeGrid (WordPress/gutenberg#84072)
- UI: Add Meter (WordPress/gutenberg#83855)
- Media & Text: Add shadow support (WordPress/gutenberg#83976)
- Media editor: restore original image in modal (WordPress/gutenberg#81805)
- List: Add background image, size, and gradient support (WordPress/gutenberg#83935)
- List Item: Add background image, size, and gradient support (WordPress/gutenberg#83936)
- Block Editor: Fix 'Manage allowed blocks' not shown when its the only 'Advanced' control (WordPress/gutenberg#84067)
- Design System: Clarify tooltip labeling and UI review guidance (WordPress/gutenberg#83898)
- Gallery: Add minimum width and height support (WordPress/gutenberg#83897)
- File: Add minimum width and height support (WordPress/gutenberg#83896)
- Media: Return 0 from the edit root lookup when there is no edit root (WordPress/gutenberg#84096)
- Read More: Add minimum width and height support (WordPress/gutenberg#83912)
- UI: Recommend Radio family components (WordPress/gutenberg#83872)
- Latest Comments: Add minimum width and height support (WordPress/gutenberg#83904)
- chore: Use v24 in .nvmrc (WordPress/gutenberg#84061)
- Embed: Add minimum width and height support (WordPress/gutenberg#83903)
- Post Comments Form: Add minimum width and height support (WordPress/gutenberg#83910)
- Post Featured Image: Add border style support (WordPress/gutenberg#83956)
- Buttons: Add shadow support (WordPress/gutenberg#83916)
- Poetry: Add fit text support (WordPress/gutenberg#83980)
- Video: Add duotone support (WordPress/gutenberg#83979)
- Notes: Keep anchor writes out of undo history (WordPress/gutenberg#84079)
- ProgressBar: Use WPDS color tokens (WordPress/gutenberg#83779)
- REST API: Add action-trash link to posts and comments (WordPress/gutenberg#84045)
- RSS: Add minimum width and height support (WordPress/gutenberg#83913)
- Notes: Reset paragraph top margin in floating notes (WordPress/gutenberg#84101)
- Global Styles: Fix popover position in Styles screen (WordPress/gutenberg#84048)
- Block Switcher: Show design system focus ring on pattern previews (WordPress/gutenberg#83933)
- MediaEdit: Use design system focus ring (WordPress/gutenberg#83854)
- Notes: Delete permanently when the trash is disabled (WordPress/gutenberg#84102)
- Release: Rewrite SVN publication scripts in Node.js (WordPress/gutenberg#84034)
- ContentEditableControl: Keep a disabled field focusable (WordPress/gutenberg#84083)
- States: Scope per-instance rules to the block's root element (WordPress/gutenberg#83986)
- List Item: Add shadow support (WordPress/gutenberg#83925)
- DataViews: Truncate filter chips instead of wrapping them (WordPress/gutenberg#83879)
- Experiments: Turn the React 19 experiment on by default (WordPress/gutenberg#83784)
- Notes: Extract NoteReply and lift AddNote gating (WordPress/gutenberg#84106)
- Interactivity API: Remove expired deprecated behaviors (WordPress/gutenberg#84098)
- Breadcrumbs: Fix typo in aria label translation context (WordPress/gutenberg#84112)
- ESLint: Allow generated test titles (WordPress/gutenberg#83995)
- Icons: Add keywords to icon manifest (WordPress/gutenberg#83884)
- Tooltip: Control the hover delay cancellation test clock (WordPress/gutenberg#84113)
- VS Code: Add managed workspace config (WordPress/gutenberg#84025)
- Breadcrumb: fix getMeasurementRender for React 19 (WordPress/gutenberg#84069)
- Notes: Fix flaky thread scroll e2e test (WordPress/gutenberg#84118)
- Detect the database client in the unit test debug step. (WordPress/gutenberg#84089)
- UI: Preserve Autocomplete item type inference (WordPress/gutenberg#84095)
- UI: Recommend Switch family components (WordPress/gutenberg#84097)
- Env: Add an option to choose the MariaDB version (WordPress/gutenberg#83751)
- UI: Preserve Combobox source item generics (WordPress/gutenberg#84094)
- Menu: Tighten spacing, use 16px prefix icons, and cap width at 320px (WordPress/gutenberg#84028)
- Notes: Preserve unsent note and reply drafts (WordPress/gutenberg#84110)
- Theme: Add integration test coverage for seed colors in artifacts (WordPress/gutenberg#81161)
- Progress: Migrate remaining ProgressBar usages and recommend UI Progress (WordPress/gutenberg#84021)
- Components: Fix polymorphism typings leaking `as` prop (WordPress/gutenberg#82704)
- Media & Text: Add background image, size, and gradient support (WordPress/gutenberg#83927)
- Experiments: Use a mock plugin slug that no WordPress build ships in the unrelated-plugin test (WordPress/gutenberg#84133)
- Button: Add background image, size, and gradient support (WordPress/gutenberg#83950)
- Tests: Isolate Ajv per test in wp-env schema tests to avoid order dependence (WordPress/gutenberg#84139)
- Storybook: Read icon keywords from the manifest (WordPress/gutenberg#84127)
- SandBox: Fix embed previews that require a referrer in Safari (WordPress/gutenberg#84014)
- Notes: Restore child notes trashed along with their parent note (WordPress/gutenberg#84100)
- Style states: fix exception when there's no selected block (WordPress/gutenberg#84140)
- Chore: Use v24.20 in  `.nvmrc` config file. (WordPress/gutenberg#84138)
- Security: Opt in to the npm v12 supply-chain defaults (WordPress/gutenberg#82689)
- Docs: Describe isolated dependencies for agents and contributors (WordPress/gutenberg#84141)
- Upgrade code and types to React 19 (WordPress/gutenberg#83941)
- Latest Comments: Add border support (WordPress/gutenberg#84148)
- Add prettier, eslint and stylelint to the root package.json (WordPress/gutenberg#84017)
- FontSizePicker: Migrate Emotion styles to SCSS Modules (WordPress/gutenberg#84126)
- Fields API: Add the server-side registry and REST route (WordPress/gutenberg#84078)
- Block bindings: add support to `icon` attribute of `core/icon` (WordPress/gutenberg#80730)
- VisuallyHidden: Move hiding styles outside CSS cascade layers (WordPress/gutenberg#84114)
- Theme: Generate complete border token modes for Figma testing (WordPress/gutenberg#84035)
- Developer tools: Simplify editor setup and add Zed settings (WordPress/gutenberg#84143)
- Consolidate wp-admin container radiuses onto the design system scale (WordPress/gutenberg#82427)
- CustomGradientPicker: Extend control point targets to the bar height (WordPress/gutenberg#84124)
- Notes: Draw the canvas divider from body so it uses the theme text color (WordPress/gutenberg#84158)
- Icons: Experiment with proportional stroke scaling (WordPress/gutenberg#84081)
- Global Styles: Ignore theme.json values of unexpected types (WordPress/gutenberg#84523)
- React 19 codemod: apply defaultProps when rendering a memo component (WordPress/gutenberg#84568)
- React 19: add new incompatible plugins (WordPress/gutenberg#84607)
- Tests: Fix HTML comparison tests (WordPress/gutenberg#84294)
- Tests: Fix list item unsafe markup test on older WordPress versions (WordPress/gutenberg#84302)
- Experiments: don't invalidate saved option with a legacy key (WordPress/gutenberg#84619)
- Tests: Scope Classic block media checkbox locator (WordPress/gutenberg#84524)

Props mamaduka.
See #66340


Built from https://develop.svn.wordpress.org/trunk@64587


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

Labels

[Feature] Media Anything that impacts the experience of managing media [Package] Block library /packages/block-library [Package] Editor /packages/editor [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants