Skip to content

List View block support: Hide list tab when allowedBlocks is empty, with no children#78932

Merged
andrewserong merged 8 commits into
trunkfrom
update/allow-list-view-block-support-to-be-toggled
Jun 17, 2026
Merged

List View block support: Hide list tab when allowedBlocks is empty, with no children#78932
andrewserong merged 8 commits into
trunkfrom
update/allow-list-view-block-support-to-be-toggled

Conversation

@andrewserong

@andrewserong andrewserong commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

What?

Add a per-instance way for a block to disable the List View block support when it's template locked and has no children. The idea is that consumers may want/need to be able to disable the list view tab programmatically rather than just the boolean in block.json.

Why?

It's possible to have blocks that only want to allow the list tab or view to be available based on a certain set of conditions (or a mode). The primary use case I have in mind is that of a Dynamic Gallery block that has two modes: a dynamic one where the inner images are fetched via a query, and a static mode where individual blocks are set within the block. I.e what I'm exploring in #78796

That's just one use case, though. There could be many cases where a block wants or needs to hide its internals based on a condition. So this PR is proposing a general way to do that.

How?

  • Previously this PR tried to add a listView flag, but it turns out we can infer a desired state for hiding the list view tab via allowedBlock: [] or allowedBlocks: false (and the absence of any inner blocks). This state can effectively become a "managed inner blocks" mode.
  • Add a shouldRenderBlockListView selector to return whether or not the list view support is available — this way we're not just checking if the block type allows it, we're also checking if the block currently supports it

For an example of how a consumer might use this in practice, take a look at #78796 which adds a dynamic gallery block variation (effectively a mode).

Testing Instructions

We can simulate the behaviour in #78796 by updating a block locally to set allowedBlocks: []. This is quite artificial, the real use case is in the other PR. Here's a diff to apply it to the Gallery block in this branch.

In this case, to demo the behaviour, I've wired up switching allowedBlocks: [] to the randomOrder value so that you can see it hiding the list tab in the editor:

diff --git a/packages/block-library/src/gallery/edit.js b/packages/block-library/src/gallery/edit.js
index 12aeb5432b3..02ea6636798 100644
--- a/packages/block-library/src/gallery/edit.js
+++ b/packages/block-library/src/gallery/edit.js
@@ -603,6 +603,12 @@ export default function GalleryEdit( props ) {
 		directInsert: true,
 		orientation: 'horizontal',
 		renderAppender: false,
+		// TESTING ONLY — do not merge. Toggle the gallery's "Randomize order"
+		// setting to declare `allowedBlocks: []`, turning it into an empty,
+		// insertion-disallowed container so the List View exclusion and the
+		// drag-and-drop/insert block can be exercised without the dynamic
+		// gallery feature.
+		allowedBlocks: randomOrder ? EMPTY_ARRAY : undefined,
 	} );
 
 	const dropdownMenuProps = useToolsPanelDropdownMenuProps();

With the above diff applied, if you add the following block markup, you'll see the Gallery block with no list tab:

<!-- wp:gallery {"randomOrder":true,"linkTo":"none"} -->
<figure class="wp-block-gallery has-nested-images columns-default is-cropped"></figure>
<!-- /wp:gallery -->

