Media Editor Modal: Try adding undo/redo for the image cropper#77782
Conversation
|
Size Change: +909 B (+0.01%) Total Size: 7.87 MB 📦 View Changed
ℹ️ View Unchanged
|
|
Flaky tests detected in 7f087c2. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/25152074602
|
ramonjd
left a comment
There was a problem hiding this comment.
This is a power feature, thanks for working on it. I love the direction - controls look good and just fit in ≤ 480px. I think they're important to show in mobile at least 👍🏻
I left some observations, hopefully they don't muddy the waters!
| const isTextField = | ||
| target.tagName === 'INPUT' || | ||
| target.tagName === 'TEXTAREA' || | ||
| target.isContentEditable; |
There was a problem hiding this comment.
Do you think this condition is related to what I'm seeing with the rangeslider? When the handle is focussed undo is blocked.
2026-04-30.11.39.12.mp4
Is there a way to limit it to text-editable inputs, and not input[type="range"] for example?
I'm seeing the same for the zoom control in the RHS panel, though I think the panel seems to be an exception as undo isn't happening at all from there.
There was a problem hiding this comment.
I'm seeing the same for the zoom control in the RHS panel
Ah I think setZoom doesn't push history I think? Same with aspect ratio changes.
Technically, these are cropper edits, so should undo/redo should cover them?
There was a problem hiding this comment.
Technically, these are cropper edits, so should undo/redo should cover them?
Yes, they should. I think my change here was a little too naive (and vibe coded). The intention was to exclude undo while folks are editing metadata fields that are unrelated to cropping. As we add more fields that are related to cropping we'll need a better way to determine this. I'll have a play around.
| const pushToHistory = useCallback( () => { | ||
| const current = stateRef.current; | ||
| // Skip duplicate pushes (e.g. rapid discrete action on unchanged state). | ||
| if ( historyRef.current[ historyRef.current.length - 1 ] === current ) { |
There was a problem hiding this comment.
This checks object references, but would some actions return new objects? E.g., Zoom slider sends the current zoom again. Wondering if we need something like areCropperStatesEqual
Not muddied at all, my push yesterday was really just a first pass "I think this direction might just work" so it's all useful feedback, thanks! |
… for undo/redo, improve keyboard handling and undo/redo from within input fields
| ); | ||
|
|
||
| const settleCrop = useCallback( () => { | ||
| pushToHistory(); |
There was a problem hiding this comment.
I'm wondering if we need pushToHistory in settleCrop at all. Settle is part of the gesture. Theoretically the gesture boundary already records the snapshot.
I'm still seeing some strange behaviour rolling back from a manual crop.
I had a look at my past research/commits, and compared what we're doing here and it's the right approach definitely. There was one suggestion that might preserve history integrity:
Drop eager pushToHistory() calls from setFlip, snapRotate90, settleCrop, applyOperation in use-cropper-state.ts and create one recording rule for everyone: anything that changes state lives between beginGesture and commitHistory
I'm just testing that small change locally to see if it's not lying to me 😄
There was a problem hiding this comment.
Oh, I should have said, this isn't quite ready for a re-review just yet! I found some bugs and am trying an approach that uses a debounced check against state, which I think might simplify things a bit.
There was a problem hiding this comment.
anything that changes state lives between beginGesture and commitHistory
But in principle, yes, I'm trying something in that general direction 😄
There was a problem hiding this comment.
Oh okay, sorry for the premature testing! I'll back off 😅 I tried those suggestions out and it's working better locally.
2026-04-30.16.33.14.mp4
It also had to connect toolbar actions (Rotate Left, Rotate Right, Flip H, Flip V) with a recordedAction helper that wraps beginGesture > action > commitHistory.
Slider already uses useCropGestureHandlers so it was good.
There was a problem hiding this comment.
There was a problem hiding this comment.
Oh okay, sorry for the premature testing! I'll back off 😅 I tried those suggestions out and it's working better locally.
No, no, I appreciate the testing and extra eyes! I just didn't want to waste your time, potentially 😄
And this could come in handy if the approach I'm trying winds up not working right!
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
|
Alrighty, I've switched this over to ready for review and updated the How section in the PR description. Thanks again as always for all the back and forth @ramonjd, much appreciated! What I've tried now is to have the main way we tell if we should add to the undo stack be a debounced checking of state changes. I think this simplifies things a fair bit, but we can still use gestureEnd or pointer up to short circuit the debounce and commit history immediately. I believe this is working okay for the rotation and flip buttons, and we've got the range controls available for the undo/redo stack (and cmd+z inside their fields) while still excluding metadata fields from it. All that said, I'm not 100% sure of the approach. It might feel brittle, and maybe some of the changes need to be grouped or combined? In any case, I'm generally happier with the current state of the PR than what I had previously as it feels like there's a bit less manual fiddling around to make sure the beginning of gestures, etc, are covered, and it was all getting a bit too buggy previously. But I'll give this another look with fresh eyes tomorrow 😄 |
|
The resize settle behaviour currently creates an extra entry in the undo stack, which is a bit unfortunate. I'll dig in today — ideally, that'd be covered by the debounced approach rather than immediately committing history after resizing. I'll continue hacking! |
No worries! I was just testing that. What fixed it for me was flushing the pending debounce in |
…ips, add a function to check equality, and make Reset no longer clear the undo stack
| ( direction: 1 | -1 ) => { | ||
| commitHistory(); | ||
| pushToHistory(); | ||
| suppressDebounceRef.current = true; |
There was a problem hiding this comment.
A fly by observation, so take with salt.
Is the debounce to control continuous input, like where there are no clear gesture boundaries?
It feels strange that we have suppress debounce on every action to fight against batching. I wonder if it's needed though for toolbar actions like this that have a clear start and end.
I don't know, hence the questions 😄
There was a problem hiding this comment.
Here I'm mostly trying to keep things consistent for each of the actions. Something I ran into in an earlier iteration was having separate handling for each of the controls, which felt a bit inconsistent and brittle. Concrete examples are the input fields for fine grained rotation and zoom where a user can press and hold the up or down key to make adjustments (so should be debounced) or use the scroll wheel.
But another case for snap rotate or flip is that if someone's clicking through very quickly (either intentionally or accidentally), it's probably neater for it to be a debounced step rather than creating lots of tiny little undo steps 🤔
There was a problem hiding this comment.
Is the debounce to control continuous input, like where there are no clear gesture boundaries?
I guess I'm stuck on the idea that every interaction in the editor has a natural start and end signal: the canvas exposes onGestureStart/onGestureEnd, and controls have their own start/end events etc.
So I'm a bit slow in understanding why the debounce juggling is required at all.
There was a problem hiding this comment.
Sorry, I hit "Reply" before I saw your response!
if someone's clicking through very quickly (either intentionally or accidentally), it's probably neater for it to be a debounced step rather than creating lots of tiny little undo steps
I get you! Thanks for the explainer
There was a problem hiding this comment.
I get you! Thanks for the explainer
No worries! This is a slightly weird one because at first I didn't think the debounce juggling would be required at all. The approach I've ended up with was a result of "feel" of using the onGestureStart and onGestureEnd approach rather than something that's easy to read from the code, unfortunately.
While logically tracking the beginning and end of gestures seemed more appropriate, in practice there's lots of different kinds of gestures that folks end up doing, and that require debouncing anyway (i.e. the holding down a key, mousewheel etc). So in terms of feel of undo/redo I've gone the other direction of going mostly debounced.
I think in the longer-term we'll probably need to end up with something that does both in order for the undo/redo stack to feel properly stable. But for this PR, I think honing in on debounce probably gives us the simplest building blocks for now.
|
Alrighty, I think this is in decent shape as a proposal for the first round of undo/redo for the cropper. It gets rabbit-holey very quickly, so I'm leaning toward trying to build this in stages, with this as the first stage (obviously). In follow-ups, it'd be good to:
All that said, let me know if you think this isn't the right way to go for now! Happy to rework things if it feels off. |
|
This is feeling/working really well. Thanks for the updates! 🚀 2026-05-01.10.57.57.mp4I noticed one slight regression with the way the dirty state works after a redo action. When performing a redo, then undoing back to the default state, the Reset button no longer detects that it's back at the starting state, and the Save button is active. The dirty state also affects the close confirmation. Kapture.2026-05-01.at.11.14.49.mp4The main concern I'd have is that we rely on the dirty state to save a new attachment via |
…, and some tests to cover the regression
|
Great catch @ramonjd! Yes, that's an important regression to fix up. I've pushed a fix: I think the issue was due to attempting to compare equality with floating point values. I've added a 2026-05-01.11.27.53.mp4Let me know if you notice any other weirdness! |
ramonjd
left a comment
There was a problem hiding this comment.
Awesome work!
Functionality wise I think we've covered all the cases. I tested
- keyboard controls like crop/pan (plus
rfor rotate and+/-for zoom) - aspect ratio changes
- crop + settle
- reset/save/cancel dirty state detected LGTM
As you say, this this the first stage! But I think it's working pretty well from a user perspective.
I appreciate the back and forth. 🚢
Likewise, thanks for all the help here! It's often tricky with these ones where we're adding a new feature from scratch and it's hard to know exactly how it should work, but this is much better thanks to all the discussion 🙇 |
This updates the pinned commit hash of the Gutenberg repository from `585cf86bb6f408b1dc61175f75db016aa4760653 ` (version `23.1.0`) to `d5ac60e6118060529737127d44a6fdc8abf57eb9` (version `23.2.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.1.0..v23.2.0. The following commits are included: - Fix PHP multisite tests (WordPress/gutenberg#77825) - Revise README for FocalPointPicker component to use object-position (WordPress/gutenberg#77722) - Experiment: Add first e2e tests for Taxonomies (WordPress/gutenberg#77828) - Content Types: Add post type management (WordPress/gutenberg#77754) - Grid: lock document cursor during resize gesture (WordPress/gutenberg#77813) - Build: Add experimental `widgets/` folder support to @wordpress/build (WordPress/gutenberg#77347) - TabPanel: Fix tab indicator animation (WordPress/gutenberg#77812) - Disable TinyMCE: Repurpose experiment as Classic block removal (WordPress/gutenberg#77838) - Cover block: Inline z-index values (WordPress/gutenberg#77753) - Button: Align link variant underline with Link and ExternalLink (WordPress/gutenberg#77842) - ui/Drawer: Polish open/close animation, fix swipe on content padding (WordPress/gutenberg#77800) - Site Editor: Remove local z-index helper entries (WordPress/gutenberg#77808) - Inline sticky search z-index values (WordPress/gutenberg#77806) - Block Manager: Inline z-index values (WordPress/gutenberg#77759) - Update TypeScript to tsgo (try 2) (WordPress/gutenberg#77682) - Editor: Inline pattern chooser z-index values (WordPress/gutenberg#77772) - Media editor modal: disable scroll wheel zoom while a crop is active (WordPress/gutenberg#77826) - Media editor modal: disable scroll wheel zoom while a pan/drag is active (WordPress/gutenberg#77863) - Media Editor Modal: Try adding undo/redo for the image cropper (WordPress/gutenberg#77782) - Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857) - Media Upload Modal: Fix pagination and search (WordPress/gutenberg#77872) - `defaultRenderingMode` value not respected when changed using `block_editor_settings_all` (WordPress/gutenberg#77870) - Media editor modal: expand keyboard shortcuts and add interaction helpers (WordPress/gutenberg#77871) - Media editor modal: name landmark regions and add panel headings (WordPress/gutenberg#77875) - Media Editor Modal: Use shift modifier to adjust keyboard pan speed (WordPress/gutenberg#77878) - Disable Classic block: Always register, hide from inserter conditionally (WordPress/gutenberg#77840) - ESLint: Replace `eslint-plugin-react-compiler` with `eslint-plugin-react-hooks` (WordPress/gutenberg#69962) - Disable Classic block: Control inserter support via filter (WordPress/gutenberg#77845) - Grid: add `renderResizeHandle` render prop (WordPress/gutenberg#77811) - Grid: render resize handle as component (WordPress/gutenberg#77888) - Update uuid dependency (WordPress/gutenberg#77848) - Added Translator Context for Reply (WordPress/gutenberg#77891) - Media editor modal: add Shift+R for counter-clockwise rotation (WordPress/gutenberg#77898) - Update references to default branch. (WordPress/gutenberg#77606) - Notes: Keep tall floating threads scrollable on short content (WordPress/gutenberg#77821) - Taxonomy edit route: declare @wordpress/base-styles as dependency (WordPress/gutenberg#77901) - Post Types DataViews: Make titles clickable to open edit page (WordPress/gutenberg#77885) - Upgrade and unify @types/node version (WordPress/gutenberg#77900) - Widget Types: replace bootstrap with resolver (WordPress/gutenberg#77847) - SlotFill: add dependencies to updateFill effect (WordPress/gutenberg#77907) - Grid: prevent resize runaway near viewport edge (WordPress/gutenberg#77854) - Experiment: Add taxonomy visibility fields (WordPress/gutenberg#77835) - Content Types: Add Duplicate action to taxonomy management (WordPress/gutenberg#77853) - Site Editor: Inline layout z-index values (WordPress/gutenberg#77807) - RTC: Clarify WPBlockSelection type and link to duplicates in other packages. (WordPress/gutenberg#77862) - Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126) - Media Editor Modal: In the image cropper, pan when dragging the crop instead of constraining to the visible area (WordPress/gutenberg#77899) - Block Editor: Clarify logic for 'directInsert' inner blocks setting (WordPress/gutenberg#77873) - Block Editor: Fix target block for copying direct insert block attributes (WordPress/gutenberg#77877) - Link: Fix awkward focus outline around the new-tab icon (WordPress/gutenberg#77910) - Plugin loader: use require for build/constants.php (WordPress/gutenberg#77908) - Tests: Fix argument forwarding for test:unit workspace scripts (WordPress/gutenberg#77541) - Try responsive global block styles with states (WordPress/gutenberg#77513) - Image editor: suppress image editor undo/redo while a crop interaction is active (WordPress/gutenberg#77930) - Experimental: Content types - disable create/save button based on form validity (WordPress/gutenberg#77931) - Guidelines: Refactor accordion to use CollapsibleCard (WordPress/gutenberg#77903) - Guidelines REST: Require read access for standard route (WordPress/gutenberg#77843) - Embed: Add '[embed]' shortcode transform (WordPress/gutenberg#77937) - Edit Post: Fix suppressed errors in Layout component (WordPress/gutenberg#77940) - Experiment: User post types REST controller (WordPress/gutenberg#77915) - Content Types: Add Duplicate action to post type management (WordPress/gutenberg#77844) - Experiment: Content types fix new instance returned in `useSelect` (WordPress/gutenberg#77916) - Select: Hide user agent focus ring in popup (WordPress/gutenberg#77919) - Interactivity API: Fix popover bind hydration (WordPress/gutenberg#77797) - UI: Use string label type for form controls (WordPress/gutenberg#77860) - Widget Types: bootstrap registry into the dashboard client (WordPress/gutenberg#77917) - ui/Drawer: Forward `render` prop on `Drawer.Content` to the scroll container (WordPress/gutenberg#77941) - ColorPicker : Fix inconsistent HEX input clearing behavior (WordPress/gutenberg#77912) - ExternalLink: Fix focus outline under wp-admin (WordPress/gutenberg#77935) - Experiment: Auto fill `slug` from singular label for taxonomies and post types (WordPress/gutenberg#77938) - Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957) - Classic Block: Unwrap experiment to hide it from inserter (WordPress/gutenberg#77911) - Migrate native tests to workspace (WordPress/gutenberg#77425) - Remove root uuid dependency (WordPress/gutenberg#77960) - Build: Update lint-staged to 16.4.0 (WordPress/gutenberg#77963) - docgen: Automatic documentation handle for TypeScript overloads (WordPress/gutenberg#77558) - Dashboard: Add experimental `WidgetDashboard` rendering engine (WordPress/gutenberg#77770) - Fix flaky Menu test (WordPress/gutenberg#77972) - Widget Types: server-side registry, decouple wp-build pages (WordPress/gutenberg#77958) - RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980) - Media editor: replace fine-rotation slider with RotationRuler (WordPress/gutenberg#77906) - RTC: Fix compaction unit test (WordPress/gutenberg#77986) - RTC: Attach sync observers after hydrating persisted CRDT doc (WordPress/gutenberg#77966) - Fix: Buttons block shows inserter picker when multiple allowed blocks are registered (WordPress/gutenberg#77858) - Update nvm installation script to version 0.40.4 (WordPress/gutenberg#77996) - Use theme gray for muted Text (WordPress/gutenberg#77999) - Add lint rule for non-module stylesheet imports (WordPress/gutenberg#77984) - Dashboard experiment: new icon (WordPress/gutenberg#78016) - Testing: Add `createRecord` e2e request util (WordPress/gutenberg#78017) - Widget Types: REST endpoint and core-data entity (WordPress/gutenberg#77987) - Block Editor: Remove unused reducer action types (WordPress/gutenberg#77880) - Experiment: Sync user taxonomies with post types (WordPress/gutenberg#77997) - Dashboard experiment: remove storybook examples for now (WordPress/gutenberg#78020) - Dashboard: add `WidgetDashboard.Actions` compound (WordPress/gutenberg#78019) - Experiment: add first basic user post types e2e tests and update taxonomy tests (WordPress/gutenberg#77998) - Fill in E2E tests for client-side media processing (WordPress/gutenberg#75949) - Modal: Render as a bottom sheet on mobile (WordPress/gutenberg#77956) - Grid: add warning about being under development (WordPress/gutenberg#78022) - RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675) - Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043) - Image editor: update sidebar aspect ratio and resize controls (WordPress/gutenberg#78046) - Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273) - Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897) - Site Editor e2e tests: reimplement the wait for load (WordPress/gutenberg#77981) - Make Block Inserter search input sticky while scrolling (WordPress/gutenberg#77698) - Embed: Tighten raw URL transform isMatch (WordPress/gutenberg#78021) - Notes: Separate intent from mechanics in openTheSidebar (WordPress/gutenberg#78039) - Image editor: improve media editor crop accessibility and dialog focus (WordPress/gutenberg#78047) - Fix flaky e2e test for Pages dataview keyboard navigation (WordPress/gutenberg#78054) - RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053) - Dashboard: persist layout via @wordpress/preferences (WordPress/gutenberg#78034) - Dashboard: backend default layout filter (WordPress/gutenberg#78040) - i18n: add context to scale (WordPress/gutenberg#76917) - Dashboard: lift Suspense + error boundary into widget chrome and add a default header (WordPress/gutenberg#78012) - Dashboard: add widget inserter modal (WordPress/gutenberg#78033) - Fix flaky homepage-settings e2e test (WordPress/gutenberg#78063) - Experiment: Content types single route and package (WordPress/gutenberg#78059) - Configure global fallbackFn for timezone-mock to handle Date subclasses (WordPress/gutenberg#78056) - Content types: flush rewrite rules on rewrite-impacting changes (WordPress/gutenberg#78058) - Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) - Add RTC cursor-scope regression tests (WordPress/gutenberg#77662) - Dashboard: REST endpoint for the default layout (WordPress/gutenberg#78066) - Paste: preserve leading number when pasting single-line text like dates (WordPress/gutenberg#77949) - Revision: Fix failing e2e test (WordPress/gutenberg#78079) - Global Styles: Refactor client side style states to use nodes (WordPress/gutenberg#78000) - Media Editor Modal: Add focus border styles to the stencil rect when the canvas is keyboard focused (WordPress/gutenberg#78078) - Post Content focus mode: Fix flaky e2e test (WordPress/gutenberg#78084) - Update date-fns to v4.1.0 in components and editor packages (WordPress/gutenberg#78057) - Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904) - Admin UI: Fix nested landmark in Page header (WordPress/gutenberg#78001) - Fix: Shortcode block does not render in Navigation Overlay (WordPress/gutenberg#77511) - Fix flaky 'publish panel' e2e test (WordPress/gutenberg#78082) - Experiment: Content types reuse some commone utils (WordPress/gutenberg#78091) - Style Runtime: Support CSS module style injection across documents (WordPress/gutenberg#77965) - Experiment: Add Classic block migration notice (WordPress/gutenberg#78090) - Content Types: Abstract and reuse label autofilling for post types (WordPress/gutenberg#78099) - i18n: add context to table header/footer label (WordPress/gutenberg#78007) - Experiment: Content types reuse `createStatusAction` (WordPress/gutenberg#78102) - Select: Support placeholder prop on Trigger (WordPress/gutenberg#78076) - feat: Enhance Connectors page on read-only file system (WordPress/gutenberg#77521) - Add missing Portal Storybook subcomponents (WordPress/gutenberg#78108) - RTC: Fix title divergence between users on page refresh after title update (WordPress/gutenberg#77666) - Docs: shortcode transforms with wrapped content + rawHandler JSDoc (WordPress/gutenberg#78003) - Connectors: Refine PHPStan type shapes (WordPress/gutenberg#78103) - Fix lockfile drift and missing dep from content-types consolidation (WordPress/gutenberg#78109) - Classic Block: Use onReplace prop for migration actions (WordPress/gutenberg#78113) - Media Editor Experiment: Add a route, based on the media editor modal, refactor the modal components (WordPress/gutenberg#77994) - i18n: add context to (site) identity (WordPress/gutenberg#78132) - Script Modules: Guard setAccessible() calls behind PHP < 8.1 check (WordPress/gutenberg#78137) - Connectors: Avoid using centered text (WordPress/gutenberg#78125) - Content Types: Introduce view items actions (WordPress/gutenberg#78104) - Fix: Guard require_once calls in generated PHP files against deployment race conditions (WordPress/gutenberg#78110) - bin/dev.mjs: warn (not exit) on stale webpack watching this checkout (WordPress/gutenberg#78098) - E2E: Reset preferences after navigable-toolbar tests (WordPress/gutenberg#78115) - Editor: Refactor 'PostPublishPanel' into function component (WordPress/gutenberg#78083) - Document how to ignore VSCode Workplace Settings. (WordPress/gutenberg#77608) - Select: Fix disabled cursor styles (WordPress/gutenberg#78112) - Revisions: Add tooltip to diff marker buttons (WordPress/gutenberg#77690) - Experiment: Make content types `_builtin` (WordPress/gutenberg#78150) - Experiment: Content types - use `form` for quick edit dialogs (WordPress/gutenberg#78149) - Experiment: Content types use `toggle` for `active` prop edit (WordPress/gutenberg#78146) - Experiment: Update view content types actions (WordPress/gutenberg#78159) - Block Editor: Add translation context for “Exit pattern” (WordPress/gutenberg#78158) - ColorPalette: Fix duplicate-key warnings and incorrect selection with identical color values (WordPress/gutenberg#78004) - Menu: Fix flaky keyboard focus test (WordPress/gutenberg#78162) - e2e tests: use editPost and createNewPost helpers everywhere (WordPress/gutenberg#78170) - Support object values in Select primitive (WordPress/gutenberg#77861) - Text: Fix render prop CSS defenses (WordPress/gutenberg#78172) - Design System: Add missing packages to Storybook introduction (WordPress/gutenberg#77504) - Add SelectControl component to @wordpress/ui (WordPress/gutenberg#77809) - Dashboard experiment: animate customize UX (WordPress/gutenberg#78065) - Add RTC y-websocket-server tests (WordPress/gutenberg#78179) - Grid: add DashboardLanes masonry surface (WordPress/gutenberg#78107) - Dashboard: staging layer for in-progress layout edits (WordPress/gutenberg#78071) - Media: Guard gutenberg_delete_heic_companion_file() against non-string $metadata['original'] (WordPress/gutenberg#78128) - Image block: Try syncing updated metadata fields (alt and caption) from the media editor (WordPress/gutenberg#78139) - Correct capitalization in help text for Breadcrumbs block (WordPress/gutenberg#78175) - Add min release age to npm config (WordPress/gutenberg#78191) - isFulfilled: don't change resolution state, call in resolveSelect (WordPress/gutenberg#78151) - Add aria-label to Revisions button in Post Summary sidebar (WordPress/gutenberg#78140) - Experiment: Content types invaidate cache for synced taxonomies-post types (WordPress/gutenberg#78143) - Shortcode: Offer block-specific transforms when text matches a registered shortcode (WordPress/gutenberg#77944) - E2E: Remove slash from bad embed request mock (WordPress/gutenberg#78200) - UI: Add component status notes to Storybook (WordPress/gutenberg#77988) - ui/Tooltip, ui/IconButton: Add positioner slot API (WordPress/gutenberg#78089) - Add motion design tokens (duration and easing) to @wordpress/theme (WordPress/gutenberg#76097) - Grid: add edit-mode overlay to DashboardGrid and DashboardLanes (WordPress/gutenberg#78199) - Grid: fix keyboard activation on draggable items (WordPress/gutenberg#78163) - ui/CollapsibleCard: support rendering Header as a heading element (WordPress/gutenberg#77962) - Revisions diff markers: enforce 24×24px minimum target size (WCAG 2.5.8) (WordPress/gutenberg#77671) - Popover: Remove close button z-index (WordPress/gutenberg#78180) - Button: Align compound component metadata (WordPress/gutenberg#78184) - Dashboard: use design animation tokens (WordPress/gutenberg#78204) - Tools: Remove save-exact from .npmrc (WordPress/gutenberg#78196) - UI: Improve docs for compound exports (WordPress/gutenberg#78212) - Bump addressable in /packages/react-native-editor/ios (WordPress/gutenberg#77128) - Bump follow-redirects from 1.15.6 to 1.16.0 (WordPress/gutenberg#77278) - Bump vite from 7.3.0 to 7.3.2 (WordPress/gutenberg#77076) - Bump flatted from 3.3.1 to 3.4.2 (WordPress/gutenberg#76708) - Bump @xmldom/xmldom from 0.8.10 to 0.8.13 (WordPress/gutenberg#77577) - Media Editor Modal: Fix empty author and attached to fields (WordPress/gutenberg#78189) - Bump fast-xml-parser from 4.5.0 to 4.5.4 (WordPress/gutenberg#76081) - Bump node-forge from 1.3.1 to 1.3.2 (WordPress/gutenberg#73601) - Experiment: Integrate `useView` in content types lists (WordPress/gutenberg#78197) - Experiment: Add term/post type count fields in content types (WordPress/gutenberg#78157) - Connectors: Increase right padding of callout for mobile layout (WordPress/gutenberg#78126) - UI: Fix subcomponent story labels (WordPress/gutenberg#78210) - Fonts: Move admin menu compat from experimental to wordpress-7.0 (WordPress/gutenberg#78227) - Experiment: Render badges for some content types' fields (WordPress/gutenberg#78194) - Testing: Consolidate CI workflows for changelog testing (WordPress/gutenberg#78169) - Edit Post: Inline meta boxes z-index values (WordPress/gutenberg#78181) - Backport package publish commits to release/23.2 (WordPress/gutenberg#78347) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65559. git-svn-id: https://develop.svn.wordpress.org/trunk@62582 602fd350-edb4-49c9-b593-d223f7449a82
This updates the pinned commit hash of the Gutenberg repository from `585cf86bb6f408b1dc61175f75db016aa4760653 ` (version `23.1.0`) to `d5ac60e6118060529737127d44a6fdc8abf57eb9` (version `23.2.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.1.0..v23.2.0. The following commits are included: - Fix PHP multisite tests (WordPress/gutenberg#77825) - Revise README for FocalPointPicker component to use object-position (WordPress/gutenberg#77722) - Experiment: Add first e2e tests for Taxonomies (WordPress/gutenberg#77828) - Content Types: Add post type management (WordPress/gutenberg#77754) - Grid: lock document cursor during resize gesture (WordPress/gutenberg#77813) - Build: Add experimental `widgets/` folder support to @wordpress/build (WordPress/gutenberg#77347) - TabPanel: Fix tab indicator animation (WordPress/gutenberg#77812) - Disable TinyMCE: Repurpose experiment as Classic block removal (WordPress/gutenberg#77838) - Cover block: Inline z-index values (WordPress/gutenberg#77753) - Button: Align link variant underline with Link and ExternalLink (WordPress/gutenberg#77842) - ui/Drawer: Polish open/close animation, fix swipe on content padding (WordPress/gutenberg#77800) - Site Editor: Remove local z-index helper entries (WordPress/gutenberg#77808) - Inline sticky search z-index values (WordPress/gutenberg#77806) - Block Manager: Inline z-index values (WordPress/gutenberg#77759) - Update TypeScript to tsgo (try 2) (WordPress/gutenberg#77682) - Editor: Inline pattern chooser z-index values (WordPress/gutenberg#77772) - Media editor modal: disable scroll wheel zoom while a crop is active (WordPress/gutenberg#77826) - Media editor modal: disable scroll wheel zoom while a pan/drag is active (WordPress/gutenberg#77863) - Media Editor Modal: Try adding undo/redo for the image cropper (WordPress/gutenberg#77782) - Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857) - Media Upload Modal: Fix pagination and search (WordPress/gutenberg#77872) - `defaultRenderingMode` value not respected when changed using `block_editor_settings_all` (WordPress/gutenberg#77870) - Media editor modal: expand keyboard shortcuts and add interaction helpers (WordPress/gutenberg#77871) - Media editor modal: name landmark regions and add panel headings (WordPress/gutenberg#77875) - Media Editor Modal: Use shift modifier to adjust keyboard pan speed (WordPress/gutenberg#77878) - Disable Classic block: Always register, hide from inserter conditionally (WordPress/gutenberg#77840) - ESLint: Replace `eslint-plugin-react-compiler` with `eslint-plugin-react-hooks` (WordPress/gutenberg#69962) - Disable Classic block: Control inserter support via filter (WordPress/gutenberg#77845) - Grid: add `renderResizeHandle` render prop (WordPress/gutenberg#77811) - Grid: render resize handle as component (WordPress/gutenberg#77888) - Update uuid dependency (WordPress/gutenberg#77848) - Added Translator Context for Reply (WordPress/gutenberg#77891) - Media editor modal: add Shift+R for counter-clockwise rotation (WordPress/gutenberg#77898) - Update references to default branch. (WordPress/gutenberg#77606) - Notes: Keep tall floating threads scrollable on short content (WordPress/gutenberg#77821) - Taxonomy edit route: declare @wordpress/base-styles as dependency (WordPress/gutenberg#77901) - Post Types DataViews: Make titles clickable to open edit page (WordPress/gutenberg#77885) - Upgrade and unify @types/node version (WordPress/gutenberg#77900) - Widget Types: replace bootstrap with resolver (WordPress/gutenberg#77847) - SlotFill: add dependencies to updateFill effect (WordPress/gutenberg#77907) - Grid: prevent resize runaway near viewport edge (WordPress/gutenberg#77854) - Experiment: Add taxonomy visibility fields (WordPress/gutenberg#77835) - Content Types: Add Duplicate action to taxonomy management (WordPress/gutenberg#77853) - Site Editor: Inline layout z-index values (WordPress/gutenberg#77807) - RTC: Clarify WPBlockSelection type and link to duplicates in other packages. (WordPress/gutenberg#77862) - Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126) - Media Editor Modal: In the image cropper, pan when dragging the crop instead of constraining to the visible area (WordPress/gutenberg#77899) - Block Editor: Clarify logic for 'directInsert' inner blocks setting (WordPress/gutenberg#77873) - Block Editor: Fix target block for copying direct insert block attributes (WordPress/gutenberg#77877) - Link: Fix awkward focus outline around the new-tab icon (WordPress/gutenberg#77910) - Plugin loader: use require for build/constants.php (WordPress/gutenberg#77908) - Tests: Fix argument forwarding for test:unit workspace scripts (WordPress/gutenberg#77541) - Try responsive global block styles with states (WordPress/gutenberg#77513) - Image editor: suppress image editor undo/redo while a crop interaction is active (WordPress/gutenberg#77930) - Experimental: Content types - disable create/save button based on form validity (WordPress/gutenberg#77931) - Guidelines: Refactor accordion to use CollapsibleCard (WordPress/gutenberg#77903) - Guidelines REST: Require read access for standard route (WordPress/gutenberg#77843) - Embed: Add '[embed]' shortcode transform (WordPress/gutenberg#77937) - Edit Post: Fix suppressed errors in Layout component (WordPress/gutenberg#77940) - Experiment: User post types REST controller (WordPress/gutenberg#77915) - Content Types: Add Duplicate action to post type management (WordPress/gutenberg#77844) - Experiment: Content types fix new instance returned in `useSelect` (WordPress/gutenberg#77916) - Select: Hide user agent focus ring in popup (WordPress/gutenberg#77919) - Interactivity API: Fix popover bind hydration (WordPress/gutenberg#77797) - UI: Use string label type for form controls (WordPress/gutenberg#77860) - Widget Types: bootstrap registry into the dashboard client (WordPress/gutenberg#77917) - ui/Drawer: Forward `render` prop on `Drawer.Content` to the scroll container (WordPress/gutenberg#77941) - ColorPicker : Fix inconsistent HEX input clearing behavior (WordPress/gutenberg#77912) - ExternalLink: Fix focus outline under wp-admin (WordPress/gutenberg#77935) - Experiment: Auto fill `slug` from singular label for taxonomies and post types (WordPress/gutenberg#77938) - Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957) - Classic Block: Unwrap experiment to hide it from inserter (WordPress/gutenberg#77911) - Migrate native tests to workspace (WordPress/gutenberg#77425) - Remove root uuid dependency (WordPress/gutenberg#77960) - Build: Update lint-staged to 16.4.0 (WordPress/gutenberg#77963) - docgen: Automatic documentation handle for TypeScript overloads (WordPress/gutenberg#77558) - Dashboard: Add experimental `WidgetDashboard` rendering engine (WordPress/gutenberg#77770) - Fix flaky Menu test (WordPress/gutenberg#77972) - Widget Types: server-side registry, decouple wp-build pages (WordPress/gutenberg#77958) - RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980) - Media editor: replace fine-rotation slider with RotationRuler (WordPress/gutenberg#77906) - RTC: Fix compaction unit test (WordPress/gutenberg#77986) - RTC: Attach sync observers after hydrating persisted CRDT doc (WordPress/gutenberg#77966) - Fix: Buttons block shows inserter picker when multiple allowed blocks are registered (WordPress/gutenberg#77858) - Update nvm installation script to version 0.40.4 (WordPress/gutenberg#77996) - Use theme gray for muted Text (WordPress/gutenberg#77999) - Add lint rule for non-module stylesheet imports (WordPress/gutenberg#77984) - Dashboard experiment: new icon (WordPress/gutenberg#78016) - Testing: Add `createRecord` e2e request util (WordPress/gutenberg#78017) - Widget Types: REST endpoint and core-data entity (WordPress/gutenberg#77987) - Block Editor: Remove unused reducer action types (WordPress/gutenberg#77880) - Experiment: Sync user taxonomies with post types (WordPress/gutenberg#77997) - Dashboard experiment: remove storybook examples for now (WordPress/gutenberg#78020) - Dashboard: add `WidgetDashboard.Actions` compound (WordPress/gutenberg#78019) - Experiment: add first basic user post types e2e tests and update taxonomy tests (WordPress/gutenberg#77998) - Fill in E2E tests for client-side media processing (WordPress/gutenberg#75949) - Modal: Render as a bottom sheet on mobile (WordPress/gutenberg#77956) - Grid: add warning about being under development (WordPress/gutenberg#78022) - RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675) - Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043) - Image editor: update sidebar aspect ratio and resize controls (WordPress/gutenberg#78046) - Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273) - Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897) - Site Editor e2e tests: reimplement the wait for load (WordPress/gutenberg#77981) - Make Block Inserter search input sticky while scrolling (WordPress/gutenberg#77698) - Embed: Tighten raw URL transform isMatch (WordPress/gutenberg#78021) - Notes: Separate intent from mechanics in openTheSidebar (WordPress/gutenberg#78039) - Image editor: improve media editor crop accessibility and dialog focus (WordPress/gutenberg#78047) - Fix flaky e2e test for Pages dataview keyboard navigation (WordPress/gutenberg#78054) - RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053) - Dashboard: persist layout via @wordpress/preferences (WordPress/gutenberg#78034) - Dashboard: backend default layout filter (WordPress/gutenberg#78040) - i18n: add context to scale (WordPress/gutenberg#76917) - Dashboard: lift Suspense + error boundary into widget chrome and add a default header (WordPress/gutenberg#78012) - Dashboard: add widget inserter modal (WordPress/gutenberg#78033) - Fix flaky homepage-settings e2e test (WordPress/gutenberg#78063) - Experiment: Content types single route and package (WordPress/gutenberg#78059) - Configure global fallbackFn for timezone-mock to handle Date subclasses (WordPress/gutenberg#78056) - Content types: flush rewrite rules on rewrite-impacting changes (WordPress/gutenberg#78058) - Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) - Add RTC cursor-scope regression tests (WordPress/gutenberg#77662) - Dashboard: REST endpoint for the default layout (WordPress/gutenberg#78066) - Paste: preserve leading number when pasting single-line text like dates (WordPress/gutenberg#77949) - Revision: Fix failing e2e test (WordPress/gutenberg#78079) - Global Styles: Refactor client side style states to use nodes (WordPress/gutenberg#78000) - Media Editor Modal: Add focus border styles to the stencil rect when the canvas is keyboard focused (WordPress/gutenberg#78078) - Post Content focus mode: Fix flaky e2e test (WordPress/gutenberg#78084) - Update date-fns to v4.1.0 in components and editor packages (WordPress/gutenberg#78057) - Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904) - Admin UI: Fix nested landmark in Page header (WordPress/gutenberg#78001) - Fix: Shortcode block does not render in Navigation Overlay (WordPress/gutenberg#77511) - Fix flaky 'publish panel' e2e test (WordPress/gutenberg#78082) - Experiment: Content types reuse some commone utils (WordPress/gutenberg#78091) - Style Runtime: Support CSS module style injection across documents (WordPress/gutenberg#77965) - Experiment: Add Classic block migration notice (WordPress/gutenberg#78090) - Content Types: Abstract and reuse label autofilling for post types (WordPress/gutenberg#78099) - i18n: add context to table header/footer label (WordPress/gutenberg#78007) - Experiment: Content types reuse `createStatusAction` (WordPress/gutenberg#78102) - Select: Support placeholder prop on Trigger (WordPress/gutenberg#78076) - feat: Enhance Connectors page on read-only file system (WordPress/gutenberg#77521) - Add missing Portal Storybook subcomponents (WordPress/gutenberg#78108) - RTC: Fix title divergence between users on page refresh after title update (WordPress/gutenberg#77666) - Docs: shortcode transforms with wrapped content + rawHandler JSDoc (WordPress/gutenberg#78003) - Connectors: Refine PHPStan type shapes (WordPress/gutenberg#78103) - Fix lockfile drift and missing dep from content-types consolidation (WordPress/gutenberg#78109) - Classic Block: Use onReplace prop for migration actions (WordPress/gutenberg#78113) - Media Editor Experiment: Add a route, based on the media editor modal, refactor the modal components (WordPress/gutenberg#77994) - i18n: add context to (site) identity (WordPress/gutenberg#78132) - Script Modules: Guard setAccessible() calls behind PHP < 8.1 check (WordPress/gutenberg#78137) - Connectors: Avoid using centered text (WordPress/gutenberg#78125) - Content Types: Introduce view items actions (WordPress/gutenberg#78104) - Fix: Guard require_once calls in generated PHP files against deployment race conditions (WordPress/gutenberg#78110) - bin/dev.mjs: warn (not exit) on stale webpack watching this checkout (WordPress/gutenberg#78098) - E2E: Reset preferences after navigable-toolbar tests (WordPress/gutenberg#78115) - Editor: Refactor 'PostPublishPanel' into function component (WordPress/gutenberg#78083) - Document how to ignore VSCode Workplace Settings. (WordPress/gutenberg#77608) - Select: Fix disabled cursor styles (WordPress/gutenberg#78112) - Revisions: Add tooltip to diff marker buttons (WordPress/gutenberg#77690) - Experiment: Make content types `_builtin` (WordPress/gutenberg#78150) - Experiment: Content types - use `form` for quick edit dialogs (WordPress/gutenberg#78149) - Experiment: Content types use `toggle` for `active` prop edit (WordPress/gutenberg#78146) - Experiment: Update view content types actions (WordPress/gutenberg#78159) - Block Editor: Add translation context for “Exit pattern” (WordPress/gutenberg#78158) - ColorPalette: Fix duplicate-key warnings and incorrect selection with identical color values (WordPress/gutenberg#78004) - Menu: Fix flaky keyboard focus test (WordPress/gutenberg#78162) - e2e tests: use editPost and createNewPost helpers everywhere (WordPress/gutenberg#78170) - Support object values in Select primitive (WordPress/gutenberg#77861) - Text: Fix render prop CSS defenses (WordPress/gutenberg#78172) - Design System: Add missing packages to Storybook introduction (WordPress/gutenberg#77504) - Add SelectControl component to @wordpress/ui (WordPress/gutenberg#77809) - Dashboard experiment: animate customize UX (WordPress/gutenberg#78065) - Add RTC y-websocket-server tests (WordPress/gutenberg#78179) - Grid: add DashboardLanes masonry surface (WordPress/gutenberg#78107) - Dashboard: staging layer for in-progress layout edits (WordPress/gutenberg#78071) - Media: Guard gutenberg_delete_heic_companion_file() against non-string $metadata['original'] (WordPress/gutenberg#78128) - Image block: Try syncing updated metadata fields (alt and caption) from the media editor (WordPress/gutenberg#78139) - Correct capitalization in help text for Breadcrumbs block (WordPress/gutenberg#78175) - Add min release age to npm config (WordPress/gutenberg#78191) - isFulfilled: don't change resolution state, call in resolveSelect (WordPress/gutenberg#78151) - Add aria-label to Revisions button in Post Summary sidebar (WordPress/gutenberg#78140) - Experiment: Content types invaidate cache for synced taxonomies-post types (WordPress/gutenberg#78143) - Shortcode: Offer block-specific transforms when text matches a registered shortcode (WordPress/gutenberg#77944) - E2E: Remove slash from bad embed request mock (WordPress/gutenberg#78200) - UI: Add component status notes to Storybook (WordPress/gutenberg#77988) - ui/Tooltip, ui/IconButton: Add positioner slot API (WordPress/gutenberg#78089) - Add motion design tokens (duration and easing) to @wordpress/theme (WordPress/gutenberg#76097) - Grid: add edit-mode overlay to DashboardGrid and DashboardLanes (WordPress/gutenberg#78199) - Grid: fix keyboard activation on draggable items (WordPress/gutenberg#78163) - ui/CollapsibleCard: support rendering Header as a heading element (WordPress/gutenberg#77962) - Revisions diff markers: enforce 24×24px minimum target size (WCAG 2.5.8) (WordPress/gutenberg#77671) - Popover: Remove close button z-index (WordPress/gutenberg#78180) - Button: Align compound component metadata (WordPress/gutenberg#78184) - Dashboard: use design animation tokens (WordPress/gutenberg#78204) - Tools: Remove save-exact from .npmrc (WordPress/gutenberg#78196) - UI: Improve docs for compound exports (WordPress/gutenberg#78212) - Bump addressable in /packages/react-native-editor/ios (WordPress/gutenberg#77128) - Bump follow-redirects from 1.15.6 to 1.16.0 (WordPress/gutenberg#77278) - Bump vite from 7.3.0 to 7.3.2 (WordPress/gutenberg#77076) - Bump flatted from 3.3.1 to 3.4.2 (WordPress/gutenberg#76708) - Bump @xmldom/xmldom from 0.8.10 to 0.8.13 (WordPress/gutenberg#77577) - Media Editor Modal: Fix empty author and attached to fields (WordPress/gutenberg#78189) - Bump fast-xml-parser from 4.5.0 to 4.5.4 (WordPress/gutenberg#76081) - Bump node-forge from 1.3.1 to 1.3.2 (WordPress/gutenberg#73601) - Experiment: Integrate `useView` in content types lists (WordPress/gutenberg#78197) - Experiment: Add term/post type count fields in content types (WordPress/gutenberg#78157) - Connectors: Increase right padding of callout for mobile layout (WordPress/gutenberg#78126) - UI: Fix subcomponent story labels (WordPress/gutenberg#78210) - Fonts: Move admin menu compat from experimental to wordpress-7.0 (WordPress/gutenberg#78227) - Experiment: Render badges for some content types' fields (WordPress/gutenberg#78194) - Testing: Consolidate CI workflows for changelog testing (WordPress/gutenberg#78169) - Edit Post: Inline meta boxes z-index values (WordPress/gutenberg#78181) - Backport package publish commits to release/23.2 (WordPress/gutenberg#78347) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65559. Built from https://develop.svn.wordpress.org/trunk@62582 git-svn-id: http://core.svn.wordpress.org/trunk@61862 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This updates the pinned commit hash of the Gutenberg repository from `585cf86bb6f408b1dc61175f75db016aa4760653 ` (version `23.1.0`) to `d5ac60e6118060529737127d44a6fdc8abf57eb9` (version `23.2.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.1.0..v23.2.0. The following commits are included: - Fix PHP multisite tests (WordPress/gutenberg#77825) - Revise README for FocalPointPicker component to use object-position (WordPress/gutenberg#77722) - Experiment: Add first e2e tests for Taxonomies (WordPress/gutenberg#77828) - Content Types: Add post type management (WordPress/gutenberg#77754) - Grid: lock document cursor during resize gesture (WordPress/gutenberg#77813) - Build: Add experimental `widgets/` folder support to @wordpress/build (WordPress/gutenberg#77347) - TabPanel: Fix tab indicator animation (WordPress/gutenberg#77812) - Disable TinyMCE: Repurpose experiment as Classic block removal (WordPress/gutenberg#77838) - Cover block: Inline z-index values (WordPress/gutenberg#77753) - Button: Align link variant underline with Link and ExternalLink (WordPress/gutenberg#77842) - ui/Drawer: Polish open/close animation, fix swipe on content padding (WordPress/gutenberg#77800) - Site Editor: Remove local z-index helper entries (WordPress/gutenberg#77808) - Inline sticky search z-index values (WordPress/gutenberg#77806) - Block Manager: Inline z-index values (WordPress/gutenberg#77759) - Update TypeScript to tsgo (try 2) (WordPress/gutenberg#77682) - Editor: Inline pattern chooser z-index values (WordPress/gutenberg#77772) - Media editor modal: disable scroll wheel zoom while a crop is active (WordPress/gutenberg#77826) - Media editor modal: disable scroll wheel zoom while a pan/drag is active (WordPress/gutenberg#77863) - Media Editor Modal: Try adding undo/redo for the image cropper (WordPress/gutenberg#77782) - Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857) - Media Upload Modal: Fix pagination and search (WordPress/gutenberg#77872) - `defaultRenderingMode` value not respected when changed using `block_editor_settings_all` (WordPress/gutenberg#77870) - Media editor modal: expand keyboard shortcuts and add interaction helpers (WordPress/gutenberg#77871) - Media editor modal: name landmark regions and add panel headings (WordPress/gutenberg#77875) - Media Editor Modal: Use shift modifier to adjust keyboard pan speed (WordPress/gutenberg#77878) - Disable Classic block: Always register, hide from inserter conditionally (WordPress/gutenberg#77840) - ESLint: Replace `eslint-plugin-react-compiler` with `eslint-plugin-react-hooks` (WordPress/gutenberg#69962) - Disable Classic block: Control inserter support via filter (WordPress/gutenberg#77845) - Grid: add `renderResizeHandle` render prop (WordPress/gutenberg#77811) - Grid: render resize handle as component (WordPress/gutenberg#77888) - Update uuid dependency (WordPress/gutenberg#77848) - Added Translator Context for Reply (WordPress/gutenberg#77891) - Media editor modal: add Shift+R for counter-clockwise rotation (WordPress/gutenberg#77898) - Update references to default branch. (WordPress/gutenberg#77606) - Notes: Keep tall floating threads scrollable on short content (WordPress/gutenberg#77821) - Taxonomy edit route: declare @wordpress/base-styles as dependency (WordPress/gutenberg#77901) - Post Types DataViews: Make titles clickable to open edit page (WordPress/gutenberg#77885) - Upgrade and unify @types/node version (WordPress/gutenberg#77900) - Widget Types: replace bootstrap with resolver (WordPress/gutenberg#77847) - SlotFill: add dependencies to updateFill effect (WordPress/gutenberg#77907) - Grid: prevent resize runaway near viewport edge (WordPress/gutenberg#77854) - Experiment: Add taxonomy visibility fields (WordPress/gutenberg#77835) - Content Types: Add Duplicate action to taxonomy management (WordPress/gutenberg#77853) - Site Editor: Inline layout z-index values (WordPress/gutenberg#77807) - RTC: Clarify WPBlockSelection type and link to duplicates in other packages. (WordPress/gutenberg#77862) - Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126) - Media Editor Modal: In the image cropper, pan when dragging the crop instead of constraining to the visible area (WordPress/gutenberg#77899) - Block Editor: Clarify logic for 'directInsert' inner blocks setting (WordPress/gutenberg#77873) - Block Editor: Fix target block for copying direct insert block attributes (WordPress/gutenberg#77877) - Link: Fix awkward focus outline around the new-tab icon (WordPress/gutenberg#77910) - Plugin loader: use require for build/constants.php (WordPress/gutenberg#77908) - Tests: Fix argument forwarding for test:unit workspace scripts (WordPress/gutenberg#77541) - Try responsive global block styles with states (WordPress/gutenberg#77513) - Image editor: suppress image editor undo/redo while a crop interaction is active (WordPress/gutenberg#77930) - Experimental: Content types - disable create/save button based on form validity (WordPress/gutenberg#77931) - Guidelines: Refactor accordion to use CollapsibleCard (WordPress/gutenberg#77903) - Guidelines REST: Require read access for standard route (WordPress/gutenberg#77843) - Embed: Add '[embed]' shortcode transform (WordPress/gutenberg#77937) - Edit Post: Fix suppressed errors in Layout component (WordPress/gutenberg#77940) - Experiment: User post types REST controller (WordPress/gutenberg#77915) - Content Types: Add Duplicate action to post type management (WordPress/gutenberg#77844) - Experiment: Content types fix new instance returned in `useSelect` (WordPress/gutenberg#77916) - Select: Hide user agent focus ring in popup (WordPress/gutenberg#77919) - Interactivity API: Fix popover bind hydration (WordPress/gutenberg#77797) - UI: Use string label type for form controls (WordPress/gutenberg#77860) - Widget Types: bootstrap registry into the dashboard client (WordPress/gutenberg#77917) - ui/Drawer: Forward `render` prop on `Drawer.Content` to the scroll container (WordPress/gutenberg#77941) - ColorPicker : Fix inconsistent HEX input clearing behavior (WordPress/gutenberg#77912) - ExternalLink: Fix focus outline under wp-admin (WordPress/gutenberg#77935) - Experiment: Auto fill `slug` from singular label for taxonomies and post types (WordPress/gutenberg#77938) - Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957) - Classic Block: Unwrap experiment to hide it from inserter (WordPress/gutenberg#77911) - Migrate native tests to workspace (WordPress/gutenberg#77425) - Remove root uuid dependency (WordPress/gutenberg#77960) - Build: Update lint-staged to 16.4.0 (WordPress/gutenberg#77963) - docgen: Automatic documentation handle for TypeScript overloads (WordPress/gutenberg#77558) - Dashboard: Add experimental `WidgetDashboard` rendering engine (WordPress/gutenberg#77770) - Fix flaky Menu test (WordPress/gutenberg#77972) - Widget Types: server-side registry, decouple wp-build pages (WordPress/gutenberg#77958) - RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980) - Media editor: replace fine-rotation slider with RotationRuler (WordPress/gutenberg#77906) - RTC: Fix compaction unit test (WordPress/gutenberg#77986) - RTC: Attach sync observers after hydrating persisted CRDT doc (WordPress/gutenberg#77966) - Fix: Buttons block shows inserter picker when multiple allowed blocks are registered (WordPress/gutenberg#77858) - Update nvm installation script to version 0.40.4 (WordPress/gutenberg#77996) - Use theme gray for muted Text (WordPress/gutenberg#77999) - Add lint rule for non-module stylesheet imports (WordPress/gutenberg#77984) - Dashboard experiment: new icon (WordPress/gutenberg#78016) - Testing: Add `createRecord` e2e request util (WordPress/gutenberg#78017) - Widget Types: REST endpoint and core-data entity (WordPress/gutenberg#77987) - Block Editor: Remove unused reducer action types (WordPress/gutenberg#77880) - Experiment: Sync user taxonomies with post types (WordPress/gutenberg#77997) - Dashboard experiment: remove storybook examples for now (WordPress/gutenberg#78020) - Dashboard: add `WidgetDashboard.Actions` compound (WordPress/gutenberg#78019) - Experiment: add first basic user post types e2e tests and update taxonomy tests (WordPress/gutenberg#77998) - Fill in E2E tests for client-side media processing (WordPress/gutenberg#75949) - Modal: Render as a bottom sheet on mobile (WordPress/gutenberg#77956) - Grid: add warning about being under development (WordPress/gutenberg#78022) - RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675) - Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043) - Image editor: update sidebar aspect ratio and resize controls (WordPress/gutenberg#78046) - Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273) - Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897) - Site Editor e2e tests: reimplement the wait for load (WordPress/gutenberg#77981) - Make Block Inserter search input sticky while scrolling (WordPress/gutenberg#77698) - Embed: Tighten raw URL transform isMatch (WordPress/gutenberg#78021) - Notes: Separate intent from mechanics in openTheSidebar (WordPress/gutenberg#78039) - Image editor: improve media editor crop accessibility and dialog focus (WordPress/gutenberg#78047) - Fix flaky e2e test for Pages dataview keyboard navigation (WordPress/gutenberg#78054) - RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053) - Dashboard: persist layout via @wordpress/preferences (WordPress/gutenberg#78034) - Dashboard: backend default layout filter (WordPress/gutenberg#78040) - i18n: add context to scale (WordPress/gutenberg#76917) - Dashboard: lift Suspense + error boundary into widget chrome and add a default header (WordPress/gutenberg#78012) - Dashboard: add widget inserter modal (WordPress/gutenberg#78033) - Fix flaky homepage-settings e2e test (WordPress/gutenberg#78063) - Experiment: Content types single route and package (WordPress/gutenberg#78059) - Configure global fallbackFn for timezone-mock to handle Date subclasses (WordPress/gutenberg#78056) - Content types: flush rewrite rules on rewrite-impacting changes (WordPress/gutenberg#78058) - Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) - Add RTC cursor-scope regression tests (WordPress/gutenberg#77662) - Dashboard: REST endpoint for the default layout (WordPress/gutenberg#78066) - Paste: preserve leading number when pasting single-line text like dates (WordPress/gutenberg#77949) - Revision: Fix failing e2e test (WordPress/gutenberg#78079) - Global Styles: Refactor client side style states to use nodes (WordPress/gutenberg#78000) - Media Editor Modal: Add focus border styles to the stencil rect when the canvas is keyboard focused (WordPress/gutenberg#78078) - Post Content focus mode: Fix flaky e2e test (WordPress/gutenberg#78084) - Update date-fns to v4.1.0 in components and editor packages (WordPress/gutenberg#78057) - Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904) - Admin UI: Fix nested landmark in Page header (WordPress/gutenberg#78001) - Fix: Shortcode block does not render in Navigation Overlay (WordPress/gutenberg#77511) - Fix flaky 'publish panel' e2e test (WordPress/gutenberg#78082) - Experiment: Content types reuse some commone utils (WordPress/gutenberg#78091) - Style Runtime: Support CSS module style injection across documents (WordPress/gutenberg#77965) - Experiment: Add Classic block migration notice (WordPress/gutenberg#78090) - Content Types: Abstract and reuse label autofilling for post types (WordPress/gutenberg#78099) - i18n: add context to table header/footer label (WordPress/gutenberg#78007) - Experiment: Content types reuse `createStatusAction` (WordPress/gutenberg#78102) - Select: Support placeholder prop on Trigger (WordPress/gutenberg#78076) - feat: Enhance Connectors page on read-only file system (WordPress/gutenberg#77521) - Add missing Portal Storybook subcomponents (WordPress/gutenberg#78108) - RTC: Fix title divergence between users on page refresh after title update (WordPress/gutenberg#77666) - Docs: shortcode transforms with wrapped content + rawHandler JSDoc (WordPress/gutenberg#78003) - Connectors: Refine PHPStan type shapes (WordPress/gutenberg#78103) - Fix lockfile drift and missing dep from content-types consolidation (WordPress/gutenberg#78109) - Classic Block: Use onReplace prop for migration actions (WordPress/gutenberg#78113) - Media Editor Experiment: Add a route, based on the media editor modal, refactor the modal components (WordPress/gutenberg#77994) - i18n: add context to (site) identity (WordPress/gutenberg#78132) - Script Modules: Guard setAccessible() calls behind PHP < 8.1 check (WordPress/gutenberg#78137) - Connectors: Avoid using centered text (WordPress/gutenberg#78125) - Content Types: Introduce view items actions (WordPress/gutenberg#78104) - Fix: Guard require_once calls in generated PHP files against deployment race conditions (WordPress/gutenberg#78110) - bin/dev.mjs: warn (not exit) on stale webpack watching this checkout (WordPress/gutenberg#78098) - E2E: Reset preferences after navigable-toolbar tests (WordPress/gutenberg#78115) - Editor: Refactor 'PostPublishPanel' into function component (WordPress/gutenberg#78083) - Document how to ignore VSCode Workplace Settings. (WordPress/gutenberg#77608) - Select: Fix disabled cursor styles (WordPress/gutenberg#78112) - Revisions: Add tooltip to diff marker buttons (WordPress/gutenberg#77690) - Experiment: Make content types `_builtin` (WordPress/gutenberg#78150) - Experiment: Content types - use `form` for quick edit dialogs (WordPress/gutenberg#78149) - Experiment: Content types use `toggle` for `active` prop edit (WordPress/gutenberg#78146) - Experiment: Update view content types actions (WordPress/gutenberg#78159) - Block Editor: Add translation context for “Exit pattern” (WordPress/gutenberg#78158) - ColorPalette: Fix duplicate-key warnings and incorrect selection with identical color values (WordPress/gutenberg#78004) - Menu: Fix flaky keyboard focus test (WordPress/gutenberg#78162) - e2e tests: use editPost and createNewPost helpers everywhere (WordPress/gutenberg#78170) - Support object values in Select primitive (WordPress/gutenberg#77861) - Text: Fix render prop CSS defenses (WordPress/gutenberg#78172) - Design System: Add missing packages to Storybook introduction (WordPress/gutenberg#77504) - Add SelectControl component to @wordpress/ui (WordPress/gutenberg#77809) - Dashboard experiment: animate customize UX (WordPress/gutenberg#78065) - Add RTC y-websocket-server tests (WordPress/gutenberg#78179) - Grid: add DashboardLanes masonry surface (WordPress/gutenberg#78107) - Dashboard: staging layer for in-progress layout edits (WordPress/gutenberg#78071) - Media: Guard gutenberg_delete_heic_companion_file() against non-string $metadata['original'] (WordPress/gutenberg#78128) - Image block: Try syncing updated metadata fields (alt and caption) from the media editor (WordPress/gutenberg#78139) - Correct capitalization in help text for Breadcrumbs block (WordPress/gutenberg#78175) - Add min release age to npm config (WordPress/gutenberg#78191) - isFulfilled: don't change resolution state, call in resolveSelect (WordPress/gutenberg#78151) - Add aria-label to Revisions button in Post Summary sidebar (WordPress/gutenberg#78140) - Experiment: Content types invaidate cache for synced taxonomies-post types (WordPress/gutenberg#78143) - Shortcode: Offer block-specific transforms when text matches a registered shortcode (WordPress/gutenberg#77944) - E2E: Remove slash from bad embed request mock (WordPress/gutenberg#78200) - UI: Add component status notes to Storybook (WordPress/gutenberg#77988) - ui/Tooltip, ui/IconButton: Add positioner slot API (WordPress/gutenberg#78089) - Add motion design tokens (duration and easing) to @wordpress/theme (WordPress/gutenberg#76097) - Grid: add edit-mode overlay to DashboardGrid and DashboardLanes (WordPress/gutenberg#78199) - Grid: fix keyboard activation on draggable items (WordPress/gutenberg#78163) - ui/CollapsibleCard: support rendering Header as a heading element (WordPress/gutenberg#77962) - Revisions diff markers: enforce 24×24px minimum target size (WCAG 2.5.8) (WordPress/gutenberg#77671) - Popover: Remove close button z-index (WordPress/gutenberg#78180) - Button: Align compound component metadata (WordPress/gutenberg#78184) - Dashboard: use design animation tokens (WordPress/gutenberg#78204) - Tools: Remove save-exact from .npmrc (WordPress/gutenberg#78196) - UI: Improve docs for compound exports (WordPress/gutenberg#78212) - Bump addressable in /packages/react-native-editor/ios (WordPress/gutenberg#77128) - Bump follow-redirects from 1.15.6 to 1.16.0 (WordPress/gutenberg#77278) - Bump vite from 7.3.0 to 7.3.2 (WordPress/gutenberg#77076) - Bump flatted from 3.3.1 to 3.4.2 (WordPress/gutenberg#76708) - Bump @xmldom/xmldom from 0.8.10 to 0.8.13 (WordPress/gutenberg#77577) - Media Editor Modal: Fix empty author and attached to fields (WordPress/gutenberg#78189) - Bump fast-xml-parser from 4.5.0 to 4.5.4 (WordPress/gutenberg#76081) - Bump node-forge from 1.3.1 to 1.3.2 (WordPress/gutenberg#73601) - Experiment: Integrate `useView` in content types lists (WordPress/gutenberg#78197) - Experiment: Add term/post type count fields in content types (WordPress/gutenberg#78157) - Connectors: Increase right padding of callout for mobile layout (WordPress/gutenberg#78126) - UI: Fix subcomponent story labels (WordPress/gutenberg#78210) - Fonts: Move admin menu compat from experimental to wordpress-7.0 (WordPress/gutenberg#78227) - Experiment: Render badges for some content types' fields (WordPress/gutenberg#78194) - Testing: Consolidate CI workflows for changelog testing (WordPress/gutenberg#78169) - Edit Post: Inline meta boxes z-index values (WordPress/gutenberg#78181) - Backport package publish commits to release/23.2 (WordPress/gutenberg#78347) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65559. git-svn-id: https://develop.svn.wordpress.org/trunk@62582 602fd350-edb4-49c9-b593-d223f7449a82
This updates the pinned commit hash of the Gutenberg repository from `585cf86bb6f408b1dc61175f75db016aa4760653 ` (version `23.1.0`) to `d5ac60e6118060529737127d44a6fdc8abf57eb9` (version `23.2.0`). A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.1.0..v23.2.0. The following commits are included: - Fix PHP multisite tests (WordPress/gutenberg#77825) - Revise README for FocalPointPicker component to use object-position (WordPress/gutenberg#77722) - Experiment: Add first e2e tests for Taxonomies (WordPress/gutenberg#77828) - Content Types: Add post type management (WordPress/gutenberg#77754) - Grid: lock document cursor during resize gesture (WordPress/gutenberg#77813) - Build: Add experimental `widgets/` folder support to @wordpress/build (WordPress/gutenberg#77347) - TabPanel: Fix tab indicator animation (WordPress/gutenberg#77812) - Disable TinyMCE: Repurpose experiment as Classic block removal (WordPress/gutenberg#77838) - Cover block: Inline z-index values (WordPress/gutenberg#77753) - Button: Align link variant underline with Link and ExternalLink (WordPress/gutenberg#77842) - ui/Drawer: Polish open/close animation, fix swipe on content padding (WordPress/gutenberg#77800) - Site Editor: Remove local z-index helper entries (WordPress/gutenberg#77808) - Inline sticky search z-index values (WordPress/gutenberg#77806) - Block Manager: Inline z-index values (WordPress/gutenberg#77759) - Update TypeScript to tsgo (try 2) (WordPress/gutenberg#77682) - Editor: Inline pattern chooser z-index values (WordPress/gutenberg#77772) - Media editor modal: disable scroll wheel zoom while a crop is active (WordPress/gutenberg#77826) - Media editor modal: disable scroll wheel zoom while a pan/drag is active (WordPress/gutenberg#77863) - Media Editor Modal: Try adding undo/redo for the image cropper (WordPress/gutenberg#77782) - Connectors: Stop e2e capability restriction from leaking across specs (WordPress/gutenberg#77857) - Media Upload Modal: Fix pagination and search (WordPress/gutenberg#77872) - `defaultRenderingMode` value not respected when changed using `block_editor_settings_all` (WordPress/gutenberg#77870) - Media editor modal: expand keyboard shortcuts and add interaction helpers (WordPress/gutenberg#77871) - Media editor modal: name landmark regions and add panel headings (WordPress/gutenberg#77875) - Media Editor Modal: Use shift modifier to adjust keyboard pan speed (WordPress/gutenberg#77878) - Disable Classic block: Always register, hide from inserter conditionally (WordPress/gutenberg#77840) - ESLint: Replace `eslint-plugin-react-compiler` with `eslint-plugin-react-hooks` (WordPress/gutenberg#69962) - Disable Classic block: Control inserter support via filter (WordPress/gutenberg#77845) - Grid: add `renderResizeHandle` render prop (WordPress/gutenberg#77811) - Grid: render resize handle as component (WordPress/gutenberg#77888) - Update uuid dependency (WordPress/gutenberg#77848) - Added Translator Context for Reply (WordPress/gutenberg#77891) - Media editor modal: add Shift+R for counter-clockwise rotation (WordPress/gutenberg#77898) - Update references to default branch. (WordPress/gutenberg#77606) - Notes: Keep tall floating threads scrollable on short content (WordPress/gutenberg#77821) - Taxonomy edit route: declare @wordpress/base-styles as dependency (WordPress/gutenberg#77901) - Post Types DataViews: Make titles clickable to open edit page (WordPress/gutenberg#77885) - Upgrade and unify @types/node version (WordPress/gutenberg#77900) - Widget Types: replace bootstrap with resolver (WordPress/gutenberg#77847) - SlotFill: add dependencies to updateFill effect (WordPress/gutenberg#77907) - Grid: prevent resize runaway near viewport edge (WordPress/gutenberg#77854) - Experiment: Add taxonomy visibility fields (WordPress/gutenberg#77835) - Content Types: Add Duplicate action to taxonomy management (WordPress/gutenberg#77853) - Site Editor: Inline layout z-index values (WordPress/gutenberg#77807) - RTC: Clarify WPBlockSelection type and link to duplicates in other packages. (WordPress/gutenberg#77862) - Editor: Improve revisions diff pairing performance (WordPress/gutenberg#77126) - Media Editor Modal: In the image cropper, pan when dragging the crop instead of constraining to the visible area (WordPress/gutenberg#77899) - Block Editor: Clarify logic for 'directInsert' inner blocks setting (WordPress/gutenberg#77873) - Block Editor: Fix target block for copying direct insert block attributes (WordPress/gutenberg#77877) - Link: Fix awkward focus outline around the new-tab icon (WordPress/gutenberg#77910) - Plugin loader: use require for build/constants.php (WordPress/gutenberg#77908) - Tests: Fix argument forwarding for test:unit workspace scripts (WordPress/gutenberg#77541) - Try responsive global block styles with states (WordPress/gutenberg#77513) - Image editor: suppress image editor undo/redo while a crop interaction is active (WordPress/gutenberg#77930) - Experimental: Content types - disable create/save button based on form validity (WordPress/gutenberg#77931) - Guidelines: Refactor accordion to use CollapsibleCard (WordPress/gutenberg#77903) - Guidelines REST: Require read access for standard route (WordPress/gutenberg#77843) - Embed: Add '[embed]' shortcode transform (WordPress/gutenberg#77937) - Edit Post: Fix suppressed errors in Layout component (WordPress/gutenberg#77940) - Experiment: User post types REST controller (WordPress/gutenberg#77915) - Content Types: Add Duplicate action to post type management (WordPress/gutenberg#77844) - Experiment: Content types fix new instance returned in `useSelect` (WordPress/gutenberg#77916) - Select: Hide user agent focus ring in popup (WordPress/gutenberg#77919) - Interactivity API: Fix popover bind hydration (WordPress/gutenberg#77797) - UI: Use string label type for form controls (WordPress/gutenberg#77860) - Widget Types: bootstrap registry into the dashboard client (WordPress/gutenberg#77917) - ui/Drawer: Forward `render` prop on `Drawer.Content` to the scroll container (WordPress/gutenberg#77941) - ColorPicker : Fix inconsistent HEX input clearing behavior (WordPress/gutenberg#77912) - ExternalLink: Fix focus outline under wp-admin (WordPress/gutenberg#77935) - Experiment: Auto fill `slug` from singular label for taxonomies and post types (WordPress/gutenberg#77938) - Site editor: preserve non-global styles in pattern previews (WordPress/gutenberg#77957) - Classic Block: Unwrap experiment to hide it from inserter (WordPress/gutenberg#77911) - Migrate native tests to workspace (WordPress/gutenberg#77425) - Remove root uuid dependency (WordPress/gutenberg#77960) - Build: Update lint-staged to 16.4.0 (WordPress/gutenberg#77963) - docgen: Automatic documentation handle for TypeScript overloads (WordPress/gutenberg#77558) - Dashboard: Add experimental `WidgetDashboard` rendering engine (WordPress/gutenberg#77770) - Fix flaky Menu test (WordPress/gutenberg#77972) - Widget Types: server-side registry, decouple wp-build pages (WordPress/gutenberg#77958) - RTC: Fix divergence when two offline users reconnect (WordPress/gutenberg#77980) - Media editor: replace fine-rotation slider with RotationRuler (WordPress/gutenberg#77906) - RTC: Fix compaction unit test (WordPress/gutenberg#77986) - RTC: Attach sync observers after hydrating persisted CRDT doc (WordPress/gutenberg#77966) - Fix: Buttons block shows inserter picker when multiple allowed blocks are registered (WordPress/gutenberg#77858) - Update nvm installation script to version 0.40.4 (WordPress/gutenberg#77996) - Use theme gray for muted Text (WordPress/gutenberg#77999) - Add lint rule for non-module stylesheet imports (WordPress/gutenberg#77984) - Dashboard experiment: new icon (WordPress/gutenberg#78016) - Testing: Add `createRecord` e2e request util (WordPress/gutenberg#78017) - Widget Types: REST endpoint and core-data entity (WordPress/gutenberg#77987) - Block Editor: Remove unused reducer action types (WordPress/gutenberg#77880) - Experiment: Sync user taxonomies with post types (WordPress/gutenberg#77997) - Dashboard experiment: remove storybook examples for now (WordPress/gutenberg#78020) - Dashboard: add `WidgetDashboard.Actions` compound (WordPress/gutenberg#78019) - Experiment: add first basic user post types e2e tests and update taxonomy tests (WordPress/gutenberg#77998) - Fill in E2E tests for client-side media processing (WordPress/gutenberg#75949) - Modal: Render as a bottom sheet on mobile (WordPress/gutenberg#77956) - Grid: add warning about being under development (WordPress/gutenberg#78022) - RTC: Fix race condition on room creation which can cause a split update log (WordPress/gutenberg#77675) - Connectors: Clarify AI plugin callout copy (WordPress/gutenberg#78043) - Image editor: update sidebar aspect ratio and resize controls (WordPress/gutenberg#78046) - Fix: Only auto register settings if the plugin the connector references is installed and active. (WordPress/gutenberg#77273) - Connectors: Add is_active callback support to plugin registration (WordPress/gutenberg#77897) - Site Editor e2e tests: reimplement the wait for load (WordPress/gutenberg#77981) - Make Block Inserter search input sticky while scrolling (WordPress/gutenberg#77698) - Embed: Tighten raw URL transform isMatch (WordPress/gutenberg#78021) - Notes: Separate intent from mechanics in openTheSidebar (WordPress/gutenberg#78039) - Image editor: improve media editor crop accessibility and dialog focus (WordPress/gutenberg#78047) - Fix flaky e2e test for Pages dataview keyboard navigation (WordPress/gutenberg#78054) - RTC: Fix find_canonical_storage_post_id() always returning null (WordPress/gutenberg#78053) - Dashboard: persist layout via @wordpress/preferences (WordPress/gutenberg#78034) - Dashboard: backend default layout filter (WordPress/gutenberg#78040) - i18n: add context to scale (WordPress/gutenberg#76917) - Dashboard: lift Suspense + error boundary into widget chrome and add a default header (WordPress/gutenberg#78012) - Dashboard: add widget inserter modal (WordPress/gutenberg#78033) - Fix flaky homepage-settings e2e test (WordPress/gutenberg#78063) - Experiment: Content types single route and package (WordPress/gutenberg#78059) - Configure global fallbackFn for timezone-mock to handle Date subclasses (WordPress/gutenberg#78056) - Content types: flush rewrite rules on rewrite-impacting changes (WordPress/gutenberg#78058) - Editor: Paginate revisions slider by 100 per page (WordPress/gutenberg#77200) - Add RTC cursor-scope regression tests (WordPress/gutenberg#77662) - Dashboard: REST endpoint for the default layout (WordPress/gutenberg#78066) - Paste: preserve leading number when pasting single-line text like dates (WordPress/gutenberg#77949) - Revision: Fix failing e2e test (WordPress/gutenberg#78079) - Global Styles: Refactor client side style states to use nodes (WordPress/gutenberg#78000) - Media Editor Modal: Add focus border styles to the stencil rect when the canvas is keyboard focused (WordPress/gutenberg#78078) - Post Content focus mode: Fix flaky e2e test (WordPress/gutenberg#78084) - Update date-fns to v4.1.0 in components and editor packages (WordPress/gutenberg#78057) - Revisions: Add diagonal stripe patterns to diff markers to avoid color-only distinction (WordPress/gutenberg#77904) - Admin UI: Fix nested landmark in Page header (WordPress/gutenberg#78001) - Fix: Shortcode block does not render in Navigation Overlay (WordPress/gutenberg#77511) - Fix flaky 'publish panel' e2e test (WordPress/gutenberg#78082) - Experiment: Content types reuse some commone utils (WordPress/gutenberg#78091) - Style Runtime: Support CSS module style injection across documents (WordPress/gutenberg#77965) - Experiment: Add Classic block migration notice (WordPress/gutenberg#78090) - Content Types: Abstract and reuse label autofilling for post types (WordPress/gutenberg#78099) - i18n: add context to table header/footer label (WordPress/gutenberg#78007) - Experiment: Content types reuse `createStatusAction` (WordPress/gutenberg#78102) - Select: Support placeholder prop on Trigger (WordPress/gutenberg#78076) - feat: Enhance Connectors page on read-only file system (WordPress/gutenberg#77521) - Add missing Portal Storybook subcomponents (WordPress/gutenberg#78108) - RTC: Fix title divergence between users on page refresh after title update (WordPress/gutenberg#77666) - Docs: shortcode transforms with wrapped content + rawHandler JSDoc (WordPress/gutenberg#78003) - Connectors: Refine PHPStan type shapes (WordPress/gutenberg#78103) - Fix lockfile drift and missing dep from content-types consolidation (WordPress/gutenberg#78109) - Classic Block: Use onReplace prop for migration actions (WordPress/gutenberg#78113) - Media Editor Experiment: Add a route, based on the media editor modal, refactor the modal components (WordPress/gutenberg#77994) - i18n: add context to (site) identity (WordPress/gutenberg#78132) - Script Modules: Guard setAccessible() calls behind PHP < 8.1 check (WordPress/gutenberg#78137) - Connectors: Avoid using centered text (WordPress/gutenberg#78125) - Content Types: Introduce view items actions (WordPress/gutenberg#78104) - Fix: Guard require_once calls in generated PHP files against deployment race conditions (WordPress/gutenberg#78110) - bin/dev.mjs: warn (not exit) on stale webpack watching this checkout (WordPress/gutenberg#78098) - E2E: Reset preferences after navigable-toolbar tests (WordPress/gutenberg#78115) - Editor: Refactor 'PostPublishPanel' into function component (WordPress/gutenberg#78083) - Document how to ignore VSCode Workplace Settings. (WordPress/gutenberg#77608) - Select: Fix disabled cursor styles (WordPress/gutenberg#78112) - Revisions: Add tooltip to diff marker buttons (WordPress/gutenberg#77690) - Experiment: Make content types `_builtin` (WordPress/gutenberg#78150) - Experiment: Content types - use `form` for quick edit dialogs (WordPress/gutenberg#78149) - Experiment: Content types use `toggle` for `active` prop edit (WordPress/gutenberg#78146) - Experiment: Update view content types actions (WordPress/gutenberg#78159) - Block Editor: Add translation context for “Exit pattern” (WordPress/gutenberg#78158) - ColorPalette: Fix duplicate-key warnings and incorrect selection with identical color values (WordPress/gutenberg#78004) - Menu: Fix flaky keyboard focus test (WordPress/gutenberg#78162) - e2e tests: use editPost and createNewPost helpers everywhere (WordPress/gutenberg#78170) - Support object values in Select primitive (WordPress/gutenberg#77861) - Text: Fix render prop CSS defenses (WordPress/gutenberg#78172) - Design System: Add missing packages to Storybook introduction (WordPress/gutenberg#77504) - Add SelectControl component to @wordpress/ui (WordPress/gutenberg#77809) - Dashboard experiment: animate customize UX (WordPress/gutenberg#78065) - Add RTC y-websocket-server tests (WordPress/gutenberg#78179) - Grid: add DashboardLanes masonry surface (WordPress/gutenberg#78107) - Dashboard: staging layer for in-progress layout edits (WordPress/gutenberg#78071) - Media: Guard gutenberg_delete_heic_companion_file() against non-string $metadata['original'] (WordPress/gutenberg#78128) - Image block: Try syncing updated metadata fields (alt and caption) from the media editor (WordPress/gutenberg#78139) - Correct capitalization in help text for Breadcrumbs block (WordPress/gutenberg#78175) - Add min release age to npm config (WordPress/gutenberg#78191) - isFulfilled: don't change resolution state, call in resolveSelect (WordPress/gutenberg#78151) - Add aria-label to Revisions button in Post Summary sidebar (WordPress/gutenberg#78140) - Experiment: Content types invaidate cache for synced taxonomies-post types (WordPress/gutenberg#78143) - Shortcode: Offer block-specific transforms when text matches a registered shortcode (WordPress/gutenberg#77944) - E2E: Remove slash from bad embed request mock (WordPress/gutenberg#78200) - UI: Add component status notes to Storybook (WordPress/gutenberg#77988) - ui/Tooltip, ui/IconButton: Add positioner slot API (WordPress/gutenberg#78089) - Add motion design tokens (duration and easing) to @wordpress/theme (WordPress/gutenberg#76097) - Grid: add edit-mode overlay to DashboardGrid and DashboardLanes (WordPress/gutenberg#78199) - Grid: fix keyboard activation on draggable items (WordPress/gutenberg#78163) - ui/CollapsibleCard: support rendering Header as a heading element (WordPress/gutenberg#77962) - Revisions diff markers: enforce 24×24px minimum target size (WCAG 2.5.8) (WordPress/gutenberg#77671) - Popover: Remove close button z-index (WordPress/gutenberg#78180) - Button: Align compound component metadata (WordPress/gutenberg#78184) - Dashboard: use design animation tokens (WordPress/gutenberg#78204) - Tools: Remove save-exact from .npmrc (WordPress/gutenberg#78196) - UI: Improve docs for compound exports (WordPress/gutenberg#78212) - Bump addressable in /packages/react-native-editor/ios (WordPress/gutenberg#77128) - Bump follow-redirects from 1.15.6 to 1.16.0 (WordPress/gutenberg#77278) - Bump vite from 7.3.0 to 7.3.2 (WordPress/gutenberg#77076) - Bump flatted from 3.3.1 to 3.4.2 (WordPress/gutenberg#76708) - Bump @xmldom/xmldom from 0.8.10 to 0.8.13 (WordPress/gutenberg#77577) - Media Editor Modal: Fix empty author and attached to fields (WordPress/gutenberg#78189) - Bump fast-xml-parser from 4.5.0 to 4.5.4 (WordPress/gutenberg#76081) - Bump node-forge from 1.3.1 to 1.3.2 (WordPress/gutenberg#73601) - Experiment: Integrate `useView` in content types lists (WordPress/gutenberg#78197) - Experiment: Add term/post type count fields in content types (WordPress/gutenberg#78157) - Connectors: Increase right padding of callout for mobile layout (WordPress/gutenberg#78126) - UI: Fix subcomponent story labels (WordPress/gutenberg#78210) - Fonts: Move admin menu compat from experimental to wordpress-7.0 (WordPress/gutenberg#78227) - Experiment: Render badges for some content types' fields (WordPress/gutenberg#78194) - Testing: Consolidate CI workflows for changelog testing (WordPress/gutenberg#78169) - Edit Post: Inline meta boxes z-index values (WordPress/gutenberg#78181) - Backport package publish commits to release/23.2 (WordPress/gutenberg#78347) Props adamsilverstein, jorbin, westonruter, wildworks. Fixes #65559. git-svn-id: https://develop.svn.wordpress.org/trunk@62582 602fd350-edb4-49c9-b593-d223f7449a82
What?
Part of:
Add undo/redo to the image cropper as part of the experimental media editor modal.
Why?
The particular way of doing undo/redo here is just tied to the image cropper, and doesn't include metadata. The reasoning here is that the metadata fields are already covered by browser undo behaviour for editing text fields, and shouldn't really be mixed in with the flow of editing crops in the canvas.
Also, the local approach to undo/redo means we don't muddy any entity state and everything can be tossed out when we close the modal.
If we need a more integrated approach further down the track, we can pursue it, but for now this seemed expedient.
How?
useCropperState.useCropGestureHandlers)Testing Instructions
Note: the buttons are currently in the footer, but I think they'd feel a bit more "canonical" somewhere in the header? Might look a bit awkward next to the "Edit media" title, so happy for any ideas there.
Screenshots or screencast
2026-04-29.16.49.49.mp4
Use of AI Tools
Claude Code