Skip to content

Add an editableRoot block support for native cross-block selection#79105

Merged
ellatrix merged 68 commits into
trunkfrom
try/block-supports-editable-root
Jul 14, 2026
Merged

Add an editableRoot block support for native cross-block selection#79105
ellatrix merged 68 commits into
trunkfrom
try/block-supports-editable-root

Conversation

@ellatrix

@ellatrix ellatrix commented Jun 11, 2026

Copy link
Copy Markdown
Member

What?

Adds an opt-in supports.editableRoot block support. When the selected block opts in, the writing flow wrapper (the editor canvas body) becomes the contentEditable editing host, so the browser's native selection can extend across blocks. Enabled for the paragraph block to start.

Why?

Cross-block selection currently relies on synthetic pointer handling that does not work with native selection on touch devices (notably iOS), where pointer events cannot be reliably intercepted. Making the wrapper a single editing host lets the native selection span blocks, while the editor should otherwise behave exactly as today.

How?

  1. New editableRoot support key (schema + docs), enabled on core/paragraph.
  2. useEditableRoot flips the writing flow wrapper to contentEditable and holds focus while the selected block opts in; it never flips mid-keystroke, only on block-selection change.
  3. Selection-ownership event model: handlers no longer rely on the event target. They use ownsSelection( element ) / subscribeOwnedListener (rich text private APIs) so they work whether focus is on the block's editable element or on the wrapper host.
  4. Selection sync ownership: rich text owns within-block sync (it always listens to selectionchange now, via a shared delegated listener); the writing flow observer owns cross-block multi-selection.
  5. Host-mode adaptations: arrow navigation, clipboard, autocomplete ARIA, and the typewriter are made to work when the wrapper holds focus.

Backward Compatibility

Blocks opt in (supports.editableRoot, paragraph only). The main risk is for extensions that add event handlers via the editor.BlockEdit (or editor.BlockListBlock) filter: when a block opts in, the writing-flow wrapper is the editing host and holds focus, so keyboard, input, and clipboard events target the wrapper (an ancestor of every block) rather than the block's own editable element. React handlers (onKeyDown, onInput, …) attached within a block therefore never fire, since the event originates above their subtree. Core's own handlers use a selection-ownership model (ownsSelection / subscribeOwnedListener) to handle this; if needed, we could add a back-compat layer that forwards on* React event handlers to the wrapper host.

Alternatives Considered

Drop contentEditable everywhere on uncollapsed selection. Instead of promoting the wrapper to a single editing host, keep each block editable as today and simply turn contentEditable off on every block the moment the selection becomes uncollapsed (text remains selectable without contentEditable). Adding tabindex to the blocks keeps focus on the originating block. The appeal: the focusable element never moves to the wrapper, so the selection-ownership rerouting and its back-compat risk for editor.BlockEdit handlers largely disappear, and the host swap is transient (only during an active cross-block selection).

This was prototyped and tested. In Chromium it works: flipping contentEditable off mid-drag does not abort the selection, both pointer and keyboard selection extend across blocks, and with tabindex the focus and subsequent keystrokes stay on the block rather than falling to <body>. However, on iOS Safari/WebKit it fails: mutating contentEditable/focus during the active selection gesture destroys the selection — it disappears the instant it forms. Since native cross-block selection on iOS touch is the entire motivation for this work, this approach is disqualifying there. The wrapper-as-single-editing-host model in this PR avoids mutating editability mid-gesture, which is why it holds up on iOS.

Testing Instructions

  1. Add a few paragraph blocks.
  2. Select text starting in one paragraph and dragging into another; the selection should span blocks natively.
  3. Verify single-block editing, splitting/merging, copy/paste, and formatting behave as before.

Testing Instructions for Keyboard

  1. With the caret in a paragraph, use Shift+ArrowUp/Shift+ArrowDown to extend the selection across blocks.
  2. Confirm arrow navigation, Enter/Backspace, and Cmd/Ctrl+A behave as before.

Use of AI Tools

This PR was developed with the assistance of AI tooling (Claude Code) for investigation, implementation, and test fixes, reviewed and validated by the author.

@github-actions github-actions Bot added [Package] Block library /packages/block-library [Package] Rich text /packages/rich-text [Package] Block editor /packages/block-editor [Package] Components /packages/components labels Jun 11, 2026
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown

Size Change: +1.63 kB (+0.02%)

Total Size: 7.71 MB

📦 View Changed
Filename Size Change
build/scripts/block-editor/index.min.js 421 kB +1.48 kB (+0.35%)
build/scripts/block-library/index.min.js 350 kB +9 B (0%)
build/scripts/components/index.min.js 271 kB -11 B (0%)
build/scripts/dom/index.min.js 5.02 kB +6 B (+0.12%)
build/scripts/rich-text/index.min.js 14.8 kB +146 B (+1%)

compressed-size-action

@github-actions github-actions Bot added [Package] DOM /packages/dom [Package] E2E Tests /packages/e2e-tests labels Jun 11, 2026
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown

Flaky tests detected in c0d2f9a.
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/29308950903
📝 Reported issues:

@ellatrix ellatrix changed the title WIP Add an block support for native cross-block selection Jun 16, 2026
@ellatrix ellatrix changed the title Add an block support for native cross-block selection Add an editableRoot block support for native cross-block selection Jun 16, 2026
@ellatrix ellatrix force-pushed the try/block-supports-editable-root branch from 290c95b to d9eaab2 Compare June 16, 2026 13:45
@ellatrix ellatrix marked this pull request as ready for review June 29, 2026 15:47
@github-actions

Copy link
Copy Markdown

Warning: Type of PR label mismatch

To merge this PR, it requires exactly 1 label indicating the type of PR. Other labels are optional and not being checked here.

  • Required label: Any label starting with [Type].
  • Labels found: [Package] DOM, [Package] Components, [Package] Block library, [Package] Rich text, [Package] Block editor, [Package] E2E Tests.

Read more about Type labels in Gutenberg. Don't worry if you don't have the required permissions to add labels; the PR reviewer should be able to help with the task.

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown

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

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

Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: ciampo <mciampini@git.wordpress.org>

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

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

It looks like e2e tests in test/e2e/specs/editor/various/list-view-spotlight-mode.spec.js are failing because they still assert toBeFocused() on paragraph rich-text elements, even if this PR intentionally moves DOM focus to the editable-root host (while the paragraph owns the selection). Should we migrate these tests to ownsSelection() too?

Comment thread packages/components/CHANGELOG.md Outdated
@ellatrix ellatrix force-pushed the try/block-supports-editable-root branch 2 times, most recently from 6786e44 to bc6b259 Compare July 10, 2026 18:24
ellatrix and others added 16 commits July 13, 2026 10:39
Matches the implementation extracted to trunk: the snapshot comparison
lives in handleSelectionChange, which the consuming events subscribe
directly on capture, and the focused-element case synchronizes too.
The selection-owner guard extends it to editing hosts, where there are
no focus events to catch up on entry and handlers that act on the
selected block only attach once the store selects it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Build the dispatch payload in place instead of extracting the offsets
into variables, so the payload and its clamp rationale stay identical
to trunk and the diff only shows the added store comparison.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pin preserved pre-input offsets for a getValue that derived the
selection from the DOM at read time. With the selection synchronized
on capture of consuming events, including beforeinput, the record
already holds the pre-input offsets when input handling reads it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rebase replayed the branch's copy of the subscription next to the
merged one without a conflict. Keep the merged block and fold the
editing host rationale into its comment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Three specs inlined near-identical resolvers for the element owning
the focus (the active element, or the editable containing the
selection when a focused editing host owns it). Move the strictest
variant next to the ownsSelection util as getFocusOwnerLabel and use
it in all three. The composition end simulation keeps its inline copy:
it must run in a single evaluate to preserve same-tick scheduling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The typewriter ref lands on the same node as writing flow (the canvas
body), which is the element that becomes the editing host. Key events
either target the node itself or bubble through it from a nested
editable, so node-bound listeners receive them in host mode too. The
document-level ownership routing was unnecessary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the enable and teardown branches with an idempotent
setAttribute helper that only touches the DOM when the attribute is
not in the requested state, two early returns for the leave-alone
cases, and a single flat body shared by both directions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The effect only depends on whether the wrapper should be an editing
host. Setup applies the attributes and moves focus in; the cleanup is
the teardown, skipping the contentEditable flip when a multi-selection
has taken over the wrapper. The selected block is read from the store
at run time instead of being a dependency, so switching between two
editable root blocks no longer re-runs the effect at all. The aria
attributes are now also removed when a multi-selection takes over,
where they previously lingered.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The registry is a constant dependency; selecting through it inside
the effect makes the run-time reads explicit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The mouseup that clears it is not guaranteed, e.g. when the pointer is
released outside the document; a stale flag must not suppress a later,
unrelated focus.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the shift gesture flag in the block focus handler. The
handler now always selects the block, without initial caret placement
for editable targets: the caret is already inside them, and placement
would collapse a native selection in the making, e.g. a shift+click
extending across blocks while the wrapper is the editing host. The
selection observer records the store anchor at shift+mousedown and
builds the multi-selection from it, so the dispatch overwriting the
store anchor is harmless.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Keep the hook's flow and skip only the placement itself when the
target already contains a caret delivered through a focused editing
host. A caret the rich text synchronized to the store is deliberate;
a leftover one yields to an explicitly requested edge position.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two focus handler rules for events that only exist while an editing
host makes container blocks focusable. Focus landing on an ancestor of
the selected block must not steal the selection from its descendant:
when a shift+click extends the selection within a container, the
browser focuses the common editable ancestor of the range (e.g. a
group block), and selecting it re-renders mid gesture and destroys the
native selection being made. A block that is part of the current
multi-selection must not collapse it: the focus event of a shift+click
is not ordered consistently against its mouseup across browsers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Consolidate the hosting conditions into canHostEditableRoot, shared by
the hook and the selection observer (whose copy had drifted and lacked
the editing mode check), and require every sibling in the list to have
the default editing mode. A host makes all its content editable by
inheritance: with an override-enabled pattern paragraph selected, the
pattern's read-only content became editable, and clicking it set off a
focus chain that moved the selection to the paragraph, so the button's
link edit was applied to the wrong block.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ellatrix ellatrix force-pushed the try/block-supports-editable-root branch from 77151c7 to 03dc034 Compare July 13, 2026 17:40
ellatrix and others added 3 commits July 13, 2026 19:21
The role, aria-multiline and accessible name now travel with the
wrapper's editability everywhere: setContentEditableWrapper is shared
by all writers (selection observer, drag, click, arrow and input
handling, multi selection, the clipboard cut path and the editable
root effect), sets the three attributes when the wrapper becomes an
editing host and removes them when it stops being one. The editable
root teardown no longer strips the attributes while a multi-selection
still owns the wrapper, and the multi-selection label cleanup restores
the generic host name instead of removing it while the wrapper keeps
hosting. Covered by an e2e test across the collapsed, cross-block and
deselected states.

Also replace the ancestor focus rule with a shift+click gesture flag
maintained by the selection observer: the ancestor rule also swallowed
legitimate parent selection by click, breaking cover block unit tests
and container-block flows. The flag only suppresses block selection
between a shift mousedown and its mouseup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Covers focus moving from an inner paragraph to an editable owned by an
ancestor block: the parent must become the selected block and own the
caret.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The selection observer stashed the store selection anchor at a
shift+click mousedown to survive the clicked block's focus handler
overwriting it before the multi-selection was built on mouseup. The
focus handler now bails for the whole gesture (isShiftClickInProgress),
so it never overwrites the anchor and the stash is unnecessary.

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

Copy link
Copy Markdown
Member Author

I'm going to merge. This will definitely be issues that pop up, but I want to try it for 7.1. Worst case we revert. Supporting mobile multi select has been long overdue. Will also re-evaluate all new code more in depth again and add on* React handlers compatibility.

@ellatrix ellatrix merged commit 3944b0e into trunk Jul 14, 2026
61 of 65 checks passed
@ellatrix ellatrix deleted the try/block-supports-editable-root branch July 14, 2026 06:17
@github-actions github-actions Bot added this to the Gutenberg 23.6 milestone Jul 14, 2026
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Jul 14, 2026
This updates the pinned commit hash of the Gutenberg repository from `b5574edc8a952b2f1e528693761a97b1b3b580eb` (version `23.5.0`) to `2872d71cde528d82675f14862a1b84e2b8abbaea` (version `23.6.0 RC1`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.5.0..v23.6.0-rc.1.

- IconButton: Use length zero for inline padding (WordPress/gutenberg#79722)
- Button: Align focus styles with design system (WordPress/gutenberg#78646)
- Remove playlist border radius support (WordPress/gutenberg#79753)
- ExternalLink: Stop setting default rel (WordPress/gutenberg#79743)
- Icons: Validate SVG icons include currentColor (WordPress/gutenberg#79751)
- Tests: Fix flaky 'GIF to Video' e2e test (WordPress/gutenberg#79758)
- CSS: Follow-up fixes to split_selector_list() (WordPress/gutenberg#79723)
- Automated Testing: Enforce no-unresolved checks for test files (WordPress/gutenberg#79718)
- Fix and permit unitless zeros used in CSS `calc` functions (WordPress/gutenberg#79786)
- Components: migrate View away from Emotion (WordPress/gutenberg#79443)
- Badge: update storybook with "don't use icons" example (WordPress/gutenberg#79585)
- Tabs: Prevent tab list from moving focus during revision navigation (WordPress/gutenberg#79730)
- Embed: Refactor 'EmbedPlaceholder' to use recommended components (WordPress/gutenberg#79759)
- RTC: Remove collaboration notification defaults filter (WordPress/gutenberg#79771)
- Tests: Honor waitForUploadQueueEmpty timeout in client-side media (WordPress/gutenberg#79783)
- lintstaged: Avoid appending filenames to the `prelint:js` command (WordPress/gutenberg#79800)
- Guidelines: Render block icons like the editor so every icon displays correctly (WordPress/gutenberg#79738)
- Isolated mode: Fix bin resolution, type mismatch, and missing dependencies (WordPress/gutenberg#79806)
- Duotone: Use HTML API class_list for duotone wrapper class handling (WordPress/gutenberg#79531)
- Deprecate `@wordpress/reusable-blocks` public APIs (WordPress/gutenberg#79805)
- UI: add LinkButton (WordPress/gutenberg#78944)
- Block Library: Replace obsolete `View` primitive with plain `div` (WordPress/gutenberg#79767)
- Site Editor: Update default theme color from fresh to modern (WordPress/gutenberg#79814)
- Prevent overscroll bounce for stage and inspector surfaces (WordPress/gutenberg#78587)
- Widgets: add attribute `relevance` and inline editing in the tile toolbar (WordPress/gutenberg#79735)
- Automated Testing: Configure lint:css to report needless disables (WordPress/gutenberg#79788)
- FormTokenField: Hard deprecate 40px default size (WordPress/gutenberg#79720)
- UnitControl: Hard deprecate 40px default size (WordPress/gutenberg#79721)
- Omnibar: move the 'site icon in admin bar' feature from experiment to 7.1 compat (WordPress/gutenberg#79807)
- Update waveform player dependency to bring in upstream a11y improvements (WordPress/gutenberg#79825)
- Backport changelog and package version updates from NPM (WordPress/gutenberg#79816)
- Block variations: Support innerContent for the Custom HTML block (WordPress/gutenberg#79659)
- Packages: Polish release changelog headings (WordPress/gutenberg#79826)
- Theme: Clarify focus token naming docs (WordPress/gutenberg#79764)
- Media: Return the filtered `wp_editor_set_quality` value in the upload response (WordPress/gutenberg#78420)
- Media: Backport client-side media improvements from WordPress core backports (WordPress/gutenberg#79603)
- Dynamic Gallery Block: Add a dynamic mode of the gallery block (WordPress/gutenberg#78796)
- Global Styles: Match block panel order to the block inspector (WordPress/gutenberg#79794)
- Verse block: add background gradient support (WordPress/gutenberg#79391)
- UI: Add Skeleton component (WordPress/gutenberg#79671)
- Widgets: add a declarative `help` metadata field, surfaced as a header infotip (WordPress/gutenberg#79830)
- CustomSelectControl: Hard deprecate 40px default size (WordPress/gutenberg#79796)
- Use subscribeDelegatedListener for selectionchange in rich text (WordPress/gutenberg#79712)
- Vips: preserve bit depth of high-bit-depth AVIF in sub-sizes (WordPress/gutenberg#79556)
- DataViews: Fix infinite-scroll jump on async page loads (WordPress/gutenberg#79546)
- Added Missing Global Documentation (WordPress/gutenberg#79827)
- Vips: Add positional-crop test for high-bit-depth AVIF (WordPress/gutenberg#79880)
- Responsive style states: Update responsive editing help text and avoid showing desktop badge (WordPress/gutenberg#79615)
- Packages: Update Ariakit to 0.4.32 (WordPress/gutenberg#79860)
- Block position: Allow options dropdown to flip (WordPress/gutenberg#79798)
- Command Palette: show the search icon on desktop as well (WordPress/gutenberg#79881)
- Docs: Clarify release recovery steps (WordPress/gutenberg#79884)
- Widgets: auto-save inline attribute edits (WordPress/gutenberg#79808)
- Classic block: Remove migration notice and restore inserter availability (WordPress/gutenberg#79894)
- Media: enable uploading images inserted by URL (WordPress/gutenberg#79409)
- Editor: saveDirtyEntities: don't allow onSave to filter records (WordPress/gutenberg#79850)
- Theme: Use token reference as docs source (WordPress/gutenberg#79829)
- RTC: Add RTC WebSocket tests to CI (WordPress/gutenberg#79757)
- Components: migrate Flex to SCSS module (WordPress/gutenberg#79450)
- Collaboration: only report changed properties from the default sync config (WordPress/gutenberg#79908)
- ThemeProvider: Document wrapper customization scope (WordPress/gutenberg#79763)
- Backfill unreleased changelog entries for the widget packages (WordPress/gutenberg#79909)
- Remove unused FocalPointPicker style.scss (WordPress/gutenberg#79902)
- SelectControl: Hard deprecate 40px default size (WordPress/gutenberg#79797)
- Github workflows: extend package changelog nudge to bundled packages (WordPress/gutenberg#78934)
- DimensionControl: Include styles in stylesheet (WordPress/gutenberg#79916)
- Skip flakey collaboration e2e test (WordPress/gutenberg#79922)
- Backport Changelog: Link Core PR WordPress/gutenberg#12007 for WordPress/gutenberg#75793 (WordPress/gutenberg#78786)
- Block Style Variations: Simplify block style variation selector regex (WordPress/gutenberg#79924)
- View Config: Add version handling (WordPress/gutenberg#79809)
- HTML Block: Preserve innerContent when transforming to group, columns (WordPress/gutenberg#79887)
- remove layout settings from widget dashboard (WordPress/gutenberg#79903)
- Components: migrate Theme away from Emotion (WordPress/gutenberg#79447)
- Blocks package: Stabilize `cloneSanitizedBlock` and `sanitizeBlockAttributes` (WordPress/gutenberg#79928)
- Move real-time collaboration compat code to wordpress-7.1 (WordPress/gutenberg#79863)
- Button: Fix focus ring for link (WordPress/gutenberg#79837)
- Fix: DataForm inspector shows raw "auto-draft" status for new posts (WordPress/gutenberg#79914)
- Block Supports: Prevent Additional CSS duplication inside Query Loop (WordPress/gutenberg#78282)
- Code Quality: Use modern PHP string functions instead of strpos/substr (WordPress/gutenberg#79927)
- Playlist: seek value text localization (WordPress/gutenberg#79834)
- Code Quality: Use null coalescing operator instead of isset() ternaries (WordPress/gutenberg#79946)
- Block editor: Fix clipped/doubled focus outline on inserter block list items (WordPress/gutenberg#79845)
- Lint-staged: Match lint:css file globs (WordPress/gutenberg#79918)
- Latest Posts: Parse blocks in full content display (WordPress/gutenberg#74866)
- Block Editor: Share block-bindings context assembly between call sites (WordPress/gutenberg#79855)
- Stylelint: Enforce class naming for all stylesheets (WordPress/gutenberg#79900)
- Components: migrate Spacer to SCSS module (WordPress/gutenberg#79449)
- Design system MCP: Document Codex CLI prerequisite for MCP setup (WordPress/gutenberg#79917)
- NumberControl: Hard deprecate 40px default size (WordPress/gutenberg#79861)
- Remove unused customizer-edit-widgets-initializer style.scss (WordPress/gutenberg#79915)
- stylelint-config: Convert config to ESM (WordPress/gutenberg#79755)
- Button: Fix suppressed ESLint errors (WordPress/gutenberg#79944)
- Replace user-based authentication with a GitHub App for release-related logic (WordPress/gutenberg#79912)
- Set selection before typing in RTC stress test (WordPress/gutenberg#79954)
- Navigation Link/Submenu: run should-render check also without gutenberg plugin (WordPress/gutenberg#79748)
- Rich Text: Move RichTextShortcut and RichTextInputEvent into @wordpress/rich-text (WordPress/gutenberg#79828)
- Docs: Generalize the `npx` guidance in AGENTS.md to cover `wp-scripts` (WordPress/gutenberg#79973)
- Media: Fix fatal error from narrowed create_item_from_url() visibility (WordPress/gutenberg#79972)
- Editor: render back button as true <Button> and remove custom CSS (WordPress/gutenberg#79862)
- SandBox: Inject resize script into head to stop it leaking as text (WordPress/gutenberg#79920)
- Tabs: Remove editor-only block context (WordPress/gutenberg#79848)
- Allow setting viewport tablet and mobile values in theme.json (WordPress/gutenberg#79104)
- Media Inserter: Guard attach, detach, and invalidate behind a ! isExternalResource check (WordPress/gutenberg#79978)
- BorderBoxControl: Fix unlink button positioning after View Emotion migration (WordPress/gutenberg#79967)
- List: Fix suppressed ESLint errors (WordPress/gutenberg#79983)
- Media Modals: Invalidate attachment caches when closing the modal (WordPress/gutenberg#79844)
- Perf tests: wait for upload queue to settle between media-upload iterations (WordPress/gutenberg#79952)
- GIF block variation: Remove icons from "Display as" toolbar buttons and only show when block can be inserted (WordPress/gutenberg#79985)
- Stylelint: Lint all CSS file extensions (WordPress/gutenberg#79957)
- Project automation: Stop flagging returning contributors as first-timers when they use hidden email addresses (WordPress/gutenberg#79987)
- PHP-Only blocks: forward current post ID to server render (WordPress/gutenberg#78909)
- Widget Dashboard: reserve paint space for tile focus rings (WordPress/gutenberg#79990)
- Playlist: Show album art thumbnails (WordPress/gutenberg#79942)
- Editor: Preload the view config form request for the DataForm inspector (WordPress/gutenberg#79910)
- Properly configure Git user metadata for new app. (WordPress/gutenberg#80005)
- Site Editor v2 experiment: correctly hide admin bar in distraction-free mode (WordPress/gutenberg#79937)
- Switch from App ID to App user ID in git metadata. (WordPress/gutenberg#80006)
- Playlist block: Avoid laggy layout shift when changing tracks (WordPress/gutenberg#79497)
- Add ariaLabel supports for Tab List Block (WordPress/gutenberg#79948)
- Restore responsive editing viewport dropdown copy changes (WordPress/gutenberg#79999)
- Enable default gap processing on Gallery block (WordPress/gutenberg#79984)
- Hide block toolbar slots when editing a responsive style state (WordPress/gutenberg#79998)
- Tabs: Fix active tab switching from a stale inner-block selection (WordPress/gutenberg#79981)
- Added Missing Global Documentation (WordPress/gutenberg#80033)
- Media editor: address accessibility review feedback (WordPress/gutenberg#79966)
- Build: Fix non-breaking npm audit vulnerability alerts (WordPress/gutenberg#79886)
- Style Book: Pass site editor settings to StyleBookPreview on the styles route (WordPress/gutenberg#80035)
- Editor: Fix regression and restore the back button focus ring (WordPress/gutenberg#80029)
- Editor: render mobile back button as proper <Button> and remove custom CSS (WordPress/gutenberg#80032)
- Style Book: Migrate to Tabs from @wordpress/ui (WordPress/gutenberg#80040)
- Document widget relevance, help (WordPress/gutenberg#80007)
- Visual revisions: Label autosaves in the revisions timeline (WordPress/gutenberg#79950)
- Fix flaky "can use appender in site editor sidebar list view" e2e test (WordPress/gutenberg#80044)
- Theme: Fix token story swatch accessibility (WordPress/gutenberg#79960)
- Global Styles: Show skeleton placeholder while previews load (WordPress/gutenberg#79849)
- Theme: Fill semantic token state gaps (WordPress/gutenberg#79770)
- Theme: Document accessibility responsibilities (WordPress/gutenberg#79943)
- Theme: Restrict seed colors to opaque values (WordPress/gutenberg#79773)
- Theme: Document token naming grammar (WordPress/gutenberg#79769)
- RTC: Only apply CRDT updates synchronously when collaborating (WordPress/gutenberg#79991)
- Bump docker/login-action from 4.2.0 to 4.4.0 in /.github/workflows in the github-actions group across 1 directory (WordPress/gutenberg#80047)
- Packages: Widen React peer dependency support to include React 19 (WordPress/gutenberg#80024)
- Tabs: track overflow by observing each tab, mirroring Base UI (WordPress/gutenberg#79856)
- Theme: Update design token format links (WordPress/gutenberg#80052)
- design-system-mcp: Use fixed version for alpha MCP server (WordPress/gutenberg#80061)
- Fix global gap styles for Gallery block (WordPress/gutenberg#80030)
- Notes: Add a "Resolved" divider above resolved notes (WordPress/gutenberg#80019)
- Checkbox: Add form primitive to @wordpress/ui (WordPress/gutenberg#80039)
- InputControl: Hard deprecate 40px default size (WordPress/gutenberg#79962)
- Panel: fix focus style for toggle button (WordPress/gutenberg#80064)
- GIF to video conversion: make it opt-in. Switching via block transforms (WordPress/gutenberg#80072)
- Theme: Make @wordpress/theme ESM only (WordPress/gutenberg#80063)
- theme: Clarify package docs (WordPress/gutenberg#79961)
- Fix focus ring for document bar (WordPress/gutenberg#80084)
- Visual revisions: Make the autosave notice work with the visual revisions UI (WordPress/gutenberg#79947)
- Fix flaky 'Activate theme' e2e test (WordPress/gutenberg#80090)
- Fix playlist artwork removal on track switch (WordPress/gutenberg#80025)
- Move styles into specific waveform styles dropdown area (WordPress/gutenberg#80060)
- stylelint-config: Enable token fallback rule (WordPress/gutenberg#79768)
- Fix flashing track state when adding new track (WordPress/gutenberg#80076)
- Icons: Filter the icon library picker by collection (WordPress/gutenberg#79681)
- Post editor: always iframe (WordPress/gutenberg#74042)
- A11y: replace local aria-live regions with speak() (WordPress/gutenberg#79600)
- Generalize playlist block wording (WordPress/gutenberg#80071)
- Docs: Add missing @param and @return tags to REST API compat functions (WordPress/gutenberg#80079)
- Guidelines: Add Blocks as a registry scope (WordPress/gutenberg#79709)
- Allow font size customization (WordPress/gutenberg#80069)
- UI: Restore Link focus styles (WordPress/gutenberg#80091)
- Editor: use the DS focus color for all sidebar elements (WordPress/gutenberg#80087)
- File Block: Changed the context for fetching the media (WordPress/gutenberg#80085)
- Theme: Remove elevation tokens (WordPress/gutenberg#80099)
- Build: Upgrade to TypeScript 7.0 (WordPress/gutenberg#80083)
- Connectors: add application password settings UI (WordPress/gutenberg#79403)
- Icons: Unify collection-scoping route param on `collection` and validate description (WordPress/gutenberg#80113)
- Add translation comment to waveform styles (WordPress/gutenberg#80112)
- Playlist: use PlainText v2 to avoid HTML entities (WordPress/gutenberg#80068)
- Move inspector controls styles slot back to previous position (WordPress/gutenberg#80111)
- Fix playlist waveform artist rendering (WordPress/gutenberg#80104)
- Fix linting of waveform test (WordPress/gutenberg#80124)
- Theme: Document and test build plugin transform boundaries (WordPress/gutenberg#80088)
- CODEOWNERS: Exclude eslint suppressions.json from /tools ownership (WordPress/gutenberg#80125)
- Second click or space/enter keypress on playing track pauses it (WordPress/gutenberg#80066)
- Theme: Cover display contents wrapper focus behavior (WordPress/gutenberg#80056)
- wp-build: Allow @wordpress/theme 1.x peer versions (WordPress/gutenberg#80089)
- Writing flow: fix selection end mapping at block boundaries (WordPress/gutenberg#80126)
- Components: link recommended UI component (WordPress/gutenberg#80127)
- Typewriter: remove the block selection gate (WordPress/gutenberg#80130)
- useMergeRefs: apply ref changes after out-of-render attachment (WordPress/gutenberg#80133)
- Observe typing on the writing flow node (WordPress/gutenberg#80131)
- Components/Button: Don't use box-shadow for secondary buttons (WordPress/gutenberg#79982)
- DataViews: Add a richtext control backed by a private RichTextControl shell in @wordpress/components (WordPress/gutenberg#78471)
- Apply and correct EXIF orientation for client side sub-sizes (WordPress/gutenberg#79384)
- Fix typo in inline comment  in `collaboration.php` (WordPress/gutenberg#80147)
- Media Inserter: Allow core media categories to subscribe to changes (WordPress/gutenberg#79921)
- Accordion block: add background gradient support (WordPress/gutenberg#79840)
- Rich text: synchronize the selection before events that consume it (WordPress/gutenberg#80151)
- Quote block: add background gradient support (WordPress/gutenberg#79843)
- Add option to exclude current post from query block (WordPress/gutenberg#64916)
- Pullquote block: add background gradient support (WordPress/gutenberg#79841)
- Block Supports: Ensure that custom CSS is output after the block library styles (WordPress/gutenberg#80062)
- Rich text: cut through the record instead of execCommand (WordPress/gutenberg#80155)
- Media Inserter: Add pagination to core media inserter categories (WordPress/gutenberg#80038)
- Responsive editing: Add a Tooltip to the viewport / states badge (WordPress/gutenberg#80080)
- Scripts: Make 'test-e2e' run Playwright and remove Puppeteer (WordPress/gutenberg#80058)
- Post Content block: add background gradient support (WordPress/gutenberg#79842)
- Notes: Remove snackbar when resolving or reopening a note (WordPress/gutenberg#80017)
- Enable text alignment to be set by viewport state (WordPress/gutenberg#80037)
- Preview dropdown: simplify viewport style state descriptions (WordPress/gutenberg#80146)
- File Block: Deduplicate the file to audio/video/image transforms (WordPress/gutenberg#80158)
- Responsive editing: Show crop dimensions on image block placeholder (WordPress/gutenberg#80162)
- Add missing docblocks to client-assets.php (WordPress/gutenberg#80135)
- Move typescript and rimraf out of the root package.json (WordPress/gutenberg#80086)
- Release: Harden latest npm metadata publishing (WordPress/gutenberg#79904)
- Add Playlist icon. (WordPress/gutenberg#80168)
- Sync changes from core for view-config version handling (WordPress/gutenberg#80170)
- CODEOWNERS: Exclude stylelint suppressions.json from /tools ownership (WordPress/gutenberg#80171)
- Editor: only show back button focus ring on :focus-visible (WordPress/gutenberg#80114)
- Release: Harden plugin release workflow guardrails (WordPress/gutenberg#79858)
- Icons: Add "sites" icon. (WordPress/gutenberg#80094)
- Flaky tests: fix widgets global inserter (WordPress/gutenberg#80177)
- Release: Harden all npm package release paths (WordPress/gutenberg#79905)
- Update `actionlint` to version `1.7.12`. (WordPress/gutenberg#79833)
- Flaky tests: fix rich text backtick undo (WordPress/gutenberg#80183)
- Button: hide Core focus ring when button as link is pressed (WordPress/gutenberg#80082)
- Term Name: Migrate to textAlign block support (WordPress/gutenberg#76581)
- Cover: allow restricting video embed providers (WordPress/gutenberg#80092)
- Playlist icon: Fix bug with missing viewbox. (WordPress/gutenberg#80180)
- Use playlist icon for Playlist block (WordPress/gutenberg#80174)
- Build: Make installed-deps check layout-agnostic and surface opt-out env var (WordPress/gutenberg#79687)
- Blocks: Rename _gutenberg_apply_content_filters() to _wp_apply_content_filters() (WordPress/gutenberg#80191)
- Tabs: Wrap tab list onto multiple lines by default (WordPress/gutenberg#80097)
- Flaky tests: fix writing flow arrow navigation (WordPress/gutenberg#80179)
- Theme: Use public design token stylesheet imports (WordPress/gutenberg#80050)
- Simplify playlist waveform metadata updates (WordPress/gutenberg#80193)
- Notes: Support inline rich text (bold, italic, link, code) (WordPress/gutenberg#78242)
- Playlist Block: Add artwork to play button (WordPress/gutenberg#79938)
- Cover Block: Fix unsaveable state when clearing an embed video background (WordPress/gutenberg#80184)
- DS: Name font weight tokens by intent (WordPress/gutenberg#80093)
- theme: Validate npm publish surface (WordPress/gutenberg#79552)
- Theme: Remove experimental package messaging (WordPress/gutenberg#80049)
- Playlist Block: add waveform and waveform background color options (WordPress/gutenberg#80065)
- Add more workflow file static analysis with Zizmor (WordPress/gutenberg#71523)
- Block Editor: Simplify layout panel selector getter (WordPress/gutenberg#80176)
- Media Inserter: Omit page arg from requests for the first set of results (WordPress/gutenberg#80219)
- Notes: Add @mention autocomplete (WordPress/gutenberg#79604)
- Latest Posts: Fix slow category selection with large category lists (WordPress/gutenberg#80198)
- Block visibility: add theme json opt out (WordPress/gutenberg#76559)
- Add an `editableRoot` block support for native cross-block selection (WordPress/gutenberg#79105)
- Notes: Allow canceling the autocompleter popover with Escape without dismissing the note form (WordPress/gutenberg#80224)
- Add contrast checking for viewport and pseudo states (WordPress/gutenberg#80223)
- Blocks: Rename _wp_apply_content_filters() to _wp_apply_block_content_filters() (WordPress/gutenberg#80225)
- Widget Primitives: Add a field type registry for widget attributes (WordPress/gutenberg#80148)
- Icon block: When the default icon is unregistered, nothing is displayed (WordPress/gutenberg#80166)
- Make the Playlist blocks stable (WordPress/gutenberg#80203)
- Autocomplete: Use regular weight for result items (WordPress/gutenberg#80196)
- Make pause button visually same size as play button (WordPress/gutenberg#80217)
- Editor: Render post preview action as a menu item (WordPress/gutenberg#80195)
- Release: Fail changelog generation cleanly (WordPress/gutenberg#80175)
- Stabilize Tabs block (WordPress/gutenberg#80163)
- Theme: Correct documented default background seed (WordPress/gutenberg#80237)
- Block Supports: Improve handling of block class name to avoid fatal (WordPress/gutenberg#80214)
- Rename 'Responsive editing' toggle to 'Responsive styles' (WordPress/gutenberg#80241)
- Release: Make npm publishing rerunnable (WordPress/gutenberg#80187)
- Only include icon library SVGs listed as `public` in the Zip file published to GitHub Container Registry for `wordpress-develop` (WordPress/gutenberg#79338)

Props desrosj, wildworks.
Fixes #65529.

git-svn-id: https://develop.svn.wordpress.org/trunk@62739 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Jul 14, 2026
This updates the pinned commit hash of the Gutenberg repository from `b5574edc8a952b2f1e528693761a97b1b3b580eb` (version `23.5.0`) to `2872d71cde528d82675f14862a1b84e2b8abbaea` (version `23.6.0 RC1`).

A full list of changes included in this commit can be found on GitHub: https://github.com/WordPress/gutenberg/compare/v23.5.0..v23.6.0-rc.1.

- IconButton: Use length zero for inline padding (WordPress/gutenberg#79722)
- Button: Align focus styles with design system (WordPress/gutenberg#78646)
- Remove playlist border radius support (WordPress/gutenberg#79753)
- ExternalLink: Stop setting default rel (WordPress/gutenberg#79743)
- Icons: Validate SVG icons include currentColor (WordPress/gutenberg#79751)
- Tests: Fix flaky 'GIF to Video' e2e test (WordPress/gutenberg#79758)
- CSS: Follow-up fixes to split_selector_list() (WordPress/gutenberg#79723)
- Automated Testing: Enforce no-unresolved checks for test files (WordPress/gutenberg#79718)
- Fix and permit unitless zeros used in CSS `calc` functions (WordPress/gutenberg#79786)
- Components: migrate View away from Emotion (WordPress/gutenberg#79443)
- Badge: update storybook with "don't use icons" example (WordPress/gutenberg#79585)
- Tabs: Prevent tab list from moving focus during revision navigation (WordPress/gutenberg#79730)
- Embed: Refactor 'EmbedPlaceholder' to use recommended components (WordPress/gutenberg#79759)
- RTC: Remove collaboration notification defaults filter (WordPress/gutenberg#79771)
- Tests: Honor waitForUploadQueueEmpty timeout in client-side media (WordPress/gutenberg#79783)
- lintstaged: Avoid appending filenames to the `prelint:js` command (WordPress/gutenberg#79800)
- Guidelines: Render block icons like the editor so every icon displays correctly (WordPress/gutenberg#79738)
- Isolated mode: Fix bin resolution, type mismatch, and missing dependencies (WordPress/gutenberg#79806)
- Duotone: Use HTML API class_list for duotone wrapper class handling (WordPress/gutenberg#79531)
- Deprecate `@wordpress/reusable-blocks` public APIs (WordPress/gutenberg#79805)
- UI: add LinkButton (WordPress/gutenberg#78944)
- Block Library: Replace obsolete `View` primitive with plain `div` (WordPress/gutenberg#79767)
- Site Editor: Update default theme color from fresh to modern (WordPress/gutenberg#79814)
- Prevent overscroll bounce for stage and inspector surfaces (WordPress/gutenberg#78587)
- Widgets: add attribute `relevance` and inline editing in the tile toolbar (WordPress/gutenberg#79735)
- Automated Testing: Configure lint:css to report needless disables (WordPress/gutenberg#79788)
- FormTokenField: Hard deprecate 40px default size (WordPress/gutenberg#79720)
- UnitControl: Hard deprecate 40px default size (WordPress/gutenberg#79721)
- Omnibar: move the 'site icon in admin bar' feature from experiment to 7.1 compat (WordPress/gutenberg#79807)
- Update waveform player dependency to bring in upstream a11y improvements (WordPress/gutenberg#79825)
- Backport changelog and package version updates from NPM (WordPress/gutenberg#79816)
- Block variations: Support innerContent for the Custom HTML block (WordPress/gutenberg#79659)
- Packages: Polish release changelog headings (WordPress/gutenberg#79826)
- Theme: Clarify focus token naming docs (WordPress/gutenberg#79764)
- Media: Return the filtered `wp_editor_set_quality` value in the upload response (WordPress/gutenberg#78420)
- Media: Backport client-side media improvements from WordPress core backports (WordPress/gutenberg#79603)
- Dynamic Gallery Block: Add a dynamic mode of the gallery block (WordPress/gutenberg#78796)
- Global Styles: Match block panel order to the block inspector (WordPress/gutenberg#79794)
- Verse block: add background gradient support (WordPress/gutenberg#79391)
- UI: Add Skeleton component (WordPress/gutenberg#79671)
- Widgets: add a declarative `help` metadata field, surfaced as a header infotip (WordPress/gutenberg#79830)
- CustomSelectControl: Hard deprecate 40px default size (WordPress/gutenberg#79796)
- Use subscribeDelegatedListener for selectionchange in rich text (WordPress/gutenberg#79712)
- Vips: preserve bit depth of high-bit-depth AVIF in sub-sizes (WordPress/gutenberg#79556)
- DataViews: Fix infinite-scroll jump on async page loads (WordPress/gutenberg#79546)
- Added Missing Global Documentation (WordPress/gutenberg#79827)
- Vips: Add positional-crop test for high-bit-depth AVIF (WordPress/gutenberg#79880)
- Responsive style states: Update responsive editing help text and avoid showing desktop badge (WordPress/gutenberg#79615)
- Packages: Update Ariakit to 0.4.32 (WordPress/gutenberg#79860)
- Block position: Allow options dropdown to flip (WordPress/gutenberg#79798)
- Command Palette: show the search icon on desktop as well (WordPress/gutenberg#79881)
- Docs: Clarify release recovery steps (WordPress/gutenberg#79884)
- Widgets: auto-save inline attribute edits (WordPress/gutenberg#79808)
- Classic block: Remove migration notice and restore inserter availability (WordPress/gutenberg#79894)
- Media: enable uploading images inserted by URL (WordPress/gutenberg#79409)
- Editor: saveDirtyEntities: don't allow onSave to filter records (WordPress/gutenberg#79850)
- Theme: Use token reference as docs source (WordPress/gutenberg#79829)
- RTC: Add RTC WebSocket tests to CI (WordPress/gutenberg#79757)
- Components: migrate Flex to SCSS module (WordPress/gutenberg#79450)
- Collaboration: only report changed properties from the default sync config (WordPress/gutenberg#79908)
- ThemeProvider: Document wrapper customization scope (WordPress/gutenberg#79763)
- Backfill unreleased changelog entries for the widget packages (WordPress/gutenberg#79909)
- Remove unused FocalPointPicker style.scss (WordPress/gutenberg#79902)
- SelectControl: Hard deprecate 40px default size (WordPress/gutenberg#79797)
- Github workflows: extend package changelog nudge to bundled packages (WordPress/gutenberg#78934)
- DimensionControl: Include styles in stylesheet (WordPress/gutenberg#79916)
- Skip flakey collaboration e2e test (WordPress/gutenberg#79922)
- Backport Changelog: Link Core PR WordPress/gutenberg#12007 for WordPress/gutenberg#75793 (WordPress/gutenberg#78786)
- Block Style Variations: Simplify block style variation selector regex (WordPress/gutenberg#79924)
- View Config: Add version handling (WordPress/gutenberg#79809)
- HTML Block: Preserve innerContent when transforming to group, columns (WordPress/gutenberg#79887)
- remove layout settings from widget dashboard (WordPress/gutenberg#79903)
- Components: migrate Theme away from Emotion (WordPress/gutenberg#79447)
- Blocks package: Stabilize `cloneSanitizedBlock` and `sanitizeBlockAttributes` (WordPress/gutenberg#79928)
- Move real-time collaboration compat code to wordpress-7.1 (WordPress/gutenberg#79863)
- Button: Fix focus ring for link (WordPress/gutenberg#79837)
- Fix: DataForm inspector shows raw "auto-draft" status for new posts (WordPress/gutenberg#79914)
- Block Supports: Prevent Additional CSS duplication inside Query Loop (WordPress/gutenberg#78282)
- Code Quality: Use modern PHP string functions instead of strpos/substr (WordPress/gutenberg#79927)
- Playlist: seek value text localization (WordPress/gutenberg#79834)
- Code Quality: Use null coalescing operator instead of isset() ternaries (WordPress/gutenberg#79946)
- Block editor: Fix clipped/doubled focus outline on inserter block list items (WordPress/gutenberg#79845)
- Lint-staged: Match lint:css file globs (WordPress/gutenberg#79918)
- Latest Posts: Parse blocks in full content display (WordPress/gutenberg#74866)
- Block Editor: Share block-bindings context assembly between call sites (WordPress/gutenberg#79855)
- Stylelint: Enforce class naming for all stylesheets (WordPress/gutenberg#79900)
- Components: migrate Spacer to SCSS module (WordPress/gutenberg#79449)
- Design system MCP: Document Codex CLI prerequisite for MCP setup (WordPress/gutenberg#79917)
- NumberControl: Hard deprecate 40px default size (WordPress/gutenberg#79861)
- Remove unused customizer-edit-widgets-initializer style.scss (WordPress/gutenberg#79915)
- stylelint-config: Convert config to ESM (WordPress/gutenberg#79755)
- Button: Fix suppressed ESLint errors (WordPress/gutenberg#79944)
- Replace user-based authentication with a GitHub App for release-related logic (WordPress/gutenberg#79912)
- Set selection before typing in RTC stress test (WordPress/gutenberg#79954)
- Navigation Link/Submenu: run should-render check also without gutenberg plugin (WordPress/gutenberg#79748)
- Rich Text: Move RichTextShortcut and RichTextInputEvent into @wordpress/rich-text (WordPress/gutenberg#79828)
- Docs: Generalize the `npx` guidance in AGENTS.md to cover `wp-scripts` (WordPress/gutenberg#79973)
- Media: Fix fatal error from narrowed create_item_from_url() visibility (WordPress/gutenberg#79972)
- Editor: render back button as true <Button> and remove custom CSS (WordPress/gutenberg#79862)
- SandBox: Inject resize script into head to stop it leaking as text (WordPress/gutenberg#79920)
- Tabs: Remove editor-only block context (WordPress/gutenberg#79848)
- Allow setting viewport tablet and mobile values in theme.json (WordPress/gutenberg#79104)
- Media Inserter: Guard attach, detach, and invalidate behind a ! isExternalResource check (WordPress/gutenberg#79978)
- BorderBoxControl: Fix unlink button positioning after View Emotion migration (WordPress/gutenberg#79967)
- List: Fix suppressed ESLint errors (WordPress/gutenberg#79983)
- Media Modals: Invalidate attachment caches when closing the modal (WordPress/gutenberg#79844)
- Perf tests: wait for upload queue to settle between media-upload iterations (WordPress/gutenberg#79952)
- GIF block variation: Remove icons from "Display as" toolbar buttons and only show when block can be inserted (WordPress/gutenberg#79985)
- Stylelint: Lint all CSS file extensions (WordPress/gutenberg#79957)
- Project automation: Stop flagging returning contributors as first-timers when they use hidden email addresses (WordPress/gutenberg#79987)
- PHP-Only blocks: forward current post ID to server render (WordPress/gutenberg#78909)
- Widget Dashboard: reserve paint space for tile focus rings (WordPress/gutenberg#79990)
- Playlist: Show album art thumbnails (WordPress/gutenberg#79942)
- Editor: Preload the view config form request for the DataForm inspector (WordPress/gutenberg#79910)
- Properly configure Git user metadata for new app. (WordPress/gutenberg#80005)
- Site Editor v2 experiment: correctly hide admin bar in distraction-free mode (WordPress/gutenberg#79937)
- Switch from App ID to App user ID in git metadata. (WordPress/gutenberg#80006)
- Playlist block: Avoid laggy layout shift when changing tracks (WordPress/gutenberg#79497)
- Add ariaLabel supports for Tab List Block (WordPress/gutenberg#79948)
- Restore responsive editing viewport dropdown copy changes (WordPress/gutenberg#79999)
- Enable default gap processing on Gallery block (WordPress/gutenberg#79984)
- Hide block toolbar slots when editing a responsive style state (WordPress/gutenberg#79998)
- Tabs: Fix active tab switching from a stale inner-block selection (WordPress/gutenberg#79981)
- Added Missing Global Documentation (WordPress/gutenberg#80033)
- Media editor: address accessibility review feedback (WordPress/gutenberg#79966)
- Build: Fix non-breaking npm audit vulnerability alerts (WordPress/gutenberg#79886)
- Style Book: Pass site editor settings to StyleBookPreview on the styles route (WordPress/gutenberg#80035)
- Editor: Fix regression and restore the back button focus ring (WordPress/gutenberg#80029)
- Editor: render mobile back button as proper <Button> and remove custom CSS (WordPress/gutenberg#80032)
- Style Book: Migrate to Tabs from @wordpress/ui (WordPress/gutenberg#80040)
- Document widget relevance, help (WordPress/gutenberg#80007)
- Visual revisions: Label autosaves in the revisions timeline (WordPress/gutenberg#79950)
- Fix flaky "can use appender in site editor sidebar list view" e2e test (WordPress/gutenberg#80044)
- Theme: Fix token story swatch accessibility (WordPress/gutenberg#79960)
- Global Styles: Show skeleton placeholder while previews load (WordPress/gutenberg#79849)
- Theme: Fill semantic token state gaps (WordPress/gutenberg#79770)
- Theme: Document accessibility responsibilities (WordPress/gutenberg#79943)
- Theme: Restrict seed colors to opaque values (WordPress/gutenberg#79773)
- Theme: Document token naming grammar (WordPress/gutenberg#79769)
- RTC: Only apply CRDT updates synchronously when collaborating (WordPress/gutenberg#79991)
- Bump docker/login-action from 4.2.0 to 4.4.0 in /.github/workflows in the github-actions group across 1 directory (WordPress/gutenberg#80047)
- Packages: Widen React peer dependency support to include React 19 (WordPress/gutenberg#80024)
- Tabs: track overflow by observing each tab, mirroring Base UI (WordPress/gutenberg#79856)
- Theme: Update design token format links (WordPress/gutenberg#80052)
- design-system-mcp: Use fixed version for alpha MCP server (WordPress/gutenberg#80061)
- Fix global gap styles for Gallery block (WordPress/gutenberg#80030)
- Notes: Add a "Resolved" divider above resolved notes (WordPress/gutenberg#80019)
- Checkbox: Add form primitive to @wordpress/ui (WordPress/gutenberg#80039)
- InputControl: Hard deprecate 40px default size (WordPress/gutenberg#79962)
- Panel: fix focus style for toggle button (WordPress/gutenberg#80064)
- GIF to video conversion: make it opt-in. Switching via block transforms (WordPress/gutenberg#80072)
- Theme: Make @wordpress/theme ESM only (WordPress/gutenberg#80063)
- theme: Clarify package docs (WordPress/gutenberg#79961)
- Fix focus ring for document bar (WordPress/gutenberg#80084)
- Visual revisions: Make the autosave notice work with the visual revisions UI (WordPress/gutenberg#79947)
- Fix flaky 'Activate theme' e2e test (WordPress/gutenberg#80090)
- Fix playlist artwork removal on track switch (WordPress/gutenberg#80025)
- Move styles into specific waveform styles dropdown area (WordPress/gutenberg#80060)
- stylelint-config: Enable token fallback rule (WordPress/gutenberg#79768)
- Fix flashing track state when adding new track (WordPress/gutenberg#80076)
- Icons: Filter the icon library picker by collection (WordPress/gutenberg#79681)
- Post editor: always iframe (WordPress/gutenberg#74042)
- A11y: replace local aria-live regions with speak() (WordPress/gutenberg#79600)
- Generalize playlist block wording (WordPress/gutenberg#80071)
- Docs: Add missing @param and @return tags to REST API compat functions (WordPress/gutenberg#80079)
- Guidelines: Add Blocks as a registry scope (WordPress/gutenberg#79709)
- Allow font size customization (WordPress/gutenberg#80069)
- UI: Restore Link focus styles (WordPress/gutenberg#80091)
- Editor: use the DS focus color for all sidebar elements (WordPress/gutenberg#80087)
- File Block: Changed the context for fetching the media (WordPress/gutenberg#80085)
- Theme: Remove elevation tokens (WordPress/gutenberg#80099)
- Build: Upgrade to TypeScript 7.0 (WordPress/gutenberg#80083)
- Connectors: add application password settings UI (WordPress/gutenberg#79403)
- Icons: Unify collection-scoping route param on `collection` and validate description (WordPress/gutenberg#80113)
- Add translation comment to waveform styles (WordPress/gutenberg#80112)
- Playlist: use PlainText v2 to avoid HTML entities (WordPress/gutenberg#80068)
- Move inspector controls styles slot back to previous position (WordPress/gutenberg#80111)
- Fix playlist waveform artist rendering (WordPress/gutenberg#80104)
- Fix linting of waveform test (WordPress/gutenberg#80124)
- Theme: Document and test build plugin transform boundaries (WordPress/gutenberg#80088)
- CODEOWNERS: Exclude eslint suppressions.json from /tools ownership (WordPress/gutenberg#80125)
- Second click or space/enter keypress on playing track pauses it (WordPress/gutenberg#80066)
- Theme: Cover display contents wrapper focus behavior (WordPress/gutenberg#80056)
- wp-build: Allow @wordpress/theme 1.x peer versions (WordPress/gutenberg#80089)
- Writing flow: fix selection end mapping at block boundaries (WordPress/gutenberg#80126)
- Components: link recommended UI component (WordPress/gutenberg#80127)
- Typewriter: remove the block selection gate (WordPress/gutenberg#80130)
- useMergeRefs: apply ref changes after out-of-render attachment (WordPress/gutenberg#80133)
- Observe typing on the writing flow node (WordPress/gutenberg#80131)
- Components/Button: Don't use box-shadow for secondary buttons (WordPress/gutenberg#79982)
- DataViews: Add a richtext control backed by a private RichTextControl shell in @wordpress/components (WordPress/gutenberg#78471)
- Apply and correct EXIF orientation for client side sub-sizes (WordPress/gutenberg#79384)
- Fix typo in inline comment  in `collaboration.php` (WordPress/gutenberg#80147)
- Media Inserter: Allow core media categories to subscribe to changes (WordPress/gutenberg#79921)
- Accordion block: add background gradient support (WordPress/gutenberg#79840)
- Rich text: synchronize the selection before events that consume it (WordPress/gutenberg#80151)
- Quote block: add background gradient support (WordPress/gutenberg#79843)
- Add option to exclude current post from query block (WordPress/gutenberg#64916)
- Pullquote block: add background gradient support (WordPress/gutenberg#79841)
- Block Supports: Ensure that custom CSS is output after the block library styles (WordPress/gutenberg#80062)
- Rich text: cut through the record instead of execCommand (WordPress/gutenberg#80155)
- Media Inserter: Add pagination to core media inserter categories (WordPress/gutenberg#80038)
- Responsive editing: Add a Tooltip to the viewport / states badge (WordPress/gutenberg#80080)
- Scripts: Make 'test-e2e' run Playwright and remove Puppeteer (WordPress/gutenberg#80058)
- Post Content block: add background gradient support (WordPress/gutenberg#79842)
- Notes: Remove snackbar when resolving or reopening a note (WordPress/gutenberg#80017)
- Enable text alignment to be set by viewport state (WordPress/gutenberg#80037)
- Preview dropdown: simplify viewport style state descriptions (WordPress/gutenberg#80146)
- File Block: Deduplicate the file to audio/video/image transforms (WordPress/gutenberg#80158)
- Responsive editing: Show crop dimensions on image block placeholder (WordPress/gutenberg#80162)
- Add missing docblocks to client-assets.php (WordPress/gutenberg#80135)
- Move typescript and rimraf out of the root package.json (WordPress/gutenberg#80086)
- Release: Harden latest npm metadata publishing (WordPress/gutenberg#79904)
- Add Playlist icon. (WordPress/gutenberg#80168)
- Sync changes from core for view-config version handling (WordPress/gutenberg#80170)
- CODEOWNERS: Exclude stylelint suppressions.json from /tools ownership (WordPress/gutenberg#80171)
- Editor: only show back button focus ring on :focus-visible (WordPress/gutenberg#80114)
- Release: Harden plugin release workflow guardrails (WordPress/gutenberg#79858)
- Icons: Add "sites" icon. (WordPress/gutenberg#80094)
- Flaky tests: fix widgets global inserter (WordPress/gutenberg#80177)
- Release: Harden all npm package release paths (WordPress/gutenberg#79905)
- Update `actionlint` to version `1.7.12`. (WordPress/gutenberg#79833)
- Flaky tests: fix rich text backtick undo (WordPress/gutenberg#80183)
- Button: hide Core focus ring when button as link is pressed (WordPress/gutenberg#80082)
- Term Name: Migrate to textAlign block support (WordPress/gutenberg#76581)
- Cover: allow restricting video embed providers (WordPress/gutenberg#80092)
- Playlist icon: Fix bug with missing viewbox. (WordPress/gutenberg#80180)
- Use playlist icon for Playlist block (WordPress/gutenberg#80174)
- Build: Make installed-deps check layout-agnostic and surface opt-out env var (WordPress/gutenberg#79687)
- Blocks: Rename _gutenberg_apply_content_filters() to _wp_apply_content_filters() (WordPress/gutenberg#80191)
- Tabs: Wrap tab list onto multiple lines by default (WordPress/gutenberg#80097)
- Flaky tests: fix writing flow arrow navigation (WordPress/gutenberg#80179)
- Theme: Use public design token stylesheet imports (WordPress/gutenberg#80050)
- Simplify playlist waveform metadata updates (WordPress/gutenberg#80193)
- Notes: Support inline rich text (bold, italic, link, code) (WordPress/gutenberg#78242)
- Playlist Block: Add artwork to play button (WordPress/gutenberg#79938)
- Cover Block: Fix unsaveable state when clearing an embed video background (WordPress/gutenberg#80184)
- DS: Name font weight tokens by intent (WordPress/gutenberg#80093)
- theme: Validate npm publish surface (WordPress/gutenberg#79552)
- Theme: Remove experimental package messaging (WordPress/gutenberg#80049)
- Playlist Block: add waveform and waveform background color options (WordPress/gutenberg#80065)
- Add more workflow file static analysis with Zizmor (WordPress/gutenberg#71523)
- Block Editor: Simplify layout panel selector getter (WordPress/gutenberg#80176)
- Media Inserter: Omit page arg from requests for the first set of results (WordPress/gutenberg#80219)
- Notes: Add @mention autocomplete (WordPress/gutenberg#79604)
- Latest Posts: Fix slow category selection with large category lists (WordPress/gutenberg#80198)
- Block visibility: add theme json opt out (WordPress/gutenberg#76559)
- Add an `editableRoot` block support for native cross-block selection (WordPress/gutenberg#79105)
- Notes: Allow canceling the autocompleter popover with Escape without dismissing the note form (WordPress/gutenberg#80224)
- Add contrast checking for viewport and pseudo states (WordPress/gutenberg#80223)
- Blocks: Rename _wp_apply_content_filters() to _wp_apply_block_content_filters() (WordPress/gutenberg#80225)
- Widget Primitives: Add a field type registry for widget attributes (WordPress/gutenberg#80148)
- Icon block: When the default icon is unregistered, nothing is displayed (WordPress/gutenberg#80166)
- Make the Playlist blocks stable (WordPress/gutenberg#80203)
- Autocomplete: Use regular weight for result items (WordPress/gutenberg#80196)
- Make pause button visually same size as play button (WordPress/gutenberg#80217)
- Editor: Render post preview action as a menu item (WordPress/gutenberg#80195)
- Release: Fail changelog generation cleanly (WordPress/gutenberg#80175)
- Stabilize Tabs block (WordPress/gutenberg#80163)
- Theme: Correct documented default background seed (WordPress/gutenberg#80237)
- Block Supports: Improve handling of block class name to avoid fatal (WordPress/gutenberg#80214)
- Rename 'Responsive editing' toggle to 'Responsive styles' (WordPress/gutenberg#80241)
- Release: Make npm publishing rerunnable (WordPress/gutenberg#80187)
- Only include icon library SVGs listed as `public` in the Zip file published to GitHub Container Registry for `wordpress-develop` (WordPress/gutenberg#79338)

Props desrosj, wildworks.
Fixes #65529.
Built from https://develop.svn.wordpress.org/trunk@62739


git-svn-id: http://core.svn.wordpress.org/trunk@62023 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@t-hamano

Copy link
Copy Markdown
Contributor

As a 7.1 Misc Editor Dev Note, I plan to mention the newly supported block supports. I would appreciate it if you could also prepare a brief Dev Note for this PR.

#79326

@t-hamano t-hamano added [Type] Enhancement A suggestion for improvement. Needs Dev Note Requires a developer note for a major WordPress release cycle labels Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Needs Dev Note Requires a developer note for a major WordPress release cycle [Package] Block editor /packages/block-editor [Package] Block library /packages/block-library [Package] Components /packages/components [Package] DOM /packages/dom [Package] E2E Tests /packages/e2e-tests [Package] Rich text /packages/rich-text [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants