Skip to content

Notes: inline (partial-text) notes via hybrid marker + strip-on-render approach - #78218

Merged
adamsilverstein merged 75 commits into
trunkfrom
add/inline-notes-hybrid
Jun 30, 2026
Merged

Notes: inline (partial-text) notes via hybrid marker + strip-on-render approach#78218
adamsilverstein merged 75 commits into
trunkfrom
add/inline-notes-hybrid

Conversation

@adamsilverstein

@adamsilverstein adamsilverstein commented May 13, 2026

Copy link
Copy Markdown
Member

What?

Implements inline (partial-text) Notes — the next milestone in #59445, listed as a WordPress 7.1 deliverable in #76316.

Hybrid of the two earlier exploration PRs from @Mamaduka:

  • #74852 — annotations-based decoration (clean frontend HTML, but offsets drift on edits).
  • #75206core/note rich-text format (resilient anchoring, but pollutes frontend HTML).

This PR uses core/note as the in-content anchor so the marker survives edits, and strips the span wrapper on render_block so public HTML stays clean. Visual highlight is applied via @wordpress/annotations so the styling rides on existing infrastructure.

Closes #59445.

Test in Playground

https://playground.wordpress.net/?gutenberg-pr=78218

For testing with multiple users, try the User Switching Plugin - https://wordpress.org/plugins/user-switching/

Stacked on

Builds on #75147 (multi-note per block). The array shape from #75147 is required so a single block can carry multiple inline notes. Base for review: add/enable-multiple-notes-per-block — change to trunk once #75147 merges.

Screenshots/Screencast

image

Adding a note

user.adds.note.mp4

Notes from 4 users - notes are sorted by the order they appear in the block

four user notes

Overlapping note handling

The new note truncates the previous selection
overlapping note
Q: what happens if a new note completely replaces the old note selection (is it lost)?

Code view in editor showing mark tags

code view with marks

Front end: marks are stripped

front end marks are stripped

Notes sidebar still uses (reverse) chronological order

sidebar view sorted chronologically

How?

Storage

  • New comment meta _wp_note_selection = { attributeKey, start, end } registered in lib/compat/wordpress-6.9/block-comments.php. Fallback anchor when the in-content marker can't be found.
  • metadata.noteId array (from Notes: Support multiple note threads per block #75147) tracks which threads belong to a block — inline notes are added to it like block-level notes.

Anchoring

  • New core/note rich-text format, registered in packages/editor/src/components/collab-sidebar/format.js. Serializes as <span class="wp-note" data-id="N">…</span>.
  • useNoteActions.onCreate now captures a non-collapsed in-rich-text selection, saves the comment with _wp_note_selection meta, and wraps the selected text with the core/note format.
  • findNoteRange( richText, noteId ) (new in utils.js) scans a rich-text record for the marker and returns its current { start, end } — meaning offsets re-derive after edits rather than going stale.

Frontend HTML stays clean

  • gutenberg_strip_inline_note_markers() is hooked to render_block. It unwraps <span class="wp-note">…</span> so the public output never contains the marker, while raw post_content (and the REST raw view, revisions, exports) keeps the mark so the editor can re-attach on reload.

Visual decoration

  • New useAnnotateBlocks hook reads unresolved threads, prefers findNoteRange for offsets, falls back to the stored meta, and registers each range with the annotations store under the core-note source.
  • New CSS at .annotation-text-core-note uses admin-theme tinting at 20% / 40% opacity (matching @jasmussen's design comment in Inline block commenting  #59445). Always visible — no need to open the sidebar.

Forward compatibility with Yjs / CRDT

Real-time collaboration with Yjs is on the roadmap (see crdt-blocks.ts work). The architecture here is intentionally shaped so the inline-note feature carries over with a single, localized swap rather than a rewrite:

  • Offsets are derived, not stored. findNoteRange re-scans the rich-text record for the marker on every read. There are no absolute indices baked into the document. This matches how CRDT positions work — they are references that resolve to current offsets, never frozen ones. When Yjs lands, findNoteRange is the single function that switches from "scan for marker" to "resolve Y.RelativePosition / yjs range," and every consumer (useAnnotateBlocks, sidebar, anchor preview) keeps working unchanged.
  • Threads are linked by identity, not by position. The marker carries data-id="N" and the block's metadata.noteId array stores comment IDs. The thread ↔ anchor relationship is identity-based, which is the same model a yjs-anchored range would use (a stable id pointing at a CRDT range). Migrating means swapping the anchor representation, not the linkage model.
  • Visual decoration is decoupled from persistence. Annotations are computed at runtime from (content, threads) and never written back into the content or the store. Whatever produces { start, end } — today the marker, tomorrow a yjs range — feeds the same useAnnotateBlocks pipeline. The styling layer is yjs-ready as-is.
  • The strip filter is one removable hook. gutenberg_strip_inline_note_markers() is a single render_block filter in one file. When CRDT anchoring replaces the in-content marker, deleting that filter (and the core/note format registration) is the entire frontend-cleanup story — no scattered cleanup across rendering, REST, or export paths.
  • Meta-based fallback survives the migration. _wp_note_selection is stored on the comment, not on the block. It already works without the in-content marker, so it remains a valid fallback during and after a CRDT migration (e.g., for legacy posts authored before yjs was enabled).
  • Multi-note array shape (Notes: Support multiple note threads per block #75147) is CRDT-friendly. metadata.noteId is an unordered set of IDs per block — no positional coupling between the array order and where the notes anchor in text. Cross-block notes (#73416) and yjs-anchored notes both fit this shape without schema changes.

Net effect: when crdt-blocks.ts exposes range/position primitives, the migration is roughly (1) swap the body of findNoteRange, (2) drop the core/note format + strip filter. The data model, the sidebar, the annotations decoration, and the storage in comment meta all carry over.

Testing instructions

  1. Open a post or page.
  2. In a paragraph, select part of the text → click the "Add note" button in the toolbar (when text is selected, the rich-text toolbar shows the comment icon).
  3. Confirm the selected text gets the theme-colour highlight.
  4. Add a second inline note in the same block on different text — both decorations visible, both threads in the sidebar.
  5. Type inside the marked range — the highlight expands/contracts with the text.
  6. Save the post → view it on the frontend → no <span class="wp-note"> in the HTML, content reads cleanly.
  7. Reload the editor → marks and decorations re-attach to the original text.
  8. Resolve a note → its decoration disappears; reopen → reappears.

Automated tests

  • JS: 7 new cases in test/utils.js for findNoteRange covering RichTextData/string input, id matching/mismatch, numeric/string coercion, and null guards. 63 total in this suite, all passing.

    npm run test:unit -- --testPathPattern=collab-sidebar
    
  • PHP: 6 new cases in phpunit/tests/strip-inline-note-markers-test.php covering single/multiple wrappers, no-op when no marker, classes alongside others, unrelated spans, and end-to-end render_block filter behavior.

    composer test -- --filter Strip_Inline_Note_Markers
    

Follow-ups (out of scope)

  • UI polish — anchor preview on each inline thread + unresolved/resolved divider in the All notes sidebar — is stacked in #78219 and reviews independently of this PR.
  • Floating "Add note" button next to the live text selection (Medium / Google Docs pattern). The rich-text toolbar button registered here already provides the create-on-selection entry point; the popover variant is tracked separately in #78220.
  • E2E coverage for the full create → save → frontend strip → reload round-trip. Deferred to a follow-up PR since it needs careful interaction with the rich-text floating toolbar.
  • Cross-block inline notes #73416 — the array noteIds shape from Notes: Support multiple note threads per block #75147 supports this; UI/storage work is its own iteration.
  • CRDT/Yjs anchoring path — see Forward compatibility with Yjs / CRDT above. When crdt-blocks.ts exposes range primitives, retire the in-content marker in favor of CRDT-anchored ranges and remove the strip filter.

AI usage

Implementation drafted with Claude Code: spec, plan, and code. Plan reviewed and approved by me before edits, all commits and the PR reviewed before push.

Refs #59445, #76316.

adamsilverstein and others added 30 commits March 23, 2026 13:11
When clicking "Add Note" on a block that already has an existing note,
the user was being redirected to the reply field of the existing note.
This prevented users from creating multiple independent note threads
on the same block.

This change:
- Adds an `addNewNote` parameter to `openTheSidebar()` to differentiate
  between clicking "Add Note" (should always create new thread) and
  clicking the avatar indicator (should focus existing thread)
- Updates `AddCommentMenuItem` to pass `{ addNewNote: true }`
- Adds E2E tests to verify multiple notes can be added to the same block

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
getNoteIdsFromMetadata is a trivial pure function that normalizes
a scalar/array value. The overhead of useMemo exceeds the cost of
calling it directly each render.

Addresses review feedback from @Mamaduka.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Use direct property access for noteId instead of extracting
metadata into a separate variable.

Addresses review feedback from @Mamaduka.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Clarify why the blur handler needs to bail out during submission:
clicking the submit button triggers blur before the async onSubmit
completes, which would otherwise close the form prematurely.

Addresses review feedback from @Mamaduka.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Prevent blur from closing the add-note form while the async
submit is in progress by guarding with isSubmittingRef. Also
stop the auto-select effect from overwriting the "new" note
selection, and use a ref for noteThreads so the effect only
runs when blockNoteIds changes, not on every thread update.
The first "Note added." snackbar persists when adding a
second note, causing a strict mode violation (2 elements)
and a premature metadata assertion. Dismissing the first
snackbar before adding the second note fixes both tests.
Extend E2E tests with scenarios for deleting one of multiple notes,
resolving individual notes, auto-selecting the first unresolved note,
and verifying metadata cleanup when all notes are removed. Add unit
test edge cases for falsy noteId values, string coercion, and
null/undefined metadata handling.
Reconcile the multiple-notes-per-block data model with trunk's
notes architecture refactor. Keep getNoteIdsFromMetadata /
addNoteIdToMetadata / removeNoteIdFromMetadata utilities and adapt
useBlockComments to iterate arrays of note IDs through trunk's
threadsById partition. Union the utility tests with trunk's
calculateNotePositions coverage.
Resolve conflicts from PR #77614 (Notes refactor) by porting the
multiple-notes-per-block feature into trunk's split component
structure (notes.js, add-note.js, hooks.js, utils.js).
addNoteIdToMetadata and removeNoteIdFromMetadata now compare ids using
String() so a string-typed legacy id ('5') and a numeric id (5) match.
Without this, the dedupe check could miss and the array could contain
duplicates that round-trip differently than expected.

Adds unit coverage for:

- mixed-type dedupe in addNoteIdToMetadata
- mixed-type removal in removeNoteIdFromMetadata
- calculateNotePositions with two and three threads sharing a block
  (identical blockRect.top), exercising the same-block layout path
  introduced by multi-note support.
Adds two e2e tests inside the 'Multiple notes per block' describe:

- A legacy scalar noteId is converted to an array on first multi-note
  write, and the original (orphan) id is preserved as the first entry.
- A block with two notes round-trips through saveDraft + page.reload
  with both notes still attached and the metadata array intact in the
  same order.

Closes the two highest-leverage e2e gaps for multi-note support: the
backwards-compat claim from the PR description, and end-to-end
serialize/parse persistence.
The 'Multiple notes per block' describe was a sibling of 'Block Notes',
not a child, so its inner test.use/beforeEach/afterAll ran in addition
to the file-level ones — every test in that describe was creating each
post twice and deleting all notes twice. Removes the duplicate hooks.

Adds two helpers on BlockNoteUtils to collapse repeated boilerplate:

- dismissSnackbar(text) for clearing the previous toast before asserting
  a new one
- addAnotherNoteToCurrentBlock(content) for the click-add-note + fill +
  submit sequence used by every multi-note scenario

Also adds an inline comment in useNoteActions.onCreate marking the
read-modify-write race that PR #75147 alone cannot fix; a real merge
strategy is tracked in #74751.
The merge from trunk (PR #77614 refactor) kept the branch's pattern of
calling focusNoteThread() directly after selectNote(noteId). That call
fires before the sidebar's useEffect re-renders the AddNote form, so
sidebarRef.current may not yet contain the new treeitem when the
MutationObserver inside focusNoteThread starts watching, and the
synchronous menu close steals focus before the async .focus() resolves.

Switch to selectNote(noteId, { focus: true }) so the existing useEffect
in notes.js drives focus after the sidebar has rendered, matching
trunk's working behaviour. Drops the now-unused focusNoteThread import.
Commit a325780 removed the per-test admin.createNewPost() and
afterAll cleanup from the 'Multiple notes per block' describe on the
premise they duplicated the file-level hooks. They didn't: the
'Block Notes' describe is a sibling, not a parent, so its hooks never
applied to these tests. Removing them left every test in the block
running against whatever page the previous run left behind, which
manifested in CI as page.waitForFunction timeouts on window.wp.blocks
because there was no editor page to test against.

Also fix the save/reload test to explicitly open the notes sidebar
after page.reload() — the pinned sidebar isn't restored on reload, so
the note threads aren't in the rendered DOM until it's reopened.
Restore the selectBlock(clientId, null) call inside openTheSidebar so
the List View entry point — where the block isn't already the canvas
selection — keeps working. The accompanying refactor that introduced
multiple-note support had dropped this in favor of the trimmed function
signature.

Also drop the rawNoteId rename and the redundant '?? null' coalesce on
the noteId selector, per review feedback.
The 'Multiple notes per block' refactor replaced the document.hasFocus
check with the isSubmittingRef guard, but they cover different cases —
window/tab losing focus vs. an in-flight async submit. Keep both so
neither path can prematurely close the form.
Replace the selectedNoteRef/notesRef render-time assignments with a
useMemo that picks the priority thread (first unresolved, else first)
and a thinner effect that bails on the 'new' state or when the user
already has a thread on the block selected. This keeps explicit thread
choices stable while letting status changes promote a new priority,
without writing to refs during render.
Move the new describe block so it sits alongside Keyboard inside the
top-level Block Notes describe and inherits the parent's beforeEach
post-creation and afterAll comment cleanup, instead of duplicating
them at the top level.
`AddNoteMenuItem` is a slot fill rendered per block in the List View
row menus and passes the row's clientId to its onClick handler. The
prior simplification of openTheSidebar's signature dropped that arg
on the floor, which would target the canvas selection instead of the
block whose menu was opened.

Accept an optional clientId option on openTheSidebar, look up threads
for that block directly so the right note is resolved, and pipe the
slot-provided clientId through from AddNoteMenuItem.
The 2709799 refactor moved selectedNote into the auto-select effect's
deps, so collapse paths (Escape/Cancel/Shift-Tab) immediately re-fired
the effect and re-expanded the just-collapsed note. Track selectedNote
in a ref updated inside an effect — keeps Mamaduka's no-refs-during-
render rule and runs the auto-select only when the block context
actually changes.

@Mamaduka Mamaduka left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this is ready to merge. The real user testing is what we need right now; we can always iterate on code rough edges in post.

Left a minor note. The annotations package is still referenced in the TS config.

Comment thread packages/editor/tsconfig.json Outdated
adamsilverstein and others added 2 commits June 23, 2026 21:05
The editor package does not depend on or import @wordpress/annotations,
so the project reference added to tsconfig.json is unused. Remove it.
@adamsilverstein

Copy link
Copy Markdown
Member Author

@westonruter this pr says you are requesting changes, please give it another pass I believe I have addressed everything.

@adamsilverstein adamsilverstein added the props-bot Manually triggers Props Bot to ensure the list of props is up to date. label Jun 24, 2026
@github-actions github-actions Bot removed the props-bot Manually triggers Props Bot to ensure the list of props is up to date. label Jun 24, 2026
@adamsilverstein
adamsilverstein requested review from westonruter and removed request for westonruter June 25, 2026 18:13
@adamsilverstein
adamsilverstein enabled auto-merge (squash) June 25, 2026 18:18

@westonruter westonruter left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

A couple minor comments, but the PHP LGTM. (The JS I'm not familiar with, so I'll let others more qualified approve that.)

*
* @return WP_HTML_Span Current token span.
*/
private function get_span() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
private function get_span() {
private function get_span(): WP_HTML_Span {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Or will this method rather be removed as was done in WordPress/wordpress-develop#12215?

/**
* Removes the current token, keeping any text it wraps.
*/
public function remove_token() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
public function remove_token() {
public function remove_token(): void {

@adamsilverstein
adamsilverstein merged commit dc9c6db into trunk Jun 30, 2026
43 checks passed
@adamsilverstein
adamsilverstein deleted the add/inline-notes-hybrid branch June 30, 2026 01:06
@github-actions github-actions Bot added this to the Gutenberg 23.6 milestone Jun 30, 2026
@adamsilverstein

Copy link
Copy Markdown
Member Author

@westonruter the PR merged automatically with your approval; i will address your feedback in a follow up.

pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Jul 7, 2026
Inline (partial-text) notes anchor to a text selection within a block via an in-content `<mark class="wp-note" data-id="N">` marker. The marker stays in the raw `post_content` (and the REST `raw` view, revisions, and exports) so the editor can re-attach the note on reload, but the public front end should not expose note metadata.

See related Gutenberg pull request: WordPress/gutenberg#78218.

Props mukesh27, dmsnell, westonruter.
Fixes #65482.



git-svn-id: https://develop.svn.wordpress.org/trunk@62658 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Jul 7, 2026
Inline (partial-text) notes anchor to a text selection within a block via an in-content `<mark class="wp-note" data-id="N">` marker. The marker stays in the raw `post_content` (and the REST `raw` view, revisions, and exports) so the editor can re-attach the note on reload, but the public front end should not expose note metadata.

See related Gutenberg pull request: WordPress/gutenberg#78218.

Props mukesh27, dmsnell, westonruter.
Fixes #65482.


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


git-svn-id: http://core.svn.wordpress.org/trunk@61943 1a063a9b-81f0-0310-95a4-ce76da25c4cd
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 `98a796c8780c480ef7bcfe03c42302d9564d785c` (version `23.4.0`) to `b5574edc8a952b2f1e528693761a97b1b3b580eb` (version `23.5.0`).

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

The following commits are included:

- Site Editor: Fix admin color scheme bleeding through the mobile content scrollbar gutter (WordPress/gutenberg#79056)
- Build: Add GUTENBERG_CHECK_INSTALLED_DEPS env var to opt out of installed-deps check (WordPress/gutenberg#79068)
- Media Editor: Keep the modal skeleton pinned in the editor flow (WordPress/gutenberg#79070)
- Editor: Hide cmd palette shortcut in document bar when admin bar is shown (WordPress/gutenberg#79060)
- Math format: seed LaTeX input from the current selection (WordPress/gutenberg#79052)
- Omnibar: Rename experiment to match iteration issue (WordPress/gutenberg#79074)
- Theme: Add Figma scopes to element size tokens (WordPress/gutenberg#79032)
- Admin bar in editor experiment: show site icon instead of dashicon if set (WordPress/gutenberg#79049)
- Math format: Simplify the onClick handler and use canonical selected-text capture (WordPress/gutenberg#79081)
- Style Engine: Export public TypeScript types (WordPress/gutenberg#79079)
- Image: Fix pasted images stretching when dimensions are preserved (WordPress/gutenberg#79067)
- Update `@ariakit/react` to 0.4.29 (WordPress/gutenberg#79055)
- Navigation: Use block context to determine whether Page List is nested in Submenu (WordPress/gutenberg#79048)
- Fix code editor cursor jump on remote RTC updates (WordPress/gutenberg#79005)
- Fix: Custom HTML block preview keeps expanding when iframe uses height:100vh (WordPress/gutenberg#78677)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Media Editor Modal: Add a loading and simple error state (WordPress/gutenberg#79101)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Try: Remove Tab (Tab list item) block  (WordPress/gutenberg#77439)
- Navigation block: Fix responsive style states for typography settings (WordPress/gutenberg#79072)
- Popover: add open/close motion and fix close re-anchor (WordPress/gutenberg#78885)
- Remove unused build:profile-types and component-usage-stats scripts (WordPress/gutenberg#79113)
- RTC: Allow disabling collaboration by post type (WordPress/gutenberg#78984)
- Omnipresent Toolbar: increase top padding in sidebar nav title (WordPress/gutenberg#79083)
- Add support for aspect ratio and related controls in viewport states (WordPress/gutenberg#78795)
- Fix responsive element styles front end output (WordPress/gutenberg#79135)
- BaseControl: add text-wrap: pretty (WordPress/gutenberg#79112)
- wp-build: Return null from getPackageInfo on resolve miss instead of throwing (WordPress/gutenberg#78715)
- Global styles revisions: replace active text with badge (WordPress/gutenberg#79137)
- Editor: Disable saving while a non-post entity is being saved (WordPress/gutenberg#79069)
- Add xl border radius token for page shell surfaces. (WordPress/gutenberg#78913)
- Add corner radius presets to ThemeProvider (WordPress/gutenberg#78816)
- theme: rename `bg`/`fg` design token groups to `background`/`foreground` (WordPress/gutenberg#79098)
- Theme: Enforce sRGB seed-color input contract for ThemeProvider (WordPress/gutenberg#79148)
- Theme: Rename `--wpds-color-stroke-focus-brand` token to `--wpds-color-stroke-focus` (WordPress/gutenberg#79125)
- refactor: Move 'glob' dependency to appropriate workspaces (WordPress/gutenberg#79145)
- Add lock-unlock route as a workspace and update dependencies (WordPress/gutenberg#79138)
- Dependabot: Add npm entry so security update PRs can be rebased (WordPress/gutenberg#79076)
- refactor: rename '@wordpress/lock-unlock' to '@wordpress/routes-lock-unlock' across the codebase (WordPress/gutenberg#79163)
- Panel: Recommend CollapsibleCard for use outside the block inspector (WordPress/gutenberg#78863)
- Editor: Migrate FlatTermSelector to UI Stack component (WordPress/gutenberg#78659)
- design-system-mcp: Remove Storybook dependency in TypeScript types (WordPress/gutenberg#79132)
- Bump rollup from 4.55.1 to 4.59.0 (WordPress/gutenberg#75964)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Icon Block: Add flip and rotate transformation controls (WordPress/gutenberg#77017)
- Media Editor: Magnify the crop to fill the canvas (WordPress/gutenberg#79044)
- Update capitalisation and spelling within the welcome tour (WordPress/gutenberg#53028)
- Feature: Need to add “Show More” / “Show Less” toggle in Note. (WordPress/gutenberg#77446)
- Correct behaviour of flex child fixed width and introduce max width option (WordPress/gutenberg#79073)
- Eslint: move deps from root into tools/eslint and packages/eslint-plugin (WordPress/gutenberg#79110)
- Gallery: Hide Navigation button type when lightbox editing is disabled (WordPress/gutenberg#79147)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- [DataViewsPicker]: `DataViewsPicker.BulkActionToolbar` now renders only the bulk-selection info and action buttons (WordPress/gutenberg#79180)
- Block Editor: Fix potential crash from 'useBlockToolbarPopoverProps' (WordPress/gutenberg#79178)
- Tabs: Simplify layout and prune redundant block supports (WordPress/gutenberg#77646)
- e2e: Retry transient theme activation failures in pages spec (WordPress/gutenberg#79171)
- Revisions screen with picker-activity layout (WordPress/gutenberg#77333)
- chore: remove glob from root pkg json (WordPress/gutenberg#79183)
- Core Data: Don't use 'useQuerySelect' in 'useEntityRecord(s)' hooks (WordPress/gutenberg#76198)
- Revisions: Ignore empty `[]/{}` meta values in the Meta diff panel (WordPress/gutenberg#79185)
- UI Field.Description: add `text-wrap: pretty` (WordPress/gutenberg#79143)
- Blocks: Migrate Markdown converter from showdown to marked (WordPress/gutenberg#77953)
- Bump shivammathur/setup-php (WordPress/gutenberg#79193)
- Icons block: insert an icon by default (WordPress/gutenberg#79111)
- Theme: Add tests for ThemeProvider and useThemeProviderStyles (WordPress/gutenberg#79126)
- Icon block: Move flip controls to toolbar group. (WordPress/gutenberg#79192)
- Packages: Fix the published dependency surface of npm packages (WordPress/gutenberg#79095)
- Block Library: Remove unused Babel optimization plugin (WordPress/gutenberg#79162)
- Automated Testing: Use static value for IS_GUTENBERG_PLUGIN env setup (WordPress/gutenberg#79201)
- Scripts: Avoid tests getting published to npm (WordPress/gutenberg#79204)
- Theme: Add disabled variants for brand and error interactive color tokens (WordPress/gutenberg#79124)
- Fix: State styles – clear `background-image` when hover sets a solid `background-color` (WordPress/gutenberg#78992)
- Media editor: Snap crop handles to source pixels (WordPress/gutenberg#79139)
- Image block: remove duplicate data-wp-bind--srcset in the lightbox overlay (WordPress/gutenberg#79202)
- Template Part: Remove restriction on tabs / inspector fills (WordPress/gutenberg#79181)
- Editor: Guard PostViewLink against post types without a labels object (WordPress/gutenberg#79160)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- wp-build: Resolve @wordpress/build from __dirname in resolve-miss test (WordPress/gutenberg#79208)
- Theme: forward ThemeProvider cornerRadius preset to :root for root providers (WordPress/gutenberg#79153)
- Refactor Prettier configuration and update dependencies (WordPress/gutenberg#79219)
- chore: Add missing root devDependencies for WordPress packages (WordPress/gutenberg#79221)
- Refactor: Update  npm-package-json-lint configuration (WordPress/gutenberg#79223)
- Components: Complete WPDS token migration for remaining borders (WordPress/gutenberg#79003)
- Plugin: Bump minimum required WordPress version to 6.9 (WordPress/gutenberg#79196)
- Autocomplete: Add Group and GroupLabel primitives (WordPress/gutenberg#78901)
- Pullquote: Migrate to text-align block support (WordPress/gutenberg#79225)
- Style Book: Fix crash when previewing variations for blocks without examples (WordPress/gutenberg#79131)
- Theme: Add stroke-surface tokens for the caution tone (WordPress/gutenberg#79198)
- Icon block: Default to core/info via block.json instead of an insert-time effect (WordPress/gutenberg#79212)
- Backport changelog and package version updates from wp/latest (WordPress/gutenberg#79234)
- V2 Site Editor: Fix template edit routes (WordPress/gutenberg#79230)
- Grid: Prepare `@wordpress/grid` for npm publishing as experimental 0.1.0 (WordPress/gutenberg#79071)
- File Block: Replace on-mount downloadButtonText effect with a default variation (WordPress/gutenberg#79236)
- Components, DataViews: Adopt --wpds-dimension-size-* tokens (WordPress/gutenberg#79093)
- Refactor: move stylelint config and deps to tools/stylelint workspace (WordPress/gutenberg#79226)
- Revert "Components: Complete WPDS token migration for remaining borders (WordPress/gutenberg#79003)" (WordPress/gutenberg#79243)
- Edit Post: Refactor and cleanup InitPatternModal component (WordPress/gutenberg#79190)
- Widget Primitives: extract into `@wordpress/widget-primitives` (WordPress/gutenberg#79134)
- chore: remove @wordpress/vips dependency from root (WordPress/gutenberg#79249)
- design-system-mcp: Improve README overview and setup instructions (WordPress/gutenberg#79238)
- Components: Re-land WPDS border token migration with Emotion-safe comments (WordPress/gutenberg#79244)
- Theme: Provide design-system token defaults without a runtime `<ThemeProvider>` (WordPress/gutenberg#78664)
- List View block support: Hide list tab when allowedBlocks is empty, with no children (WordPress/gutenberg#78932)
- Handle WP.org SVN missing tag warnings (WordPress/gutenberg#79257)
- CI: Run PHP unit tests on PHP 8.4 and 8.5 (WordPress/gutenberg#79260)
- mark @types/react as an optional peer dependency (WordPress/gutenberg#79272)
- Block bindings : add support to list-item (WordPress/gutenberg#78947)
- document widget-modules endpoint experiment gate (WordPress/gutenberg#79264)
- Storybook: Upgrade Storybook to 10.4 (WordPress/gutenberg#77382)
- Core Data: Cleanup edits matching persisted record on undo/redo (WordPress/gutenberg#77100)
- Notes: Simplify 'Show more/less' collapse logic (WordPress/gutenberg#79261)
- File Block: Combine audio/video/image to file transforms (WordPress/gutenberg#79242)
- Button: Use font weight token (WordPress/gutenberg#79278)
- Avoid dirtying related navigation entities during passive render (WordPress/gutenberg#79000)
- Theme: Skip serializing `data-wpds-root-provider="false"` on non-root providers (WordPress/gutenberg#79253)
- Patterns: Migrate modals to @wordpress/ui components and fix rename input width (WordPress/gutenberg#79233)
- ESLint, UI, Components: Mark `Tooltip` from `@wordpress/ui` as recommended (WordPress/gutenberg#78693)
- Theme: differentiate `--wpds-color-fg-interactive-{brand,error}-active` vs resting state tokens (WordPress/gutenberg#79151)
- Document AlertDialog as ConfirmDialog successor in Storybook (WordPress/gutenberg#79293)
- Elements: Accept both md5 and sequential `wp-elements-*` class names in tests (WordPress/gutenberg#79300)
- Cover block: add media editor modal (WordPress/gutenberg#79258)
- Blocks: Use positional sprintf placeholders in avatar, comment, and search renderers (WordPress/gutenberg#79290)
- DataForm: Fix panel field control overflow clipping and remove button overrides (WordPress/gutenberg#79275)
- Experiment: Editor Inspector with DataForm - remove revision panel and add link (WordPress/gutenberg#79195)
- Upload Media: Add error taxonomy, localized messages, and dev diagnostics (WordPress/gutenberg#74917)
- Block Fields: Fix crash resolving pattern overrides bindings (WordPress/gutenberg#79092)
- Media: Rename HEIC companion metadata key to source_image (WordPress/gutenberg#79307)
- DataForm: Align `label-side` gap of `panel` layout with `regular` layout (WordPress/gutenberg#79311)
- Theme: Add design tokens maintainer's guide documentation (WordPress/gutenberg#79157)
- Remove ObliviousHarmony from CODEOWNERS for packages/env (WordPress/gutenberg#79308)
- Widget Dashboard: extract into `@wordpress/widget-dashboard` (WordPress/gutenberg#79268)
- Sync editor settings in layout effect (fixes autosave e2e) (WordPress/gutenberg#78799)
- Remove Lighthouse patch (WordPress/gutenberg#79319)
- Editor: Remove orphaned editor-help component leftovers (WordPress/gutenberg#79324)
- Plugins API: Fix the plugin 'render' property validation (WordPress/gutenberg#79315)
- Components: Improve Menu unit tests performance by removing sleeps (WordPress/gutenberg#79295)
- UI Button: Fix loading state in forced colors (WordPress/gutenberg#78820)
- Media Editor: Fix crop canvas pinch zoom (WordPress/gutenberg#79332)
- Docs: Fix typos in README files (WordPress/gutenberg#79331)
- Media Editor: Align crop settle state with transition completion (WordPress/gutenberg#79339)
- KSES: Allow SVG-specific presentation attributes in safe_style_css (WordPress/gutenberg#79172)
- Widget Primitives: decouple discovery from a hardcoded endpoint (WordPress/gutenberg#79322)
- Site Editor: Save hub button styling while saving (WordPress/gutenberg#79287)
- Migrate compose package to TypeScript  (WordPress/gutenberg#70618)
- Vips: bump wasm-vips to 0.0.18 for high-bit-depth AVIF decoding (WordPress/gutenberg#79179)
- Experimental: Expand Editor Inspector: Use DataForm experiment to templates (WordPress/gutenberg#76934)
- Site Editor: Change 'Identity' nav item position (WordPress/gutenberg#79292)
- Block Bindings: Preserve nested lists when binding List Item content (WordPress/gutenberg#79346)
- Site Editor: Handle `aria-current` natively in `SidebarNavigationItem` (WordPress/gutenberg#79305)
- RichText: Fix duplicated format wrappers when typing inside an applied format (WordPress/gutenberg#79091)
- Vips: inline WASM with compact UTF-8 binary encoding instead of base64 (WordPress/gutenberg#79188)
- View Config API and REST Endpoint: make them core ready (WordPress/gutenberg#79347)
- Validation: Add a published-dependency audit script (WordPress/gutenberg#79094)
- Reconcile feature-detection docblock with implemented checks (WordPress/gutenberg#75851)
- fix typo in block-filter.md file (WordPress/gutenberg#79367)
- Search block: Add opt-in support for the semantic <search> element (WordPress/gutenberg#78485)
- Dashboard: revert H1 to "Dashboard" and fix heading hierarchy (WordPress/gutenberg#79251)
- Components: Make ResizableBox children prop optional (WordPress/gutenberg#79370)
- Grid overlays: Use canvas iframe window for viewport visibility detection (WordPress/gutenberg#79255)
- Widget Primitives: make contract and story docs host-agnostic (WordPress/gutenberg#79358)
- Use symbols for style states to avoid property clashes (WordPress/gutenberg#79210)
- Ignore markdown linting for backport-changelog MD files (WordPress/gutenberg#79392)
- Add media control icons (WordPress/gutenberg#78987)
- Icons: Use snake_case `file_path` key in icon registry (WordPress/gutenberg#79100)
- Editor: Use `Stack` for post summary (WordPress/gutenberg#79397)
- Theme: Run stylelint plugin tests via the Node API (WordPress/gutenberg#79199)
- Command Palette: Exclude assets from block editor settings endpoint (WordPress/gutenberg#79396)
- List item: Remove orphaned convertToListItems util (WordPress/gutenberg#79400)
- Video: Apply `inert` directly instead of wrapping in `Disabled` (WordPress/gutenberg#79371)
- Site Editor: Introduce isHidden prop for SidebarNavigationItem (WordPress/gutenberg#79352)
- Post Editor: Use the correct directory for recent preload improvements (WordPress/gutenberg#79359)
- Configure Flakiness.io reporting for e2e tests (WordPress/gutenberg#79173)
- View Config: request a subset of properties with the `_fields` parameter (WordPress/gutenberg#79355)
- Storybook: Reorganize design system introduction for first touch-point usefulness (WordPress/gutenberg#79360)
- Block editor: Convert utility modules to TypeScript (WordPress/gutenberg#79323)
- devops: configure report auto-upload for flakiness.io dashboard (WordPress/gutenberg#79411)
- UI: Simplify focus ring styles (WordPress/gutenberg#78823)
- TextControl: Hard deprecate 40px default size (WordPress/gutenberg#79386)
- devops: upload unit test results to flakiness dashboard (WordPress/gutenberg#79414)
- Clarify Core-specific steps when bumping support (WordPress/gutenberg#79416)
- Pattern editing: show root block identity when editing pattern sections (WordPress/gutenberg#79417)
- Patterns: Add a missing gap to 'Enable overrides' modal (WordPress/gutenberg#79421)
- Audio: Apply `inert` directly instead of wrapping in `Disabled` (WordPress/gutenberg#79423)
- Experimental: Expand Editor Inspector: Use DataForm experiment to template parts (WordPress/gutenberg#79399)
- Base Styles: Add wpds-var Sass helper for design token fallbacks (WordPress/gutenberg#78698)
- Block Editor: Allow overriding `disableContentOnlyForTemplateParts` setting (WordPress/gutenberg#79191)
- Mark all controlled/mode block changes non-persistent (WordPress/gutenberg#79350)
- Revert "Base Styles: Add wpds-var Sass helper for design token fallbacks (WordPress/gutenberg#78698)" (WordPress/gutenberg#79429)
- Popover: Align transition state styles (WordPress/gutenberg#79410)
- DataForm panel layout: fix double-clicking a field row leaving the flyout stuck open (WordPress/gutenberg#79348)
- Classic Block: Port PHPUnit coverage for wp_declare_classic_block_necessary (WordPress/gutenberg#79434)
- Fields: Move author fields for templates and template parts (WordPress/gutenberg#79395)
- Theme: Drop `--wpds-dimension-base` from the public token surface (WordPress/gutenberg#79254)
- Merge shared stylelint disallowed-list in components (WordPress/gutenberg#79425)
- Edit Post: Refactor MetaBoxesSection to use data hooks (WordPress/gutenberg#79433)
- View config endpoint: bring back changes from core (WordPress/gutenberg#79438)
- devops: separate environments for jest date tests (WordPress/gutenberg#79453)
- UI: Disable instant overlay popup transitions (WordPress/gutenberg#79432)
- Components: Refactor withFallbackStyles from class to function component (WordPress/gutenberg#78837)
- Automated Testing: Globally shim Element#getClientRects (WordPress/gutenberg#79353)
- Theme: Promote ThemeProvider to stable API (WordPress/gutenberg#78958)
- Automated Testing: Add babel-plugin-transform-import-meta to emulate import.meta.dirname (WordPress/gutenberg#79362)
- E2E: Support WordPress installs served from a subdirectory (WordPress/gutenberg#79166)
- Custom HTML: Fix scrollbar after tab switch in modal (WordPress/gutenberg#78571)
- Theme: apply ThemeProvider styles inline (I2) (WordPress/gutenberg#78678)
- Add flex vertical alignment tool to block inspector layout panel (WordPress/gutenberg#79426)
- Block Supports: Relocate text and bg color controls to Typography and Background panels (WordPress/gutenberg#77279)
- Add e2e coverage for pattern wrapper block identity (WordPress/gutenberg#79462)
- Storybook: Include playground stories and MDX in CI smoke tests (WordPress/gutenberg#79454)
- BoxControl: respect a consumer-supplied placeholder via inputProps (WordPress/gutenberg#79466)
- Media Fields: Ensure the current post is always included in the initial options (WordPress/gutenberg#79467)
- Global Styles: Add textShadow style support (WordPress/gutenberg#73320)
- Media Fields: Avoid focus loss when detaching the current parent (WordPress/gutenberg#79468)
- CI: Disallow new dependencies in the root package.json (WordPress/gutenberg#78616)
- Experimental: Preserve editor panel visibility in the DataForm post summary (WordPress/gutenberg#79441)
- Tabs: Pre-stabilization API cleanup and refactoring (WordPress/gutenberg#79337)
- BoxControl: Hard deprecate 40px default size (WordPress/gutenberg#79419)
- Image Block: Remove chained entity record calls (WordPress/gutenberg#79469)
- UI: Use isomorphic layout effects (WordPress/gutenberg#79458)
- Components: add Emotion migration guardrails (WordPress/gutenberg#79442)
- devops: separate histories for different node.js versions (WordPress/gutenberg#79473)
- Components: migrate Divider to SCSS module (WordPress/gutenberg#79444)
- Block Library: unwrap Classic block migration notice experiment (WordPress/gutenberg#78165)
- Editor: Refactor AutosaveMonitor to a function component (WordPress/gutenberg#79043)
- Boot: run page `init` modules in `initSinglePage` (WordPress/gutenberg#79394)
- DataFormPostSummary: fix different `useSelect` returned values  (WordPress/gutenberg#79478)
- Icons: self declare color (WordPress/gutenberg#79320)
- Theme: Document ramp memoization contract (WordPress/gutenberg#79459)
- tools: Restrict layout effect imports in UI and theme (WordPress/gutenberg#79476)
- CI: Avoid full-history checkout for the root-dependencies check (WordPress/gutenberg#79489)
- Simplify playlist track state (WordPress/gutenberg#79448)
- prepend_to_selector: optimized with str_replace() (WordPress/gutenberg#76556)
- Components: migrate Surface to SCSS module (WordPress/gutenberg#79445)
- Docs: Add a widget anatomy doc and lighten the widget system doc (WordPress/gutenberg#79435)
- Media Editor: remove inline cropper (follow-up to WordPress/gutenberg#78653) (WordPress/gutenberg#78654)
- Grid: Add option to stretch columns with auto-fit for better layout flexibility (WordPress/gutenberg#79356)
- Guidelines: Use str_starts_with() in is_block_meta_key() (WordPress/gutenberg#79491)
- Color popover: move contrast warning notice to the bottom (WordPress/gutenberg#79512)
- BorderBoxControl: Hard deprecate 40px default size (WordPress/gutenberg#79420)
- Remove Classic Block conversion from BlockInvalidWarning (WordPress/gutenberg#79500)
- [RTC] Add granular collaboration control (WordPress/gutenberg#79184)
- FontSizePicker: Hard deprecate 40px default size (WordPress/gutenberg#79481)
- React 19: patch to support legacy inert attribute values (WordPress/gutenberg#79475)
- Icons: Add Storybook React Vite dev dependency (WordPress/gutenberg#79506)
- QueryControls: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79485)
- Block editor: use core/registered-block in reducer tests (WordPress/gutenberg#79522)
- UI: Update @base-ui/react to 1.6.0 (WordPress/gutenberg#79408)
- Refactor: Replace strpos with str_starts_with for improved consistency (WordPress/gutenberg#79519)
- Block Library: Remove redundant parentheses around assignments (WordPress/gutenberg#79516)
- Tabs: Focus first tab when adding Tabs block (WordPress/gutenberg#79507)
- ui/IconButton: Restore default tooltip delay (WordPress/gutenberg#79505)
- FocalPointPicker: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79487)
- Components: document CSS module class composition (WordPress/gutenberg#79490)
- BorderControl: Hard deprecate 40px default size (WordPress/gutenberg#79418)
- Components: migrate Truncate to SCSS module (WordPress/gutenberg#79446)
- Show the admin bar in the Post and Site Editor by default (WordPress/gutenberg#79197)
- SearchControl: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79538)
- Stylelint: Enforce module class naming in UI packages (WordPress/gutenberg#79504)
- Components: Add missing descriptions for design system components (WordPress/gutenberg#79460)
- LetterSpacingControl: Hard deprecate 40px default size (WordPress/gutenberg#79533)
- Experiments: Move screen under Settings, drop top-level Gutenberg menu and Demo page (WordPress/gutenberg#79456)
- Tabs: Combine and cleanup toolbar controls (WordPress/gutenberg#79537)
- Tabs: Fix dirty editor state on mount caused by tab-list sync (WordPress/gutenberg#79540)
- RTC: fix undo / redo breakage when plug-in with metabox is loaded (WordPress/gutenberg#79510)
- Block Supports: Guard elements hover rendering against missing hover selector (WordPress/gutenberg#79511)
- Commands: add toggle for content-only pattern/template part editing (WordPress/gutenberg#78383)
- Integrate Resizable Editor with Device Preview and add Responsive editing (WordPress/gutenberg#75121)
- Pattern editing: use section block selector for pattern display identity (WordPress/gutenberg#79565)
- Commands: Suggest pattern editing toggle for selected patterns (WordPress/gutenberg#79566)
- Tabs: Select tab panel when caret moves into tab (WordPress/gutenberg#79558)
- Fix unsetting values in viewport states for grid and constrained layouts (WordPress/gutenberg#79520)
- Add layout and block spacing support to Latest Posts block (WordPress/gutenberg#77989)
- Widget inserter: more accurate widget previews (WordPress/gutenberg#79517)
- Tabs: Remove unnecessary callback memoization (WordPress/gutenberg#79567)
- Icons: Add PHP method(s) for rendering inline SVG icons from the registry (WordPress/gutenberg#78332)
- Tab List: Fix render inline formatting on frontend (WordPress/gutenberg#79554)
- Divider: Restore lower border specificity (WordPress/gutenberg#79534)
- Tabs: Remove redundant block selection from Add/Remove tab actions (WordPress/gutenberg#79571)
- Icons: Fix viewBox attribute casing assertion for older WP versions (WordPress/gutenberg#79576)
- Add icon state classes to Accordion block (WordPress/gutenberg#74257)
- Pattern editing: Fade block outside the edited pattern in List View (WordPress/gutenberg#73997)
- Experiments: move long intro to content (WordPress/gutenberg#79578)
- Updating image urls (WordPress/gutenberg#79529)
- `useTypingObserver`: capture the window reference for cleanup (WordPress/gutenberg#78772)
- Tabs: Fix rich text label comparation when syncing the list (WordPress/gutenberg#79582)
- Add `PluginPostStatusInfo` in DataForm post summary (WordPress/gutenberg#79586)
- theme: Protect design tokens CSS import (WordPress/gutenberg#79551)
- TreeSelect: Hard deprecate 40px default size (WordPress/gutenberg#79550)
- Storybook: Scope Docs theme providers (WordPress/gutenberg#79496)
- Base Styles: Reapply wpds-var Sass helper (WordPress/gutenberg#79470)
- Docs: Add image hosting guidance to the documentation contributors guide (WordPress/gutenberg#79574)
- CODEOWNERS: assign widget dashboard areas to @retrofox (WordPress/gutenberg#79484)
- Automated Testing: Use three-dot diff comparison for changelog checks (WordPress/gutenberg#79548)
- Base Styles: disallow direct var(--wpds-*) usage (WordPress/gutenberg#79424)
- Abilities: Support URI schema format (WordPress/gutenberg#79555)
- LineHeightControl: Hard deprecate 40px default size (WordPress/gutenberg#79589)
- Theme: Revert ThemeProvider stable API (WordPress/gutenberg#79594)
- Experimental: Expand DataForm inspector to patterns (WordPress/gutenberg#79452)
- RTC: Fix autosave update with no content (WordPress/gutenberg#79591)
- Icons: Add APIs for collection and icon registration (WordPress/gutenberg#77260)
- TextIndentControl: Remove unnecessary __next40pxDefaultSize prop (WordPress/gutenberg#79597)
- FontFamilyControl: Hard deprecate 40px default size (WordPress/gutenberg#79593)
- Icons Registry test: Fix trigger_error suppression on WP < 7.0 (WordPress/gutenberg#79607)
- Global Styles: Migrate color palette tabs to @wordpress/ui (WordPress/gutenberg#79281)
- Experiments: Shorten the plugin settings page name (WordPress/gutenberg#79579)
- Widget Primitives: Add `WidgetAttributeField` for typed attribute schemas (WordPress/gutenberg#79544)
- Fix - Accordion: Text in a closed accordion panel cannot be found via the browser search (WordPress/gutenberg#74744)
- Icons Registry: Allow digits and underscores in icon slugs (WordPress/gutenberg#79623)
- Knowledge: Rename the Guidelines CPT storage primitive to Knowledge (WordPress/gutenberg#79149)
- Update @terrazzo/* to 2.4.0 and regenerate design tokens (WordPress/gutenberg#79627)
- Tabs: RichText handlers for adding/removing tabs (WordPress/gutenberg#79583)
- Declare @types/node explicitly and harden no-unsafe-wp-apis (WordPress/gutenberg#79626)
- Knowledge: Dissolve the Guidelines singleton into per-scope rows (WordPress/gutenberg#79263)
- Jest: Mock CSS module class names (WordPress/gutenberg#79535)
- React 19 patch: log warnings when polyfills are hit (WordPress/gutenberg#79624)
- Upgrade browserslist to ^4.28.4 (WordPress/gutenberg#79630)
- Dedupe @testing-library/dom to a single 10.4.1 in the lockfile (WordPress/gutenberg#79631)
- Theme: Restore public ThemeProvider export (WordPress/gutenberg#79620)
- Paste: move spaces out of inline formatting elements (WordPress/gutenberg#79637)
- Blocks: Add innerContent support for static inner blocks, adopt it in the HTML block (WordPress/gutenberg#79115)
- Update webpack to 5.108.1 (WordPress/gutenberg#79633)
- RangeControl: Hard deprecate 40px default size (WordPress/gutenberg#79590)
- Animated GIF to video conversion (via mediabunny) plus conversion controls (WordPress/gutenberg#78410)
- Expose widget category through the build pipeline and REST API (WordPress/gutenberg#79638)
- Button: Fix corner artifacts by using background-clip: border-box (WordPress/gutenberg#79524)
- Notes: inline (partial-text) notes via hybrid marker + strip-on-render approach (WordPress/gutenberg#78218)
- balance top padding for sidebar controls (WordPress/gutenberg#79660)
- Guidelines E2E Tests: wait for boot to load copy page (WordPress/gutenberg#79663)
- Media Editor: Use new Tabs component from the ui package, and its minimal variant (WordPress/gutenberg#79664)
- View config: Add better post type default `form` (WordPress/gutenberg#79625)
- Opt in to npm v11 supply-chain security features (WordPress/gutenberg#79614)
- Revert "Opt in to npm v11 supply-chain security features (WordPress/gutenberg#79614)" (WordPress/gutenberg#79667)
- Navigation Link: Fix "[object Object]" in link preview for untitled entities (WordPress/gutenberg#79616)
- Update stylelint to 16.26.1 (WordPress/gutenberg#79648)
- Remove redundant @jest-environment jsdom pragmas from unit tests (WordPress/gutenberg#79672)
- npm dedupe (WordPress/gutenberg#79618)
- E2E: Ban uuid package via ESLint, use crypto.randomUUID() instead (WordPress/gutenberg#79673)
- Jest: Add missing clsx dev dependency (WordPress/gutenberg#79677)
- Style Engine: Preserve important gradient declarations (WordPress/gutenberg#79568)
- Widget Dashboard: Refactor tile header and toolbar chrome (WordPress/gutenberg#79639)
- Widget Dashboard: Anchor settings drawer to the right and toggle it from the gear (WordPress/gutenberg#79683)
- Declare undeclared workspace dependencies (WordPress/gutenberg#79684)
- Move icon tests out of phpunit/experimental (WordPress/gutenberg#79695)
- WP Build: improve documentation for routes (WordPress/gutenberg#79688)
- Packages: Backport UI and theme release changelogs (WordPress/gutenberg#79690)
- Bump preactjs/compressed-size-action (WordPress/gutenberg#79587)
- Bump js-yaml from 3.14.2 to 3.15.0 (WordPress/gutenberg#79644)
- FontAppearanceControl: Hard deprecate 40px default size (WordPress/gutenberg#79635)
- Bump actions/cache from 5.0.5 to 6.1.0 in /.github/setup-node (WordPress/gutenberg#79692)
- Bump actions/cache from 5.0.5 to 6.1.0 in /.github/workflows (WordPress/gutenberg#79693)
- Bump actions/checkout from 6.0.3 to 7.0.0 in /.github/workflows (WordPress/gutenberg#79488)
- Editor: Move focus to revisions slider when entering revisions mode (WordPress/gutenberg#79691)
- Packages: Backport package release metadata (WordPress/gutenberg#79702)
- Update: simplify inline-note marker stripping to match core backport (WordPress/gutenberg#79670)
- Add an e2e test for single paragraph selection on triple click (WordPress/gutenberg#79706)
- ComboboxControl: Hard deprecate 40px default size (WordPress/gutenberg#79636)
- FormFileUpload: Hard deprecate 40px default size (WordPress/gutenberg#79655)
- Automated Testing: Enforce dependencies checks consistently for development files (WordPress/gutenberg#79703)
- Base Styles: Make Sass token fallbacks self-contained (WordPress/gutenberg#79651)
- Radio: Hard deprecate 40px default size (WordPress/gutenberg#79657)
- ToggleGroupControl: Hard deprecate 40px default size (WordPress/gutenberg#79656)
- Heading: Fix ESLint warnings (WordPress/gutenberg#79694)
- Media Inserter: Add a simple Attached images category with attach and detach behaviour (WordPress/gutenberg#79336)
- Upgrade Playwright to v1.61 (WordPress/gutenberg#78632)
- Icons: Add an icon collections REST endpoint and tighten name rules (WordPress/gutenberg#79686)
- Experimental Media Modal: Ensure selection is properly cleared between open/close (WordPress/gutenberg#79731)
- Image: Use Playwright's locator.drop for media placeholder drop test (WordPress/gutenberg#79733)
- Add repeat all icon (WordPress/gutenberg#79698)
- Widgets: translate `title`, `description`, and `keywords` server-side (WordPress/gutenberg#79701)
- Build: Support --skip-types in npm run dev (WordPress/gutenberg#79736)
- Release: Revert to 23.5rc-3 (WordPress/gutenberg#79741)
- Render the selected static inner block synchronously (WordPress/gutenberg#79726)
- Revert "Bump plugin version to 23.5.0" (WordPress/gutenberg#79744)
- Build: Replace unmaintained release actions (WordPress/gutenberg#78258)
- Build: Use GUTENBERG_TOKEN when creating the release draft (WordPress/gutenberg#79747)
- CI: Enforce pruned ESLint suppressions during lint (WordPress/gutenberg#79708)
- Revert "Bump plugin version to 23.5.0" (WordPress/gutenberg#79750)

Props desrosj, wildworks.
Fixes #65589.

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

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

The following commits are included:

- Site Editor: Fix admin color scheme bleeding through the mobile content scrollbar gutter (WordPress/gutenberg#79056)
- Build: Add GUTENBERG_CHECK_INSTALLED_DEPS env var to opt out of installed-deps check (WordPress/gutenberg#79068)
- Media Editor: Keep the modal skeleton pinned in the editor flow (WordPress/gutenberg#79070)
- Editor: Hide cmd palette shortcut in document bar when admin bar is shown (WordPress/gutenberg#79060)
- Math format: seed LaTeX input from the current selection (WordPress/gutenberg#79052)
- Omnibar: Rename experiment to match iteration issue (WordPress/gutenberg#79074)
- Theme: Add Figma scopes to element size tokens (WordPress/gutenberg#79032)
- Admin bar in editor experiment: show site icon instead of dashicon if set (WordPress/gutenberg#79049)
- Math format: Simplify the onClick handler and use canonical selected-text capture (WordPress/gutenberg#79081)
- Style Engine: Export public TypeScript types (WordPress/gutenberg#79079)
- Image: Fix pasted images stretching when dimensions are preserved (WordPress/gutenberg#79067)
- Update `@ariakit/react` to 0.4.29 (WordPress/gutenberg#79055)
- Navigation: Use block context to determine whether Page List is nested in Submenu (WordPress/gutenberg#79048)
- Fix code editor cursor jump on remote RTC updates (WordPress/gutenberg#79005)
- Fix: Custom HTML block preview keeps expanding when iframe uses height:100vh (WordPress/gutenberg#78677)
- Image block: don't show crop icon while image is uploading (WordPress/gutenberg#79103)
- Media Editor Modal: Add a loading and simple error state (WordPress/gutenberg#79101)
- Add React 19 as an experimental flag (WordPress/gutenberg#79077)
- Try: Remove Tab (Tab list item) block  (WordPress/gutenberg#77439)
- Navigation block: Fix responsive style states for typography settings (WordPress/gutenberg#79072)
- Popover: add open/close motion and fix close re-anchor (WordPress/gutenberg#78885)
- Remove unused build:profile-types and component-usage-stats scripts (WordPress/gutenberg#79113)
- RTC: Allow disabling collaboration by post type (WordPress/gutenberg#78984)
- Omnipresent Toolbar: increase top padding in sidebar nav title (WordPress/gutenberg#79083)
- Add support for aspect ratio and related controls in viewport states (WordPress/gutenberg#78795)
- Fix responsive element styles front end output (WordPress/gutenberg#79135)
- BaseControl: add text-wrap: pretty (WordPress/gutenberg#79112)
- wp-build: Return null from getPackageInfo on resolve miss instead of throwing (WordPress/gutenberg#78715)
- Global styles revisions: replace active text with badge (WordPress/gutenberg#79137)
- Editor: Disable saving while a non-post entity is being saved (WordPress/gutenberg#79069)
- Add xl border radius token for page shell surfaces. (WordPress/gutenberg#78913)
- Add corner radius presets to ThemeProvider (WordPress/gutenberg#78816)
- theme: rename `bg`/`fg` design token groups to `background`/`foreground` (WordPress/gutenberg#79098)
- Theme: Enforce sRGB seed-color input contract for ThemeProvider (WordPress/gutenberg#79148)
- Theme: Rename `--wpds-color-stroke-focus-brand` token to `--wpds-color-stroke-focus` (WordPress/gutenberg#79125)
- refactor: Move 'glob' dependency to appropriate workspaces (WordPress/gutenberg#79145)
- Add lock-unlock route as a workspace and update dependencies (WordPress/gutenberg#79138)
- Dependabot: Add npm entry so security update PRs can be rebased (WordPress/gutenberg#79076)
- refactor: rename '@wordpress/lock-unlock' to '@wordpress/routes-lock-unlock' across the codebase (WordPress/gutenberg#79163)
- Panel: Recommend CollapsibleCard for use outside the block inspector (WordPress/gutenberg#78863)
- Editor: Migrate FlatTermSelector to UI Stack component (WordPress/gutenberg#78659)
- design-system-mcp: Remove Storybook dependency in TypeScript types (WordPress/gutenberg#79132)
- Bump rollup from 4.55.1 to 4.59.0 (WordPress/gutenberg#75964)
- Media modal: small tweak to gutters (WordPress/gutenberg#79168)
- Icon Block: Add flip and rotate transformation controls (WordPress/gutenberg#77017)
- Media Editor: Magnify the crop to fill the canvas (WordPress/gutenberg#79044)
- Update capitalisation and spelling within the welcome tour (WordPress/gutenberg#53028)
- Feature: Need to add “Show More” / “Show Less” toggle in Note. (WordPress/gutenberg#77446)
- Correct behaviour of flex child fixed width and introduce max width option (WordPress/gutenberg#79073)
- Eslint: move deps from root into tools/eslint and packages/eslint-plugin (WordPress/gutenberg#79110)
- Gallery: Hide Navigation button type when lightbox editing is disabled (WordPress/gutenberg#79147)
- Add more React internals polyfills (WordPress/gutenberg#79142)
- [DataViewsPicker]: `DataViewsPicker.BulkActionToolbar` now renders only the bulk-selection info and action buttons (WordPress/gutenberg#79180)
- Block Editor: Fix potential crash from 'useBlockToolbarPopoverProps' (WordPress/gutenberg#79178)
- Tabs: Simplify layout and prune redundant block supports (WordPress/gutenberg#77646)
- e2e: Retry transient theme activation failures in pages spec (WordPress/gutenberg#79171)
- Revisions screen with picker-activity layout (WordPress/gutenberg#77333)
- chore: remove glob from root pkg json (WordPress/gutenberg#79183)
- Core Data: Don't use 'useQuerySelect' in 'useEntityRecord(s)' hooks (WordPress/gutenberg#76198)
- Revisions: Ignore empty `[]/{}` meta values in the Meta diff panel (WordPress/gutenberg#79185)
- UI Field.Description: add `text-wrap: pretty` (WordPress/gutenberg#79143)
- Blocks: Migrate Markdown converter from showdown to marked (WordPress/gutenberg#77953)
- Bump shivammathur/setup-php (WordPress/gutenberg#79193)
- Icons block: insert an icon by default (WordPress/gutenberg#79111)
- Theme: Add tests for ThemeProvider and useThemeProviderStyles (WordPress/gutenberg#79126)
- Icon block: Move flip controls to toolbar group. (WordPress/gutenberg#79192)
- Packages: Fix the published dependency surface of npm packages (WordPress/gutenberg#79095)
- Block Library: Remove unused Babel optimization plugin (WordPress/gutenberg#79162)
- Automated Testing: Use static value for IS_GUTENBERG_PLUGIN env setup (WordPress/gutenberg#79201)
- Scripts: Avoid tests getting published to npm (WordPress/gutenberg#79204)
- Theme: Add disabled variants for brand and error interactive color tokens (WordPress/gutenberg#79124)
- Fix: State styles – clear `background-image` when hover sets a solid `background-color` (WordPress/gutenberg#78992)
- Media editor: Snap crop handles to source pixels (WordPress/gutenberg#79139)
- Image block: remove duplicate data-wp-bind--srcset in the lightbox overlay (WordPress/gutenberg#79202)
- Template Part: Remove restriction on tabs / inspector fills (WordPress/gutenberg#79181)
- Editor: Guard PostViewLink against post types without a labels object (WordPress/gutenberg#79160)
- Media editor modal: Fix keyboard resizing for locked aspect-ratio crops (WordPress/gutenberg#79207)
- wp-build: Resolve @wordpress/build from __dirname in resolve-miss test (WordPress/gutenberg#79208)
- Theme: forward ThemeProvider cornerRadius preset to :root for root providers (WordPress/gutenberg#79153)
- Refactor Prettier configuration and update dependencies (WordPress/gutenberg#79219)
- chore: Add missing root devDependencies for WordPress packages (WordPress/gutenberg#79221)
- Refactor: Update  npm-package-json-lint configuration (WordPress/gutenberg#79223)
- Components: Complete WPDS token migration for remaining borders (WordPress/gutenberg#79003)
- Plugin: Bump minimum required WordPress version to 6.9 (WordPress/gutenberg#79196)
- Autocomplete: Add Group and GroupLabel primitives (WordPress/gutenberg#78901)
- Pullquote: Migrate to text-align block support (WordPress/gutenberg#79225)
- Style Book: Fix crash when previewing variations for blocks without examples (WordPress/gutenberg#79131)
- Theme: Add stroke-surface tokens for the caution tone (WordPress/gutenberg#79198)
- Icon block: Default to core/info via block.json instead of an insert-time effect (WordPress/gutenberg#79212)
- Backport changelog and package version updates from wp/latest (WordPress/gutenberg#79234)
- V2 Site Editor: Fix template edit routes (WordPress/gutenberg#79230)
- Grid: Prepare `@wordpress/grid` for npm publishing as experimental 0.1.0 (WordPress/gutenberg#79071)
- File Block: Replace on-mount downloadButtonText effect with a default variation (WordPress/gutenberg#79236)
- Components, DataViews: Adopt --wpds-dimension-size-* tokens (WordPress/gutenberg#79093)
- Refactor: move stylelint config and deps to tools/stylelint workspace (WordPress/gutenberg#79226)
- Revert "Components: Complete WPDS token migration for remaining borders (WordPress/gutenberg#79003)" (WordPress/gutenberg#79243)
- Edit Post: Refactor and cleanup InitPatternModal component (WordPress/gutenberg#79190)
- Widget Primitives: extract into `@wordpress/widget-primitives` (WordPress/gutenberg#79134)
- chore: remove @wordpress/vips dependency from root (WordPress/gutenberg#79249)
- design-system-mcp: Improve README overview and setup instructions (WordPress/gutenberg#79238)
- Components: Re-land WPDS border token migration with Emotion-safe comments (WordPress/gutenberg#79244)
- Theme: Provide design-system token defaults without a runtime `<ThemeProvider>` (WordPress/gutenberg#78664)
- List View block support: Hide list tab when allowedBlocks is empty, with no children (WordPress/gutenberg#78932)
- Handle WP.org SVN missing tag warnings (WordPress/gutenberg#79257)
- CI: Run PHP unit tests on PHP 8.4 and 8.5 (WordPress/gutenberg#79260)
- mark @types/react as an optional peer dependency (WordPress/gutenberg#79272)
- Block bindings : add support to list-item (WordPress/gutenberg#78947)
- document widget-modules endpoint experiment gate (WordPress/gutenberg#79264)
- Storybook: Upgrade Storybook to 10.4 (WordPress/gutenberg#77382)
- Core Data: Cleanup edits matching persisted record on undo/redo (WordPress/gutenberg#77100)
- Notes: Simplify 'Show more/less' collapse logic (WordPress/gutenberg#79261)
- File Block: Combine audio/video/image to file transforms (WordPress/gutenberg#79242)
- Button: Use font weight token (WordPress/gutenberg#79278)
- Avoid dirtying related navigation entities during passive render (WordPress/gutenberg#79000)
- Theme: Skip serializing `data-wpds-root-provider="false"` on non-root providers (WordPress/gutenberg#79253)
- Patterns: Migrate modals to @wordpress/ui components and fix rename input width (WordPress/gutenberg#79233)
- ESLint, UI, Components: Mark `Tooltip` from `@wordpress/ui` as recommended (WordPress/gutenberg#78693)
- Theme: differentiate `--wpds-color-fg-interactive-{brand,error}-active` vs resting state tokens (WordPress/gutenberg#79151)
- Document AlertDialog as ConfirmDialog successor in Storybook (WordPress/gutenberg#79293)
- Elements: Accept both md5 and sequential `wp-elements-*` class names in tests (WordPress/gutenberg#79300)
- Cover block: add media editor modal (WordPress/gutenberg#79258)
- Blocks: Use positional sprintf placeholders in avatar, comment, and search renderers (WordPress/gutenberg#79290)
- DataForm: Fix panel field control overflow clipping and remove button overrides (WordPress/gutenberg#79275)
- Experiment: Editor Inspector with DataForm - remove revision panel and add link (WordPress/gutenberg#79195)
- Upload Media: Add error taxonomy, localized messages, and dev diagnostics (WordPress/gutenberg#74917)
- Block Fields: Fix crash resolving pattern overrides bindings (WordPress/gutenberg#79092)
- Media: Rename HEIC companion metadata key to source_image (WordPress/gutenberg#79307)
- DataForm: Align `label-side` gap of `panel` layout with `regular` layout (WordPress/gutenberg#79311)
- Theme: Add design tokens maintainer's guide documentation (WordPress/gutenberg#79157)
- Remove ObliviousHarmony from CODEOWNERS for packages/env (WordPress/gutenberg#79308)
- Widget Dashboard: extract into `@wordpress/widget-dashboard` (WordPress/gutenberg#79268)
- Sync editor settings in layout effect (fixes autosave e2e) (WordPress/gutenberg#78799)
- Remove Lighthouse patch (WordPress/gutenberg#79319)
- Editor: Remove orphaned editor-help component leftovers (WordPress/gutenberg#79324)
- Plugins API: Fix the plugin 'render' property validation (WordPress/gutenberg#79315)
- Components: Improve Menu unit tests performance by removing sleeps (WordPress/gutenberg#79295)
- UI Button: Fix loading state in forced colors (WordPress/gutenberg#78820)
- Media Editor: Fix crop canvas pinch zoom (WordPress/gutenberg#79332)
- Docs: Fix typos in README files (WordPress/gutenberg#79331)
- Media Editor: Align crop settle state with transition completion (WordPress/gutenberg#79339)
- KSES: Allow SVG-specific presentation attributes in safe_style_css (WordPress/gutenberg#79172)
- Widget Primitives: decouple discovery from a hardcoded endpoint (WordPress/gutenberg#79322)
- Site Editor: Save hub button styling while saving (WordPress/gutenberg#79287)
- Migrate compose package to TypeScript  (WordPress/gutenberg#70618)
- Vips: bump wasm-vips to 0.0.18 for high-bit-depth AVIF decoding (WordPress/gutenberg#79179)
- Experimental: Expand Editor Inspector: Use DataForm experiment to templates (WordPress/gutenberg#76934)
- Site Editor: Change 'Identity' nav item position (WordPress/gutenberg#79292)
- Block Bindings: Preserve nested lists when binding List Item content (WordPress/gutenberg#79346)
- Site Editor: Handle `aria-current` natively in `SidebarNavigationItem` (WordPress/gutenberg#79305)
- RichText: Fix duplicated format wrappers when typing inside an applied format (WordPress/gutenberg#79091)
- Vips: inline WASM with compact UTF-8 binary encoding instead of base64 (WordPress/gutenberg#79188)
- View Config API and REST Endpoint: make them core ready (WordPress/gutenberg#79347)
- Validation: Add a published-dependency audit script (WordPress/gutenberg#79094)
- Reconcile feature-detection docblock with implemented checks (WordPress/gutenberg#75851)
- fix typo in block-filter.md file (WordPress/gutenberg#79367)
- Search block: Add opt-in support for the semantic <search> element (WordPress/gutenberg#78485)
- Dashboard: revert H1 to "Dashboard" and fix heading hierarchy (WordPress/gutenberg#79251)
- Components: Make ResizableBox children prop optional (WordPress/gutenberg#79370)
- Grid overlays: Use canvas iframe window for viewport visibility detection (WordPress/gutenberg#79255)
- Widget Primitives: make contract and story docs host-agnostic (WordPress/gutenberg#79358)
- Use symbols for style states to avoid property clashes (WordPress/gutenberg#79210)
- Ignore markdown linting for backport-changelog MD files (WordPress/gutenberg#79392)
- Add media control icons (WordPress/gutenberg#78987)
- Icons: Use snake_case `file_path` key in icon registry (WordPress/gutenberg#79100)
- Editor: Use `Stack` for post summary (WordPress/gutenberg#79397)
- Theme: Run stylelint plugin tests via the Node API (WordPress/gutenberg#79199)
- Command Palette: Exclude assets from block editor settings endpoint (WordPress/gutenberg#79396)
- List item: Remove orphaned convertToListItems util (WordPress/gutenberg#79400)
- Video: Apply `inert` directly instead of wrapping in `Disabled` (WordPress/gutenberg#79371)
- Site Editor: Introduce isHidden prop for SidebarNavigationItem (WordPress/gutenberg#79352)
- Post Editor: Use the correct directory for recent preload improvements (WordPress/gutenberg#79359)
- Configure Flakiness.io reporting for e2e tests (WordPress/gutenberg#79173)
- View Config: request a subset of properties with the `_fields` parameter (WordPress/gutenberg#79355)
- Storybook: Reorganize design system introduction for first touch-point usefulness (WordPress/gutenberg#79360)
- Block editor: Convert utility modules to TypeScript (WordPress/gutenberg#79323)
- devops: configure report auto-upload for flakiness.io dashboard (WordPress/gutenberg#79411)
- UI: Simplify focus ring styles (WordPress/gutenberg#78823)
- TextControl: Hard deprecate 40px default size (WordPress/gutenberg#79386)
- devops: upload unit test results to flakiness dashboard (WordPress/gutenberg#79414)
- Clarify Core-specific steps when bumping support (WordPress/gutenberg#79416)
- Pattern editing: show root block identity when editing pattern sections (WordPress/gutenberg#79417)
- Patterns: Add a missing gap to 'Enable overrides' modal (WordPress/gutenberg#79421)
- Audio: Apply `inert` directly instead of wrapping in `Disabled` (WordPress/gutenberg#79423)
- Experimental: Expand Editor Inspector: Use DataForm experiment to template parts (WordPress/gutenberg#79399)
- Base Styles: Add wpds-var Sass helper for design token fallbacks (WordPress/gutenberg#78698)
- Block Editor: Allow overriding `disableContentOnlyForTemplateParts` setting (WordPress/gutenberg#79191)
- Mark all controlled/mode block changes non-persistent (WordPress/gutenberg#79350)
- Revert "Base Styles: Add wpds-var Sass helper for design token fallbacks (WordPress/gutenberg#78698)" (WordPress/gutenberg#79429)
- Popover: Align transition state styles (WordPress/gutenberg#79410)
- DataForm panel layout: fix double-clicking a field row leaving the flyout stuck open (WordPress/gutenberg#79348)
- Classic Block: Port PHPUnit coverage for wp_declare_classic_block_necessary (WordPress/gutenberg#79434)
- Fields: Move author fields for templates and template parts (WordPress/gutenberg#79395)
- Theme: Drop `--wpds-dimension-base` from the public token surface (WordPress/gutenberg#79254)
- Merge shared stylelint disallowed-list in components (WordPress/gutenberg#79425)
- Edit Post: Refactor MetaBoxesSection to use data hooks (WordPress/gutenberg#79433)
- View config endpoint: bring back changes from core (WordPress/gutenberg#79438)
- devops: separate environments for jest date tests (WordPress/gutenberg#79453)
- UI: Disable instant overlay popup transitions (WordPress/gutenberg#79432)
- Components: Refactor withFallbackStyles from class to function component (WordPress/gutenberg#78837)
- Automated Testing: Globally shim Element#getClientRects (WordPress/gutenberg#79353)
- Theme: Promote ThemeProvider to stable API (WordPress/gutenberg#78958)
- Automated Testing: Add babel-plugin-transform-import-meta to emulate import.meta.dirname (WordPress/gutenberg#79362)
- E2E: Support WordPress installs served from a subdirectory (WordPress/gutenberg#79166)
- Custom HTML: Fix scrollbar after tab switch in modal (WordPress/gutenberg#78571)
- Theme: apply ThemeProvider styles inline (I2) (WordPress/gutenberg#78678)
- Add flex vertical alignment tool to block inspector layout panel (WordPress/gutenberg#79426)
- Block Supports: Relocate text and bg color controls to Typography and Background panels (WordPress/gutenberg#77279)
- Add e2e coverage for pattern wrapper block identity (WordPress/gutenberg#79462)
- Storybook: Include playground stories and MDX in CI smoke tests (WordPress/gutenberg#79454)
- BoxControl: respect a consumer-supplied placeholder via inputProps (WordPress/gutenberg#79466)
- Media Fields: Ensure the current post is always included in the initial options (WordPress/gutenberg#79467)
- Global Styles: Add textShadow style support (WordPress/gutenberg#73320)
- Media Fields: Avoid focus loss when detaching the current parent (WordPress/gutenberg#79468)
- CI: Disallow new dependencies in the root package.json (WordPress/gutenberg#78616)
- Experimental: Preserve editor panel visibility in the DataForm post summary (WordPress/gutenberg#79441)
- Tabs: Pre-stabilization API cleanup and refactoring (WordPress/gutenberg#79337)
- BoxControl: Hard deprecate 40px default size (WordPress/gutenberg#79419)
- Image Block: Remove chained entity record calls (WordPress/gutenberg#79469)
- UI: Use isomorphic layout effects (WordPress/gutenberg#79458)
- Components: add Emotion migration guardrails (WordPress/gutenberg#79442)
- devops: separate histories for different node.js versions (WordPress/gutenberg#79473)
- Components: migrate Divider to SCSS module (WordPress/gutenberg#79444)
- Block Library: unwrap Classic block migration notice experiment (WordPress/gutenberg#78165)
- Editor: Refactor AutosaveMonitor to a function component (WordPress/gutenberg#79043)
- Boot: run page `init` modules in `initSinglePage` (WordPress/gutenberg#79394)
- DataFormPostSummary: fix different `useSelect` returned values  (WordPress/gutenberg#79478)
- Icons: self declare color (WordPress/gutenberg#79320)
- Theme: Document ramp memoization contract (WordPress/gutenberg#79459)
- tools: Restrict layout effect imports in UI and theme (WordPress/gutenberg#79476)
- CI: Avoid full-history checkout for the root-dependencies check (WordPress/gutenberg#79489)
- Simplify playlist track state (WordPress/gutenberg#79448)
- prepend_to_selector: optimized with str_replace() (WordPress/gutenberg#76556)
- Components: migrate Surface to SCSS module (WordPress/gutenberg#79445)
- Docs: Add a widget anatomy doc and lighten the widget system doc (WordPress/gutenberg#79435)
- Media Editor: remove inline cropper (follow-up to WordPress/gutenberg#78653) (WordPress/gutenberg#78654)
- Grid: Add option to stretch columns with auto-fit for better layout flexibility (WordPress/gutenberg#79356)
- Guidelines: Use str_starts_with() in is_block_meta_key() (WordPress/gutenberg#79491)
- Color popover: move contrast warning notice to the bottom (WordPress/gutenberg#79512)
- BorderBoxControl: Hard deprecate 40px default size (WordPress/gutenberg#79420)
- Remove Classic Block conversion from BlockInvalidWarning (WordPress/gutenberg#79500)
- [RTC] Add granular collaboration control (WordPress/gutenberg#79184)
- FontSizePicker: Hard deprecate 40px default size (WordPress/gutenberg#79481)
- React 19: patch to support legacy inert attribute values (WordPress/gutenberg#79475)
- Icons: Add Storybook React Vite dev dependency (WordPress/gutenberg#79506)
- QueryControls: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79485)
- Block editor: use core/registered-block in reducer tests (WordPress/gutenberg#79522)
- UI: Update @base-ui/react to 1.6.0 (WordPress/gutenberg#79408)
- Refactor: Replace strpos with str_starts_with for improved consistency (WordPress/gutenberg#79519)
- Block Library: Remove redundant parentheses around assignments (WordPress/gutenberg#79516)
- Tabs: Focus first tab when adding Tabs block (WordPress/gutenberg#79507)
- ui/IconButton: Restore default tooltip delay (WordPress/gutenberg#79505)
- FocalPointPicker: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79487)
- Components: document CSS module class composition (WordPress/gutenberg#79490)
- BorderControl: Hard deprecate 40px default size (WordPress/gutenberg#79418)
- Components: migrate Truncate to SCSS module (WordPress/gutenberg#79446)
- Show the admin bar in the Post and Site Editor by default (WordPress/gutenberg#79197)
- SearchControl: Complete __next40pxDefaultSize cleanup (WordPress/gutenberg#79538)
- Stylelint: Enforce module class naming in UI packages (WordPress/gutenberg#79504)
- Components: Add missing descriptions for design system components (WordPress/gutenberg#79460)
- LetterSpacingControl: Hard deprecate 40px default size (WordPress/gutenberg#79533)
- Experiments: Move screen under Settings, drop top-level Gutenberg menu and Demo page (WordPress/gutenberg#79456)
- Tabs: Combine and cleanup toolbar controls (WordPress/gutenberg#79537)
- Tabs: Fix dirty editor state on mount caused by tab-list sync (WordPress/gutenberg#79540)
- RTC: fix undo / redo breakage when plug-in with metabox is loaded (WordPress/gutenberg#79510)
- Block Supports: Guard elements hover rendering against missing hover selector (WordPress/gutenberg#79511)
- Commands: add toggle for content-only pattern/template part editing (WordPress/gutenberg#78383)
- Integrate Resizable Editor with Device Preview and add Responsive editing (WordPress/gutenberg#75121)
- Pattern editing: use section block selector for pattern display identity (WordPress/gutenberg#79565)
- Commands: Suggest pattern editing toggle for selected patterns (WordPress/gutenberg#79566)
- Tabs: Select tab panel when caret moves into tab (WordPress/gutenberg#79558)
- Fix unsetting values in viewport states for grid and constrained layouts (WordPress/gutenberg#79520)
- Add layout and block spacing support to Latest Posts block (WordPress/gutenberg#77989)
- Widget inserter: more accurate widget previews (WordPress/gutenberg#79517)
- Tabs: Remove unnecessary callback memoization (WordPress/gutenberg#79567)
- Icons: Add PHP method(s) for rendering inline SVG icons from the registry (WordPress/gutenberg#78332)
- Tab List: Fix render inline formatting on frontend (WordPress/gutenberg#79554)
- Divider: Restore lower border specificity (WordPress/gutenberg#79534)
- Tabs: Remove redundant block selection from Add/Remove tab actions (WordPress/gutenberg#79571)
- Icons: Fix viewBox attribute casing assertion for older WP versions (WordPress/gutenberg#79576)
- Add icon state classes to Accordion block (WordPress/gutenberg#74257)
- Pattern editing: Fade block outside the edited pattern in List View (WordPress/gutenberg#73997)
- Experiments: move long intro to content (WordPress/gutenberg#79578)
- Updating image urls (WordPress/gutenberg#79529)
- `useTypingObserver`: capture the window reference for cleanup (WordPress/gutenberg#78772)
- Tabs: Fix rich text label comparation when syncing the list (WordPress/gutenberg#79582)
- Add `PluginPostStatusInfo` in DataForm post summary (WordPress/gutenberg#79586)
- theme: Protect design tokens CSS import (WordPress/gutenberg#79551)
- TreeSelect: Hard deprecate 40px default size (WordPress/gutenberg#79550)
- Storybook: Scope Docs theme providers (WordPress/gutenberg#79496)
- Base Styles: Reapply wpds-var Sass helper (WordPress/gutenberg#79470)
- Docs: Add image hosting guidance to the documentation contributors guide (WordPress/gutenberg#79574)
- CODEOWNERS: assign widget dashboard areas to @retrofox (WordPress/gutenberg#79484)
- Automated Testing: Use three-dot diff comparison for changelog checks (WordPress/gutenberg#79548)
- Base Styles: disallow direct var(--wpds-*) usage (WordPress/gutenberg#79424)
- Abilities: Support URI schema format (WordPress/gutenberg#79555)
- LineHeightControl: Hard deprecate 40px default size (WordPress/gutenberg#79589)
- Theme: Revert ThemeProvider stable API (WordPress/gutenberg#79594)
- Experimental: Expand DataForm inspector to patterns (WordPress/gutenberg#79452)
- RTC: Fix autosave update with no content (WordPress/gutenberg#79591)
- Icons: Add APIs for collection and icon registration (WordPress/gutenberg#77260)
- TextIndentControl: Remove unnecessary __next40pxDefaultSize prop (WordPress/gutenberg#79597)
- FontFamilyControl: Hard deprecate 40px default size (WordPress/gutenberg#79593)
- Icons Registry test: Fix trigger_error suppression on WP < 7.0 (WordPress/gutenberg#79607)
- Global Styles: Migrate color palette tabs to @wordpress/ui (WordPress/gutenberg#79281)
- Experiments: Shorten the plugin settings page name (WordPress/gutenberg#79579)
- Widget Primitives: Add `WidgetAttributeField` for typed attribute schemas (WordPress/gutenberg#79544)
- Fix - Accordion: Text in a closed accordion panel cannot be found via the browser search (WordPress/gutenberg#74744)
- Icons Registry: Allow digits and underscores in icon slugs (WordPress/gutenberg#79623)
- Knowledge: Rename the Guidelines CPT storage primitive to Knowledge (WordPress/gutenberg#79149)
- Update @terrazzo/* to 2.4.0 and regenerate design tokens (WordPress/gutenberg#79627)
- Tabs: RichText handlers for adding/removing tabs (WordPress/gutenberg#79583)
- Declare @types/node explicitly and harden no-unsafe-wp-apis (WordPress/gutenberg#79626)
- Knowledge: Dissolve the Guidelines singleton into per-scope rows (WordPress/gutenberg#79263)
- Jest: Mock CSS module class names (WordPress/gutenberg#79535)
- React 19 patch: log warnings when polyfills are hit (WordPress/gutenberg#79624)
- Upgrade browserslist to ^4.28.4 (WordPress/gutenberg#79630)
- Dedupe @testing-library/dom to a single 10.4.1 in the lockfile (WordPress/gutenberg#79631)
- Theme: Restore public ThemeProvider export (WordPress/gutenberg#79620)
- Paste: move spaces out of inline formatting elements (WordPress/gutenberg#79637)
- Blocks: Add innerContent support for static inner blocks, adopt it in the HTML block (WordPress/gutenberg#79115)
- Update webpack to 5.108.1 (WordPress/gutenberg#79633)
- RangeControl: Hard deprecate 40px default size (WordPress/gutenberg#79590)
- Animated GIF to video conversion (via mediabunny) plus conversion controls (WordPress/gutenberg#78410)
- Expose widget category through the build pipeline and REST API (WordPress/gutenberg#79638)
- Button: Fix corner artifacts by using background-clip: border-box (WordPress/gutenberg#79524)
- Notes: inline (partial-text) notes via hybrid marker + strip-on-render approach (WordPress/gutenberg#78218)
- balance top padding for sidebar controls (WordPress/gutenberg#79660)
- Guidelines E2E Tests: wait for boot to load copy page (WordPress/gutenberg#79663)
- Media Editor: Use new Tabs component from the ui package, and its minimal variant (WordPress/gutenberg#79664)
- View config: Add better post type default `form` (WordPress/gutenberg#79625)
- Opt in to npm v11 supply-chain security features (WordPress/gutenberg#79614)
- Revert "Opt in to npm v11 supply-chain security features (WordPress/gutenberg#79614)" (WordPress/gutenberg#79667)
- Navigation Link: Fix "[object Object]" in link preview for untitled entities (WordPress/gutenberg#79616)
- Update stylelint to 16.26.1 (WordPress/gutenberg#79648)
- Remove redundant @jest-environment jsdom pragmas from unit tests (WordPress/gutenberg#79672)
- npm dedupe (WordPress/gutenberg#79618)
- E2E: Ban uuid package via ESLint, use crypto.randomUUID() instead (WordPress/gutenberg#79673)
- Jest: Add missing clsx dev dependency (WordPress/gutenberg#79677)
- Style Engine: Preserve important gradient declarations (WordPress/gutenberg#79568)
- Widget Dashboard: Refactor tile header and toolbar chrome (WordPress/gutenberg#79639)
- Widget Dashboard: Anchor settings drawer to the right and toggle it from the gear (WordPress/gutenberg#79683)
- Declare undeclared workspace dependencies (WordPress/gutenberg#79684)
- Move icon tests out of phpunit/experimental (WordPress/gutenberg#79695)
- WP Build: improve documentation for routes (WordPress/gutenberg#79688)
- Packages: Backport UI and theme release changelogs (WordPress/gutenberg#79690)
- Bump preactjs/compressed-size-action (WordPress/gutenberg#79587)
- Bump js-yaml from 3.14.2 to 3.15.0 (WordPress/gutenberg#79644)
- FontAppearanceControl: Hard deprecate 40px default size (WordPress/gutenberg#79635)
- Bump actions/cache from 5.0.5 to 6.1.0 in /.github/setup-node (WordPress/gutenberg#79692)
- Bump actions/cache from 5.0.5 to 6.1.0 in /.github/workflows (WordPress/gutenberg#79693)
- Bump actions/checkout from 6.0.3 to 7.0.0 in /.github/workflows (WordPress/gutenberg#79488)
- Editor: Move focus to revisions slider when entering revisions mode (WordPress/gutenberg#79691)
- Packages: Backport package release metadata (WordPress/gutenberg#79702)
- Update: simplify inline-note marker stripping to match core backport (WordPress/gutenberg#79670)
- Add an e2e test for single paragraph selection on triple click (WordPress/gutenberg#79706)
- ComboboxControl: Hard deprecate 40px default size (WordPress/gutenberg#79636)
- FormFileUpload: Hard deprecate 40px default size (WordPress/gutenberg#79655)
- Automated Testing: Enforce dependencies checks consistently for development files (WordPress/gutenberg#79703)
- Base Styles: Make Sass token fallbacks self-contained (WordPress/gutenberg#79651)
- Radio: Hard deprecate 40px default size (WordPress/gutenberg#79657)
- ToggleGroupControl: Hard deprecate 40px default size (WordPress/gutenberg#79656)
- Heading: Fix ESLint warnings (WordPress/gutenberg#79694)
- Media Inserter: Add a simple Attached images category with attach and detach behaviour (WordPress/gutenberg#79336)
- Upgrade Playwright to v1.61 (WordPress/gutenberg#78632)
- Icons: Add an icon collections REST endpoint and tighten name rules (WordPress/gutenberg#79686)
- Experimental Media Modal: Ensure selection is properly cleared between open/close (WordPress/gutenberg#79731)
- Image: Use Playwright's locator.drop for media placeholder drop test (WordPress/gutenberg#79733)
- Add repeat all icon (WordPress/gutenberg#79698)
- Widgets: translate `title`, `description`, and `keywords` server-side (WordPress/gutenberg#79701)
- Build: Support --skip-types in npm run dev (WordPress/gutenberg#79736)
- Release: Revert to 23.5rc-3 (WordPress/gutenberg#79741)
- Render the selected static inner block synchronously (WordPress/gutenberg#79726)
- Revert "Bump plugin version to 23.5.0" (WordPress/gutenberg#79744)
- Build: Replace unmaintained release actions (WordPress/gutenberg#78258)
- Build: Use GUTENBERG_TOKEN when creating the release draft (WordPress/gutenberg#79747)
- CI: Enforce pruned ESLint suppressions during lint (WordPress/gutenberg#79708)
- Revert "Bump plugin version to 23.5.0" (WordPress/gutenberg#79750)

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


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

Labels

[Feature] Notes Phase 3 of the Gutenberg roadmap around block commenting [Package] Editor /packages/editor [Type] Feature New feature to highlight in changelogs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Inline block commenting

6 participants