Dashboard: staging layer for in-progress layout edits#78071
Conversation
WidgetDashboardProvider now keeps an internal staging copy of the layout. In-progress mutations (drag, resize, insert, setAttributes) mutate staging only; the consumer's onLayoutChange fires once on commit. Adds hasUncommittedChanges (deep-equal between committed and staging via fast-deep-equal) plus commitLayout and cancelLayout actions. Auto-flips edit mode on when the layout becomes empty. Existing tests are updated to follow the staged commit flow (insert or setAttributes followed by Done) and the actions harness now uses a non-empty layout so the auto-edit effect does not interfere.
Replaces the placeholder console.log handlers in the dashboard toolbar with the staging-layer commit and cancel actions. Done publishes the staged layout to the consumer; Cancel discards it and exits edit mode without firing onLayoutChange.
Aligns the hook with the rest of the route's named-export convention (the local barrel and stage.tsx already imported it as named via re-export). Drops the now-stale test under the shared hooks/test directory; the test moves next to the source in a follow-up.
Moves the unit test alongside the hook implementation under hooks/use-dashboard-layout/test/, so each hook owns its tests and the shared hooks/test/ directory disappears.
|
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. |
|
Size Change: 0 B Total Size: 7.93 MB ℹ️ View Unchanged
|
The grid model assigns explicit `order: 0, 1, …` to each item after the first drag. A swap followed by an undo restores the visible arrangement but leaves explicit orders in staging, while the committed layout never had any. Deep-equal flagged this as dirty and the toolbar treated it as a pending change. Canonicalize both layouts before comparison: sort by `placement.order` (falling back to the array index when omitted), then strip `order` since the array position now encodes it. Adds a regression test that simulates a swap and its undo.
The Done button now reads `hasUncommittedChanges` from the dashboard context and renders disabled when staging matches committed. Avoids the no-op confirmation path when the user enters Customize and exits without touching the layout. Replaces the toggle-on-click test with a Customize-only assertion plus an explicit "Done is disabled when there are no staging changes" check.
There was a problem hiding this comment.
Pull request overview
This PR introduces a staging layer for the Dashboard widget layout so edits made during “Customize” accumulate locally and are only persisted to the consumer when the user clicks Done (with Cancel discarding in-progress edits). This reduces write amplification to the preferences store/REST persistence and enables clean rollback of an edit session.
Changes:
- Add staging layout state in
WidgetDashboardProvider, withcommitLayout/cancelLayoutactions and ahasUncommittedChangesflag (deep-equal). - Wire Actions toolbar to commit/cancel flows and disable Done when there are no uncommitted changes; auto-enter edit mode when layout becomes empty.
- Update and add unit tests for the staged commit behavior; switch
useDashboardLayoutto a named export and update imports accordingly; addfast-deep-equal.
Reviewed changes
Copilot reviewed 11 out of 12 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| routes/dashboard/widget-dashboard/context/dashboard-context.tsx | Adds staging layout state, commit/cancel actions, deep-equal change detection, and auto-edit-mode behavior. |
| routes/dashboard/widget-dashboard/components/actions/actions.tsx | Hooks toolbar buttons up to commit/cancel; disables Done when no staged changes. |
| routes/dashboard/widget-dashboard/types.ts | Tightens widget icon typing and updates WidgetDashboard prop docs for staged semantics. |
| routes/dashboard/package.json | Adds fast-deep-equal dependency for change detection. |
| package-lock.json | Locks the new dependency. |
| routes/dashboard/hooks/use-dashboard-layout/use-dashboard-layout.ts | Converts useDashboardLayout to a named export. |
| routes/dashboard/hooks/use-dashboard-layout/index.ts | Updates re-export to named form. |
| routes/dashboard/hooks/use-dashboard-layout/test/use-dashboard-layout.test.ts | Updates test imports to match named export and moved paths. |
| routes/dashboard/widget-dashboard/test/widget-dashboard.test.tsx | Updates attribute mutation test to assert commit-time onLayoutChange. |
| routes/dashboard/widget-dashboard/test/inserter.test.tsx | Updates inserter tests to assert commit-time onLayoutChange via Done. |
| routes/dashboard/widget-dashboard/test/actions.test.tsx | Updates Actions tests for staged semantics, Done disabled state, and Cancel behavior. |
| routes/dashboard/widget-dashboard/test/staging.test.tsx | Adds focused coverage for staging behavior, commit/cancel, and auto edit-mode on empty layout. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| * The consumer owns the committed layout state; the dashboard maintains | ||
| * a staging copy internally for in-progress edits, and `onLayoutChange` | ||
| * fires only when the user commits via the Done action (or when an | ||
| * action like reset replaces the committed layout from outside). | ||
| */ |
|
|
||
| const commitLayout = useCallback( () => { | ||
| if ( hasUncommittedChanges ) { | ||
| onLayoutChange( stagingLayout ); |
The block doc for WidgetDashboardProps and the field doc for onLayoutChange were stale: the former mentioned a "reset replaces the committed layout from outside" path that does not flow through this callback, and the latter still described "every layout mutation". With the staging layer in place, onLayoutChange only fires from commitLayout (the Done action). Documents the actual contract.
commitLayout was publishing the raw stagingLayout, while hasUncommittedChanges already compared canonicalized copies. The persisted payload accumulated redundant placement.order values that the comparison treated as implicit; the publish form and the compare form had drifted. Pipe the staged layout through canonicalize() before invoking the consumer's onLayoutChange so the persisted shape is sorted by order with `order` stripped, matching the canonical comparison form. Updates the canonicalize doc to describe the dual use and adds a test that pins the publish payload.
| * Visual identifier. In `widget.json` this is a Dashicon slug string; | ||
| * widgets registered in JS may also pass a React node (an | ||
| * `@wordpress/icons` SVG component, or any element). | ||
| * Visual identifier shown in the widget header; dashicon string, React node, or SVG component. |
| const value = useMemo< InternalDashboardContextValue >( | ||
| () => ( { | ||
| widgetTypes, | ||
| layout, | ||
| onLayoutChange, | ||
| layout: stagingLayout, | ||
| onLayoutChange: setStagingLayout, | ||
| onLayoutReset, | ||
| commitLayout, | ||
| cancelLayout, | ||
| hasUncommittedChanges, |
| function Harness( { layout, onLayoutChange }: HarnessProps ) { | ||
| const [ editMode, setEditMode ] = useState( true ); | ||
|
|
||
| return ( | ||
| <WidgetDashboard | ||
| layout={ layout } | ||
| onLayoutChange={ onLayoutChange } | ||
| widgetTypes={ widgetTypes } | ||
| editMode={ editMode } | ||
| onEditChange={ setEditMode } | ||
| > |
d6eef0d to
cfa391b
Compare
* show success snackbar when the dashboard layout is saved Wraps the dashboard route's onLayoutChange handler so it dispatches a success notice on @wordpress/notices after persisting. The user gets a "Layout saved." snackbar on Done, matching the feedback pattern used by other admin surfaces (e.g., experimental features toggles). * Reword saving dashboard message
…s/gutenberg into update/dashboard-staging-layout
|
Flaky tests detected in 11cc3ba. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/25699602474
|
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?
Introduces a staging layer in
WidgetDashboardProviderso layout edits accumulate locally during edit mode and are only persisted to the consumer when the user clicks Done.stagingLayoutmirrors the committedlayoutprop, kept in sync viauseEffectwhen the committed value changes from outside (e.g., after a reset).commitLayoutandcancelLayoutactions: Done publishes the staged layout viaonLayoutChangeand exits edit mode; Cancel discards the staging copy and exits edit mode without firingonLayoutChange.hasUncommittedChangesflag (deep-equal between committed and staging viafast-deep-equal).useDashboardLayoutswitched to a named export and its unit test moved next to the source underhooks/use-dashboard-layout/test/.Why?
Two issues with the previous behavior, both surfaced once the dashboard had real persistence wiring (PR #78066):
Every mutation persisted. Drag, resize, attribute edits, inserts and deletes each fired
onLayoutChange, which writes through to the preferences store and triggers a debounced REST PUT. A user dragging a widget around or resizing it would queue dozens of writes per second. With the staging layer, all of those mutations stay local; the network request only happens once, on commit.No way to discard a customization session. The Cancel button was a placeholder that just exited edit mode without rolling back; any change the user made was already committed. With the staging copy, Cancel cleanly restores the last committed layout and the consumer's
onLayoutChangeis never called.The staging copy also makes it natural to expose
hasUncommittedChangesto compound children that want to react to in-flight edits (e.g., disable a destructive action while there are pending changes), without requiring consumers to track diffs themselves.How?
Provider (
routes/dashboard/widget-dashboard/context/dashboard-context.tsx):stagingLayoutinuseState, initialized from the committedlayoutprop. AuseEffectkeyed oncommittedLayoutre-syncs staging whenever the committed value changes from outside (covers reset, plus any consumer-side replacement of the layout).layout: stagingLayoutandonLayoutChange: setStagingLayout. Compound children mutate the staging copy; they never see the committed layout directly. The committed layout is only referenced inside the provider for diffing.hasUncommittedChangesis a memoized deep-equal between committed and staging.commitLayoutis gated onhasUncommittedChanges(skips the no-op call when the user enters edit mode and clicks Done without changing anything), then exits edit mode.cancelLayoutresets staging back to the committed layout and exits edit mode.useEffectkeyed onstagingLayout.length === 0flips edit mode on when the layout becomes empty. The dependency is the booleanlength === 0rather than the array itself, so non-empty mutations don't re-trigger the effect. An exhaustive-deps suppression covers the intentional omission ofonEditChangefrom the deps (it would re-fire the effect on every identity change of the callback).Toolbar (
routes/dashboard/widget-dashboard/components/actions/actions.tsx):commitLayout(replaces the placeholderconsole.log( 'done' )).cancelLayout(replaces the placeholderconsole.log( 'cancel' )).Public API surface unchanged:
WidgetDashboardstill receiveslayoutandonLayoutChange. The semantics ofonLayoutChangeshift from "every mutation" to "every commit", which is a behavior change but not a type signature change. The dashboard route instage.tsxdid not need to change.Tests
Adds
routes/dashboard/widget-dashboard/test/staging.test.tsxwith five cases:onLayoutChange.commitpublishes the staged layout toonLayoutChangeexactly once, with the staged contents.cancelrestores staging to committed and never firesonLayoutChange.hasUncommittedChangesflips correctly across the same flows.)Existing test suites updated to follow the staged commit flow:
inserter.test.tsx: every insertion test now clicks Done after Select to assert the commit-time payload.widget-dashboard.test.tsx: thesetAttributestest mutates outside edit mode (the widget's content isinertin edit mode), enters Customize, then clicks Done.actions.test.tsx: harness uses a non-empty layout so the auto-edit effect does not flip edit mode under the test, and adds two new cases covering "Done with no changes does not fire onLayoutChange" and "Cancel exits edit mode without firing onLayoutChange".26 unit tests pass.
Manual testing
/wp-admin/admin-ajax.phpor the user-meta REST PUT)./wp/v2/users/mecarryingpersisted_preferencesis sent with the new layout.useEffect).Screen.Recording.2026-05-07.at.6.15.37.PM.mov