Note again: this is a very artificial example to help test this branch. The above state is effectively useless on this branch, but it will become useful in the dynamic gallery PR (#78796)

Screenshots or screencast

With the above diff applied for example, the List tab would be hidden if you have randomOrder toggled on with a gallery block that has no children:

image

Use of AI Tools

Claude Code and Codex

@andrewserong andrewserong self-assigned this Jun 4, 2026
@andrewserong andrewserong added [Type] Enhancement A suggestion for improvement. [Package] Block editor /packages/block-editor labels Jun 4, 2026
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

Size Change: +85 B (0%)

Total Size: 8.6 MB

📦 View Changed
Filename Size Change
build/scripts/block-editor/index.min.js 380 kB +85 B (+0.02%)

compressed-size-action

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown

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

@andrewserong
andrewserong marked this pull request as ready for review June 5, 2026 05:16
@github-actions

github-actions Bot commented Jun 5, 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: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>

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

@andrewserong

Copy link
Copy Markdown
Contributor Author

Switching back to draft while I try out some other ideas. One thing I wasn't quite happy with is that this PR is an imperative call to disable the support. @talldan has suggested looking at a property on useInnerBlockProps which might work better.

I'll be AFK soon, so I'll likely play around with this more sometime next week.

@andrewserong
andrewserong marked this pull request as draft June 5, 2026 05:48
@t-hamano t-hamano added the [Feature] List View Menu item in the top toolbar to select blocks from a list of links. label Jun 8, 2026
@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from f37d516 to adebc97 Compare June 9, 2026 05:25
@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from adebc97 to 281ce35 Compare June 10, 2026 05:56
@andrewserong
andrewserong marked this pull request as ready for review June 10, 2026 07:10
@andrewserong
andrewserong requested a review from tyxla June 10, 2026 07:10
@andrewserong

Copy link
Copy Markdown
Contributor Author

Just switching this over to ready for review now. The main change is that this moves the listView flag to something that can be set within useInnerBlocksProps which makes it bit more declarative and avoids having to add an action / setter.

It also means that combined with templateLock: all it's possible for a consumer to effectively create a "managed inner blocks" state. That's what the dynamic gallery block prototype PR tries out in the gallery block via:

const innerBlocksProps = useInnerBlocksProps( blockProps, {
defaultBlock: DEFAULT_BLOCK,
directInsert: true,
orientation: 'horizontal',
renderAppender: false,
// In dynamic mode the inner blocks are managed by the source, so lock
// the container: this prevents inserting or dragging blocks into it
// (e.g. from the main List View sidebar) via the standard
// `getTemplateLock` -> `canInsertBlockType` path.
templateLock: isDynamic ? 'all' : undefined,
// In dynamic mode the gallery has no real inner blocks to navigate
// (it renders a preview of the query result), so opt the instance out
// of the List View.
listView: ! isDynamic,
} );

So essentially the proposal here is: add a small flag within useInnerBlocksProps that consumers can use as one part of how they control display and interaction with inner blocks.

(As always, I'm not wedded to any one approach for this, so happy for feedback if this looks off as an overall approach!)

@andrewserong andrewserong changed the title List View block support: Add a private API to allow it to be programmatically toggled List View block support: Add an API to allow it to be programmatically toggled Jun 10, 2026

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

Thanks for this @andrewserong!

I'm a bit torn if we really need a new listView API - see my comment below.

I think the rest is just mechanics and quite straightforward to finish once we agree on that.

Curious to hear what others think too.

Comment thread packages/block-editor/src/components/block-edit/index.js Outdated
useDispatch( blockEditorStore )
);

const isEnabled = hasListViewSupport( name );

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.

Now that isEnabled comes from hasBlockListViewSupport( clientId ) instead of hasListViewSupport( name ), is name still used anywhere in ListViewPanel?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Looks like we're still using it as a visually hidden label for the panel in order to get its block name / title:

image

Comment thread packages/block-editor/src/components/inner-blocks/README.md Outdated
Comment thread packages/block-editor/src/components/inner-blocks/README.md Outdated
Comment thread packages/block-editor/src/store/test/private-selectors.js Outdated
blockType,
parentLock,
defaultLayout,
listView,

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.

Picking up the thread from my comment on the gallery PR (#78796 (comment)), since this is the better place for it.

I'm not convinced we need a dedicated listView opt-out API, and I'd like to question it before we commit to a permanent public surface. The thing that nags me: the flag is only ever subtractive, hasBlockListViewSupport shows it can only turn participation off, and only for a block that already has type support. So it's not really a new capability; it's a refinement of "should this instance's List View show." That makes me wonder whether the answer can be derived from the state we already have rather than declared.

The "managed inner blocks" state that motivates this is templateLock: 'all' + listView: false. A fully locked container that renders a preview has, by definition, nothing insertable and nothing navigable, which feels like enough signal on its own. So the question I'd like us to answer explicitly: can List View participation fall out of existing semantics, e.g. templateLock: 'all' with no navigable children, or a block editing mode like disabled/contentOnly, instead of a new flag a consumer has to remember to set alongside the lock?

Two concrete costs push me to ask: it's a permanent public API on useInnerBlocksProps, born from a single experimental consumer; and the BlockEdit change adds a store subscription to a per-every-block hot path, where the value was previously computed synchronously, and for the motivating case (gallery with no descendants) that propagation looks inert anyway.

To be clear, I think your composition instinct in #1229 makes sense, pairing templateLock: 'all' with a list-view signal beats inventing a bespoke "managed" mode. My doubt is narrower: whether the list-view half needs to be its own declared flag, or whether it should be a consequence of the lock/editing-mode the consumer already sets. If we try deriving it and it turns out gnarly (the navigation special case, controlled-blocks cases like Page List, etc.), then a minimal explicit flag like this is a fine outcome, but I'd like to see that we tried, so we're adding the API because the derivation doesn't hold, not by default.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'm sold! 😄

It seems to be working quite nicely for me without the listView flag, so I've reworked the PR to go for the inferred approach. Let's see how it holds up!

@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from 281ce35 to d6906ea Compare June 11, 2026 01:03
@andrewserong

Copy link
Copy Markdown
Contributor Author

Thanks so much for the thorough review @tyxla! I think you might have mentioned the idea of inferring the managed inner blocks state elsewhere, but it didn't quite click for me until you explained it in detail above.

I've reworked this PR to try that out so that it now becomes templateLock: 'all' + no inner blocks to set an effective "managed inner blocks" mode where the list tab is hidden.

This feels much better (and simpler to me) and gets to the heart of the use case for the dynamic gallery block. It also resolves a couple of your other (valid) comments about the PR.

I'll update the dynamic gallery block PR shortly to match the new behaviour of this one, but right now this is feeling much better to me!

This should be ready for another look. I'll be AFK tomorrow, but will continue on with this work next week. Thanks again!

@andrewserong andrewserong changed the title List View block support: Add an API to allow it to be programmatically toggled List View block support: Hide list tab when templateLocked with no children Jun 11, 2026

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

Just catching up here, thanks for all the helpful explanations folks!

Comment on lines +1112 to +1114
const hasManagedInnerBlocks =
getTemplateLock( state, clientId ) === 'all' &&
getBlockOrder( state, clientId ).length === 0;

@ramonjd ramonjd Jun 11, 2026

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.

Kudos for trying out the suggested approach! in my testing when I replace the diff example with something like

templateLock: randomOrder ? 'all' : undefined,

and I see

<!-- wp:gallery {"randomOrder":true,"linkTo":"none"} -->

I don't see the list view's status changing, though the innerblocks are locked 🤔 I'm probably doing something wrong, or is that expected?

Image

Curious, what's the intended usage for the dynamic gallery? It would set templateLock by default?

@ramonjd ramonjd Jun 11, 2026

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.

Maybe because gallery has N image inner blocks regardless of randomOrder, so getBlockOrder( clientId ).length === 0 never holds 🤔

That's probably it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I don't see the list view's status changing, though the innerblocks are locked 🤔 I'm probably doing something wrong, or is that expected?

The testing steps in this PR are quite artificial — it'll only work if the Gallery block has no inner blocks. It's much more natural in the dynamic gallery PR, but for this branch, you can use the following markup to get to that state:

<!-- wp:gallery {"randomOrder":true,"linkTo":"none"} -->
<figure class="wp-block-gallery has-nested-images columns-default is-cropped"></figure>
<!-- /wp:gallery -->

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 eventually got there when I saw getBlockOrder( clientId ).length === 0 - i inferred my testing from the code. shoulda read the pr desc 😄

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Curious, what's the intended usage for the dynamic gallery? It would would set templateLock by default?

You can see it in the dynamic gallery PR, but it'll set the logic like this:

	const innerBlocksProps = useInnerBlocksProps( blockProps, {
		defaultBlock: DEFAULT_BLOCK,
		directInsert: true,
		orientation: 'horizontal',
		renderAppender: false,
		// In dynamic mode the inner blocks are managed by the source, so lock
		// the container with `templateLock: 'all'`. This prevents inserting or
		// dragging blocks into it (via `getTemplateLock` -> `canInsertBlockType`),
		// and — because a locked container with no inner blocks has nothing to
		// navigate — also opts the gallery out of the List View.
		templateLock: isDynamic ? 'all' : undefined,
	} );

*/
export function hasBlockListViewSupport( state, clientId ) {
const blockName = getBlockName( state, clientId );
const hasTypeSupport =

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.

Is this the same check as typeHasListViewSupport above? Would hasListViewSupport work for both? Or with an added type if you think that's clearer, though I think the context makes it so.

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.

Oh, typeHasListViewSupport is gone now 😄

@talldan

talldan commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

I guess template locked + no blocks makes sense in terms of hiding the tab, a user wouldn't be able to insert blocks into a template locked empty block anyway and there are no blocks to view or rearrange.

I wonder though, why does a dynamic gallery have no blocks? Is it because a BlockPreview or similar is being used to show the dynamic gallery? The BlockPreview feels like an implementation detail. Using a block preview makes the gallery images inert and removes them from the accessibility tree, so it may not be the best implementation.

templateLock: 'all' is also overridden by templateLock: contentOnly on a parent, so that's something else to note. If you put a dynamic gallery in a group that has templateLock: contentOnly then the gallery's List View is visible again.

@andrewserong

andrewserong commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

I wonder though, why does a dynamic gallery have no blocks? Is it because a BlockPreview or similar is being used to show the dynamic gallery? The BlockPreview feels like an implementation detail. Using a block preview makes the gallery images inert and removes them from the accessibility tree, so it may not be the best implementation.

It's partly because we're using a block preview, but also because they're not really blocks in this case. They're not interactive and they can't be arranged or customised in any way, as the final output is generated by a query. I think it makes more sense for it to not have inner blocks until a user switches off building by a query (switches to static blocks). But the decision here was partly influenced by thinking this isn't really inner blocks and partly because when I researched existing popular plugins that created dynamic galleries, they typically used a preview in the editor rather than inner blocks.

templateLock: 'all' is also overridden by templateLock: contentOnly on a parent, so that's something else to note. If you put a dynamic gallery in a group that has templateLock: contentOnly then the gallery's List View is visible again.

Oh, good catch — I'd tested with an unsynced pattern where the Dynamic Gallery exists within it, but I hadn't tested with a Group block with templateLock: contentOnly set with an inner Dynamic Gallery block. I wonder for this case: why would we override templateLock: all on children? Or if there's a way we can handle this case in the checking logic here 🤔

Here's how it's looking on the dynamic gallery PR (the list tab is available but there's no appender for the dynamic gallery):

image

I might not get a chance to keep iterating here before I wrap up for the day, but can dig in further next week! I'm quite liking the inferred approach now, as it seems overall less complex than the inclusion of the listView flag, but it'd be good to iron out the creases / see if this (or other) edge cases prove tricky. (Also happy to go with listView after all if it feels like a better solution)

Thanks again everyone for taking a look!

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

This is testing well for me ✅

allowedBlocks + listView combo is a good signal I think. Happy to defer to other reviewers, but LGTM

Just left a non-blocking question around "parent": [ "some/block" ]

Comment thread packages/block-editor/src/store/private-selectors.js Outdated
@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from 94674ec to dc9e494 Compare June 16, 2026 05:21
@andrewserong

Copy link
Copy Markdown
Contributor Author

This is testing well for me ✅
allowedBlocks + listView combo is a good signal I think. Happy to defer to other reviewers, but LGTM

Thanks for the approving review! 🙇

This feels like it's been quite a collaborative PR this one as we've tried out a few different approaches, and I'm indebted to the all the good feedback from you all (@ramonjd, @tyxla, and @talldan). As such I'll leave this PR open overnight just in case there's any last minute feedback or concerns.

In my view, I think we've landed on a good shape and heuristic, so if there aren't any objections I'll merge it first thing tomorrow and then rebase the Dynamic Gallery prototype accordingly.

@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from dc9e494 to faa9834 Compare June 16, 2026 07:09

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

Not much more to add, just a few non-blocking comments - this looks pretty solid! Thanks @andrewserong!

Comment thread packages/block-editor/src/store/private-selectors.js Outdated
Comment thread packages/block-editor/src/store/test/private-selectors.js
* blocks and its `allowedBlocks` (`[]` or `false`) permits no block: the nested
* List View panel would render no rows and no appender, so it is hidden rather
* than shown empty. This is a signal, not a guarantee — a child naming this
* block as its `parent` stays insertable regardless (see `canInsertBlockType`);

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.

This remains something to potentially follow up on as it might occur to some folks as unintended behavior.

andrewserong and others added 8 commits June 17, 2026 10:16
A block that supports `listView` is excluded from the List View when it has no
inner blocks and disallows insertion (`allowedBlocks: []`) — there is nothing
to select, navigate, or add. `hasBlockListViewSupport` reads `allowedBlocks`
from block list settings rather than inferring a managed state from
`templateLock`, because a content-locked (`contentOnly`) ancestor relaxes a
child's own `templateLock: 'all'` to `contentOnly`, whereas `allowedBlocks` is
carried through unchanged — so the exclusion holds in every context.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address review feedback from talldan:

- Express the exclusion as a single combined condition — empty inner blocks
  AND `allowedBlocks: []` — so the "both must hold" intent reads directly. An
  empty block that still allows insertion keeps its List View (and its
  appender). Behavior is unchanged.
- Drop the "managed inner blocks" framing (it was vague and collided with
  `controlledInnerBlocks`). Rename the local to `isListViewUnusable` and
  describe the concrete situation: the List View has nothing to show or add, so
  it's hidden to avoid bloating the UI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@andrewserong
andrewserong force-pushed the update/allow-list-view-block-support-to-be-toggled branch from faa9834 to cdd94c4 Compare June 17, 2026 00:17
@andrewserong

Copy link
Copy Markdown
Contributor Author

Thanks Marin! I've renamed the private selector to shouldRenderBlockListView and re-tested locally. This is still all working well for me, so I'll merge it in now. Happy to pursue follow-ups of course if there are any issues after merge.

@andrewserong
andrewserong merged commit 5286890 into trunk Jun 17, 2026
40 checks passed
@andrewserong
andrewserong deleted the update/allow-list-view-block-support-to-be-toggled branch June 17, 2026 00:53
@github-actions github-actions Bot added this to the Gutenberg 23.5 milestone Jun 17, 2026
andrewserong added a commit that referenced this pull request Jun 17, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 17, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 18, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 18, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 25, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 26, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jun 30, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jul 2, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jul 3, 2026
…t post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andrewserong added a commit that referenced this pull request Jul 3, 2026
* Gallery: add a dynamic mode sourced from media attached to the current post

Add an optional dynamic mode to the Gallery block where displayed images are
resolved at render time from a source instead of hand-picked `core/image` inner
blocks. The v1 source is "images attached to the current post". The mode is
toggled by the presence of a `dynamicContent` attribute, so existing static
galleries are untouched and no deprecation is needed.

- block.json: `dynamicContent` attribute + `usesContext` post id/type.
- index.php: resolver + dynamic render branch building real `core/image` blocks.
- edit.js: preview/InnerBlocks switch, empty-state and toggle entry points, and
  `allowedBlocks: []` in dynamic mode so the gallery opts out of the List View
  via core's `shouldRenderBlockListView` (merged separately in #78932).
- dynamic-gallery.js / use-dynamic-gallery.js / dynamic-source.js: client-side
  preview via `useBlockPreview`, source query helpers, and image attr building.
- variations.js: a "Dynamic Gallery" inserter variation.
- Tests: JS unit tests for the source query and PHP render tests.

* Remove noreferrer from server-side output

* Use raw caption for now, as the media REST API does not support the filtered caption

* Instead of injecting dynamic content into static markup, inject static markup, i.e. the figcaption, into the dynamically generated output

* Allow a caption for the dynamic version of the Gallery block itself to be added in the editor

* Remove scopes for the variation for now, while we're prototyping and only supporting attached to behaviour

* Disable Edit images / Convert to individual images buttons while the dynamic images are resolving

* Render nothing on the site frontend if there are no images to be found

* Narrow deps for dynamicImageBlocks

* Ensure scaling is correct in the editor

* Move createBlock calls to a shared utility function

* Hide Source panel in some cases like editing a non-post template, update labels to be template aware

* Hide placeholder entry point button in content only mode

* Show a notice when there are more than 100 attached items

* Update labels

* Filter aspect ratio output

* Prime the caches

* Clarify the difference in gating between the inspector and placeholder controls

* Tidy up how we get the strings in prep for eventually having further sources

* Make sure args is an array

* Harden allowed args

* Update title

* Tidy up comments around the number of images cap

* Gallery: remove dead mediaPlaceholder wiring from the edit view

The `mediaPlaceholder` passed to `<Gallery>` was only ever reachable on
native: the condition was `! hasImages || Platform.isNative`, and web
never renders `<Gallery>` with `! hasImages` (the no-images case returns
the placeholder early). #79031 removed React Native support and
mechanically collapsed that condition to `! hasImages`, leaving a
web-dead vestige. Dynamic mode then inlined the empty-state placeholder
(to host the "use attached images" entry button), which removed the
shared `mediaPlaceholder` variable's only live use — orphaning it down
to this dead prop.

Remove the dead prop and its now-unused variable, along with the
matching `mediaPlaceholder` branch in `gallery.js` (no caller passes it
anymore) and the orphaned `.blocks-gallery-media-placeholder-wrapper`
rule in `editor.scss`. No behavioral change on web.

* Clarify comment about clearing existing images

Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: tyxla <tyxla@git.wordpress.org>
Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: fcoveram <fcoveram@git.wordpress.org>
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 markjaquith/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] List View Menu item in the top toolbar to select blocks from a list of links. [Package] Block editor /packages/block-editor [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants