Skip to content

RTC: Fix Yjs undo manager to update UI state when undo stack changes - #78864

Merged
alecgeatches merged 5 commits into
trunkfrom
fix/rtc-deferred-undo
Jun 4, 2026
Merged

RTC: Fix Yjs undo manager to update UI state when undo stack changes#78864
alecgeatches merged 5 commits into
trunkfrom
fix/rtc-deferred-undo

Conversation

@alecgeatches

@alecgeatches alecgeatches commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

What?

This is a human-written PR description. Two main changes:

  1. Add onUndoStackChange() callback to sync manager handlers so that Yjs undo stack operations necessarily communicate with the core-data store and update editor UI when Yjs adds an undo item or changes the undo stack. This was added in 7985ed0, which caused the inner-blocks-templates.spec.js test to fail correctly below in https://github.com/WordPress/gutenberg/actions/runs/26774227868/job/78921451086.

  2. Add a flag to __unstableMarkNextChangeAsNotPersistent() to indicate whether history should be merged with a prior undo stack item (history = 'merge') or should be completely ignored (history = 'ignore').

    Typically __unstableMarkNextChangeAsNotPersistent() calls are proceeded by an onChange() call, and the flag is used to mark "merge the next operation into the existing undo stack". However in useInnerBlockTemplateSync() the non-persistent call is NOT paired with an existing change. On a fresh page load, which happens in the test, there is no prior undo item to roll changes into, and so the Yjs undo manager creates a fresh undo for the entity change anyway.

  3. Change hasUndo() / hasRedo() in core-data to react to sync undo manager updates.

Why?

This change is necessary to merge another PR which changes CRDT timing in #78756. The change in CRDT timing caused the inner-blocks-templates.spec.js test to fail for legitimate reasons related to a now-visible dirty undo stack and uncovered the original bug discussion.

How?

See this original called shot from @youknowriad in https://github.com/WordPress/gutenberg/pull/72407/changes#r2580214235:

One subtle issue here is that every-time state.undoManager changes, the getUndoManager private selector is called ... which ensures the UI is always properly reactive.

But, it's not the case with the custom "sync" undo manager.

In short, when the Yjs undo manager adds a new item to the stack, it doesn't notify the UI that something has changed so it can re-render the undo/redo UI toolbar actions. We relied on the fact that typically other things are also changing in core data, so UI state will probably get updated anyway. This seemed to work okay, but a timing change in an unrelated PR #78756 uncovered this problem again and caused the inner-blocks-templates.spec.js test to fail.

Previously the inner-blocks-templates.spec.js test was passing because of the deferred CRDT update, so even though Yjs is incorrectly adding an undo level from an async template addition, it wasn't registered in the UI because the Yjs UndoManager stack add operation fires after the UI finishes rendering. So an undo is still available (incorrectly), but it wasn't reflected in the UI which is what the test checks for.

The second __unstableMarkNextChangeAsNotPersistent() allows Yjs to understand when an item should be merged with a prior stack item (the typical case) or should always be ignored (the inner template sync case). Nearly all existing calls are implicitly history = 'merge', with the exception of async template loading. The Yjs undo manager doesn't have the concept of a "staged" but not-yet-committed undo item like the built-in manager, and this gives us enough context to know if a cached edit should be committed to storage.

Testing Instructions

The main failure and fix can be verified in CI:

  1. First, we ensured undo manager updates correctly update the undo/redo UI in 7985ed0. This caused the inner-blocks-templates.spec.js test to correctly start failing in https://github.com/WordPress/gutenberg/actions/runs/26774227868/job/78921451086.
  2. The next set of commits added the history flag to __unstableMarkNextChangeAsNotPersistent() which Yjs can use to drop async template edits in undo history (a065a76, tests in 0069b18). inner-blocks-templates.spec.js and all other tests now succeed.

Use of AI Tools

AI assistance: Yes
Tool(s): Codex + Claude Code
Used for: Drilling deep into the problem, writing a fix

@alecgeatches alecgeatches self-assigned this Jun 1, 2026
@alecgeatches alecgeatches added [Type] Bug An existing feature does not function as intended [Feature] Real-time Collaboration Phase 3 of the Gutenberg roadmap around real-time collaboration labels Jun 1, 2026
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

Size Change: +408 B (0%)

Total Size: 8.21 MB

📦 View Changed
Filename Size Change
build/scripts/block-editor/index.min.js 379 kB +197 B (+0.05%)
build/scripts/core-data/index.min.js 31.5 kB +121 B (+0.39%)
build/scripts/sync/index.min.js 39.7 kB +90 B (+0.23%)
ℹ️ View Unchanged
Filename Size Change
build/modules/a11y/index.min.js 355 B 0 B
build/modules/abilities/index.min.js 42.3 kB 0 B
build/modules/block-editor/utils/fit-text-frontend.min.js 617 B 0 B
build/modules/block-library/accordion/view.min.js 595 B 0 B
build/modules/block-library/file/view.min.js 346 B 0 B
build/modules/block-library/form/view.min.js 528 B 0 B
build/modules/block-library/image/view.min.js 2.64 kB 0 B
build/modules/block-library/navigation/view.min.js 1.14 kB 0 B
build/modules/block-library/playlist/view.min.js 10.9 kB 0 B
build/modules/block-library/query/view.min.js 518 B 0 B
build/modules/block-library/search/view.min.js 498 B 0 B
build/modules/block-library/tabs/view.min.js 946 B 0 B
build/modules/boot/index.min.js 51.8 kB 0 B
build/modules/connectors/index.min.js 2.05 kB 0 B
build/modules/content-types/index.min.js 157 kB 0 B
build/modules/core-abilities/index.min.js 926 B 0 B
build/modules/edit-site-init/index.min.js 1.4 kB 0 B
build/modules/interactivity-router/full-page.min.js 451 B 0 B
build/modules/interactivity-router/index.min.js 11.6 kB 0 B
build/modules/interactivity/index.min.js 15.3 kB 0 B
build/modules/latex-to-mathml/index.min.js 56.5 kB 0 B
build/modules/latex-to-mathml/loader.min.js 131 B 0 B
build/modules/lazy-editor/index.min.js 14.2 kB 0 B
build/modules/route/index.min.js 25.2 kB 0 B
build/modules/vips/loader.min.js 127 B 0 B
build/modules/vips/worker.min.js 4.56 MB 0 B
build/modules/workflow/index.min.js 19.9 kB 0 B
build/scripts/a11y/index.min.js 1.1 kB 0 B
build/scripts/annotations/index.min.js 2.53 kB 0 B
build/scripts/api-fetch/index.min.js 3.34 kB 0 B
build/scripts/autop/index.min.js 2.21 kB 0 B
build/scripts/base-styles/index.min.js 146 B 0 B
build/scripts/blob/index.min.js 665 B 0 B
build/scripts/block-directory/index.min.js 43 kB 0 B
build/scripts/block-library/index.min.js 324 kB 0 B
build/scripts/block-serialization-default-parser/index.min.js 1.2 kB 0 B
build/scripts/block-serialization-spec-parser/index.min.js 3.12 kB 0 B
build/scripts/blocks/index.min.js 57.1 kB 0 B
build/scripts/commands/index.min.js 21 kB 0 B
build/scripts/components/index.min.js 263 kB 0 B
build/scripts/compose/index.min.js 11.7 kB 0 B
build/scripts/core-commands/index.min.js 4.37 kB 0 B
build/scripts/customize-widgets/index.min.js 14.6 kB 0 B
build/scripts/data-controls/index.min.js 832 B 0 B
build/scripts/data/index.min.js 9.74 kB 0 B
build/scripts/date/index.min.js 23.7 kB 0 B
build/scripts/deprecated/index.min.js 784 B 0 B
build/scripts/dom-ready/index.min.js 502 B 0 B
build/scripts/dom/index.min.js 5.04 kB 0 B
build/scripts/edit-post/index.min.js 52 kB 0 B
build/scripts/edit-site/index.min.js 295 kB 0 B
build/scripts/edit-widgets/index.min.js 22.2 kB 0 B
build/scripts/editor/index.min.js 462 kB 0 B
build/scripts/element/index.min.js 5.63 kB 0 B
build/scripts/escape-html/index.min.js 622 B 0 B
build/scripts/format-library/index.min.js 13.1 kB 0 B
build/scripts/hooks/index.min.js 1.86 kB 0 B
build/scripts/html-entities/index.min.js 529 B 0 B
build/scripts/i18n/index.min.js 2.5 kB 0 B
build/scripts/is-shallow-equal/index.min.js 607 B 0 B
build/scripts/keyboard-shortcuts/index.min.js 1.65 kB 0 B
build/scripts/keycodes/index.min.js 1.6 kB 0 B
build/scripts/list-reusable-blocks/index.min.js 2.53 kB 0 B
build/scripts/media-utils/index.min.js 112 kB 0 B
build/scripts/notices/index.min.js 1.72 kB 0 B
build/scripts/nux/index.min.js 909 B 0 B
build/scripts/patterns/index.min.js 8 kB 0 B
build/scripts/plugins/index.min.js 2.18 kB 0 B
build/scripts/preferences-persistence/index.min.js 2.19 kB 0 B
build/scripts/preferences/index.min.js 3.33 kB 0 B
build/scripts/primitives/index.min.js 1.05 kB 0 B
build/scripts/priority-queue/index.min.js 1.65 kB 0 B
build/scripts/private-apis/index.min.js 1.15 kB 0 B
build/scripts/react-i18n/index.min.js 868 B 0 B
build/scripts/redux-routine/index.min.js 3.4 kB 0 B
build/scripts/reusable-blocks/index.min.js 3.14 kB 0 B
build/scripts/rich-text/index.min.js 14.1 kB 0 B
build/scripts/router/index.min.js 5.99 kB 0 B
build/scripts/server-side-render/index.min.js 1.98 kB 0 B
build/scripts/shortcode/index.min.js 1.62 kB 0 B
build/scripts/style-engine/index.min.js 2.45 kB 0 B
build/scripts/theme/index.min.js 22 kB 0 B
build/scripts/token-list/index.min.js 767 B 0 B
build/scripts/undo-manager/index.min.js 954 B 0 B
build/scripts/upload-media/index.min.js 11.5 kB 0 B
build/scripts/url/index.min.js 4.02 kB 0 B
build/scripts/vendors/react-dom.min.js 57.7 kB 0 B
build/scripts/vendors/react-jsx-runtime.min.js 513 B 0 B
build/scripts/vendors/react.min.js 3.1 kB 0 B
build/scripts/viewport/index.min.js 1.25 kB 0 B
build/scripts/warning/index.min.js 482 B 0 B
build/scripts/widgets/index.min.js 7.84 kB 0 B
build/scripts/wordcount/index.min.js 1.07 kB 0 B
build/styles/base-styles/admin-schemes-rtl.css 1.71 kB 0 B
build/styles/base-styles/admin-schemes-rtl.min.css 775 B 0 B
build/styles/base-styles/admin-schemes.css 1.71 kB 0 B
build/styles/base-styles/admin-schemes.min.css 775 B 0 B
build/styles/block-directory/style-rtl.css 1.97 kB 0 B
build/styles/block-directory/style-rtl.min.css 1.06 kB 0 B
build/styles/block-directory/style.css 1.98 kB 0 B
build/styles/block-directory/style.min.css 1.06 kB 0 B
build/styles/block-editor/content-rtl.css 5.51 kB 0 B
build/styles/block-editor/content-rtl.min.css 4.08 kB 0 B
build/styles/block-editor/content.css 5.52 kB 0 B
build/styles/block-editor/content.min.css 4.07 kB 0 B
build/styles/block-editor/default-editor-styles-rtl.css 697 B 0 B
build/styles/block-editor/default-editor-styles-rtl.min.css 224 B 0 B
build/styles/block-editor/default-editor-styles.css 697 B 0 B
build/styles/block-editor/default-editor-styles.min.css 224 B 0 B
build/styles/block-editor/style-rtl.css 18.7 kB 0 B
build/styles/block-editor/style-rtl.min.css 15.9 kB 0 B
build/styles/block-editor/style.css 18.7 kB 0 B
build/styles/block-editor/style.min.css 15.9 kB 0 B
build/styles/block-library/accordion-heading/style-rtl.css 346 B 0 B
build/styles/block-library/accordion-heading/style-rtl.min.css 325 B 0 B
build/styles/block-library/accordion-heading/style.css 346 B 0 B
build/styles/block-library/accordion-heading/style.min.css 325 B 0 B
build/styles/block-library/accordion-item/style-rtl.css 239 B 0 B
build/styles/block-library/accordion-item/style-rtl.min.css 180 B 0 B
build/styles/block-library/accordion-item/style.css 238 B 0 B
build/styles/block-library/accordion-item/style.min.css 180 B 0 B
build/styles/block-library/accordion-panel/style-rtl.css 110 B 0 B
build/styles/block-library/accordion-panel/style-rtl.min.css 99 B 0 B
build/styles/block-library/accordion-panel/style.css 110 B 0 B
build/styles/block-library/accordion-panel/style.min.css 99 B 0 B
build/styles/block-library/accordion/style-rtl.css 69 B 0 B
build/styles/block-library/accordion/style-rtl.min.css 62 B 0 B
build/styles/block-library/accordion/style.css 69 B 0 B
build/styles/block-library/accordion/style.min.css 62 B 0 B
build/styles/block-library/archives/style-rtl.css 101 B 0 B
build/styles/block-library/archives/style-rtl.min.css 90 B 0 B
build/styles/block-library/archives/style.css 101 B 0 B
build/styles/block-library/archives/style.min.css 90 B 0 B
build/styles/block-library/audio/editor-rtl.css 166 B 0 B
build/styles/block-library/audio/editor-rtl.min.css 149 B 0 B
build/styles/block-library/audio/editor.css 166 B 0 B
build/styles/block-library/audio/editor.min.css 151 B 0 B
build/styles/block-library/audio/style-rtl.css 945 B 0 B
build/styles/block-library/audio/style-rtl.min.css 132 B 0 B
build/styles/block-library/audio/style.css 945 B 0 B
build/styles/block-library/audio/style.min.css 132 B 0 B
build/styles/block-library/audio/theme-rtl.css 967 B 0 B
build/styles/block-library/audio/theme-rtl.min.css 134 B 0 B
build/styles/block-library/audio/theme.css 967 B 0 B
build/styles/block-library/audio/theme.min.css 134 B 0 B
build/styles/block-library/avatar/editor-rtl.css 127 B 0 B
build/styles/block-library/avatar/editor-rtl.min.css 115 B 0 B
build/styles/block-library/avatar/editor.css 127 B 0 B
build/styles/block-library/avatar/editor.min.css 115 B 0 B
build/styles/block-library/avatar/style-rtl.css 117 B 0 B
build/styles/block-library/avatar/style-rtl.min.css 104 B 0 B
build/styles/block-library/avatar/style.css 117 B 0 B
build/styles/block-library/avatar/style.min.css 104 B 0 B
build/styles/block-library/breadcrumbs/style-rtl.css 236 B 0 B
build/styles/block-library/breadcrumbs/style-rtl.min.css 206 B 0 B
build/styles/block-library/breadcrumbs/style.css 236 B 0 B
build/styles/block-library/breadcrumbs/style.min.css 206 B 0 B
build/styles/block-library/button/editor-rtl.css 306 B 0 B
build/styles/block-library/button/editor-rtl.min.css 265 B 0 B
build/styles/block-library/button/editor.css 317 B 0 B
build/styles/block-library/button/editor.min.css 265 B 0 B
build/styles/block-library/button/style-rtl.css 651 B 0 B
build/styles/block-library/button/style-rtl.min.css 596 B 0 B
build/styles/block-library/button/style.css 662 B 0 B
build/styles/block-library/button/style.min.css 596 B 0 B
build/styles/block-library/buttons/editor-rtl.css 391 B 0 B
build/styles/block-library/buttons/editor-rtl.min.css 291 B 0 B
build/styles/block-library/buttons/editor.css 391 B 0 B
build/styles/block-library/buttons/editor.min.css 291 B 0 B
build/styles/block-library/buttons/style-rtl.css 452 B 0 B
build/styles/block-library/buttons/style-rtl.min.css 349 B 0 B
build/styles/block-library/buttons/style.css 453 B 0 B
build/styles/block-library/buttons/style.min.css 349 B 0 B
build/styles/block-library/calendar/style-rtl.css 271 B 0 B
build/styles/block-library/calendar/style-rtl.min.css 239 B 0 B
build/styles/block-library/calendar/style.css 271 B 0 B
build/styles/block-library/calendar/style.min.css 239 B 0 B
build/styles/block-library/categories/editor-rtl.css 171 B 0 B
build/styles/block-library/categories/editor-rtl.min.css 132 B 0 B
build/styles/block-library/categories/editor.css 170 B 0 B
build/styles/block-library/categories/editor.min.css 131 B 0 B
build/styles/block-library/categories/style-rtl.css 226 B 0 B
build/styles/block-library/categories/style-rtl.min.css 169 B 0 B
build/styles/block-library/categories/style.css 235 B 0 B
build/styles/block-library/categories/style.min.css 169 B 0 B
build/styles/block-library/classic-rtl.css 402 B 0 B
build/styles/block-library/classic-rtl.min.css 358 B 0 B
build/styles/block-library/classic.css 402 B 0 B
build/styles/block-library/classic.min.css 358 B 0 B
build/styles/block-library/code/editor-rtl.css 59 B 0 B
build/styles/block-library/code/editor-rtl.min.css 53 B 0 B
build/styles/block-library/code/editor.css 59 B 0 B
build/styles/block-library/code/editor.min.css 53 B 0 B
build/styles/block-library/code/style-rtl.css 158 B 0 B
build/styles/block-library/code/style-rtl.min.css 140 B 0 B
build/styles/block-library/code/style.css 178 B 0 B
build/styles/block-library/code/style.min.css 140 B 0 B
build/styles/block-library/code/theme-rtl.css 135 B 0 B
build/styles/block-library/code/theme-rtl.min.css 122 B 0 B
build/styles/block-library/code/theme.css 135 B 0 B
build/styles/block-library/code/theme.min.css 122 B 0 B
build/styles/block-library/columns/editor-rtl.css 119 B 0 B
build/styles/block-library/columns/editor-rtl.min.css 108 B 0 B
build/styles/block-library/columns/editor.css 119 B 0 B
build/styles/block-library/columns/editor.min.css 108 B 0 B
build/styles/block-library/columns/style-rtl.css 1.3 kB 0 B
build/styles/block-library/columns/style-rtl.min.css 421 B 0 B
build/styles/block-library/columns/style.css 1.3 kB 0 B
build/styles/block-library/columns/style.min.css 421 B 0 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 136 B 0 B
build/styles/block-library/comment-author-avatar/editor-rtl.min.css 124 B 0 B
build/styles/block-library/comment-author-avatar/editor.css 136 B 0 B
build/styles/block-library/comment-author-avatar/editor.min.css 124 B 0 B
build/styles/block-library/comment-author-name/style-rtl.css 79 B 0 B
build/styles/block-library/comment-author-name/style-rtl.min.css 72 B 0 B
build/styles/block-library/comment-author-name/style.css 79 B 0 B
build/styles/block-library/comment-author-name/style.min.css 72 B 0 B
build/styles/block-library/comment-content/style-rtl.css 137 B 0 B
build/styles/block-library/comment-content/style-rtl.min.css 120 B 0 B
build/styles/block-library/comment-content/style.css 137 B 0 B
build/styles/block-library/comment-content/style.min.css 120 B 0 B
build/styles/block-library/comment-date/style-rtl.css 72 B 0 B
build/styles/block-library/comment-date/style-rtl.min.css 65 B 0 B
build/styles/block-library/comment-date/style.css 72 B 0 B
build/styles/block-library/comment-date/style.min.css 65 B 0 B
build/styles/block-library/comment-edit-link/style-rtl.css 77 B 0 B
build/styles/block-library/comment-edit-link/style-rtl.min.css 70 B 0 B
build/styles/block-library/comment-edit-link/style.css 77 B 0 B
build/styles/block-library/comment-edit-link/style.min.css 70 B 0 B
build/styles/block-library/comment-reply-link/style-rtl.css 78 B 0 B
build/styles/block-library/comment-reply-link/style-rtl.min.css 71 B 0 B
build/styles/block-library/comment-reply-link/style.css 78 B 0 B
build/styles/block-library/comment-reply-link/style.min.css 71 B 0 B
build/styles/block-library/comment-template/style-rtl.css 213 B 0 B
build/styles/block-library/comment-template/style-rtl.min.css 191 B 0 B
build/styles/block-library/comment-template/style.css 213 B 0 B
build/styles/block-library/comment-template/style.min.css 191 B 0 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 135 B 0 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.min.css 122 B 0 B
build/styles/block-library/comments-pagination-numbers/editor.css 144 B 0 B
build/styles/block-library/comments-pagination-numbers/editor.min.css 121 B 0 B
build/styles/block-library/comments-pagination/editor-rtl.css 184 B 0 B
build/styles/block-library/comments-pagination/editor-rtl.min.css 168 B 0 B
build/styles/block-library/comments-pagination/editor.css 184 B 0 B
build/styles/block-library/comments-pagination/editor.min.css 168 B 0 B
build/styles/block-library/comments-pagination/style-rtl.css 224 B 0 B
build/styles/block-library/comments-pagination/style-rtl.min.css 201 B 0 B
build/styles/block-library/comments-pagination/style.css 236 B 0 B
build/styles/block-library/comments-pagination/style.min.css 201 B 0 B
build/styles/block-library/comments-title/editor-rtl.css 83 B 0 B
build/styles/block-library/comments-title/editor-rtl.min.css 75 B 0 B
build/styles/block-library/comments-title/editor.css 83 B 0 B
build/styles/block-library/comments-title/editor.min.css 75 B 0 B
build/styles/block-library/comments/editor-rtl.css 968 B 0 B
build/styles/block-library/comments/editor-rtl.min.css 842 B 0 B
build/styles/block-library/comments/editor.css 968 B 0 B
build/styles/block-library/comments/editor.min.css 842 B 0 B
build/styles/block-library/comments/style-rtl.css 754 B 0 B
build/styles/block-library/comments/style-rtl.min.css 637 B 0 B
build/styles/block-library/comments/style.css 752 B 0 B
build/styles/block-library/comments/style.min.css 637 B 0 B
build/styles/block-library/common-rtl.css 2.57 kB 0 B
build/styles/block-library/common-rtl.min.css 1.21 kB 0 B
build/styles/block-library/common.css 2.59 kB 0 B
build/styles/block-library/common.min.css 1.2 kB 0 B
build/styles/block-library/cover/editor-rtl.css 1.05 kB 0 B
build/styles/block-library/cover/editor-rtl.min.css 631 B 0 B
build/styles/block-library/cover/editor.css 1.05 kB 0 B
build/styles/block-library/cover/editor.min.css 631 B 0 B
build/styles/block-library/cover/style-rtl.css 2.5 kB 0 B
build/styles/block-library/cover/style-rtl.min.css 1.82 kB 0 B
build/styles/block-library/cover/style.css 2.51 kB 0 B
build/styles/block-library/cover/style.min.css 1.81 kB 0 B
build/styles/block-library/details/editor-rtl.css 72 B 0 B
build/styles/block-library/details/editor-rtl.min.css 65 B 0 B
build/styles/block-library/details/editor.css 72 B 0 B
build/styles/block-library/details/editor.min.css 65 B 0 B
build/styles/block-library/details/style-rtl.css 97 B 0 B
build/styles/block-library/details/style-rtl.min.css 86 B 0 B
build/styles/block-library/details/style.css 97 B 0 B
build/styles/block-library/details/style.min.css 86 B 0 B
build/styles/block-library/editor-elements-rtl.css 117 B 0 B
build/styles/block-library/editor-elements-rtl.min.css 75 B 0 B
build/styles/block-library/editor-elements.css 117 B 0 B
build/styles/block-library/editor-elements.min.css 75 B 0 B
build/styles/block-library/editor-rtl.css 12.5 kB 0 B
build/styles/block-library/editor-rtl.min.css 10.3 kB 0 B
build/styles/block-library/editor.css 12.5 kB 0 B
build/styles/block-library/editor.min.css 10.3 kB 0 B
build/styles/block-library/elements-rtl.css 84 B 0 B
build/styles/block-library/elements-rtl.min.css 54 B 0 B
build/styles/block-library/elements.css 84 B 0 B
build/styles/block-library/elements.min.css 54 B 0 B
build/styles/block-library/embed/editor-rtl.css 391 B 0 B
build/styles/block-library/embed/editor-rtl.min.css 331 B 0 B
build/styles/block-library/embed/editor.css 390 B 0 B
build/styles/block-library/embed/editor.min.css 331 B 0 B
build/styles/block-library/embed/style-rtl.css 1.29 kB 0 B
build/styles/block-library/embed/style-rtl.min.css 448 B 0 B
build/styles/block-library/embed/style.css 1.29 kB 0 B
build/styles/block-library/embed/style.min.css 448 B 0 B
build/styles/block-library/embed/theme-rtl.css 967 B 0 B
build/styles/block-library/embed/theme-rtl.min.css 133 B 0 B
build/styles/block-library/embed/theme.css 967 B 0 B
build/styles/block-library/embed/theme.min.css 133 B 0 B
build/styles/block-library/file/editor-rtl.css 352 B 0 B
build/styles/block-library/file/editor-rtl.min.css 324 B 0 B
build/styles/block-library/file/editor.css 353 B 0 B
build/styles/block-library/file/editor.min.css 324 B 0 B
build/styles/block-library/file/style-rtl.css 318 B 0 B
build/styles/block-library/file/style-rtl.min.css 278 B 0 B
build/styles/block-library/file/style.css 331 B 0 B
build/styles/block-library/file/style.min.css 278 B 0 B
build/styles/block-library/footnotes/style-rtl.css 220 B 0 B
build/styles/block-library/footnotes/style-rtl.min.css 198 B 0 B
build/styles/block-library/footnotes/style.css 219 B 0 B
build/styles/block-library/footnotes/style.min.css 197 B 0 B
build/styles/block-library/form-input/editor-rtl.css 286 B 0 B
build/styles/block-library/form-input/editor-rtl.min.css 265 B 0 B
build/styles/block-library/form-input/editor.css 285 B 0 B
build/styles/block-library/form-input/editor.min.css 264 B 0 B
build/styles/block-library/form-input/style-rtl.css 467 B 0 B
build/styles/block-library/form-input/style-rtl.min.css 366 B 0 B
build/styles/block-library/form-input/style.css 467 B 0 B
build/styles/block-library/form-input/style.min.css 366 B 0 B
build/styles/block-library/form-submission-notification/editor-rtl.css 368 B 0 B
build/styles/block-library/form-submission-notification/editor-rtl.min.css 344 B 0 B
build/styles/block-library/form-submission-notification/editor.css 368 B 0 B
build/styles/block-library/form-submission-notification/editor.min.css 341 B 0 B
build/styles/block-library/form-submit-button/style-rtl.css 77 B 0 B
build/styles/block-library/form-submit-button/style-rtl.min.css 69 B 0 B
build/styles/block-library/form-submit-button/style.css 77 B 0 B
build/styles/block-library/form-submit-button/style.min.css 69 B 0 B
build/styles/block-library/freeform/editor-rtl.css 1.12 kB 0 B
build/styles/block-library/freeform/editor-rtl.min.css 288 B 0 B
build/styles/block-library/freeform/editor.css 1.12 kB 0 B
build/styles/block-library/freeform/editor.min.css 288 B 0 B
build/styles/block-library/gallery/editor-rtl.css 1.46 kB 0 B
build/styles/block-library/gallery/editor-rtl.min.css 561 B 0 B
build/styles/block-library/gallery/editor.css 1.46 kB 0 B
build/styles/block-library/gallery/editor.min.css 564 B 0 B
build/styles/block-library/gallery/style-rtl.css 2.84 kB 0 B
build/styles/block-library/gallery/style-rtl.min.css 1.84 kB 0 B
build/styles/block-library/gallery/style.css 2.84 kB 0 B
build/styles/block-library/gallery/style.min.css 1.84 kB 0 B
build/styles/block-library/gallery/theme-rtl.css 941 B 0 B
build/styles/block-library/gallery/theme-rtl.min.css 108 B 0 B
build/styles/block-library/gallery/theme.css 941 B 0 B
build/styles/block-library/gallery/theme.min.css 108 B 0 B
build/styles/block-library/group/editor-rtl.css 772 B 0 B
build/styles/block-library/group/editor-rtl.min.css 335 B 0 B
build/styles/block-library/group/editor.css 772 B 0 B
build/styles/block-library/group/editor.min.css 335 B 0 B
build/styles/block-library/group/style-rtl.css 120 B 0 B
build/styles/block-library/group/style-rtl.min.css 103 B 0 B
build/styles/block-library/group/style.css 120 B 0 B
build/styles/block-library/group/style.min.css 103 B 0 B
build/styles/block-library/group/theme-rtl.css 468 B 0 B
build/styles/block-library/group/theme-rtl.min.css 79 B 0 B
build/styles/block-library/group/theme.css 468 B 0 B
build/styles/block-library/group/theme.min.css 79 B 0 B
build/styles/block-library/heading/style-rtl.css 604 B 0 B
build/styles/block-library/heading/style-rtl.min.css 205 B 0 B
build/styles/block-library/heading/style.css 604 B 0 B
build/styles/block-library/heading/style.min.css 205 B 0 B
build/styles/block-library/html/editor-rtl.css 1.29 kB 0 B
build/styles/block-library/html/editor-rtl.min.css 464 B 0 B
build/styles/block-library/html/editor.css 1.3 kB 0 B
build/styles/block-library/html/editor.min.css 464 B 0 B
build/styles/block-library/icon/editor-rtl.css 776 B 0 B
build/styles/block-library/icon/editor-rtl.min.css 377 B 0 B
build/styles/block-library/icon/editor.css 776 B 0 B
build/styles/block-library/icon/editor.min.css 377 B 0 B
build/styles/block-library/icon/style-rtl.css 218 B 0 B
build/styles/block-library/icon/style-rtl.min.css 154 B 0 B
build/styles/block-library/icon/style.css 218 B 0 B
build/styles/block-library/icon/style.min.css 154 B 0 B
build/styles/block-library/image/editor-rtl.css 1.64 kB 0 B
build/styles/block-library/image/editor-rtl.min.css 782 B 0 B
build/styles/block-library/image/editor.css 1.64 kB 0 B
build/styles/block-library/image/editor.min.css 780 B 0 B
build/styles/block-library/image/style-rtl.css 2.92 kB 0 B
build/styles/block-library/image/style-rtl.min.css 1.86 kB 0 B
build/styles/block-library/image/style.css 2.92 kB 0 B
build/styles/block-library/image/style.min.css 1.85 kB 0 B
build/styles/block-library/image/theme-rtl.css 971 B 0 B
build/styles/block-library/image/theme-rtl.min.css 137 B 0 B
build/styles/block-library/image/theme.css 971 B 0 B
build/styles/block-library/image/theme.min.css 137 B 0 B
build/styles/block-library/latest-comments/style-rtl.css 392 B 0 B
build/styles/block-library/latest-comments/style-rtl.min.css 352 B 0 B
build/styles/block-library/latest-comments/style.css 390 B 0 B
build/styles/block-library/latest-comments/style.min.css 352 B 0 B
build/styles/block-library/latest-posts/editor-rtl.css 154 B 0 B
build/styles/block-library/latest-posts/editor-rtl.min.css 139 B 0 B
build/styles/block-library/latest-posts/editor.css 153 B 0 B
build/styles/block-library/latest-posts/editor.min.css 138 B 0 B
build/styles/block-library/latest-posts/style-rtl.css 1.36 kB 0 B
build/styles/block-library/latest-posts/style-rtl.min.css 520 B 0 B
build/styles/block-library/latest-posts/style.css 1.37 kB 0 B
build/styles/block-library/latest-posts/style.min.css 520 B 0 B
build/styles/block-library/list/style-rtl.css 498 B 0 B
build/styles/block-library/list/style-rtl.min.css 107 B 0 B
build/styles/block-library/list/style.css 498 B 0 B
build/styles/block-library/list/style.min.css 107 B 0 B
build/styles/block-library/loginout/style-rtl.css 68 B 0 B
build/styles/block-library/loginout/style-rtl.min.css 61 B 0 B
build/styles/block-library/loginout/style.css 68 B 0 B
build/styles/block-library/loginout/style.min.css 61 B 0 B
build/styles/block-library/math/editor-rtl.css 491 B 0 B
build/styles/block-library/math/editor-rtl.min.css 105 B 0 B
build/styles/block-library/math/editor.css 502 B 0 B
build/styles/block-library/math/editor.min.css 105 B 0 B
build/styles/block-library/math/style-rtl.css 70 B 0 B
build/styles/block-library/math/style-rtl.min.css 61 B 0 B
build/styles/block-library/math/style.css 70 B 0 B
build/styles/block-library/math/style.min.css 61 B 0 B
build/styles/block-library/media-text/editor-rtl.css 389 B 0 B
build/styles/block-library/media-text/editor-rtl.min.css 321 B 0 B
build/styles/block-library/media-text/editor.css 389 B 0 B
build/styles/block-library/media-text/editor.min.css 320 B 0 B
build/styles/block-library/media-text/style-rtl.css 873 B 0 B
build/styles/block-library/media-text/style-rtl.min.css 552 B 0 B
build/styles/block-library/media-text/style.css 901 B 0 B
build/styles/block-library/media-text/style.min.css 550 B 0 B
build/styles/block-library/more/editor-rtl.css 796 B 0 B
build/styles/block-library/more/editor-rtl.min.css 393 B 0 B
build/styles/block-library/more/editor.css 798 B 0 B
build/styles/block-library/more/editor.min.css 393 B 0 B
build/styles/block-library/navigation-link/editor-rtl.css 1.28 kB 0 B
build/styles/block-library/navigation-link/editor-rtl.min.css 710 B 0 B
build/styles/block-library/navigation-link/editor.css 1.27 kB 0 B
build/styles/block-library/navigation-link/editor.min.css 713 B 0 B
build/styles/block-library/navigation-link/style-rtl.css 579 B 0 B
build/styles/block-library/navigation-link/style-rtl.min.css 190 B 0 B
build/styles/block-library/navigation-link/style.css 579 B 0 B
build/styles/block-library/navigation-link/style.min.css 188 B 0 B
build/styles/block-library/navigation-overlay-close/style-rtl.css 260 B 0 B
build/styles/block-library/navigation-overlay-close/style-rtl.min.css 237 B 0 B
build/styles/block-library/navigation-overlay-close/style.css 260 B 0 B
build/styles/block-library/navigation-overlay-close/style.min.css 237 B 0 B
build/styles/block-library/navigation-submenu/editor-rtl.css 1.12 kB 0 B
build/styles/block-library/navigation-submenu/editor-rtl.min.css 295 B 0 B
build/styles/block-library/navigation-submenu/editor.css 1.12 kB 0 B
build/styles/block-library/navigation-submenu/editor.min.css 294 B 0 B
build/styles/block-library/navigation/editor-rtl.css 3.28 kB 0 B
build/styles/block-library/navigation/editor-rtl.min.css 2.28 kB 0 B
build/styles/block-library/navigation/editor.css 3.29 kB 0 B
build/styles/block-library/navigation/editor.min.css 2.28 kB 0 B
build/styles/block-library/navigation/style-rtl.css 3.59 kB 0 B
build/styles/block-library/navigation/style-rtl.min.css 2.52 kB 0 B
build/styles/block-library/navigation/style.css 3.59 kB 0 B
build/styles/block-library/navigation/style.min.css 2.5 kB 0 B
build/styles/block-library/nextpage/editor-rtl.css 799 B 0 B
build/styles/block-library/nextpage/editor-rtl.min.css 392 B 0 B
build/styles/block-library/nextpage/editor.css 800 B 0 B
build/styles/block-library/nextpage/editor.min.css 392 B 0 B
build/styles/block-library/page-list/editor-rtl.css 1.18 kB 0 B
build/styles/block-library/page-list/editor-rtl.min.css 356 B 0 B
build/styles/block-library/page-list/editor.css 1.18 kB 0 B
build/styles/block-library/page-list/editor.min.css 356 B 0 B
build/styles/block-library/page-list/style-rtl.css 207 B 0 B
build/styles/block-library/page-list/style-rtl.min.css 192 B 0 B
build/styles/block-library/page-list/style.css 207 B 0 B
build/styles/block-library/page-list/style.min.css 192 B 0 B
build/styles/block-library/paragraph/editor-rtl.css 315 B 0 B
build/styles/block-library/paragraph/editor-rtl.min.css 292 B 0 B
build/styles/block-library/paragraph/editor.css 314 B 0 B
build/styles/block-library/paragraph/editor.min.css 292 B 0 B
build/styles/block-library/paragraph/style-rtl.css 746 B 0 B
build/styles/block-library/paragraph/style-rtl.min.css 341 B 0 B
build/styles/block-library/paragraph/style.css 752 B 0 B
build/styles/block-library/paragraph/style.min.css 340 B 0 B
build/styles/block-library/playlist-track/style-rtl.css 453 B 0 B
build/styles/block-library/playlist-track/style-rtl.min.css 420 B 0 B
build/styles/block-library/playlist-track/style.css 453 B 0 B
build/styles/block-library/playlist-track/style.min.css 420 B 0 B
build/styles/block-library/playlist/editor-rtl.css 120 B 0 B
build/styles/block-library/playlist/editor-rtl.min.css 112 B 0 B
build/styles/block-library/playlist/editor.css 120 B 0 B
build/styles/block-library/playlist/editor.min.css 112 B 0 B
build/styles/block-library/playlist/style-rtl.css 1.52 kB 0 B
build/styles/block-library/playlist/style-rtl.min.css 1.42 kB 0 B
build/styles/block-library/playlist/style.css 1.52 kB 0 B
build/styles/block-library/playlist/style.min.css 1.42 kB 0 B
build/styles/block-library/post-author-biography/style-rtl.css 96 B 0 B
build/styles/block-library/post-author-biography/style-rtl.min.css 86 B 0 B
build/styles/block-library/post-author-biography/style.css 96 B 0 B
build/styles/block-library/post-author-biography/style.min.css 86 B 0 B
build/styles/block-library/post-author-name/style-rtl.css 76 B 0 B
build/styles/block-library/post-author-name/style-rtl.min.css 69 B 0 B
build/styles/block-library/post-author-name/style.css 76 B 0 B
build/styles/block-library/post-author-name/style.min.css 69 B 0 B
build/styles/block-library/post-author/editor-rtl.css 490 B 0 B
build/styles/block-library/post-author/editor-rtl.min.css 104 B 0 B
build/styles/block-library/post-author/editor.css 490 B 0 B
build/styles/block-library/post-author/editor.min.css 104 B 0 B
build/styles/block-library/post-author/style-rtl.css 213 B 0 B
build/styles/block-library/post-author/style-rtl.min.css 188 B 0 B
build/styles/block-library/post-author/style.css 214 B 0 B
build/styles/block-library/post-author/style.min.css 189 B 0 B
build/styles/block-library/post-comments-count/style-rtl.css 79 B 0 B
build/styles/block-library/post-comments-count/style-rtl.min.css 72 B 0 B
build/styles/block-library/post-comments-count/style.css 79 B 0 B
build/styles/block-library/post-comments-count/style.min.css 72 B 0 B
build/styles/block-library/post-comments-form/editor-rtl.css 104 B 0 B
build/styles/block-library/post-comments-form/editor-rtl.min.css 96 B 0 B
build/styles/block-library/post-comments-form/editor.css 104 B 0 B
build/styles/block-library/post-comments-form/editor.min.css 96 B 0 B
build/styles/block-library/post-comments-form/style-rtl.css 585 B 0 B
build/styles/block-library/post-comments-form/style-rtl.min.css 525 B 0 B
build/styles/block-library/post-comments-form/style.css 584 B 0 B
build/styles/block-library/post-comments-form/style.min.css 525 B 0 B
build/styles/block-library/post-comments-link/style-rtl.css 78 B 0 B
build/styles/block-library/post-comments-link/style-rtl.min.css 71 B 0 B
build/styles/block-library/post-comments-link/style.css 78 B 0 B
build/styles/block-library/post-comments-link/style.min.css 71 B 0 B
build/styles/block-library/post-content/style-rtl.css 68 B 0 B
build/styles/block-library/post-content/style-rtl.min.css 61 B 0 B
build/styles/block-library/post-content/style.css 68 B 0 B
build/styles/block-library/post-content/style.min.css 61 B 0 B
build/styles/block-library/post-date/style-rtl.css 69 B 0 B
build/styles/block-library/post-date/style-rtl.min.css 62 B 0 B
build/styles/block-library/post-date/style.css 69 B 0 B
build/styles/block-library/post-date/style.min.css 62 B 0 B
build/styles/block-library/post-excerpt/editor-rtl.css 78 B 0 B
build/styles/block-library/post-excerpt/editor-rtl.min.css 71 B 0 B
build/styles/block-library/post-excerpt/editor.css 78 B 0 B
build/styles/block-library/post-excerpt/editor.min.css 71 B 0 B
build/styles/block-library/post-excerpt/style-rtl.css 171 B 0 B
build/styles/block-library/post-excerpt/style-rtl.min.css 155 B 0 B
build/styles/block-library/post-excerpt/style.css 171 B 0 B
build/styles/block-library/post-excerpt/style.min.css 155 B 0 B
build/styles/block-library/post-featured-image/editor-rtl.css 1.14 kB 0 B
build/styles/block-library/post-featured-image/editor-rtl.min.css 719 B 0 B
build/styles/block-library/post-featured-image/editor.css 1.14 kB 0 B
build/styles/block-library/post-featured-image/editor.min.css 717 B 0 B
build/styles/block-library/post-featured-image/style-rtl.css 392 B 0 B
build/styles/block-library/post-featured-image/style-rtl.min.css 347 B 0 B
build/styles/block-library/post-featured-image/style.css 392 B 0 B
build/styles/block-library/post-featured-image/style.min.css 347 B 0 B
build/styles/block-library/post-navigation-link/style-rtl.css 234 B 0 B
build/styles/block-library/post-navigation-link/style-rtl.min.css 215 B 0 B
build/styles/block-library/post-navigation-link/style.css 245 B 0 B
build/styles/block-library/post-navigation-link/style.min.css 214 B 0 B
build/styles/block-library/post-template/style-rtl.css 1.27 kB 0 B
build/styles/block-library/post-template/style-rtl.min.css 441 B 0 B
build/styles/block-library/post-template/style.css 1.27 kB 0 B
build/styles/block-library/post-template/style.min.css 441 B 0 B
build/styles/block-library/post-terms/style-rtl.css 108 B 0 B
build/styles/block-library/post-terms/style-rtl.min.css 96 B 0 B
build/styles/block-library/post-terms/style.css 108 B 0 B
build/styles/block-library/post-terms/style.min.css 96 B 0 B
build/styles/block-library/post-time-to-read/style-rtl.css 77 B 0 B
build/styles/block-library/post-time-to-read/style-rtl.min.css 70 B 0 B
build/styles/block-library/post-time-to-read/style.css 77 B 0 B
build/styles/block-library/post-time-to-read/style.min.css 70 B 0 B
build/styles/block-library/post-title/style-rtl.css 175 B 0 B
build/styles/block-library/post-title/style-rtl.min.css 162 B 0 B
build/styles/block-library/post-title/style.css 175 B 0 B
build/styles/block-library/post-title/style.min.css 162 B 0 B
build/styles/block-library/preformatted/style-rtl.css 511 B 0 B
build/styles/block-library/preformatted/style-rtl.min.css 125 B 0 B
build/styles/block-library/preformatted/style.css 511 B 0 B
build/styles/block-library/preformatted/style.min.css 125 B 0 B
build/styles/block-library/pullquote/editor-rtl.css 146 B 0 B
build/styles/block-library/pullquote/editor-rtl.min.css 133 B 0 B
build/styles/block-library/pullquote/editor.css 146 B 0 B
build/styles/block-library/pullquote/editor.min.css 133 B 0 B
build/styles/block-library/pullquote/style-rtl.css 765 B 0 B
build/styles/block-library/pullquote/style-rtl.min.css 365 B 0 B
build/styles/block-library/pullquote/style.css 764 B 0 B
build/styles/block-library/pullquote/style.min.css 365 B 0 B
build/styles/block-library/pullquote/theme-rtl.css 195 B 0 B
build/styles/block-library/pullquote/theme-rtl.min.css 176 B 0 B
build/styles/block-library/pullquote/theme.css 195 B 0 B
build/styles/block-library/pullquote/theme.min.css 176 B 0 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 134 B 0 B
build/styles/block-library/query-pagination-numbers/editor-rtl.min.css 121 B 0 B
build/styles/block-library/query-pagination-numbers/editor.css 144 B 0 B
build/styles/block-library/query-pagination-numbers/editor.min.css 118 B 0 B
build/styles/block-library/query-pagination/editor-rtl.css 168 B 0 B
build/styles/block-library/query-pagination/editor-rtl.min.css 154 B 0 B
build/styles/block-library/query-pagination/editor.css 168 B 0 B
build/styles/block-library/query-pagination/editor.min.css 154 B 0 B
build/styles/block-library/query-pagination/style-rtl.css 254 B 0 B
build/styles/block-library/query-pagination/style-rtl.min.css 237 B 0 B
build/styles/block-library/query-pagination/style.css 265 B 0 B
build/styles/block-library/query-pagination/style.min.css 237 B 0 B
build/styles/block-library/query-title/style-rtl.css 71 B 0 B
build/styles/block-library/query-title/style-rtl.min.css 64 B 0 B
build/styles/block-library/query-title/style.css 71 B 0 B
build/styles/block-library/query-title/style.min.css 64 B 0 B
build/styles/block-library/query-total/style-rtl.css 71 B 0 B
build/styles/block-library/query-total/style-rtl.min.css 64 B 0 B
build/styles/block-library/query-total/style.css 71 B 0 B
build/styles/block-library/query-total/style.min.css 64 B 0 B
build/styles/block-library/query/editor-rtl.css 1.28 kB 0 B
build/styles/block-library/query/editor-rtl.min.css 438 B 0 B
build/styles/block-library/query/editor.css 1.28 kB 0 B
build/styles/block-library/query/editor.min.css 438 B 0 B
build/styles/block-library/quote/style-rtl.css 255 B 0 B
build/styles/block-library/quote/style-rtl.min.css 238 B 0 B
build/styles/block-library/quote/style.css 256 B 0 B
build/styles/block-library/quote/style.min.css 238 B 0 B
build/styles/block-library/quote/theme-rtl.css 253 B 0 B
build/styles/block-library/quote/theme-rtl.min.css 233 B 0 B
build/styles/block-library/quote/theme.css 254 B 0 B
build/styles/block-library/quote/theme.min.css 236 B 0 B
build/styles/block-library/read-more/style-rtl.css 146 B 0 B
build/styles/block-library/read-more/style-rtl.min.css 131 B 0 B
build/styles/block-library/read-more/style.css 146 B 0 B
build/styles/block-library/read-more/style.min.css 131 B 0 B
build/styles/block-library/reset-rtl.css 936 B 0 B
build/styles/block-library/reset-rtl.min.css 467 B 0 B
build/styles/block-library/reset.css 936 B 0 B
build/styles/block-library/reset.min.css 467 B 0 B
build/styles/block-library/rss/editor-rtl.css 144 B 0 B
build/styles/block-library/rss/editor-rtl.min.css 126 B 0 B
build/styles/block-library/rss/editor.css 144 B 0 B
build/styles/block-library/rss/editor.min.css 126 B 0 B
build/styles/block-library/rss/style-rtl.css 1.11 kB 0 B
build/styles/block-library/rss/style-rtl.min.css 284 B 0 B
build/styles/block-library/rss/style.css 1.12 kB 0 B
build/styles/block-library/rss/style.min.css 283 B 0 B
build/styles/block-library/search/editor-rtl.css 217 B 0 B
build/styles/block-library/search/editor-rtl.min.css 199 B 0 B
build/styles/block-library/search/editor.css 217 B 0 B
build/styles/block-library/search/editor.min.css 199 B 0 B
build/styles/block-library/search/style-rtl.css 1.1 kB 0 B
build/styles/block-library/search/style-rtl.min.css 665 B 0 B
build/styles/block-library/search/style.css 1.1 kB 0 B
build/styles/block-library/search/style.min.css 666 B 0 B
build/styles/block-library/search/theme-rtl.css 130 B 0 B
build/styles/block-library/search/theme-rtl.min.css 113 B 0 B
build/styles/block-library/search/theme.css 130 B 0 B
build/styles/block-library/search/theme.min.css 113 B 0 B
build/styles/block-library/separator/editor-rtl.css 106 B 0 B
build/styles/block-library/separator/editor-rtl.min.css 100 B 0 B
build/styles/block-library/separator/editor.css 106 B 0 B
build/styles/block-library/separator/editor.min.css 100 B 0 B
build/styles/block-library/separator/style-rtl.css 284 B 0 B
build/styles/block-library/separator/style-rtl.min.css 248 B 0 B
build/styles/block-library/separator/style.css 297 B 0 B
build/styles/block-library/separator/style.min.css 248 B 0 B
build/styles/block-library/separator/theme-rtl.css 226 B 0 B
build/styles/block-library/separator/theme-rtl.min.css 195 B 0 B
build/styles/block-library/separator/theme.css 226 B 0 B
build/styles/block-library/separator/theme.min.css 195 B 0 B
build/styles/block-library/shortcode/editor-rtl.css 1.1 kB 0 B
build/styles/block-library/shortcode/editor-rtl.min.css 286 B 0 B
build/styles/block-library/shortcode/editor.css 1.1 kB 0 B
build/styles/block-library/shortcode/editor.min.css 286 B 0 B
build/styles/block-library/site-logo/editor-rtl.css 1.12 kB 0 B
build/styles/block-library/site-logo/editor-rtl.min.css 696 B 0 B
build/styles/block-library/site-logo/editor.css 1.12 kB 0 B
build/styles/block-library/site-logo/editor.min.css 692 B 0 B
build/styles/block-library/site-logo/style-rtl.css 239 B 0 B
build/styles/block-library/site-logo/style-rtl.min.css 218 B 0 B
build/styles/block-library/site-logo/style.css 238 B 0 B
build/styles/block-library/site-logo/style.min.css 218 B 0 B
build/styles/block-library/site-tagline/editor-rtl.css 94 B 0 B
build/styles/block-library/site-tagline/editor-rtl.min.css 87 B 0 B
build/styles/block-library/site-tagline/editor.css 94 B 0 B
build/styles/block-library/site-tagline/editor.min.css 87 B 0 B
build/styles/block-library/site-tagline/style-rtl.css 72 B 0 B
build/styles/block-library/site-tagline/style-rtl.min.css 65 B 0 B
build/styles/block-library/site-tagline/style.css 72 B 0 B
build/styles/block-library/site-tagline/style.min.css 65 B 0 B
build/styles/block-library/site-title/editor-rtl.css 93 B 0 B
build/styles/block-library/site-title/editor-rtl.min.css 85 B 0 B
build/styles/block-library/site-title/editor.css 93 B 0 B
build/styles/block-library/site-title/editor.min.css 85 B 0 B
build/styles/block-library/site-title/style-rtl.css 153 B 0 B
build/styles/block-library/site-title/style-rtl.min.css 143 B 0 B
build/styles/block-library/site-title/style.css 153 B 0 B
build/styles/block-library/site-title/style.min.css 143 B 0 B
build/styles/block-library/social-link/editor-rtl.css 346 B 0 B
build/styles/block-library/social-link/editor-rtl.min.css 314 B 0 B
build/styles/block-library/social-link/editor.css 348 B 0 B
build/styles/block-library/social-link/editor.min.css 314 B 0 B
build/styles/block-library/social-links/editor-rtl.css 737 B 0 B
build/styles/block-library/social-links/editor-rtl.min.css 339 B 0 B
build/styles/block-library/social-links/editor.css 738 B 0 B
build/styles/block-library/social-links/editor.min.css 338 B 0 B
build/styles/block-library/social-links/style-rtl.css 1.57 kB 0 B
build/styles/block-library/social-links/style-rtl.min.css 1.51 kB 0 B
build/styles/block-library/social-links/style.css 1.57 kB 0 B
build/styles/block-library/social-links/style.min.css 1.51 kB 0 B
build/styles/block-library/spacer/editor-rtl.css 774 B 0 B
build/styles/block-library/spacer/editor-rtl.min.css 346 B 0 B
build/styles/block-library/spacer/editor.css 774 B 0 B
build/styles/block-library/spacer/editor.min.css 346 B 0 B
build/styles/block-library/spacer/style-rtl.css 55 B 0 B
build/styles/block-library/spacer/style-rtl.min.css 48 B 0 B
build/styles/block-library/spacer/style.css 55 B 0 B
build/styles/block-library/spacer/style.min.css 48 B 0 B
build/styles/block-library/style-rtl.css 21.6 kB 0 B
build/styles/block-library/style-rtl.min.css 18.1 kB 0 B
build/styles/block-library/style.css 21.7 kB 0 B
build/styles/block-library/style.min.css 18 kB 0 B
build/styles/block-library/tab-list/editor-rtl.css 107 B 0 B
build/styles/block-library/tab-list/editor-rtl.min.css 97 B 0 B
build/styles/block-library/tab-list/editor.css 107 B 0 B
build/styles/block-library/tab-list/editor.min.css 97 B 0 B
build/styles/block-library/tab-panel/style-rtl.css 238 B 0 B
build/styles/block-library/tab-panel/style-rtl.min.css 215 B 0 B
build/styles/block-library/tab-panel/style.css 238 B 0 B
build/styles/block-library/tab-panel/style.min.css 215 B 0 B
build/styles/block-library/tab-panels/style-rtl.css 76 B 0 B
build/styles/block-library/tab-panels/style-rtl.min.css 65 B 0 B
build/styles/block-library/tab-panels/style.css 76 B 0 B
build/styles/block-library/tab-panels/style.min.css 65 B 0 B
build/styles/block-library/tab/editor-rtl.css 160 B 0 B
build/styles/block-library/tab/editor-rtl.min.css 148 B 0 B
build/styles/block-library/tab/editor.css 160 B 0 B
build/styles/block-library/tab/editor.min.css 148 B 0 B
build/styles/block-library/tab/style-rtl.css 397 B 0 B
build/styles/block-library/tab/style-rtl.min.css 352 B 0 B
build/styles/block-library/tab/style.css 398 B 0 B
build/styles/block-library/tab/style.min.css 356 B 0 B
build/styles/block-library/table-of-contents/style-rtl.css 89 B 0 B
build/styles/block-library/table-of-contents/style-rtl.min.css 83 B 0 B
build/styles/block-library/table-of-contents/style.css 89 B 0 B
build/styles/block-library/table-of-contents/style.min.css 83 B 0 B
build/styles/block-library/table/editor-rtl.css 1.25 kB 0 B
build/styles/block-library/table/editor-rtl.min.css 394 B 0 B
build/styles/block-library/table/editor.css 1.25 kB 0 B
build/styles/block-library/table/editor.min.css 394 B 0 B
build/styles/block-library/table/style-rtl.css 1.06 kB 0 B
build/styles/block-library/table/style-rtl.min.css 641 B 0 B
build/styles/block-library/table/style.css 1.06 kB 0 B
build/styles/block-library/table/style.min.css 640 B 0 B
build/styles/block-library/table/theme-rtl.css 985 B 0 B
build/styles/block-library/table/theme-rtl.min.css 152 B 0 B
build/styles/block-library/table/theme.css 985 B 0 B
build/styles/block-library/table/theme.min.css 152 B 0 B
build/styles/block-library/tabs/style-rtl.css 64 B 0 B
build/styles/block-library/tabs/style-rtl.min.css 57 B 0 B
build/styles/block-library/tabs/style.css 64 B 0 B
build/styles/block-library/tabs/style.min.css 57 B 0 B
build/styles/block-library/tag-cloud/style-rtl.css 283 B 0 B
build/styles/block-library/tag-cloud/style-rtl.min.css 248 B 0 B
build/styles/block-library/tag-cloud/style.css 283 B 0 B
build/styles/block-library/tag-cloud/style.min.css 248 B 0 B
build/styles/block-library/template-part/editor-rtl.css 1.2 kB 0 B
build/styles/block-library/template-part/editor-rtl.min.css 368 B 0 B
build/styles/block-library/template-part/editor.css 1.2 kB 0 B
build/styles/block-library/template-part/editor.min.css 368 B 0 B
build/styles/block-library/template-part/theme-rtl.css 492 B 0 B
build/styles/block-library/template-part/theme-rtl.min.css 113 B 0 B
build/styles/block-library/template-part/theme.css 492 B 0 B
build/styles/block-library/template-part/theme.min.css 113 B 0 B
build/styles/block-library/term-count/style-rtl.css 70 B 0 B
build/styles/block-library/term-count/style-rtl.min.css 63 B 0 B
build/styles/block-library/term-count/style.css 70 B 0 B
build/styles/block-library/term-count/style.min.css 63 B 0 B
build/styles/block-library/term-description/style-rtl.css 138 B 0 B
build/styles/block-library/term-description/style-rtl.min.css 126 B 0 B
build/styles/block-library/term-description/style.css 138 B 0 B
build/styles/block-library/term-description/style.min.css 126 B 0 B
build/styles/block-library/term-name/style-rtl.css 69 B 0 B
build/styles/block-library/term-name/style-rtl.min.css 62 B 0 B
build/styles/block-library/term-name/style.css 69 B 0 B
build/styles/block-library/term-name/style.min.css 62 B 0 B
build/styles/block-library/term-template/editor-rtl.css 267 B 0 B
build/styles/block-library/term-template/editor-rtl.min.css 225 B 0 B
build/styles/block-library/term-template/editor.css 267 B 0 B
build/styles/block-library/term-template/editor.min.css 225 B 0 B
build/styles/block-library/term-template/style-rtl.css 124 B 0 B
build/styles/block-library/term-template/style-rtl.min.css 114 B 0 B
build/styles/block-library/term-template/style.css 124 B 0 B
build/styles/block-library/term-template/style.min.css 114 B 0 B
build/styles/block-library/text-columns/editor-rtl.css 481 B 0 B
build/styles/block-library/text-columns/editor-rtl.min.css 95 B 0 B
build/styles/block-library/text-columns/editor.css 481 B 0 B
build/styles/block-library/text-columns/editor.min.css 95 B 0 B
build/styles/block-library/text-columns/style-rtl.css 177 B 0 B
build/styles/block-library/text-columns/style-rtl.min.css 165 B 0 B
build/styles/block-library/text-columns/style.css 177 B 0 B
build/styles/block-library/text-columns/style.min.css 165 B 0 B
build/styles/block-library/theme-rtl.css 1.59 kB 0 B
build/styles/block-library/theme-rtl.min.css 715 B 0 B
build/styles/block-library/theme.css 1.6 kB 0 B
build/styles/block-library/theme.min.css 719 B 0 B
build/styles/block-library/verse/style-rtl.css 155 B 0 B
build/styles/block-library/verse/style-rtl.min.css 137 B 0 B
build/styles/block-library/verse/style.css 155 B 0 B
build/styles/block-library/verse/style.min.css 137 B 0 B
build/styles/block-library/video/editor-rtl.css 839 B 0 B
build/styles/block-library/video/editor-rtl.min.css 428 B 0 B
build/styles/block-library/video/editor.css 840 B 0 B
build/styles/block-library/video/editor.min.css 428 B 0 B
build/styles/block-library/video/style-rtl.css 1.02 kB 0 B
build/styles/block-library/video/style-rtl.min.css 202 B 0 B
build/styles/block-library/video/style.css 1.02 kB 0 B
build/styles/block-library/video/style.min.css 202 B 0 B
build/styles/block-library/video/theme-rtl.css 967 B 0 B
build/styles/block-library/video/theme-rtl.min.css 134 B 0 B
build/styles/block-library/video/theme.css 967 B 0 B
build/styles/block-library/video/theme.min.css 134 B 0 B
build/styles/commands/style-rtl.css 2.07 kB 0 B
build/styles/commands/style-rtl.min.css 1.17 kB 0 B
build/styles/commands/style.css 2.06 kB 0 B
build/styles/commands/style.min.css 1.17 kB 0 B
build/styles/components/style-rtl.css 17.8 kB 0 B
build/styles/components/style-rtl.min.css 14.7 kB 0 B
build/styles/components/style.css 17.9 kB 0 B
build/styles/components/style.min.css 14.8 kB 0 B
build/styles/customize-widgets/style-rtl.css 2.35 kB 0 B
build/styles/customize-widgets/style-rtl.min.css 1.44 kB 0 B
build/styles/customize-widgets/style.css 2.35 kB 0 B
build/styles/customize-widgets/style.min.css 1.44 kB 0 B
build/styles/edit-post/classic-rtl.css 1.29 kB 0 B
build/styles/edit-post/classic-rtl.min.css 425 B 0 B
build/styles/edit-post/classic.css 1.31 kB 0 B
build/styles/edit-post/classic.min.css 428 B 0 B
build/styles/edit-post/experimental-admin-bar-in-editor-rtl.css 550 B 0 B
build/styles/edit-post/experimental-admin-bar-in-editor-rtl.min.css 513 B 0 B
build/styles/edit-post/experimental-admin-bar-in-editor.css 551 B 0 B
build/styles/edit-post/experimental-admin-bar-in-editor.min.css 514 B 0 B
build/styles/edit-post/style-rtl.css 3.8 kB 0 B
build/styles/edit-post/style-rtl.min.css 2.48 kB 0 B
build/styles/edit-post/style.css 3.81 kB 0 B
build/styles/edit-post/style.min.css 2.49 kB 0 B
build/styles/edit-site/experimental-admin-bar-in-editor-rtl.css 502 B 0 B
build/styles/edit-site/experimental-admin-bar-in-editor-rtl.min.css 474 B 0 B
build/styles/edit-site/experimental-admin-bar-in-editor.css 502 B 0 B
build/styles/edit-site/experimental-admin-bar-in-editor.min.css 474 B 0 B
build/styles/edit-site/style-rtl.css 21.3 kB 0 B
build/styles/edit-site/style-rtl.min.css 17.4 kB 0 B
build/styles/edit-site/style.css 21.3 kB 0 B
build/styles/edit-site/style.min.css 17.4 kB 0 B
build/styles/edit-widgets/style-rtl.css 4.85 kB 0 B
build/styles/edit-widgets/style-rtl.min.css 3.52 kB 0 B
build/styles/edit-widgets/style.css 4.85 kB 0 B
build/styles/edit-widgets/style.min.css 3.52 kB 0 B
build/styles/editor/style-rtl.css 29.4 kB 0 B
build/styles/editor/style-rtl.min.css 24.9 kB 0 B
build/styles/editor/style.css 29.5 kB 0 B
build/styles/editor/style.min.css 24.9 kB 0 B
build/styles/format-library/style-rtl.css 735 B 0 B
build/styles/format-library/style-rtl.min.css 326 B 0 B
build/styles/format-library/style.css 746 B 0 B
build/styles/format-library/style.min.css 326 B 0 B
build/styles/list-reusable-blocks/style-rtl.css 1.03 kB 0 B
build/styles/list-reusable-blocks/style-rtl.min.css 210 B 0 B
build/styles/list-reusable-blocks/style.css 1.03 kB 0 B
build/styles/list-reusable-blocks/style.min.css 211 B 0 B
build/styles/media-utils/style-rtl.css 2.12 kB 0 B
build/styles/media-utils/style-rtl.min.css 1.2 kB 0 B
build/styles/media-utils/style.css 2.11 kB 0 B
build/styles/media-utils/style.min.css 1.2 kB 0 B
build/styles/notices/style-rtl.css 121 B 0 B
build/styles/notices/style-rtl.min.css 106 B 0 B
build/styles/notices/style.css 121 B 0 B
build/styles/notices/style.min.css 106 B 0 B
build/styles/nux/style-rtl.css 118 B 0 B
build/styles/nux/style-rtl.min.css 0 B 0 B 🆕
build/styles/nux/style.css 118 B 0 B
build/styles/nux/style.min.css 0 B 0 B 🆕
build/styles/patterns/style-rtl.css 1.46 kB 0 B
build/styles/patterns/style-rtl.min.css 611 B 0 B
build/styles/patterns/style.css 1.46 kB 0 B
build/styles/patterns/style.min.css 611 B 0 B
build/styles/preferences/style-rtl.css 1.26 kB 0 B
build/styles/preferences/style-rtl.min.css 415 B 0 B
build/styles/preferences/style.css 1.26 kB 0 B
build/styles/preferences/style.min.css 415 B 0 B
build/styles/reusable-blocks/style-rtl.css 1.11 kB 0 B
build/styles/reusable-blocks/style-rtl.min.css 275 B 0 B
build/styles/reusable-blocks/style.css 1.11 kB 0 B
build/styles/reusable-blocks/style.min.css 275 B 0 B
build/styles/widgets/style-rtl.css 2.05 kB 0 B
build/styles/widgets/style-rtl.min.css 1.16 kB 0 B
build/styles/widgets/style.css 2.06 kB 0 B
build/styles/widgets/style.min.css 1.16 kB 0 B

compressed-size-action

@alecgeatches

alecgeatches commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

The first change in this PR adds an onUndoStackChange() callback to the sync manager that is used to update core-data when an undo stack is added. With this discrepancy fixed, this causes the inner-blocks-templates.spec.js test to fail above because the previously unrendered undo manager update is now correctly updating UI state.

The test failure is now accurately showing the Yjs undo manager adding an incorrect undo stack item in the editor. The next step is to ensure that async template syncs do not create an undo manager item to fix the test.

@github-actions github-actions Bot added the [Package] Block editor /packages/block-editor label Jun 1, 2026
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

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

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

@alecgeatches
alecgeatches marked this pull request as ready for review June 1, 2026 20:40
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

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

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

Co-authored-by: alecgeatches <alecgeatches@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>

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

@alecgeatches
alecgeatches requested a review from youknowriad June 1, 2026 20:40
@alecgeatches

alecgeatches commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

@youknowriad I'd love for you to have a look at the changes in this PR. You identified the root cause specifically in your comment here when the sync manager was introduced, and now a small timing change in another PR (#78756) rediscovered the problem.

Note that the solution here uses a sync manager callback instead of a store to communicate with core-data, which seems a bit simpler and aligns with the existing ways we communicate outside of the sync manager.

updateOptions.undoIgnore = true;
}
updateParent( blocksForParent, updateOptions );
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't understand why there are changes to the block-editor package and how they relate to the current PR?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good question, I didn't explain the flow.

useBlockSync is the place where block-editor changes are converted into the onInput / onChange callbacks that eventually call editEntityRecord. This is part of the plumbing into core data. Here's the flow:

  1. We insert an async template and don't want it to create an undo item. The "ignore history in this undo" starts in useInnerBlockTemplateSync, which calls __unstableMarkNextChangeAsNotPersistent( { history: 'ignore' } );.

  2. The block-editor store records that as the next block change’s history mode, and exposes it through a selector.

  3. For the line you commented on above, useBlockSync bridges from block-editor to the core-data onInput callback. It reads the history mode and adds undoIgnore: true when the mode is history: 'ignore' to the onInput callback.

  4. useEntityBlockEditor.onInput forwards those options into editEntityRecord.

  5. editEntityRecord understands undoIgnore, and merges into the CRDT with LOCAL_UNDO_IGNORED_ORIGIN, so the Yjs document still receives the template change but the Yjs undo manager does not capture it.

The undoIgnore flag plumbing is used communicate to core-data to treat the template insertion differently than a normal cached block edit and have it avoid creating an undo item.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry for the confusion, I was not pointing that line specifically, It's just that in my mind, the bug that I highlighted before has nothing to do with block-editor store, it was a core-data selector, so I don't understand how the changes to block-editor are related to that bug fix.

@alecgeatches alecgeatches Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Got it. In my mind, the connection to the original comment you left is this:

Should we try to address it or should we assume that if there's an undo or redo that is created something else in the "state" of core-data is probably changing at the same time (which triggers the selectors again). (Basically accept that the bug exists but is hidden, or hard to reproduce)

In dependent PR #78756, we made a small timing adjustment to CRDT updates which caused hasUndo and hasRedo to update in-time with the actual Yjs undo stack, which it was not doing before. This revealed that Yjs was incorrectly adding an undo stack item, but it wasn't reflected in the UI for the test because "core-data is probably changing at the same time" wasn't actually happening. Once we started correctly reflecting the undo state in the UI, the test promptly failed because we weren't supposed to be creating an undo item. The behavior was always wrong, but we didn't see it because undo stack UI updates weren't being dispatched. That's the problem you described.

This PR address both your comment and the break:

  1. We're now ensuring that stack updates, regardless of timing, actually update UI state instead of relying on "probably changing" second-order effects.

  2. One of the consequences of correct undo stack UI display is the failure of the inner-blocks-templates.spec.js test because of an incorrectly-created undo item. The rest of the changes in this PR are to address the underlying issue to allow Yjs to correctly skip an undo item for this particular case.

    The changes are largely in the block editor as the originator of the __unstableMarkNextChangeAsNotPersistent signal, and the place where we can understand the intended meaning of that signal.

Comment thread packages/core-data/src/reducer.js Outdated

// This reducer intentionally stores no data. It only changes reference so the
// registry notifies core-data subscribers to refresh sync undo manager state.
export function syncUndoManagerChangeReference( state = {}, action ) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I was expecting this state to be used somewhere, I don't see it used anywhere, am I missing something?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I guess what this does right now is that it forces the subscribe of the "store" to be called again, the problem though is that it doesn't force useSelect calls to rerender

A useSelect that does:

const undoManager = useSelect((select) => select('core-data').getUndoManager(), []); const undo = undoManager.getUndo()

fails to render.

A useSelect that does would

const undo = useSelect((select) => select('core-data').getUndoManager().getUndo(), []);


There's a way to potentially solve both by making getUndoManager return a "cloned" instance of the real undo manager when syncUndoManagerChangeReference changes. (use a memoized selector that does return {...getSyncManager()?.undoManager}

@alecgeatches alecgeatches Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That's a good point! I don't really like how the undoManager reference changes to show that the undo stack has changed, it's pretty indirect and maybe hard to understand. Most uses of undoManager are to call functions on it like .undo() or .addToScope(), and in those places a changing reference in response to undo stack changes doesn't make a lot of sense.

Working on a refactor that uses actual hasUndo/hasRedo state to update the UI instead so we don't need to mutate the underlying manager reference.

@alecgeatches alecgeatches Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks, this helped to clean things up. I ended up changing the implementation in e201585 so we no longer rely on getUndoManager() mutation through a reference or spread.

Instead, the sync undo manager now sends undo/redo into core-data state, and the public hasUndo() / hasRedo() selectors read from that state when the sync manager is active. That gives the editor UI a direct state dependency to subscribe to, rather than relying on getUndoManager() returning a new reference.

So your code above:

const undoManager = useSelect((select) => select('core-data').getUndoManager(), []);
const undo = undoManager.getUndo()

still won't update when a new undo/redo is available, but instead hasUndo and hasRedo are reactive:

const hasUndo = useSelect(( select ) => select('core-data').hasUndo(), []);

This avoids the dummy reference/clone and the related side-effects. getUndoManager() still remains returns the actual manager object, while reactive UI depends on plain store state.

This does mean the first code snippet above will not be expected to re-render, because it selects the manager object rather than undo availability. But that seems okay for this PR, since the existing undo/redo UI uses hasEditorUndo() / hasEditorRedo() which is derived straight from core-data hasUndo() / hasRedo().

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

That seems like a better path forward indeed, but should we remove the getUndoManager selector or is it still needed?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think it is still needed, but it has a smaller role. We can now read hasUndo/hasRedo directly from core-data state, but actions still need getUndoManager() to perform the actual operations.

We still use it to pass actions into the undo manager like in editEntityRecord and undo/redo operations. The selector is also a good abstraction that picks the sync undo manager when RTC is active and falls back to the default WordPress undo manager otherwise. So still useful, I think.

* as not persistent.
*
* By default, non-persistent changes may still merge into undo history. Use
* `history: 'ignore'` for derived changes that should never be captured by undo.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm having a hard time understanding the difference between "non persistent" change and a change that is ignored from history. My memory might be failing me a bit.

@alecgeatches alecgeatches Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good question, I think the terminology is confusing. My apologies in advance for the wall of text.

"Non-persistent" is the block-editor distinction between sending a block-editor change through onInput versus onChange (trunk link). A non-persistent/onInput change does not create a new undo stack item by itself, but can still end up in history. The most obvious use is in typing, where each character should update the editor immediately but should not create a separate undo level. Those are staged and later converted into a persistent change after a timeout so they create a new undo stack item.

However, these "non-persistent" markers are used with different purposes. Edit from the PR description:

Typically __unstableMarkNextChangeAsNotPersistent() calls are proceeded by an onChange() call, and the flag is used to mark "merge the next operation into the prior item". However in useInnerBlockTemplateSync() the non-persistent call is NOT paired with an existing change. On a fresh page load, which happens in the test, there is no prior undo item to roll changes into, and so the Yjs undo manager creates a fresh undo for the entity change anyway.

In other uses of __unstableMarkNextChangeAsNotPersistent(), the history behavior is implicitly merge, and the change is treated as an update that should be combined into another change.

Before this PR, both typing and template sync reach the undo layer with the same shape, non-persistent or isNewUndoLevel: false in the sync path. That is enough for the built-in WordPress undo manager because it has a staged-record concept. Cached records are held in stagedRecord and do not affect hasUndo() until they are later merged into history.

Yjs works differently. It observes CRDT transactions as they happen and modifies the local undo stack outside of the editor. We have tools to stopCapturing() and use local transactions to avoid creating undo items in Yjs (like in this PR), but we need enough information to avoid undo stack manipulation when we're transacting document changes. If a non-persistent change is initiated by the editor and there is no prior stack item to merge into (as in the test), without other context, Yjs will still create an undo stack item.

That is why this template still case can be fixed with the history: 'ignore' mode. The template update should still be applied and synced, but it has no user edit to merge into, so it needs to use an untracked origin and be skipped by undo history entirely. Implementing true WordPress-style staging for Yjs would require a forked undo-manager layer, or some rough manipulation of Yjs stack internals.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok I'm going to ping @ellatrix here just for awareness. This feels a bit complex and I just to want make sure we're not shooting ourselves in the foot by this extra complexity.

@youknowriad youknowriad left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approving to unblock this. Noting that I'd have preferred to avoid the block-editor package changes, but seems like there's no way around it.

@alecgeatches

Copy link
Copy Markdown
Contributor Author

Thank you @youknowriad!

@alecgeatches
alecgeatches merged commit cd45134 into trunk Jun 4, 2026
50 of 60 checks passed
@alecgeatches
alecgeatches deleted the fix/rtc-deferred-undo branch June 4, 2026 16:01
@github-actions github-actions Bot added this to the Gutenberg 23.4 milestone Jun 4, 2026
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Jun 30, 2026
This updates the pinned commit hash of the Gutenberg repository from `14db4ab9395a9e96430eed678e4288a59eecbd15 ` (version `23.3.0`) to `14db4ab9395a9e96430eed678e4288a59eecbd15` (version `23.4.0`).

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

The following commits are included:
- Hide image dimension tools when a state is selected (WordPress/gutenberg#78670)
- Changed labels to consistently use Patterns in favor of Block patterns (WordPress/gutenberg#56880)
- Fix: Restrict parent page API search to post titles only (WordPress/gutenberg#78683)
- Update AGENTS.md to mention additional pitfalls: (WordPress/gutenberg#78718)
- Docs: Fix big_image_size_threshold xref typo (WordPress/gutenberg#76299)
- Compose: Fully deprecate the 'pure' HoC (WordPress/gutenberg#78674)
- Common CSS: avoid false-positive border-style on custom properties (WordPress/gutenberg#77476)
- Compose: Fix SSR crash in useMediaQuery and useViewportMatch (WordPress/gutenberg#78725)
- CI: Skip plugin repo release when SVN tag already exists (WordPress/gutenberg#78476)
- Dashboard: Hello Dolly (WordPress/gutenberg#78648)
- UI: `Tooltip.Provider` — forward upstream `closeDelay` and `timeout` props (WordPress/gutenberg#78642)
- Compose: Support React 19 ref callback cleanups in `useMergeRefs` (WordPress/gutenberg#78685)
- Add copilot-instructions.md file (WordPress/gutenberg#78584)
- Dashboard: show ghost widgets visually & allow easy removal (WordPress/gutenberg#78502)
- Bump fast-xml-builder from 1.0.0 to 1.2.0 (WordPress/gutenberg#78272)
- Bump actions/stale (WordPress/gutenberg#78745)
- Bump fast-xml-parser from 4.5.0 to 4.5.6 (WordPress/gutenberg#77167)
- Bump actions/github-script from 8.0.0 to 9.0.0 in /.github/workflows (WordPress/gutenberg#78591)
- @wordpress/theme: deduplicate addFallbackToVar helper (WordPress/gutenberg#78666)
- Add Combobox primitives (WordPress/gutenberg#78399)
- Editor: Fix keyboard activation of the template actions preview (WordPress/gutenberg#78641)
- Theme: drop `density` support from `@wordpress/theme` (WordPress/gutenberg#78741)
- Tooltip migration: fields + media-editor + media-fields + global-styles-ui (4/5) (WordPress/gutenberg#78691)
- List View: Expose block visibility label to assistive technology (WordPress/gutenberg#78640)
- Hide paragraph Drop cap control when a state is selected (WordPress/gutenberg#78672)
- Image cropper: round zoom control values and display as percentages (WordPress/gutenberg#78757)
- Media Editor Modal: Try placing the save and cancel buttons in the footer (WordPress/gutenberg#78708)
- Unset grid span defaults with viewport states enabled (WordPress/gutenberg#78709)
- Media Editor: Remove resize handles toggle from crop panel (WordPress/gutenberg#78758)
- Image Editor: focus return after closing image crop modal (WordPress/gutenberg#78711)
- Add dashboard Events widget (WordPress/gutenberg#78553)
- Writing flow: Delete at end of nested list item should merge into next block (WordPress/gutenberg#78742)
- RTC: Re-render collaborators overlay when the block tree changes (WordPress/gutenberg#78636)
- Dashboard: rename `widget-types` to `widget-primitives` and consolidate the widget contract (WordPress/gutenberg#78749)
- Fix Gutenberg plugin assuming its directory is named "gutenberg" (WordPress/gutenberg#78705)
- Codemods: Remove one-shot Tooltip migration codemod (WordPress/gutenberg#78669)
- Dashboard: rename `WidgetChrome` to `DashboardWidgetChrome` (WordPress/gutenberg#78751)
- Paragraph: Strip stale block-support classes from className during align attribute migration (WordPress/gutenberg#78731)
- Global Styles: Fix CSS not applying to Custom CSS textarea in Advanced panel (WordPress/gutenberg#78773)
- scripts: Use require.resolve for SVG loaders to fix pnpm compat (WordPress/gutenberg#78777)
- Post list: Remove close button from Quick Edit drawer (WordPress/gutenberg#78730)
- Revert "Gate client-side media processing as plugin-only (WordPress/gutenberg#76700)" (WordPress/gutenberg#76751)
- Tooltip migration: boot consumers + shell-level Tooltip.Provider (5/5) (WordPress/gutenberg#78692)
- Dashboard: replace `surface` with `host` in widget contract docs (WordPress/gutenberg#78778)
- Shortcode block: Fix editor crash when selecting transform menu (WordPress/gutenberg#78770)
- Make `@wordpress/nux` a no-op compatibility package (WordPress/gutenberg#77773)
- Tests: Temporarily disable REST index output-format assertions (WordPress/gutenberg#78788)
- Hide Cover overlay controls for viewport states (WordPress/gutenberg#78763)
- Fix type of `$block_instance` parameter in `block_core_image_render_lightbox()` (WordPress/gutenberg#78790)
- TypeScript: Migrate server-side-render package to TS (WordPress/gutenberg#71383)
- feat: Migrate performance results to tools release (WordPress/gutenberg#78761)
- wp-build: Fix black flash on wp-admin pages before hydration (WordPress/gutenberg#78493)
- Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)
- Dashboard: Use Howdy greeting for page title (WordPress/gutenberg#78740)
- Block Editor: Refactor Inserter to a function component (WordPress/gutenberg#78766)
- Dashboard: Move layout settings to customize toolbar (WordPress/gutenberg#78738)
- Build: update changelog (WordPress/gutenberg#78807)
- Icons: rename timeToRead to time (WordPress/gutenberg#78804)
- RTC: Prevent slower polling filters (WordPress/gutenberg#78811)
- Button.Icon: Fix clipped icons (WordPress/gutenberg#78614)
- Bump docker/login-action (WordPress/gutenberg#78819)
- RTC: Return forbidden rooms together (WordPress/gutenberg#78748)
- Update browserslist (WordPress/gutenberg#78840)
- Try allowing transforms to a variation of another block (WordPress/gutenberg#78713)
- Elements: Guard against non-string className in render filter (WordPress/gutenberg#78841)
- e2e-test-utils-playwright: add src to published NPM files (WordPress/gutenberg#78847)
- Editor: Refactor 'PostPublishButton' into function component (WordPress/gutenberg#78737)
- Dashboard: Promote WidgetRender into widget-primitives (WordPress/gutenberg#78821)
- Notes: Show default avatar in the indicator when user avatars are disabled (WordPress/gutenberg#78849)
- Revert "Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)" (WordPress/gutenberg#78854)
- Media: Send Document-Isolation-Policy header on the site preview frame (WordPress/gutenberg#78404)
- Revert navigation morph & playlist commits pushed directly to trunk (WordPress/gutenberg#78857)
- Fix Update button staying active when changes are reverted. (WordPress/gutenberg#78567)
- Docs: Fix and improve documentation (WordPress/gutenberg#78686)
- Abilities: Add validation tests pinning behavior for WP-specific schema keywords (WordPress/gutenberg#78783)
- Tools: migrate docs/tool into tools/docs workspace (WordPress/gutenberg#78870)
- Dashboard: Fix Add widget error on non-secure HTTP origins (WordPress/gutenberg#78850)
- Docs: Fix @wordpress/data README fragment links (WordPress/gutenberg#78866)
- bin: Remove obsolete bin/setup-local-env.sh (WordPress/gutenberg#78871)
- Boot navigation: wrap items in a list role for valid listitem semantics (WordPress/gutenberg#78829)
- wp-build: Document generated page hooks per WordPress standards. (WordPress/gutenberg#78826)
- Update CODEOWNERS for tooling directories (WordPress/gutenberg#78874)
- Block Visibility: Keep hide-everywhere working after a block opts out of visibility support (WordPress/gutenberg#78780)
- Dashboard: Replace grid row height controls with size presets. (WordPress/gutenberg#78735)
- Prevent font-size propagation in Navigation items causing `em` compounding (WordPress/gutenberg#77419)
- Media Editor Modal: Reorder details fields so the editable regular layout fields appear at the top (WordPress/gutenberg#78792)
- Fix media editor sidebar close button label (WordPress/gutenberg#78895)
- Dashboard: event widget iteration (WordPress/gutenberg#78815)
- Playlist Block: Add visualization style selector (WordPress/gutenberg#76147)
- [Content Types]: Fix extra Page padding causing vertical scrollbar (WordPress/gutenberg#78661)
- Remove migrated dependencies from root package.json (WordPress/gutenberg#78813)
- Packages: Declare missing `@types/react` dependency (WordPress/gutenberg#78882)
- Fix collapsed experiment cards not stretching to full width (WordPress/gutenberg#78910)
- Element: add polyfills for render, hydrate, unmountComponentAtNode (WordPress/gutenberg#78899)
- Revert "wp-build: Replace getter-based exports with data properties" (WordPress/gutenberg#78917)
- React: add ReactCurrentOwner polyfill (WordPress/gutenberg#78923)
- Fix playlist metadata edits recreating player (WordPress/gutenberg#78876)
- Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints (WordPress/gutenberg#78931)
- Media: Move client-side media compat file to wordpress-7.1 directory (WordPress/gutenberg#78852)
- env: Replace extract-zip with adm-zip to fix hang on Node 24.16 (WordPress/gutenberg#78828)
- Media Editor: refactor modal layout (WordPress/gutenberg#78896)
- Optimize wp-env source downloads with Git partial clones (WordPress/gutenberg#78918)
- Fix: Escape URLs in block render functions using `esc_url()` (WordPress/gutenberg#78912)
- Blocks: Allow the Login/out block as an inner block in the Navigation Submenu block (WordPress/gutenberg#75497)
- Fix sprintf format specifiers in post-date and read-more blocks (WordPress/gutenberg#78933)
- Refactor: Remove jest/test deps from root package.json (WordPress/gutenberg#78801)
- Upload Media: Add retry with exponential backoff and network resilience (WordPress/gutenberg#76765)
- Build Scripts: Fix Windows path handling in dev script (WordPress/gutenberg#78939)
- Revert React 19 upgrade (WordPress/gutenberg#78940)
- Fix: block auto-complete for AI API Keys in Connectors (WordPress/gutenberg#78946)
- Dashboard: Opinionated grid columns with container breakpoints (WordPress/gutenberg#78732)
- Skip including inactive or experimental routes when building for WordPress Core (WordPress/gutenberg#76715)
- RTC: Fix Yjs undo manager to update UI state when undo stack changes (WordPress/gutenberg#78864)
- Storybook: Enhance Theme Provider example with admin-ui Page. (WordPress/gutenberg#78814)
- RTC: Fix CRDT deferred updates resulting in jumbled typing (WordPress/gutenberg#78756)
- Add playlist track length setting (WordPress/gutenberg#78954)
- Add aspect ratio control to media editor mobile toolbar (WordPress/gutenberg#78935)
- Media Editor: Replace the zoom slider with +/- buttons (WordPress/gutenberg#78928)
- Use omit-unchanged for compressed-size-action (WordPress/gutenberg#78976)
- DataViewsPicker: Add a new `pickerActivity` layout (WordPress/gutenberg#78941)
- refactor: move babel dependencies to workspace configuration (WordPress/gutenberg#78974)
- feat: Migrate the browserlintrc file to `packages/postcss-plugins-preset` (WordPress/gutenberg#78764)
- Storybook: Declare workspace dependencies for theme example story. (WordPress/gutenberg#78979)
- Refactor: Move React dependencies from root to workspaces (WordPress/gutenberg#78981)
- UI: Update `@base-ui/react` to `1.5.0` (WordPress/gutenberg#78448)
- ui/AlertDialog: Fix footer layout style override (WordPress/gutenberg#78953)
- Font Library: Fix focus issue when navigating (WordPress/gutenberg#78671)
- Docs: Auto-generate per-block API reference pages from block.json (WordPress/gutenberg#77612)
- Patterns: fix focus loss when dismissing Create pattern dialog (WordPress/gutenberg#78957)
- Show media upload progress in a snackbar (WordPress/gutenberg#77249)
- Upload Media: Gate very large images out of client-side processing (WordPress/gutenberg#78949)
- Media: Add UltraHDR (ISO 21496-1) gain map support (WordPress/gutenberg#74873)
- Site Editor: Apply the user's admin color scheme (WordPress/gutenberg#78397)
- Navigation Link: fix duplicate block html attributes in editor (WordPress/gutenberg#78973)
- Added Missing Global Documentation (WordPress/gutenberg#78997)
- Post Revisions: Upgrade `diff` from v4 to v8 (WordPress/gutenberg#77992)
- Theme: Increase stroke1 contrast target to 2.9 (WordPress/gutenberg#77599)
- Tooltip: Use md border radius for portaled popups. (WordPress/gutenberg#78983)
- Framework: Remove invalid stale nested npm package references (WordPress/gutenberg#79014)
- Theme package: Add element size design tokens (WordPress/gutenberg#76545)
- Inserter: use forwardRef for refs (WordPress/gutenberg#79006)
- RTC: Add separate doc persistence endpoint (WordPress/gutenberg#78891)
- DataViews: Add DataViews components to components manifest (WordPress/gutenberg#78960)
- Media Editor: Keep crop handles operable on large images (WordPress/gutenberg#79011)
- Media editor: tweak paddings and margins (WordPress/gutenberg#79009)
- Media Editor: Remove lag when toggling the sidebar (WordPress/gutenberg#79024)
- Elements: Align class name parsing with custom CSS implementation (WordPress/gutenberg#79023)
- CI: Suppress lint:js warnings on static checks (WordPress/gutenberg#79025)
- Remove React Native implementation, framework, and dependencies (WordPress/gutenberg#78747)
- e2e-test-utils-playwright: start transpiling again, but faster (WordPress/gutenberg#79026)
- CI: Remove Validate Gradle Wrapper workflow (WordPress/gutenberg#79030)
- Remove dead native code branches from Platform usages (WordPress/gutenberg#79031)
- Remove orphaned README files for deleted native-only components (WordPress/gutenberg#79035)
- Remove orphaned mobile bug report issue template (WordPress/gutenberg#79038)
- Inserter: Fix error being thrown for spoken message when inserting default/direct block (WordPress/gutenberg#79004)
- Editor: Remove dead native guard in block removal warnings (WordPress/gutenberg#79039)
- Preserve nested list when deleting a selection across sibling list items (WordPress/gutenberg#78776)
- Remove platform-docs Docusaurus site (WordPress/gutenberg#79034)
- Align dependency versions across workspaces (WordPress/gutenberg#77954)
- RichText: Remove dead native-only prop filtering (WordPress/gutenberg#79037)
- Navigable Container: Hoist getFocusableContext out of the component (WordPress/gutenberg#79029)
- Tools: Lint dependency version consistency with Syncpack (WordPress/gutenberg#77950)
- Extract entity view config into a filterable API (WordPress/gutenberg#78977)
- Rich text: use subscribeDelegatedListener for element event listeners (WordPress/gutenberg#79047)
- theme/ThemeProvider: rename `color.bg` prop to `color.background` (WordPress/gutenberg#79007)
- Format Library: Migrate to recommended `@wordpress/ui` components (WordPress/gutenberg#79059)
- Syncpack: ban `classnames` from being reintroduced (WordPress/gutenberg#79061)
- UI: Update CSS cascade layers to use nesting (WordPress/gutenberg#78959)
- Docs: Remove stale mobile references from tooling and primitives docs (WordPress/gutenberg#79041)
- Release: Drop mobile-specific changelog omit rules (WordPress/gutenberg#79042)
- Bump actions/checkout (WordPress/gutenberg#79033)
- `ColorPalette`: don't render when custom colors disabled and no colors passed (WordPress/gutenberg#72402)
- Bump minimatch and lerna (WordPress/gutenberg#76750)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- Fix responsive element styles front end output (WordPress/gutenberg#79135) (WordPress/gutenberg#79215)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65368.

git-svn-id: https://develop.svn.wordpress.org/trunk@62584 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to WordPress/WordPress that referenced this pull request Jun 30, 2026
This updates the pinned commit hash of the Gutenberg repository from `14db4ab9395a9e96430eed678e4288a59eecbd15 ` (version `23.3.0`) to `14db4ab9395a9e96430eed678e4288a59eecbd15` (version `23.4.0`).

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

The following commits are included:
- Hide image dimension tools when a state is selected (WordPress/gutenberg#78670)
- Changed labels to consistently use Patterns in favor of Block patterns (WordPress/gutenberg#56880)
- Fix: Restrict parent page API search to post titles only (WordPress/gutenberg#78683)
- Update AGENTS.md to mention additional pitfalls: (WordPress/gutenberg#78718)
- Docs: Fix big_image_size_threshold xref typo (WordPress/gutenberg#76299)
- Compose: Fully deprecate the 'pure' HoC (WordPress/gutenberg#78674)
- Common CSS: avoid false-positive border-style on custom properties (WordPress/gutenberg#77476)
- Compose: Fix SSR crash in useMediaQuery and useViewportMatch (WordPress/gutenberg#78725)
- CI: Skip plugin repo release when SVN tag already exists (WordPress/gutenberg#78476)
- Dashboard: Hello Dolly (WordPress/gutenberg#78648)
- UI: `Tooltip.Provider` — forward upstream `closeDelay` and `timeout` props (WordPress/gutenberg#78642)
- Compose: Support React 19 ref callback cleanups in `useMergeRefs` (WordPress/gutenberg#78685)
- Add copilot-instructions.md file (WordPress/gutenberg#78584)
- Dashboard: show ghost widgets visually & allow easy removal (WordPress/gutenberg#78502)
- Bump fast-xml-builder from 1.0.0 to 1.2.0 (WordPress/gutenberg#78272)
- Bump actions/stale (WordPress/gutenberg#78745)
- Bump fast-xml-parser from 4.5.0 to 4.5.6 (WordPress/gutenberg#77167)
- Bump actions/github-script from 8.0.0 to 9.0.0 in /.github/workflows (WordPress/gutenberg#78591)
- @wordpress/theme: deduplicate addFallbackToVar helper (WordPress/gutenberg#78666)
- Add Combobox primitives (WordPress/gutenberg#78399)
- Editor: Fix keyboard activation of the template actions preview (WordPress/gutenberg#78641)
- Theme: drop `density` support from `@wordpress/theme` (WordPress/gutenberg#78741)
- Tooltip migration: fields + media-editor + media-fields + global-styles-ui (4/5) (WordPress/gutenberg#78691)
- List View: Expose block visibility label to assistive technology (WordPress/gutenberg#78640)
- Hide paragraph Drop cap control when a state is selected (WordPress/gutenberg#78672)
- Image cropper: round zoom control values and display as percentages (WordPress/gutenberg#78757)
- Media Editor Modal: Try placing the save and cancel buttons in the footer (WordPress/gutenberg#78708)
- Unset grid span defaults with viewport states enabled (WordPress/gutenberg#78709)
- Media Editor: Remove resize handles toggle from crop panel (WordPress/gutenberg#78758)
- Image Editor: focus return after closing image crop modal (WordPress/gutenberg#78711)
- Add dashboard Events widget (WordPress/gutenberg#78553)
- Writing flow: Delete at end of nested list item should merge into next block (WordPress/gutenberg#78742)
- RTC: Re-render collaborators overlay when the block tree changes (WordPress/gutenberg#78636)
- Dashboard: rename `widget-types` to `widget-primitives` and consolidate the widget contract (WordPress/gutenberg#78749)
- Fix Gutenberg plugin assuming its directory is named "gutenberg" (WordPress/gutenberg#78705)
- Codemods: Remove one-shot Tooltip migration codemod (WordPress/gutenberg#78669)
- Dashboard: rename `WidgetChrome` to `DashboardWidgetChrome` (WordPress/gutenberg#78751)
- Paragraph: Strip stale block-support classes from className during align attribute migration (WordPress/gutenberg#78731)
- Global Styles: Fix CSS not applying to Custom CSS textarea in Advanced panel (WordPress/gutenberg#78773)
- scripts: Use require.resolve for SVG loaders to fix pnpm compat (WordPress/gutenberg#78777)
- Post list: Remove close button from Quick Edit drawer (WordPress/gutenberg#78730)
- Revert "Gate client-side media processing as plugin-only (WordPress/gutenberg#76700)" (WordPress/gutenberg#76751)
- Tooltip migration: boot consumers + shell-level Tooltip.Provider (5/5) (WordPress/gutenberg#78692)
- Dashboard: replace `surface` with `host` in widget contract docs (WordPress/gutenberg#78778)
- Shortcode block: Fix editor crash when selecting transform menu (WordPress/gutenberg#78770)
- Make `@wordpress/nux` a no-op compatibility package (WordPress/gutenberg#77773)
- Tests: Temporarily disable REST index output-format assertions (WordPress/gutenberg#78788)
- Hide Cover overlay controls for viewport states (WordPress/gutenberg#78763)
- Fix type of `$block_instance` parameter in `block_core_image_render_lightbox()` (WordPress/gutenberg#78790)
- TypeScript: Migrate server-side-render package to TS (WordPress/gutenberg#71383)
- feat: Migrate performance results to tools release (WordPress/gutenberg#78761)
- wp-build: Fix black flash on wp-admin pages before hydration (WordPress/gutenberg#78493)
- Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)
- Dashboard: Use Howdy greeting for page title (WordPress/gutenberg#78740)
- Block Editor: Refactor Inserter to a function component (WordPress/gutenberg#78766)
- Dashboard: Move layout settings to customize toolbar (WordPress/gutenberg#78738)
- Build: update changelog (WordPress/gutenberg#78807)
- Icons: rename timeToRead to time (WordPress/gutenberg#78804)
- RTC: Prevent slower polling filters (WordPress/gutenberg#78811)
- Button.Icon: Fix clipped icons (WordPress/gutenberg#78614)
- Bump docker/login-action (WordPress/gutenberg#78819)
- RTC: Return forbidden rooms together (WordPress/gutenberg#78748)
- Update browserslist (WordPress/gutenberg#78840)
- Try allowing transforms to a variation of another block (WordPress/gutenberg#78713)
- Elements: Guard against non-string className in render filter (WordPress/gutenberg#78841)
- e2e-test-utils-playwright: add src to published NPM files (WordPress/gutenberg#78847)
- Editor: Refactor 'PostPublishButton' into function component (WordPress/gutenberg#78737)
- Dashboard: Promote WidgetRender into widget-primitives (WordPress/gutenberg#78821)
- Notes: Show default avatar in the indicator when user avatars are disabled (WordPress/gutenberg#78849)
- Revert "Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)" (WordPress/gutenberg#78854)
- Media: Send Document-Isolation-Policy header on the site preview frame (WordPress/gutenberg#78404)
- Revert navigation morph & playlist commits pushed directly to trunk (WordPress/gutenberg#78857)
- Fix Update button staying active when changes are reverted. (WordPress/gutenberg#78567)
- Docs: Fix and improve documentation (WordPress/gutenberg#78686)
- Abilities: Add validation tests pinning behavior for WP-specific schema keywords (WordPress/gutenberg#78783)
- Tools: migrate docs/tool into tools/docs workspace (WordPress/gutenberg#78870)
- Dashboard: Fix Add widget error on non-secure HTTP origins (WordPress/gutenberg#78850)
- Docs: Fix @wordpress/data README fragment links (WordPress/gutenberg#78866)
- bin: Remove obsolete bin/setup-local-env.sh (WordPress/gutenberg#78871)
- Boot navigation: wrap items in a list role for valid listitem semantics (WordPress/gutenberg#78829)
- wp-build: Document generated page hooks per WordPress standards. (WordPress/gutenberg#78826)
- Update CODEOWNERS for tooling directories (WordPress/gutenberg#78874)
- Block Visibility: Keep hide-everywhere working after a block opts out of visibility support (WordPress/gutenberg#78780)
- Dashboard: Replace grid row height controls with size presets. (WordPress/gutenberg#78735)
- Prevent font-size propagation in Navigation items causing `em` compounding (WordPress/gutenberg#77419)
- Media Editor Modal: Reorder details fields so the editable regular layout fields appear at the top (WordPress/gutenberg#78792)
- Fix media editor sidebar close button label (WordPress/gutenberg#78895)
- Dashboard: event widget iteration (WordPress/gutenberg#78815)
- Playlist Block: Add visualization style selector (WordPress/gutenberg#76147)
- [Content Types]: Fix extra Page padding causing vertical scrollbar (WordPress/gutenberg#78661)
- Remove migrated dependencies from root package.json (WordPress/gutenberg#78813)
- Packages: Declare missing `@types/react` dependency (WordPress/gutenberg#78882)
- Fix collapsed experiment cards not stretching to full width (WordPress/gutenberg#78910)
- Element: add polyfills for render, hydrate, unmountComponentAtNode (WordPress/gutenberg#78899)
- Revert "wp-build: Replace getter-based exports with data properties" (WordPress/gutenberg#78917)
- React: add ReactCurrentOwner polyfill (WordPress/gutenberg#78923)
- Fix playlist metadata edits recreating player (WordPress/gutenberg#78876)
- Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints (WordPress/gutenberg#78931)
- Media: Move client-side media compat file to wordpress-7.1 directory (WordPress/gutenberg#78852)
- env: Replace extract-zip with adm-zip to fix hang on Node 24.16 (WordPress/gutenberg#78828)
- Media Editor: refactor modal layout (WordPress/gutenberg#78896)
- Optimize wp-env source downloads with Git partial clones (WordPress/gutenberg#78918)
- Fix: Escape URLs in block render functions using `esc_url()` (WordPress/gutenberg#78912)
- Blocks: Allow the Login/out block as an inner block in the Navigation Submenu block (WordPress/gutenberg#75497)
- Fix sprintf format specifiers in post-date and read-more blocks (WordPress/gutenberg#78933)
- Refactor: Remove jest/test deps from root package.json (WordPress/gutenberg#78801)
- Upload Media: Add retry with exponential backoff and network resilience (WordPress/gutenberg#76765)
- Build Scripts: Fix Windows path handling in dev script (WordPress/gutenberg#78939)
- Revert React 19 upgrade (WordPress/gutenberg#78940)
- Fix: block auto-complete for AI API Keys in Connectors (WordPress/gutenberg#78946)
- Dashboard: Opinionated grid columns with container breakpoints (WordPress/gutenberg#78732)
- Skip including inactive or experimental routes when building for WordPress Core (WordPress/gutenberg#76715)
- RTC: Fix Yjs undo manager to update UI state when undo stack changes (WordPress/gutenberg#78864)
- Storybook: Enhance Theme Provider example with admin-ui Page. (WordPress/gutenberg#78814)
- RTC: Fix CRDT deferred updates resulting in jumbled typing (WordPress/gutenberg#78756)
- Add playlist track length setting (WordPress/gutenberg#78954)
- Add aspect ratio control to media editor mobile toolbar (WordPress/gutenberg#78935)
- Media Editor: Replace the zoom slider with +/- buttons (WordPress/gutenberg#78928)
- Use omit-unchanged for compressed-size-action (WordPress/gutenberg#78976)
- DataViewsPicker: Add a new `pickerActivity` layout (WordPress/gutenberg#78941)
- refactor: move babel dependencies to workspace configuration (WordPress/gutenberg#78974)
- feat: Migrate the browserlintrc file to `packages/postcss-plugins-preset` (WordPress/gutenberg#78764)
- Storybook: Declare workspace dependencies for theme example story. (WordPress/gutenberg#78979)
- Refactor: Move React dependencies from root to workspaces (WordPress/gutenberg#78981)
- UI: Update `@base-ui/react` to `1.5.0` (WordPress/gutenberg#78448)
- ui/AlertDialog: Fix footer layout style override (WordPress/gutenberg#78953)
- Font Library: Fix focus issue when navigating (WordPress/gutenberg#78671)
- Docs: Auto-generate per-block API reference pages from block.json (WordPress/gutenberg#77612)
- Patterns: fix focus loss when dismissing Create pattern dialog (WordPress/gutenberg#78957)
- Show media upload progress in a snackbar (WordPress/gutenberg#77249)
- Upload Media: Gate very large images out of client-side processing (WordPress/gutenberg#78949)
- Media: Add UltraHDR (ISO 21496-1) gain map support (WordPress/gutenberg#74873)
- Site Editor: Apply the user's admin color scheme (WordPress/gutenberg#78397)
- Navigation Link: fix duplicate block html attributes in editor (WordPress/gutenberg#78973)
- Added Missing Global Documentation (WordPress/gutenberg#78997)
- Post Revisions: Upgrade `diff` from v4 to v8 (WordPress/gutenberg#77992)
- Theme: Increase stroke1 contrast target to 2.9 (WordPress/gutenberg#77599)
- Tooltip: Use md border radius for portaled popups. (WordPress/gutenberg#78983)
- Framework: Remove invalid stale nested npm package references (WordPress/gutenberg#79014)
- Theme package: Add element size design tokens (WordPress/gutenberg#76545)
- Inserter: use forwardRef for refs (WordPress/gutenberg#79006)
- RTC: Add separate doc persistence endpoint (WordPress/gutenberg#78891)
- DataViews: Add DataViews components to components manifest (WordPress/gutenberg#78960)
- Media Editor: Keep crop handles operable on large images (WordPress/gutenberg#79011)
- Media editor: tweak paddings and margins (WordPress/gutenberg#79009)
- Media Editor: Remove lag when toggling the sidebar (WordPress/gutenberg#79024)
- Elements: Align class name parsing with custom CSS implementation (WordPress/gutenberg#79023)
- CI: Suppress lint:js warnings on static checks (WordPress/gutenberg#79025)
- Remove React Native implementation, framework, and dependencies (WordPress/gutenberg#78747)
- e2e-test-utils-playwright: start transpiling again, but faster (WordPress/gutenberg#79026)
- CI: Remove Validate Gradle Wrapper workflow (WordPress/gutenberg#79030)
- Remove dead native code branches from Platform usages (WordPress/gutenberg#79031)
- Remove orphaned README files for deleted native-only components (WordPress/gutenberg#79035)
- Remove orphaned mobile bug report issue template (WordPress/gutenberg#79038)
- Inserter: Fix error being thrown for spoken message when inserting default/direct block (WordPress/gutenberg#79004)
- Editor: Remove dead native guard in block removal warnings (WordPress/gutenberg#79039)
- Preserve nested list when deleting a selection across sibling list items (WordPress/gutenberg#78776)
- Remove platform-docs Docusaurus site (WordPress/gutenberg#79034)
- Align dependency versions across workspaces (WordPress/gutenberg#77954)
- RichText: Remove dead native-only prop filtering (WordPress/gutenberg#79037)
- Navigable Container: Hoist getFocusableContext out of the component (WordPress/gutenberg#79029)
- Tools: Lint dependency version consistency with Syncpack (WordPress/gutenberg#77950)
- Extract entity view config into a filterable API (WordPress/gutenberg#78977)
- Rich text: use subscribeDelegatedListener for element event listeners (WordPress/gutenberg#79047)
- theme/ThemeProvider: rename `color.bg` prop to `color.background` (WordPress/gutenberg#79007)
- Format Library: Migrate to recommended `@wordpress/ui` components (WordPress/gutenberg#79059)
- Syncpack: ban `classnames` from being reintroduced (WordPress/gutenberg#79061)
- UI: Update CSS cascade layers to use nesting (WordPress/gutenberg#78959)
- Docs: Remove stale mobile references from tooling and primitives docs (WordPress/gutenberg#79041)
- Release: Drop mobile-specific changelog omit rules (WordPress/gutenberg#79042)
- Bump actions/checkout (WordPress/gutenberg#79033)
- `ColorPalette`: don't render when custom colors disabled and no colors passed (WordPress/gutenberg#72402)
- Bump minimatch and lerna (WordPress/gutenberg#76750)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- Fix responsive element styles front end output (WordPress/gutenberg#79135) (WordPress/gutenberg#79215)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65368.
Built from https://develop.svn.wordpress.org/trunk@62584


git-svn-id: http://core.svn.wordpress.org/trunk@61864 1a063a9b-81f0-0310-95a4-ce76da25c4cd
KhushalSainS pushed a commit to KhushalSainS/wordpress-develop that referenced this pull request Jul 1, 2026
This updates the pinned commit hash of the Gutenberg repository from `14db4ab9395a9e96430eed678e4288a59eecbd15 ` (version `23.3.0`) to `14db4ab9395a9e96430eed678e4288a59eecbd15` (version `23.4.0`).

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

The following commits are included:
- Hide image dimension tools when a state is selected (WordPress/gutenberg#78670)
- Changed labels to consistently use Patterns in favor of Block patterns (WordPress/gutenberg#56880)
- Fix: Restrict parent page API search to post titles only (WordPress/gutenberg#78683)
- Update AGENTS.md to mention additional pitfalls: (WordPress/gutenberg#78718)
- Docs: Fix big_image_size_threshold xref typo (WordPress/gutenberg#76299)
- Compose: Fully deprecate the 'pure' HoC (WordPress/gutenberg#78674)
- Common CSS: avoid false-positive border-style on custom properties (WordPress/gutenberg#77476)
- Compose: Fix SSR crash in useMediaQuery and useViewportMatch (WordPress/gutenberg#78725)
- CI: Skip plugin repo release when SVN tag already exists (WordPress/gutenberg#78476)
- Dashboard: Hello Dolly (WordPress/gutenberg#78648)
- UI: `Tooltip.Provider` — forward upstream `closeDelay` and `timeout` props (WordPress/gutenberg#78642)
- Compose: Support React 19 ref callback cleanups in `useMergeRefs` (WordPress/gutenberg#78685)
- Add copilot-instructions.md file (WordPress/gutenberg#78584)
- Dashboard: show ghost widgets visually & allow easy removal (WordPress/gutenberg#78502)
- Bump fast-xml-builder from 1.0.0 to 1.2.0 (WordPress/gutenberg#78272)
- Bump actions/stale (WordPress/gutenberg#78745)
- Bump fast-xml-parser from 4.5.0 to 4.5.6 (WordPress/gutenberg#77167)
- Bump actions/github-script from 8.0.0 to 9.0.0 in /.github/workflows (WordPress/gutenberg#78591)
- @wordpress/theme: deduplicate addFallbackToVar helper (WordPress/gutenberg#78666)
- Add Combobox primitives (WordPress/gutenberg#78399)
- Editor: Fix keyboard activation of the template actions preview (WordPress/gutenberg#78641)
- Theme: drop `density` support from `@wordpress/theme` (WordPress/gutenberg#78741)
- Tooltip migration: fields + media-editor + media-fields + global-styles-ui (4/5) (WordPress/gutenberg#78691)
- List View: Expose block visibility label to assistive technology (WordPress/gutenberg#78640)
- Hide paragraph Drop cap control when a state is selected (WordPress/gutenberg#78672)
- Image cropper: round zoom control values and display as percentages (WordPress/gutenberg#78757)
- Media Editor Modal: Try placing the save and cancel buttons in the footer (WordPress/gutenberg#78708)
- Unset grid span defaults with viewport states enabled (WordPress/gutenberg#78709)
- Media Editor: Remove resize handles toggle from crop panel (WordPress/gutenberg#78758)
- Image Editor: focus return after closing image crop modal (WordPress/gutenberg#78711)
- Add dashboard Events widget (WordPress/gutenberg#78553)
- Writing flow: Delete at end of nested list item should merge into next block (WordPress/gutenberg#78742)
- RTC: Re-render collaborators overlay when the block tree changes (WordPress/gutenberg#78636)
- Dashboard: rename `widget-types` to `widget-primitives` and consolidate the widget contract (WordPress/gutenberg#78749)
- Fix Gutenberg plugin assuming its directory is named "gutenberg" (WordPress/gutenberg#78705)
- Codemods: Remove one-shot Tooltip migration codemod (WordPress/gutenberg#78669)
- Dashboard: rename `WidgetChrome` to `DashboardWidgetChrome` (WordPress/gutenberg#78751)
- Paragraph: Strip stale block-support classes from className during align attribute migration (WordPress/gutenberg#78731)
- Global Styles: Fix CSS not applying to Custom CSS textarea in Advanced panel (WordPress/gutenberg#78773)
- scripts: Use require.resolve for SVG loaders to fix pnpm compat (WordPress/gutenberg#78777)
- Post list: Remove close button from Quick Edit drawer (WordPress/gutenberg#78730)
- Revert "Gate client-side media processing as plugin-only (WordPress/gutenberg#76700)" (WordPress/gutenberg#76751)
- Tooltip migration: boot consumers + shell-level Tooltip.Provider (5/5) (WordPress/gutenberg#78692)
- Dashboard: replace `surface` with `host` in widget contract docs (WordPress/gutenberg#78778)
- Shortcode block: Fix editor crash when selecting transform menu (WordPress/gutenberg#78770)
- Make `@wordpress/nux` a no-op compatibility package (WordPress/gutenberg#77773)
- Tests: Temporarily disable REST index output-format assertions (WordPress/gutenberg#78788)
- Hide Cover overlay controls for viewport states (WordPress/gutenberg#78763)
- Fix type of `$block_instance` parameter in `block_core_image_render_lightbox()` (WordPress/gutenberg#78790)
- TypeScript: Migrate server-side-render package to TS (WordPress/gutenberg#71383)
- feat: Migrate performance results to tools release (WordPress/gutenberg#78761)
- wp-build: Fix black flash on wp-admin pages before hydration (WordPress/gutenberg#78493)
- Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)
- Dashboard: Use Howdy greeting for page title (WordPress/gutenberg#78740)
- Block Editor: Refactor Inserter to a function component (WordPress/gutenberg#78766)
- Dashboard: Move layout settings to customize toolbar (WordPress/gutenberg#78738)
- Build: update changelog (WordPress/gutenberg#78807)
- Icons: rename timeToRead to time (WordPress/gutenberg#78804)
- RTC: Prevent slower polling filters (WordPress/gutenberg#78811)
- Button.Icon: Fix clipped icons (WordPress/gutenberg#78614)
- Bump docker/login-action (WordPress/gutenberg#78819)
- RTC: Return forbidden rooms together (WordPress/gutenberg#78748)
- Update browserslist (WordPress/gutenberg#78840)
- Try allowing transforms to a variation of another block (WordPress/gutenberg#78713)
- Elements: Guard against non-string className in render filter (WordPress/gutenberg#78841)
- e2e-test-utils-playwright: add src to published NPM files (WordPress/gutenberg#78847)
- Editor: Refactor 'PostPublishButton' into function component (WordPress/gutenberg#78737)
- Dashboard: Promote WidgetRender into widget-primitives (WordPress/gutenberg#78821)
- Notes: Show default avatar in the indicator when user avatars are disabled (WordPress/gutenberg#78849)
- Revert "Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)" (WordPress/gutenberg#78854)
- Media: Send Document-Isolation-Policy header on the site preview frame (WordPress/gutenberg#78404)
- Revert navigation morph & playlist commits pushed directly to trunk (WordPress/gutenberg#78857)
- Fix Update button staying active when changes are reverted. (WordPress/gutenberg#78567)
- Docs: Fix and improve documentation (WordPress/gutenberg#78686)
- Abilities: Add validation tests pinning behavior for WP-specific schema keywords (WordPress/gutenberg#78783)
- Tools: migrate docs/tool into tools/docs workspace (WordPress/gutenberg#78870)
- Dashboard: Fix Add widget error on non-secure HTTP origins (WordPress/gutenberg#78850)
- Docs: Fix @wordpress/data README fragment links (WordPress/gutenberg#78866)
- bin: Remove obsolete bin/setup-local-env.sh (WordPress/gutenberg#78871)
- Boot navigation: wrap items in a list role for valid listitem semantics (WordPress/gutenberg#78829)
- wp-build: Document generated page hooks per WordPress standards. (WordPress/gutenberg#78826)
- Update CODEOWNERS for tooling directories (WordPress/gutenberg#78874)
- Block Visibility: Keep hide-everywhere working after a block opts out of visibility support (WordPress/gutenberg#78780)
- Dashboard: Replace grid row height controls with size presets. (WordPress/gutenberg#78735)
- Prevent font-size propagation in Navigation items causing `em` compounding (WordPress/gutenberg#77419)
- Media Editor Modal: Reorder details fields so the editable regular layout fields appear at the top (WordPress/gutenberg#78792)
- Fix media editor sidebar close button label (WordPress/gutenberg#78895)
- Dashboard: event widget iteration (WordPress/gutenberg#78815)
- Playlist Block: Add visualization style selector (WordPress/gutenberg#76147)
- [Content Types]: Fix extra Page padding causing vertical scrollbar (WordPress/gutenberg#78661)
- Remove migrated dependencies from root package.json (WordPress/gutenberg#78813)
- Packages: Declare missing `@types/react` dependency (WordPress/gutenberg#78882)
- Fix collapsed experiment cards not stretching to full width (WordPress/gutenberg#78910)
- Element: add polyfills for render, hydrate, unmountComponentAtNode (WordPress/gutenberg#78899)
- Revert "wp-build: Replace getter-based exports with data properties" (WordPress/gutenberg#78917)
- React: add ReactCurrentOwner polyfill (WordPress/gutenberg#78923)
- Fix playlist metadata edits recreating player (WordPress/gutenberg#78876)
- Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints (WordPress/gutenberg#78931)
- Media: Move client-side media compat file to wordpress-7.1 directory (WordPress/gutenberg#78852)
- env: Replace extract-zip with adm-zip to fix hang on Node 24.16 (WordPress/gutenberg#78828)
- Media Editor: refactor modal layout (WordPress/gutenberg#78896)
- Optimize wp-env source downloads with Git partial clones (WordPress/gutenberg#78918)
- Fix: Escape URLs in block render functions using `esc_url()` (WordPress/gutenberg#78912)
- Blocks: Allow the Login/out block as an inner block in the Navigation Submenu block (WordPress/gutenberg#75497)
- Fix sprintf format specifiers in post-date and read-more blocks (WordPress/gutenberg#78933)
- Refactor: Remove jest/test deps from root package.json (WordPress/gutenberg#78801)
- Upload Media: Add retry with exponential backoff and network resilience (WordPress/gutenberg#76765)
- Build Scripts: Fix Windows path handling in dev script (WordPress/gutenberg#78939)
- Revert React 19 upgrade (WordPress/gutenberg#78940)
- Fix: block auto-complete for AI API Keys in Connectors (WordPress/gutenberg#78946)
- Dashboard: Opinionated grid columns with container breakpoints (WordPress/gutenberg#78732)
- Skip including inactive or experimental routes when building for WordPress Core (WordPress/gutenberg#76715)
- RTC: Fix Yjs undo manager to update UI state when undo stack changes (WordPress/gutenberg#78864)
- Storybook: Enhance Theme Provider example with admin-ui Page. (WordPress/gutenberg#78814)
- RTC: Fix CRDT deferred updates resulting in jumbled typing (WordPress/gutenberg#78756)
- Add playlist track length setting (WordPress/gutenberg#78954)
- Add aspect ratio control to media editor mobile toolbar (WordPress/gutenberg#78935)
- Media Editor: Replace the zoom slider with +/- buttons (WordPress/gutenberg#78928)
- Use omit-unchanged for compressed-size-action (WordPress/gutenberg#78976)
- DataViewsPicker: Add a new `pickerActivity` layout (WordPress/gutenberg#78941)
- refactor: move babel dependencies to workspace configuration (WordPress/gutenberg#78974)
- feat: Migrate the browserlintrc file to `packages/postcss-plugins-preset` (WordPress/gutenberg#78764)
- Storybook: Declare workspace dependencies for theme example story. (WordPress/gutenberg#78979)
- Refactor: Move React dependencies from root to workspaces (WordPress/gutenberg#78981)
- UI: Update `@base-ui/react` to `1.5.0` (WordPress/gutenberg#78448)
- ui/AlertDialog: Fix footer layout style override (WordPress/gutenberg#78953)
- Font Library: Fix focus issue when navigating (WordPress/gutenberg#78671)
- Docs: Auto-generate per-block API reference pages from block.json (WordPress/gutenberg#77612)
- Patterns: fix focus loss when dismissing Create pattern dialog (WordPress/gutenberg#78957)
- Show media upload progress in a snackbar (WordPress/gutenberg#77249)
- Upload Media: Gate very large images out of client-side processing (WordPress/gutenberg#78949)
- Media: Add UltraHDR (ISO 21496-1) gain map support (WordPress/gutenberg#74873)
- Site Editor: Apply the user's admin color scheme (WordPress/gutenberg#78397)
- Navigation Link: fix duplicate block html attributes in editor (WordPress/gutenberg#78973)
- Added Missing Global Documentation (WordPress/gutenberg#78997)
- Post Revisions: Upgrade `diff` from v4 to v8 (WordPress/gutenberg#77992)
- Theme: Increase stroke1 contrast target to 2.9 (WordPress/gutenberg#77599)
- Tooltip: Use md border radius for portaled popups. (WordPress/gutenberg#78983)
- Framework: Remove invalid stale nested npm package references (WordPress/gutenberg#79014)
- Theme package: Add element size design tokens (WordPress/gutenberg#76545)
- Inserter: use forwardRef for refs (WordPress/gutenberg#79006)
- RTC: Add separate doc persistence endpoint (WordPress/gutenberg#78891)
- DataViews: Add DataViews components to components manifest (WordPress/gutenberg#78960)
- Media Editor: Keep crop handles operable on large images (WordPress/gutenberg#79011)
- Media editor: tweak paddings and margins (WordPress/gutenberg#79009)
- Media Editor: Remove lag when toggling the sidebar (WordPress/gutenberg#79024)
- Elements: Align class name parsing with custom CSS implementation (WordPress/gutenberg#79023)
- CI: Suppress lint:js warnings on static checks (WordPress/gutenberg#79025)
- Remove React Native implementation, framework, and dependencies (WordPress/gutenberg#78747)
- e2e-test-utils-playwright: start transpiling again, but faster (WordPress/gutenberg#79026)
- CI: Remove Validate Gradle Wrapper workflow (WordPress/gutenberg#79030)
- Remove dead native code branches from Platform usages (WordPress/gutenberg#79031)
- Remove orphaned README files for deleted native-only components (WordPress/gutenberg#79035)
- Remove orphaned mobile bug report issue template (WordPress/gutenberg#79038)
- Inserter: Fix error being thrown for spoken message when inserting default/direct block (WordPress/gutenberg#79004)
- Editor: Remove dead native guard in block removal warnings (WordPress/gutenberg#79039)
- Preserve nested list when deleting a selection across sibling list items (WordPress/gutenberg#78776)
- Remove platform-docs Docusaurus site (WordPress/gutenberg#79034)
- Align dependency versions across workspaces (WordPress/gutenberg#77954)
- RichText: Remove dead native-only prop filtering (WordPress/gutenberg#79037)
- Navigable Container: Hoist getFocusableContext out of the component (WordPress/gutenberg#79029)
- Tools: Lint dependency version consistency with Syncpack (WordPress/gutenberg#77950)
- Extract entity view config into a filterable API (WordPress/gutenberg#78977)
- Rich text: use subscribeDelegatedListener for element event listeners (WordPress/gutenberg#79047)
- theme/ThemeProvider: rename `color.bg` prop to `color.background` (WordPress/gutenberg#79007)
- Format Library: Migrate to recommended `@wordpress/ui` components (WordPress/gutenberg#79059)
- Syncpack: ban `classnames` from being reintroduced (WordPress/gutenberg#79061)
- UI: Update CSS cascade layers to use nesting (WordPress/gutenberg#78959)
- Docs: Remove stale mobile references from tooling and primitives docs (WordPress/gutenberg#79041)
- Release: Drop mobile-specific changelog omit rules (WordPress/gutenberg#79042)
- Bump actions/checkout (WordPress/gutenberg#79033)
- `ColorPalette`: don't render when custom colors disabled and no colors passed (WordPress/gutenberg#72402)
- Bump minimatch and lerna (WordPress/gutenberg#76750)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- Fix responsive element styles front end output (WordPress/gutenberg#79135) (WordPress/gutenberg#79215)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65368.

git-svn-id: https://develop.svn.wordpress.org/trunk@62584 602fd350-edb4-49c9-b593-d223f7449a82
SteelWagstaff pushed a commit to SteelWagstaff/wordpress-develop that referenced this pull request Jul 2, 2026
This updates the pinned commit hash of the Gutenberg repository from `14db4ab9395a9e96430eed678e4288a59eecbd15 ` (version `23.3.0`) to `14db4ab9395a9e96430eed678e4288a59eecbd15` (version `23.4.0`).

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

The following commits are included:
- Hide image dimension tools when a state is selected (WordPress/gutenberg#78670)
- Changed labels to consistently use Patterns in favor of Block patterns (WordPress/gutenberg#56880)
- Fix: Restrict parent page API search to post titles only (WordPress/gutenberg#78683)
- Update AGENTS.md to mention additional pitfalls: (WordPress/gutenberg#78718)
- Docs: Fix big_image_size_threshold xref typo (WordPress/gutenberg#76299)
- Compose: Fully deprecate the 'pure' HoC (WordPress/gutenberg#78674)
- Common CSS: avoid false-positive border-style on custom properties (WordPress/gutenberg#77476)
- Compose: Fix SSR crash in useMediaQuery and useViewportMatch (WordPress/gutenberg#78725)
- CI: Skip plugin repo release when SVN tag already exists (WordPress/gutenberg#78476)
- Dashboard: Hello Dolly (WordPress/gutenberg#78648)
- UI: `Tooltip.Provider` — forward upstream `closeDelay` and `timeout` props (WordPress/gutenberg#78642)
- Compose: Support React 19 ref callback cleanups in `useMergeRefs` (WordPress/gutenberg#78685)
- Add copilot-instructions.md file (WordPress/gutenberg#78584)
- Dashboard: show ghost widgets visually & allow easy removal (WordPress/gutenberg#78502)
- Bump fast-xml-builder from 1.0.0 to 1.2.0 (WordPress/gutenberg#78272)
- Bump actions/stale (WordPress/gutenberg#78745)
- Bump fast-xml-parser from 4.5.0 to 4.5.6 (WordPress/gutenberg#77167)
- Bump actions/github-script from 8.0.0 to 9.0.0 in /.github/workflows (WordPress/gutenberg#78591)
- @wordpress/theme: deduplicate addFallbackToVar helper (WordPress/gutenberg#78666)
- Add Combobox primitives (WordPress/gutenberg#78399)
- Editor: Fix keyboard activation of the template actions preview (WordPress/gutenberg#78641)
- Theme: drop `density` support from `@wordpress/theme` (WordPress/gutenberg#78741)
- Tooltip migration: fields + media-editor + media-fields + global-styles-ui (4/5) (WordPress/gutenberg#78691)
- List View: Expose block visibility label to assistive technology (WordPress/gutenberg#78640)
- Hide paragraph Drop cap control when a state is selected (WordPress/gutenberg#78672)
- Image cropper: round zoom control values and display as percentages (WordPress/gutenberg#78757)
- Media Editor Modal: Try placing the save and cancel buttons in the footer (WordPress/gutenberg#78708)
- Unset grid span defaults with viewport states enabled (WordPress/gutenberg#78709)
- Media Editor: Remove resize handles toggle from crop panel (WordPress/gutenberg#78758)
- Image Editor: focus return after closing image crop modal (WordPress/gutenberg#78711)
- Add dashboard Events widget (WordPress/gutenberg#78553)
- Writing flow: Delete at end of nested list item should merge into next block (WordPress/gutenberg#78742)
- RTC: Re-render collaborators overlay when the block tree changes (WordPress/gutenberg#78636)
- Dashboard: rename `widget-types` to `widget-primitives` and consolidate the widget contract (WordPress/gutenberg#78749)
- Fix Gutenberg plugin assuming its directory is named "gutenberg" (WordPress/gutenberg#78705)
- Codemods: Remove one-shot Tooltip migration codemod (WordPress/gutenberg#78669)
- Dashboard: rename `WidgetChrome` to `DashboardWidgetChrome` (WordPress/gutenberg#78751)
- Paragraph: Strip stale block-support classes from className during align attribute migration (WordPress/gutenberg#78731)
- Global Styles: Fix CSS not applying to Custom CSS textarea in Advanced panel (WordPress/gutenberg#78773)
- scripts: Use require.resolve for SVG loaders to fix pnpm compat (WordPress/gutenberg#78777)
- Post list: Remove close button from Quick Edit drawer (WordPress/gutenberg#78730)
- Revert "Gate client-side media processing as plugin-only (WordPress/gutenberg#76700)" (WordPress/gutenberg#76751)
- Tooltip migration: boot consumers + shell-level Tooltip.Provider (5/5) (WordPress/gutenberg#78692)
- Dashboard: replace `surface` with `host` in widget contract docs (WordPress/gutenberg#78778)
- Shortcode block: Fix editor crash when selecting transform menu (WordPress/gutenberg#78770)
- Make `@wordpress/nux` a no-op compatibility package (WordPress/gutenberg#77773)
- Tests: Temporarily disable REST index output-format assertions (WordPress/gutenberg#78788)
- Hide Cover overlay controls for viewport states (WordPress/gutenberg#78763)
- Fix type of `$block_instance` parameter in `block_core_image_render_lightbox()` (WordPress/gutenberg#78790)
- TypeScript: Migrate server-side-render package to TS (WordPress/gutenberg#71383)
- feat: Migrate performance results to tools release (WordPress/gutenberg#78761)
- wp-build: Fix black flash on wp-admin pages before hydration (WordPress/gutenberg#78493)
- Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)
- Dashboard: Use Howdy greeting for page title (WordPress/gutenberg#78740)
- Block Editor: Refactor Inserter to a function component (WordPress/gutenberg#78766)
- Dashboard: Move layout settings to customize toolbar (WordPress/gutenberg#78738)
- Build: update changelog (WordPress/gutenberg#78807)
- Icons: rename timeToRead to time (WordPress/gutenberg#78804)
- RTC: Prevent slower polling filters (WordPress/gutenberg#78811)
- Button.Icon: Fix clipped icons (WordPress/gutenberg#78614)
- Bump docker/login-action (WordPress/gutenberg#78819)
- RTC: Return forbidden rooms together (WordPress/gutenberg#78748)
- Update browserslist (WordPress/gutenberg#78840)
- Try allowing transforms to a variation of another block (WordPress/gutenberg#78713)
- Elements: Guard against non-string className in render filter (WordPress/gutenberg#78841)
- e2e-test-utils-playwright: add src to published NPM files (WordPress/gutenberg#78847)
- Editor: Refactor 'PostPublishButton' into function component (WordPress/gutenberg#78737)
- Dashboard: Promote WidgetRender into widget-primitives (WordPress/gutenberg#78821)
- Notes: Show default avatar in the indicator when user avatars are disabled (WordPress/gutenberg#78849)
- Revert "Icons: maintain absolute stroke-width regardless of icon-size (WordPress/gutenberg#78774)" (WordPress/gutenberg#78854)
- Media: Send Document-Isolation-Policy header on the site preview frame (WordPress/gutenberg#78404)
- Revert navigation morph & playlist commits pushed directly to trunk (WordPress/gutenberg#78857)
- Fix Update button staying active when changes are reverted. (WordPress/gutenberg#78567)
- Docs: Fix and improve documentation (WordPress/gutenberg#78686)
- Abilities: Add validation tests pinning behavior for WP-specific schema keywords (WordPress/gutenberg#78783)
- Tools: migrate docs/tool into tools/docs workspace (WordPress/gutenberg#78870)
- Dashboard: Fix Add widget error on non-secure HTTP origins (WordPress/gutenberg#78850)
- Docs: Fix @wordpress/data README fragment links (WordPress/gutenberg#78866)
- bin: Remove obsolete bin/setup-local-env.sh (WordPress/gutenberg#78871)
- Boot navigation: wrap items in a list role for valid listitem semantics (WordPress/gutenberg#78829)
- wp-build: Document generated page hooks per WordPress standards. (WordPress/gutenberg#78826)
- Update CODEOWNERS for tooling directories (WordPress/gutenberg#78874)
- Block Visibility: Keep hide-everywhere working after a block opts out of visibility support (WordPress/gutenberg#78780)
- Dashboard: Replace grid row height controls with size presets. (WordPress/gutenberg#78735)
- Prevent font-size propagation in Navigation items causing `em` compounding (WordPress/gutenberg#77419)
- Media Editor Modal: Reorder details fields so the editable regular layout fields appear at the top (WordPress/gutenberg#78792)
- Fix media editor sidebar close button label (WordPress/gutenberg#78895)
- Dashboard: event widget iteration (WordPress/gutenberg#78815)
- Playlist Block: Add visualization style selector (WordPress/gutenberg#76147)
- [Content Types]: Fix extra Page padding causing vertical scrollbar (WordPress/gutenberg#78661)
- Remove migrated dependencies from root package.json (WordPress/gutenberg#78813)
- Packages: Declare missing `@types/react` dependency (WordPress/gutenberg#78882)
- Fix collapsed experiment cards not stretching to full width (WordPress/gutenberg#78910)
- Element: add polyfills for render, hydrate, unmountComponentAtNode (WordPress/gutenberg#78899)
- Revert "wp-build: Replace getter-based exports with data properties" (WordPress/gutenberg#78917)
- React: add ReactCurrentOwner polyfill (WordPress/gutenberg#78923)
- Fix playlist metadata edits recreating player (WordPress/gutenberg#78876)
- Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints (WordPress/gutenberg#78931)
- Media: Move client-side media compat file to wordpress-7.1 directory (WordPress/gutenberg#78852)
- env: Replace extract-zip with adm-zip to fix hang on Node 24.16 (WordPress/gutenberg#78828)
- Media Editor: refactor modal layout (WordPress/gutenberg#78896)
- Optimize wp-env source downloads with Git partial clones (WordPress/gutenberg#78918)
- Fix: Escape URLs in block render functions using `esc_url()` (WordPress/gutenberg#78912)
- Blocks: Allow the Login/out block as an inner block in the Navigation Submenu block (WordPress/gutenberg#75497)
- Fix sprintf format specifiers in post-date and read-more blocks (WordPress/gutenberg#78933)
- Refactor: Remove jest/test deps from root package.json (WordPress/gutenberg#78801)
- Upload Media: Add retry with exponential backoff and network resilience (WordPress/gutenberg#76765)
- Build Scripts: Fix Windows path handling in dev script (WordPress/gutenberg#78939)
- Revert React 19 upgrade (WordPress/gutenberg#78940)
- Fix: block auto-complete for AI API Keys in Connectors (WordPress/gutenberg#78946)
- Dashboard: Opinionated grid columns with container breakpoints (WordPress/gutenberg#78732)
- Skip including inactive or experimental routes when building for WordPress Core (WordPress/gutenberg#76715)
- RTC: Fix Yjs undo manager to update UI state when undo stack changes (WordPress/gutenberg#78864)
- Storybook: Enhance Theme Provider example with admin-ui Page. (WordPress/gutenberg#78814)
- RTC: Fix CRDT deferred updates resulting in jumbled typing (WordPress/gutenberg#78756)
- Add playlist track length setting (WordPress/gutenberg#78954)
- Add aspect ratio control to media editor mobile toolbar (WordPress/gutenberg#78935)
- Media Editor: Replace the zoom slider with +/- buttons (WordPress/gutenberg#78928)
- Use omit-unchanged for compressed-size-action (WordPress/gutenberg#78976)
- DataViewsPicker: Add a new `pickerActivity` layout (WordPress/gutenberg#78941)
- refactor: move babel dependencies to workspace configuration (WordPress/gutenberg#78974)
- feat: Migrate the browserlintrc file to `packages/postcss-plugins-preset` (WordPress/gutenberg#78764)
- Storybook: Declare workspace dependencies for theme example story. (WordPress/gutenberg#78979)
- Refactor: Move React dependencies from root to workspaces (WordPress/gutenberg#78981)
- UI: Update `@base-ui/react` to `1.5.0` (WordPress/gutenberg#78448)
- ui/AlertDialog: Fix footer layout style override (WordPress/gutenberg#78953)
- Font Library: Fix focus issue when navigating (WordPress/gutenberg#78671)
- Docs: Auto-generate per-block API reference pages from block.json (WordPress/gutenberg#77612)
- Patterns: fix focus loss when dismissing Create pattern dialog (WordPress/gutenberg#78957)
- Show media upload progress in a snackbar (WordPress/gutenberg#77249)
- Upload Media: Gate very large images out of client-side processing (WordPress/gutenberg#78949)
- Media: Add UltraHDR (ISO 21496-1) gain map support (WordPress/gutenberg#74873)
- Site Editor: Apply the user's admin color scheme (WordPress/gutenberg#78397)
- Navigation Link: fix duplicate block html attributes in editor (WordPress/gutenberg#78973)
- Added Missing Global Documentation (WordPress/gutenberg#78997)
- Post Revisions: Upgrade `diff` from v4 to v8 (WordPress/gutenberg#77992)
- Theme: Increase stroke1 contrast target to 2.9 (WordPress/gutenberg#77599)
- Tooltip: Use md border radius for portaled popups. (WordPress/gutenberg#78983)
- Framework: Remove invalid stale nested npm package references (WordPress/gutenberg#79014)
- Theme package: Add element size design tokens (WordPress/gutenberg#76545)
- Inserter: use forwardRef for refs (WordPress/gutenberg#79006)
- RTC: Add separate doc persistence endpoint (WordPress/gutenberg#78891)
- DataViews: Add DataViews components to components manifest (WordPress/gutenberg#78960)
- Media Editor: Keep crop handles operable on large images (WordPress/gutenberg#79011)
- Media editor: tweak paddings and margins (WordPress/gutenberg#79009)
- Media Editor: Remove lag when toggling the sidebar (WordPress/gutenberg#79024)
- Elements: Align class name parsing with custom CSS implementation (WordPress/gutenberg#79023)
- CI: Suppress lint:js warnings on static checks (WordPress/gutenberg#79025)
- Remove React Native implementation, framework, and dependencies (WordPress/gutenberg#78747)
- e2e-test-utils-playwright: start transpiling again, but faster (WordPress/gutenberg#79026)
- CI: Remove Validate Gradle Wrapper workflow (WordPress/gutenberg#79030)
- Remove dead native code branches from Platform usages (WordPress/gutenberg#79031)
- Remove orphaned README files for deleted native-only components (WordPress/gutenberg#79035)
- Remove orphaned mobile bug report issue template (WordPress/gutenberg#79038)
- Inserter: Fix error being thrown for spoken message when inserting default/direct block (WordPress/gutenberg#79004)
- Editor: Remove dead native guard in block removal warnings (WordPress/gutenberg#79039)
- Preserve nested list when deleting a selection across sibling list items (WordPress/gutenberg#78776)
- Remove platform-docs Docusaurus site (WordPress/gutenberg#79034)
- Align dependency versions across workspaces (WordPress/gutenberg#77954)
- RichText: Remove dead native-only prop filtering (WordPress/gutenberg#79037)
- Navigable Container: Hoist getFocusableContext out of the component (WordPress/gutenberg#79029)
- Tools: Lint dependency version consistency with Syncpack (WordPress/gutenberg#77950)
- Extract entity view config into a filterable API (WordPress/gutenberg#78977)
- Rich text: use subscribeDelegatedListener for element event listeners (WordPress/gutenberg#79047)
- theme/ThemeProvider: rename `color.bg` prop to `color.background` (WordPress/gutenberg#79007)
- Format Library: Migrate to recommended `@wordpress/ui` components (WordPress/gutenberg#79059)
- Syncpack: ban `classnames` from being reintroduced (WordPress/gutenberg#79061)
- UI: Update CSS cascade layers to use nesting (WordPress/gutenberg#78959)
- Docs: Remove stale mobile references from tooling and primitives docs (WordPress/gutenberg#79041)
- Release: Drop mobile-specific changelog omit rules (WordPress/gutenberg#79042)
- Bump actions/checkout (WordPress/gutenberg#79033)
- `ColorPalette`: don't render when custom colors disabled and no colors passed (WordPress/gutenberg#72402)
- Bump minimatch and lerna (WordPress/gutenberg#76750)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- Fix responsive element styles front end output (WordPress/gutenberg#79135) (WordPress/gutenberg#79215)

Props adamsilverstein, jorbin, westonruter, wildworks.
Fixes #65368.

git-svn-id: https://develop.svn.wordpress.org/trunk@62584 602fd350-edb4-49c9-b593-d223f7449a82
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Real-time Collaboration Phase 3 of the Gutenberg roadmap around real-time collaboration [Package] Block editor /packages/block-editor [Package] Core data /packages/core-data [Package] Sync [Type] Bug An existing feature does not function as intended

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants