Skip to content

Interactivity API: Add a data-wp-html directive - #83092

Merged
DAreRodz merged 9 commits into
WordPress:trunkfrom
theaminulai:add/data-wp-html-directive
Oct 5, 2026
Merged

DAreRodz merged 9 commits into
WordPress:trunkfrom
theaminulai:add/data-wp-html-directive

Conversation

@theaminulai

Copy link
Copy Markdown
Member

What?

Closes #83076

Adds data-wp-html, an inner-HTML equivalent of data-wp-text, and asDangerousHTML() exported from @wordpress/interactivity.

Why?

data-wp-text updates text content, but there's no equivalent for HTML: if a store value contains a description with links or other formatting, data-wp-text displays the markup as text instead of rendering it. Today, updating innerHTML reactively requires reaching outside the Interactivity API's rendering process (e.g. from a data-wp-watch callback), and those changes can be overwritten during client-side navigation. This has come up in #52904, #70531, and #81189.

How?

  • packages/interactivity/src/html.ts: asDangerousHTML( html: string ) returns an immutable, opaque value (tagged with a module-private Symbol) that only the data-wp-html directive recognizes as trusted. isDangerousHTML() is the internal type guard the directive uses.
  • packages/interactivity/src/directives/html.ts: the data-wp-html directive. It resolves the bound reference the same way data-wp-text does (including PENDING_GETTER handling and unwrapping a plain function value), but only ever writes element.props.dangerouslySetInnerHTML when the resolved value passes isDangerousHTML(). A plain string, null, undefined, or a pending getter is treated as "nothing to render" and leaves the element's existing content in place instead of clearing it — that's what lets a derived-state getter return null while content is loading and keep the server-rendered fallback visible, per the proposal.
  • The directive also handles a Preact hydration quirk that isn't obvious from the outside: Preact skips applying dangerouslySetInnerHTML while hydrating, on the assumption that server-rendered content already matches what would be rendered (see diffElementNodes() in preact/src/diff/index.js). That assumption doesn't hold for data-wp-html, since the proposal's scope explicitly has the server leave the attribute unprocessed. Without a workaround, a value that's already available at hydration time would never actually get applied to the DOM. data-wp-style already works around the identical issue for CSS properties via useInit(); data-wp-html uses the same technique to apply the HTML directly through the element's ref on mount.
  • To make the "leave existing content in place" behavior hold across renders too (not just on first hydration), the directive keeps a useRef of the last HTML it actually rendered and keeps rendering that value on a later pass where the resolved value isn't trusted HTML, rather than letting Preact's normal diffing clear innerHTML back to empty (which is what happens if a vnode stops carrying dangerouslySetInnerHTML after a previous render set it — confirmed in packages/interactivity/src/directives/test/html.jsdom.test.ts).
  • packages/interactivity/src/hooks.tsx: added dangerouslySetInnerHTML?: { __html: string } to the DirectiveArgs.element VNode prop type.
  • Docs: added a wp-html section to docs/reference-guides/interactivity-api/directives-and-store.md, right after wp-text.
  • Changelog: added an entry to packages/interactivity/CHANGELOG.md (PR number to be filled in once this PR is open — will push a follow-up commit).

Scope, per the proposal: client-side rendering only. No PHP processor, no editor integration, and directives inside the inserted HTML are not processed (including after later updates or client-side navigation) — this matches what the proposal explicitly calls out as being left for a separate feature.

Testing Instructions

  1. npm run test:unit:vitest -- packages/interactivity/src — includes the new packages/interactivity/src/directives/test/html.jsdom.test.ts, which exercises real hydration and reactive updates via preact/test-utils' act() against jsdom (not mocked), covering: rendering trusted HTML on hydration, leaving a server-rendered fallback in place while the value isn't trusted HTML yet, rejecting a plain string, keeping previously-rendered HTML in place when a later value becomes untrusted, and ignoring suffix/unique-ID variants (matching data-wp-text's behavior).
  2. npm run typecheck -- packages/interactivity/tsconfig.json
  3. npm run lint:js on the changed files.
  4. Manual/e2e: packages/e2e-tests/plugins/interactive-blocks/directive-html/ is a new fixture block (test/directive-html) and test/e2e/specs/interactivity/directive-html.spec.ts is its Playwright spec, following the exact pattern of the existing directive-text fixture/spec. I wasn't able to run this against wp-env in my environment (no Docker available), so I'd appreciate it if a maintainer or CI could confirm it passes; I did validate the underlying hydration/reconciliation behavior directly against real Preact in the jsdom unit test above, since that's the part with the least obvious failure mode.
import { asDangerousHTML, store } from '@wordpress/interactivity';

store( 'myPlugin', {
	state: {
		get description() {
			return asDangerousHTML(
				'<p>A <strong>formatted</strong> description.</p>'
			);
		},
	},
} );
<div data-wp-interactive="myPlugin">
	<article data-wp-html="state.description">
		<p>Loading description.</p>
	</article>
</div>

Adds data-wp-html, an inner-HTML equivalent of data-wp-text, and
asDangerousHTML() exported from @wordpress/interactivity. Rendering
HTML requires an explicit call to asDangerousHTML() from a derived-state
getter or store action; a plain string reference is never rendered as
markup, since state and context aren't a safe place to keep something
that will be inserted into the DOM unescaped.

Preact skips dangerouslySetInnerHTML while hydrating, on the assumption
that server-rendered content already matches what would be rendered.
That assumption doesn't hold here: the server intentionally leaves
data-wp-html unprocessed, so the directive applies the HTML itself on
mount via a manual DOM write, the same way data-wp-style already works
around the same Preact hydration behavior for CSS properties.

A value that isn't trusted HTML (null, a plain string, a pending
getter) leaves the element's existing content in place rather than
clearing it, whether that's still the original server-rendered fallback
or HTML the directive already rendered on an earlier, valid pass.

Scope, per the proposal in WordPress#83076: client-side rendering only. No PHP
processor, no editor integration, and directives inside the inserted
HTML are not processed.
@github-actions

github-actions Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

🤖 PR meta 🤖

🎉 Props

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: theaminulai <theaminuldev@git.wordpress.org>
Co-authored-by: DAreRodz <darerodz@git.wordpress.org>
Co-authored-by: nickchomey <nickchomey@git.wordpress.org>

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

Updated as activity occurs, without notifying anyone named here. Add the props-bot label to refresh.

@DAreRodz DAreRodz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hey, thanks for working on this, @theaminulai!

This PR is close to what we had in mind, and the API shape is the expected one. On the security side, there are a couple of things we've been investigating and that were not defined in the original issue. I'll share them here as tasks so you can address them whenever you have time (if not, we can take over the PR and continue with the development, no problem). These issues would need to be addressed before merging the PR.

1. Support Trusted Types

A string passed to dangerouslySetInnerHTML would throw on sites enforcing Trusted Types without a default policy.

  • Accept string | TrustedHTML and pass native TrustedHTML through without converting it.
  • Move writes into a useLayoutEffect with try/catch. If rejected, warn under SCRIPT_DEBUG, preserve existing content, and retry only when the value changes.
  • Keep a stable dangerouslySetInnerHTML object so Preact leaves the children alone without doing the write itself.
  • Don't create a Trusted Types policy in the runtime. The site should own that decision.

2. Make the token opaque

Instead of a frozen object with a Symbol property (discoverable) and an html string property, I'd use a frozen, null-prototype object as key backed by a private WeakMap for the HTML strings. Acceptance then depends on membership, with no exposed .html or trust carried through clones/JSON.

3. Leave fallback children inert too

Inserted HTML skips Interactivity API processing, but server-rendered children still go through toVdom, and nested islands hydrate independently.

For hosts with a default data-wp-html entry, skip converting their children to vnodes (similar to each-child). Mark descendant interactive islands as handled in hydratedIslands.

Nested router regions can be a follow-up; let's document that they're not excluded yet.

4. Spell out the security contract

The docs should make these points explicit:

  • asDangerousHTML() doesn't sanitize. Trusting untrusted input is an XSS risk. Don't pass user-supplied or context values: context selects, state supplies the trusted value.
  • Tokens are opaque and identity-based, as above.
  • We create no Trusted Types policy. On enforcing sites, strings need a site-provided default policy; the supported route is asDangerousHTML( myPolicy.createHTML( markup ) ).
  • The markup is inert only to the Interactivity API. It's still live browser HTML; scripts not executing isn't a security boundary.

Regarding a PHP processor for this directive, we're actually working on that at this moment, and releasing both client-side and server-side parts of this feature is on our current plans for WordPres 7.2.

Thanks again for getting this moving! 😊

1. Support Trusted Types

asDangerousHTML() now accepts string | TrustedHTML and stores whatever
it's given without converting it. The directive writes to the DOM in
a useLayoutEffect, wrapped in try/catch: a rejected write (e.g. a
plain string on a site enforcing Trusted Types with no default
policy) warns under SCRIPT_DEBUG and leaves the element's existing
content in place, and the same value is never retried on a later,
unrelated re-render. element.props.dangerouslySetInnerHTML is now a
single stable, frozen object reused across every render, so Preact's
own diffing never sees a change and never writes to the element
itself — the effect is the only thing that ever touches its content.
This package still creates no Trusted Types policy of its own.

2. Make the token opaque

DangerousHTML is now a frozen, null-prototype object with no own
properties, used only as a WeakMap key; the HTML value lives in a
private, module-scoped WeakMap keyed by that object, never exposed
on it. isDangerousHTML() checks map membership. A clone of the
token (spread, JSON round-trip) is a different object identity and
is therefore never recognized as trusted.

3. Leave fallback children inert too

toVdom() now recognizes a default (unsuffixed) data-wp-html entry the
same way it already does each-child: it doesn't walk the element's
children into vnodes, instead capturing the raw innerHTML directly
(the same fallback content the directive itself would otherwise
leave in place). Any [data-wp-interactive] descendants found in that
subtree are added to hydratedIslands, so hydrateRegions() doesn't
also initialize them as independent regions. Nested router regions
aren't excluded from processing yet; documented as a known gap rather
than addressed here.

4. Spell out the security contract

Both the asDangerousHTML() JSDoc and the directives-and-store.md guide
now say explicitly: it doesn't sanitize, and context values shouldn't
be passed to it directly since context selects which trusted content
to show while state should supply the trusted value itself; the
token is opaque and identity-based rather than content-based; this
package creates no Trusted Types policy, and a site that enforces one
needs to supply its own via asDangerousHTML( myPolicy.createHTML(...) );
and "inert" only means inert to the Interactivity API — the rendered
markup is still live browser HTML, and a script not executing isn't a
security boundary.
@theaminulai

theaminulai commented Sep 22, 2026 •

Copy link
Copy Markdown
Member Author

Thanks for the detailed review @DAreRodz ! Pushed a commit addressing all four points:

1. Trusted Types — asDangerousHTML() now accepts string | TrustedHTML and stores it as-is. The DOM write happens in a useLayoutEffect, wrapped in try/catch; a rejected write warns under SCRIPT_DEBUG, leaves existing content in place, and isn't retried for the same value on a later render. dangerouslySetInnerHTML is now a single stable, frozen object reused every render, so Preact's own diffing never touches the element — only the effect does. No Trusted Types policy is created by this package.

2. Opaque token — DangerousHTML is now a frozen, null-prototype object used purely as a WeakMap key; the HTML value lives in a private module-scoped WeakMap, with no .html (or any other) property exposed on the token itself. A clone (spread, JSON round-trip) is a different object identity and is never recognized as trusted.

3. Inert fallback children — toVdom() now treats a default data-wp-html entry the same way it already treats each-child: it doesn't walk the element's children into vnodes, and any [data-wp-interactive] descendants in that subtree are added to hydratedIslands so hydrateRegions() doesn't hydrate them independently. Documented that nested router regions aren't excluded from processing yet, as a follow-up.

4. Security contract — spelled out explicitly in both the asDangerousHTML() JSDoc and directives-and-store.md: no sanitization; don't pass context values directly (context selects, state supplies the trusted value); the token is opaque/identity-based; no Trusted Types policy is created here (use asDangerousHTML( myPolicy.createHTML( markup ) ) on an enforcing site); and "inert" only means inert to the Interactivity API, not a security boundary.

Added tests for all of the above (Trusted-Types-style rejection + no-retry, token opacity/clone/JSON round-trip, and nested-island opacity), plus the existing test suite still passes unchanged. Good to know a PHP processor is in the works for 7.2 — happy to help with follow-up work there if useful. Let me know if anything needs another pass!

@luisherranz luisherranz mentioned this pull request Sep 22, 2026
5 of 10 tasks
@DAreRodz

Copy link
Copy Markdown
Contributor

Thanks @theaminulai. I'll review the changes today. 🙂

`Readonly< Record< never, never > >` is effectively `{}`, so strings and
plain objects type-checked as `DangerousHTML`. Brand it with a private
unique symbol so only values returned by `asDangerousHTML()` are
assignable. The runtime token is unchanged.
Throw a TypeError when the argument is neither a string nor a native
TrustedHTML value (as reported by `trustedTypes.isHTML()`). Previously
such values produced a valid token: `null` cleared the element's
content, and objects, arrays, functions or an existing token were
rendered as their string form (e.g. "[object Object]").

A getter that throws this error leaves the element's content in place,
as before; add a test pinning that behavior.
@DAreRodz DAreRodz added the [Type] Feature New feature to highlight in changelogs. label Oct 5, 2026
@DAreRodz
DAreRodz self-requested a review October 5, 2026 12:11
@DAreRodz DAreRodz added the [Feature] Interactivity API API to add frontend interactivity to blocks. label Oct 5, 2026

@DAreRodz DAreRodz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for addressing all the feedback, @theaminulai! This looks great. 🙂

I've pushed a few commits before merging. The first two tighten the public API before it ships, since these would be hard to change after a release:

  • DangerousHTML is now a nominal type. It was effectively {}, so a string or any object type-checked as DangerousHTML. It's now branded with a private unique symbol, so only values returned by asDangerousHTML() are assignable. The runtime token is unchanged.
  • asDangerousHTML() rejects invalid input. It throws a TypeError unless it receives a string or a native TrustedHTML value (checked with trustedTypes.isHTML()). Before, null produced a token that cleared the element, and an object rendered as [object Object].

The third one fixes a hydration issue:

  • Matching server-rendered content is kept on hydration. The directive always rewrote innerHTML on hydration, replacing the server-rendered nodes even when they were identical to the trusted HTML, which loses focus, selection, form input and embedded media state. It now skips that first write when the element's HTML already matches exactly.

I also merged trunk and checked the Playwright report: directive-html.spec.ts runs and passes in CI.

We'll handle these in follow-up PRs:

  • Exclude router regions nested inside data-wp-html content from processing.
  • Catch errors when data-wp-html resolves to a function. The function is currently called outside the try/catch that wraps evaluate().
  • Define deterministic conflict rules for data-wp-html combined with data-wp-text, data-wp-each, data-wp-ignore or data-wp-router-region on the same element.
  • Warn under SCRIPT_DEBUG when asDangerousHTML() receives a value read from context, and add an ESLint rule to @wordpress/eslint-plugin that flags the same pattern.
  • Stop Preact from clearing the element the first time a trusted value arrives after hydration. It currently writes innerHTML = '' before the directive's own write, which replaces matching server-rendered nodes and may throw on sites enforcing Trusted Types.

Approving! 🚀

@DAreRodz
DAreRodz enabled auto-merge (squash) October 5, 2026 12:15
@DAreRodz
DAreRodz merged commit bddf704 into WordPress:trunk Oct 5, 2026
124 checks passed
@github-actions github-actions Bot added this to the Gutenberg 24.2 milestone Oct 5, 2026
@fabiankaegy fabiankaegy added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Oct 5, 2026
wporg-sync pushed a commit to WordPress/wordpress-develop that referenced this pull request Oct 20, 2026
This updates the pinned commit hash of the Gutenberg repository from 954fe7f9e04631c41aec4552acd627a7203a2aad to 7b95ee96b54de2e35886971ccf7eb449c324c830 (version 24.2.0).

A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@954fe7f...7b95ee9

- useServerSideRender: parse messages from caught errors (WordPress/gutenberg#83365)
- Docs: Fix published Vitest migration-guide links (WordPress/gutenberg#83449)
- Fix: Whitespace changes are not shown in the Resolve Block diff. (WordPress/gutenberg#82397)
- Editor: Use SearchableSelect for the post author field (WordPress/gutenberg#83323)
- Docs: Note that block attributes and global styles values are untrusted at render time (WordPress/gutenberg#83473)
- RichText: Remove dead exports and consolidate deprecations (WordPress/gutenberg#83461)
- Inserter: Manage roving tab index to skip re-rendering every item (WordPress/gutenberg#83437)
- SearchableSelectControl: Add to @wordpress/ui (WordPress/gutenberg#80979)
- Try: Bolder "B" icon (WordPress/gutenberg#83321)
- Ignore composer vendor files from top-level gitignore. (WordPress/gutenberg#22283)
- Tests: Add floating notes e2e coverage (WordPress/gutenberg#83477)
- Block Editor: Check the inserter's fallback containers unmemoized (WordPress/gutenberg#83446)
- Packages: Update Ariakit to 0.4.40 (WordPress/gutenberg#83278)
- Tests: Enforce per-call Vitest console expectations (WordPress/gutenberg#83095)
- Theme: Fix virtual modules, root styles, and seed validation (WordPress/gutenberg#83355)
- DataViews: Fix README to describe sort() as receiving field values, not items (WordPress/gutenberg#83483)
- Combobox: Label popup dialogs in stories (WordPress/gutenberg#83476)
- Block editor: Isolate mutable test fixtures (WordPress/gutenberg#83098)
- Blocks: Isolate registration state in tests (WordPress/gutenberg#83099)
- UI: Remove automatic Notice announcements (WordPress/gutenberg#82737)
- Text: Migrate Emotion styles to an SCSS Module (WordPress/gutenberg#82573)
- Block library: Isolate order-sensitive test interactions (WordPress/gutenberg#83101)
- Format Library: unify FormatEditProps to one type, move private types (WordPress/gutenberg#83487)
- UI: Announce selected chips in SearchableChipSelect (WordPress/gutenberg#82863)
- Card: Migrate from Emotion to SCSS modules (WordPress/gutenberg#82577)
- Components: Deprecate the private Menu API (WordPress/gutenberg#82947)
- CustomGradientPicker: Migrate control wrappers to an SCSS module (WordPress/gutenberg#82576)
- Components: Isolate order-sensitive UI tests (WordPress/gutenberg#83103)
- Tests: Isolate mutable configuration fixtures (WordPress/gutenberg#83104)
- Core data: Finish deferred selection updates in RTC test (WordPress/gutenberg#83366)
- Block editor: Wait for final keyboard link suggestions (WordPress/gutenberg#83489)
- Data: Assert and silence resolution error in useSuspenseSelect test (WordPress/gutenberg#83491)
- Tests: Isolate deprecation warning state (WordPress/gutenberg#83107)
- UI: Align selection popup checkmarks with the first label line (WordPress/gutenberg#82942)
- Tests: Resolve Browser Mode commands against the live iframe (WordPress/gutenberg#83495)
- Ensure position type is a string (WordPress/gutenberg#83500)
- MediaUpload: Fix console error when reopening Gallery media library (WordPress/gutenberg#76749)
- Refactor stylelint config detection in lint-style.js (WordPress/gutenberg#79280)
- Docs: Recommend UI Tabs for switching views (WordPress/gutenberg#83516)
- Popover: Close non-modal popovers on iframe interaction (WordPress/gutenberg#83509)
- Typography: List only the weights inside a variable font's range (WordPress/gutenberg#83128)
- Style book: Add link to example text. (WordPress/gutenberg#83448)
- Tests: Add Vitest Browser Mode failure artifacts (WordPress/gutenberg#83093)
- Theme: Make JavaScript token fallback transforms syntax-aware (WordPress/gutenberg#83356)
- Editor: Fix new posts being published with the `auto-draft` slug (WordPress/gutenberg#83518)
- Editor: Gather the View group of the Options menu into submenus (WordPress/gutenberg#82976)
- Tests: Fix PostCSS browser-externalized warnings in Vitest (WordPress/gutenberg#83091)
- Tests: Shuffle test cases in CI (WordPress/gutenberg#83111)
- Update Styles > Blocks description. (WordPress/gutenberg#83515)
- Columns: Remove the column count slider (WordPress/gutenberg#83262)
- BorderControl: Remove `%` from the border width units (WordPress/gutenberg#83492)
- Fields: Fix AuthorView for users who can't edit users (WordPress/gutenberg#83498)
- Update and add justify icons. (WordPress/gutenberg#83519)
- RichText: Refactor useMarkPersistent, fix StrictMode mount mark (WordPress/gutenberg#83463)
- Theme: Improve accessibility, API documentation, and compatibility checks (WordPress/gutenberg#83358)
- Theme: Preserve global token references in Lightning CSS (WordPress/gutenberg#83359)
- Tests: Migrate internal linting to Vitest and remove unused Jest dependencies (WordPress/gutenberg#83502)
- Improve specificity of lightbox button selector (WordPress/gutenberg#70800)
- TextControl: Use design system colors when disabled (WordPress/gutenberg#83307)
- Fix: Image lightbox: overlay becomes unusable (can't close) when it isn't a direct child of `<body>` (WordPress/gutenberg#83480)
- Notes: Extract note selection sync into useNoteSelection hook (WordPress/gutenberg#83528)
- Block Parser: Document `\WP_Block_Parser::$stack` as a list (WordPress/gutenberg#82695)
- CollapsibleCard: Scope the header focus ring to its own trigger (WordPress/gutenberg#81314)
- Fix broken links in docs (WordPress/gutenberg#83545)
- Icons: Use assertEqualHTML() in icons registry tests (WordPress/gutenberg#83544)
- Editor: Merge adjacent revision inline diffs (WordPress/gutenberg#80579)
- Date: Ignore trailing format backslash instead of printing undefined (WordPress/gutenberg#81528)
- Block Supports: Add background-clip block support infrastructure (WordPress/gutenberg#77141)
- Block Editor: Fix translator comments for block count announcements (WordPress/gutenberg#83555)
- Paste: replace non-breaking spaces at the edges of text with regular spaces (WordPress/gutenberg#83464)
- Media Editor: Fix pan drag flooding undo history after wheel zoom (WordPress/gutenberg#83558)
- Rich text: fix iOS double tap selection, preventing focus capture under editable host (WordPress/gutenberg#81042)
- Block editor: migrate state-control badges to UI Badge (WordPress/gutenberg#82608)
- Gallery: Add Order By controls for static gallery, consolidate controls in settings sidebar (WordPress/gutenberg#83438)
- Media editor: show an error when saving attachment details fails (WordPress/gutenberg#83560)
- Position controls: Fix useSelect warning for selected state viewports (WordPress/gutenberg#83570)
- Inserter: Use design system focus ring for previews (WordPress/gutenberg#83126)
- Image: Fix lightbox using thumbnail aspect ratio instead of original image ratio (WordPress/gutenberg#79058)
- Docs: Clarify @wordpress/ui icon color requirements (WordPress/gutenberg#83564)
- docker compose -T if stdin is not a tty (WordPress/gutenberg#78374)
- Storybook: Add new contributing page. (WordPress/gutenberg#83345)
- Widget Primitives: Avoid Vite warnings for runtime widget modules (WordPress/gutenberg#83602)
- Build: Update Vite to 8.3.1 and simplify Storybook tooling (WordPress/gutenberg#83569)
- doc(wp-env) Change core branch from trunk to master in doc (WordPress/gutenberg#83566)
- wp-build: Remove the unused boot, private-apis, and route optional peer dependencies (WordPress/gutenberg#83601)
- CI: Check CHANGELOG presence for published tooling and config packages (WordPress/gutenberg#83577)
- Tests: Enforce Vitest assertion coverage (WordPress/gutenberg#83572)
- Icons: Update heading level icons for optical balance (WordPress/gutenberg#83268)
- ESLint: Add allowUseWithCaution option to use-recommended-components (WordPress/gutenberg#83536)
- Notes: Refactor floating board measurement (WordPress/gutenberg#83485)
- Inserter: Stop re-rendering the block list on block selection change (WordPress/gutenberg#83284)
- Paste: Give each pasted data-URI image unique filename to avoid upload collisions. (WordPress/gutenberg#79480)
- Changelog validator: ignore markdown & configs d46223 (WordPress/gutenberg#83618)
- Font Library: Use UI Menu for collection actions (WordPress/gutenberg#82965)
- Storybook: Show prop descriptions in Canvas controls (WordPress/gutenberg#83581)
- test: Link upstream warning fixes in config (WordPress/gutenberg#83632)
- Storybook: Use one block-editor store module (WordPress/gutenberg#83636)
- Tests: Use strict assertions synced from Core changeset 63934. (WordPress/gutenberg#83619)
- Math: Store cell alignment in the MathML and polyfill alignment and overlines in Chromium (WordPress/gutenberg#83164)
- Storybook: Reuse PostCSS browser resolver in smoke tests (WordPress/gutenberg#83635)
- Editor: Use UI Menu for template options (WordPress/gutenberg#82964)
- RTC: Add a EntitySyncManager interface in core-data (WordPress/gutenberg#83410)
- Term Count: Add margin support (WordPress/gutenberg#83608)
- Archives: Add minimum height support (WordPress/gutenberg#83573)
- Media Editor: Stop the crop pixel snap from recording undo history (WordPress/gutenberg#83571)
- Term Name: Add margin support (WordPress/gutenberg#83606)
- Post Author Biography: Add text indent support (WordPress/gutenberg#83614)
- Code: Add minimum width and height support (WordPress/gutenberg#83574)
- Details: Add minimum width support (WordPress/gutenberg#83576)
- Post Content: Add minimum width support (WordPress/gutenberg#83575)
- Post Excerpt: Add minimum width and height support (WordPress/gutenberg#83578)
- Post Title: Add minimum width and height support (WordPress/gutenberg#83600)
- Footnotes: Add minimum width and height support (WordPress/gutenberg#83579)
- Storybook: Place Notice announcements under Components (WordPress/gutenberg#83617)
- InputControl: Darken the field border on hover (WordPress/gutenberg#83306)
- npm: Switch from legacy-peer-deps to strict-peer-deps (WordPress/gutenberg#81029)
- Term Name: Add minimum width and height support (WordPress/gutenberg#83599)
- Columns: Allow dropping a column at the outer edges (WordPress/gutenberg#83274)
- E2E: Pin the site title in the Interactivity API router specs and give the E2E Storybook build more heap. (WordPress/gutenberg#83474)
- Heading: Add minimum width and height support (WordPress/gutenberg#83580)
- Login/out: Add minimum width and height support (WordPress/gutenberg#83583)
- Verse: Add minimum width support (WordPress/gutenberg#83609)
- Video, Cover: Don't autoplay in the editor when reduced motion is preferred (WordPress/gutenberg#83337)
- Media & Text: Lower the specificity of the content padding (WordPress/gutenberg#83563)
- Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83743)
- Fix peer dependency conflicts left in the lockfile (WordPress/gutenberg#83754)
- Comments Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83744)
- Term Count: Add minimum width and height support (WordPress/gutenberg#83596)
- Read More: Add border style support (WordPress/gutenberg#83735)
- Cover: Don't autoplay embedded background videos when reduced motion is preferred (WordPress/gutenberg#83452)
- No Results: Add minimum width and height support (WordPress/gutenberg#83584)
- RichText: Rename utils.jsx to utils.js (WordPress/gutenberg#83758)
- Quote: Add minimum width support (WordPress/gutenberg#83592)
- Upgrade typescript-eslint to v8.70.1 (WordPress/gutenberg#83760)
- Tabs: Add minimum width support (WordPress/gutenberg#83595)
- Site Tagline: Add minimum width and height support (WordPress/gutenberg#83589)
- Heading: Add text indent support (WordPress/gutenberg#83615)
- Site Title: Add minimum width and height support (WordPress/gutenberg#83593)
- Home Link: Add padding and margin support (WordPress/gutenberg#83607)
- Preformatted: Add minimum width and height support (WordPress/gutenberg#83587)
- Include E2E Storybook sources in docgen (WordPress/gutenberg#83634)
- Extensible Site Editor: Pass custom block categories to the blocks store (WordPress/gutenberg#83762)
- Packages: Declare missing peer dependencies and check them in CI (WordPress/gutenberg#83765)
- Post Terms: Add minimum width and height support (WordPress/gutenberg#83586)
- Group, Cover: Track drop zone element in state (WordPress/gutenberg#83756)
- Global Styles: Add pseudo-state controls for Navigation Link (WordPress/gutenberg#83451)
- storybook: Register playground core blocks once (WordPress/gutenberg#83637)
- Document Outline: Show the design system focus ring instead of legacy box-shadow (WordPress/gutenberg#83755)
- storybook: Update BlockPopover fixture to API version 3 (WordPress/gutenberg#83642)
- Add typing to iAPI's getConfig() (WordPress/gutenberg#71692)
- Components: deprecate Badge (WordPress/gutenberg#82379)
- Block Editor: Fix style / nested attribute overwrite during multi-selection (WordPress/gutenberg#80070)
- Notes: Restrict menu actions for resolution notes and resolved threads (WordPress/gutenberg#73243)
- UI: Add change actions to form primitive stories (WordPress/gutenberg#83591)
- Icons: Support keyword-based search in the icons registry (WordPress/gutenberg#82367)
- Avatar: Explain that avatars use the Gravatar service (WordPress/gutenberg#83567)
- UI: Add item labels and descriptions to remaining popups (WordPress/gutenberg#83493)
- PaletteEdit: Stop changing the slug when renaming a preset (WordPress/gutenberg#83750)
- Storybook: Fix missing block styles in BlockCanvas playground stories (WordPress/gutenberg#81070)
- Tests: Enforce Vitest callback, promise, and title rules (WordPress/gutenberg#83620)
- ItemGroup: Use design system focus ring (WordPress/gutenberg#83764)
- Keep the legacy CheckboxControl visually consistent across viewports (WordPress/gutenberg#83612)
- Media editor: Use UI Menu for crop aspect ratio (WordPress/gutenberg#82968)
- Use strict assertions in override script tests (WordPress/gutenberg#83782)
- Home Link: Add minimum width and height support (WordPress/gutenberg#83582)
- Tab Panels: Add minimum height support (WordPress/gutenberg#83594)
- Post Time to Read: Add minimum width and height support (WordPress/gutenberg#83598)
- Term Description: Add minimum width and height support (WordPress/gutenberg#83597)
- UI: Keep InputLayout chrome at md on small viewports (WordPress/gutenberg#82764)
- Math: Add minimum width and height support (WordPress/gutenberg#83585)
- Tests: Bump undici in the AI development test lockfile (WordPress/gutenberg#83799)
- Bump brace-expansion in /test/ai-development (WordPress/gutenberg#83807)
- Bump js-yaml and promptfoo in /test/ai-development (WordPress/gutenberg#83797)
- Bump fast-uri from 3.1.7 to 3.1.8 (WordPress/gutenberg#83829)
- Update AI Development package versions after npm audit (WordPress/gutenberg#83830)
- Notes: Add show and hide options for floating notes (WordPress/gutenberg#83768)
- Add separators to item popup components (WordPress/gutenberg#83776)
- Components: Align RadioControl colors with UI Radio (WordPress/gutenberg#83270)
- E2E: Mock Openverse in image drag-and-drop inserter test (WordPress/gutenberg#83842)
- FormToggle: Match Switch colors across states (WordPress/gutenberg#83773)
- Bump `@react-spring/web` from 9.4.5 to 10.1.2 (WordPress/gutenberg#83796)
- ColorPalette: Show design system focus ring on custom color button (WordPress/gutenberg#83841)
- Docs: Remove CheckboxControl heading from InspectorControls example (WordPress/gutenberg#83844)
- Base Styles: Default the admin theme color to Blueberry (WordPress/gutenberg#83749)
- Menu: Guard against nesting Group and RadioGroup (WordPress/gutenberg#83792)
- Template Part: Fall back to rendering a template part from the theme file if the db version is unavailable (WordPress/gutenberg#83809)
- Tests: Reset deprecation history in shared Vitest setup (WordPress/gutenberg#83849)
- Menu: Disable triggers instead of roots in consumers (WordPress/gutenberg#83791)
- Playlist: Replace the waveform player patch with its no-autoinit entry (WordPress/gutenberg#83132)
- Update UI Spinner appearance and add a color prop (WordPress/gutenberg#83775)
- UI: Align component names with their semantics (WordPress/gutenberg#83789)
- Checkbox: Prevent rounded themes from making checkboxes circular (WordPress/gutenberg#83526)
- Storybook: Update manifest snapshot for Spinner color prop (WordPress/gutenberg#83856)
- Button: Only open the link popover on explicit user action (WordPress/gutenberg#30166)
- Gallery Lightbox: Prevent image click from closing the dialog when navigation is enabled (WordPress/gutenberg#78898)
- UI: Recommend Checkbox family components (WordPress/gutenberg#83771)
- RadioControl: Keep a 16px visual with a larger hit target (WordPress/gutenberg#83840)
- Table: replace deprecated word-break with overflow-wrap: anywhere (WordPress/gutenberg#82480)
- Tag Cloud: Update styles and add `!important` (WordPress/gutenberg#70224)
- Correctly document the `blockName` property as being nullable (WordPress/gutenberg#70900)
- Add inertValue helper and use it for setting inert attribute (WordPress/gutenberg#83871)
- Enable editableRoot for the list item block for multi-selection on mobile (WordPress/gutenberg#82816)
- Verify localized data retention in override script test (WordPress/gutenberg#83845)
- Tests: Bump ibm-cloud-sdk-core in the AI development test lockfile (WordPress/gutenberg#83887)
- UI: Recommend Notice component (WordPress/gutenberg#82685)
- Fix: MediaUpload `gallery` prop ignores `allowedTypes` (WordPress/gutenberg#78257)
- Media editor: Add a session boundary above the cropper (WordPress/gutenberg#83550)
- DataViews: Measure the container as the data view mounts to avoid a single column flash (WordPress/gutenberg#83752)
- Pullquote: Add minimum width support (WordPress/gutenberg#83588)
- Media editor: Remove initial state seeding from the session (WordPress/gutenberg#83893)
- UI: Add e2e Storybook popup item layout fixtures (WordPress/gutenberg#83488)
- Storybook: Give CI job a distinct name (WordPress/gutenberg#83869)
- Coding standards: Skip anonymous class methods in block library function name sniff (WordPress/gutenberg#83900)
- Pagination: Add border support (WordPress/gutenberg#83745)
- PR meta: Move the props list into the shared comment (WordPress/gutenberg#82302)
- Comments Pagination: Add border support (WordPress/gutenberg#83746)
- Scripts: Resolve default configs without hoisted dependencies (WordPress/gutenberg#83902)
- Image: Fix invalid CSS url() value in circle-mask style (WordPress/gutenberg#82333)
- Query Total: Add minimum width and height support (WordPress/gutenberg#83590)
- Scripts: Treat files passed after --fix as file arguments (WordPress/gutenberg#83521)
- Editor: Remove icon for 'Export' more menu item (WordPress/gutenberg#83901)
- Dashboard Widgets: let a mounted widget declare actions at runtime (WordPress/gutenberg#83877)
- Framework: Switch from hoisted to isolated dependencies (WordPress/gutenberg#83847)
- Test: Run Vitest type graph validation in process (WordPress/gutenberg#83851)
- Remove use-memo-one usage (missing React 19 compat) (WordPress/gutenberg#83952)
- Fix Post Featured Image crash when isLink is enabled (WordPress/gutenberg#81584)
- Experiment: restyle classic wp-admin controls from design system tokens (WordPress/gutenberg#82425)
- Tests: Lint JavaScript Vitest mock imports (WordPress/gutenberg#83783)
- Build: Remove patch-package (WordPress/gutenberg#83982)
- Docs: Update deprecation testing guidance for shared reset (WordPress/gutenberg#83989)
- DataViews: list hideable fields alphabetically in the view config (WordPress/gutenberg#83947)
- Core Data: Rank link suggestions by type, and stop discarding merged results (WordPress/gutenberg#83407)
- Add new react-inert-value package with inertValue helper (WordPress/gutenberg#83987)
- Connectors: Keep a stored API key read-only when it can't be verified (WordPress/gutenberg#83889)
- Navigation: Search every entity type from the link UI (WordPress/gutenberg#83408)
- Tests: Cover translation setup in override script tests (WordPress/gutenberg#83886)
- Build: Update Vite to 8.3.2 and remove the PostCSS browser resolver (WordPress/gutenberg#83992)
- Update readme title to match block name (WordPress/gutenberg#83999)
- RTC: Fix undo breaking for non-synced entities (WordPress/gutenberg#83888)
- CI: Cover the AI development lockfile with Dependabot instead of npm audit (WordPress/gutenberg#83997)
- Latest Posts: Add minimum width and height support (WordPress/gutenberg#83905)
- Avatar: Add shadow support (WordPress/gutenberg#83929)
- Tab List: Add shadow support (WordPress/gutenberg#83922)
- Buttons: Add minimum width and height support (WordPress/gutenberg#83894)
- Social Icons: Add shadow support (WordPress/gutenberg#83920)
- Columns: Add minimum width and height support (WordPress/gutenberg#83895)
- Gallery: Add shadow support (WordPress/gutenberg#83919)
- File: Add shadow support (WordPress/gutenberg#83918)
- Page List: Add minimum width and height support (WordPress/gutenberg#83908)
- Build Tooling: Read npm v12 pack --json output (WordPress/gutenberg#84011)
- Accordion Heading: Add line height support (WordPress/gutenberg#83958)
- Paragraph: Add shadow support (WordPress/gutenberg#83926)
- Media & Text: Add minimum width and height support (WordPress/gutenberg#83906)
- Tests: Patch basic-ftp in AI development dependencies (WordPress/gutenberg#84000)
- Env, E2E: Update dependencies that ran native install scripts (WordPress/gutenberg#84012)
- Tests: Update Vitest to 5.0.3 and Storybook to 10.6.1 (WordPress/gutenberg#83996)
- Search: Add padding support (WordPress/gutenberg#83984)
- Block editor: Honour background skip serialization in the editor (WordPress/gutenberg#83943)
- Framework: Declare React types in the workspaces that use them (WordPress/gutenberg#84013)
- Fit text: Size each block instance in a loop independently (WordPress/gutenberg#83985)
- FocalPointPicker: end a drag released over the editor canvas (WordPress/gutenberg#83348)
- Tests: Cover Menu scroll lock and LinkControl protocols in browsers (WordPress/gutenberg#83991)
- List: Add shadow support (WordPress/gutenberg#83923)
- UI: Add Progress with custom color support (WordPress/gutenberg#83781)
- ESLint: Allow non-module stylesheet imports in unit tests (WordPress/gutenberg#84019)
- Canvas loader: Use UI Progress and pass color via the indicator prop (WordPress/gutenberg#83860)
- Menu: Align group labels and separators with indented item labels. (WordPress/gutenberg#83993)
- react-inert-value: add missing types/react peer dep (WordPress/gutenberg#84024)
- Docs: Refine design system agent guidance (WordPress/gutenberg#84007)
- Navigation: List allowed blocks in the link UI search results + add transformSuggestions to Link Control (WordPress/gutenberg#83652)
- Sync: Remove exposed wp.sync package (WordPress/gutenberg#81999)
- Style: Update color to use CSS variable in edit-site (WordPress/gutenberg#79002)
- Popover: drop the will-change hint once the popover stops moving (WordPress/gutenberg#77359)
- MediaEdit: Show a checkerboard background behind image previews (WordPress/gutenberg#83846)
- Quote: Add button colour support (WordPress/gutenberg#83983)
- Media & Text: Add duotone support (WordPress/gutenberg#83981)
- Gallery: Add duotone support (WordPress/gutenberg#83978)
- Interactivity API Router: Add reactive navigation lifecycle and initiator API (WordPress/gutenberg#83280)
- Notes: Move floating notes into a canvas margin (WordPress/gutenberg#83786)
- Verse: Add text columns and indent support (WordPress/gutenberg#83962)
- Notes: Scroll floating notes with the canvas (WordPress/gutenberg#83852)
- Notes: Add Undo to deleted note snackbar (WordPress/gutenberg#83988)
- Framework: Move @typescript/native from the root to the workspaces that use it (WordPress/gutenberg#84027)
- Repair invalid peer dependencies in the lockfile (WordPress/gutenberg#84062)
- Term Template: Add minimum width and height support (WordPress/gutenberg#83914)
- Fix check type declarations (WordPress/gutenberg#84070)
- Media: track the original attachment id for edited images (WordPress/gutenberg#81803)
- Post Comments Form: Add font family support (WordPress/gutenberg#83967)
- Media Utils: Add `MediaEdit` as a private API (WordPress/gutenberg#84046)
- Build Tools: Fix flaky ESM package types test timeout (WordPress/gutenberg#84068)
- Embed: Add padding support (WordPress/gutenberg#83963)
- Interactivity API: Add a data-wp-html directive (WordPress/gutenberg#83092)
- Typography and "block-default icon polish. (WordPress/gutenberg#84073)
- Release Tooling: Read the npm v12 JSON output shapes (WordPress/gutenberg#84075)
- Menu: Align submenu labels and highlight open parents (WordPress/gutenberg#84031)
- Props Bot: Skip bare reviews that duplicate their review comment runs (WordPress/gutenberg#84076)
- Dataviews: use inertValue in CompositeGrid (WordPress/gutenberg#84072)
- UI: Add Meter (WordPress/gutenberg#83855)
- Media & Text: Add shadow support (WordPress/gutenberg#83976)
- Media editor: restore original image in modal (WordPress/gutenberg#81805)
- List: Add background image, size, and gradient support (WordPress/gutenberg#83935)
- List Item: Add background image, size, and gradient support (WordPress/gutenberg#83936)
- Block Editor: Fix 'Manage allowed blocks' not shown when its the only 'Advanced' control (WordPress/gutenberg#84067)
- Design System: Clarify tooltip labeling and UI review guidance (WordPress/gutenberg#83898)
- Gallery: Add minimum width and height support (WordPress/gutenberg#83897)
- File: Add minimum width and height support (WordPress/gutenberg#83896)
- Media: Return 0 from the edit root lookup when there is no edit root (WordPress/gutenberg#84096)
- Read More: Add minimum width and height support (WordPress/gutenberg#83912)
- UI: Recommend Radio family components (WordPress/gutenberg#83872)
- Latest Comments: Add minimum width and height support (WordPress/gutenberg#83904)
- chore: Use v24 in .nvmrc (WordPress/gutenberg#84061)
- Embed: Add minimum width and height support (WordPress/gutenberg#83903)
- Post Comments Form: Add minimum width and height support (WordPress/gutenberg#83910)
- Post Featured Image: Add border style support (WordPress/gutenberg#83956)
- Buttons: Add shadow support (WordPress/gutenberg#83916)
- Poetry: Add fit text support (WordPress/gutenberg#83980)
- Video: Add duotone support (WordPress/gutenberg#83979)
- Notes: Keep anchor writes out of undo history (WordPress/gutenberg#84079)
- ProgressBar: Use WPDS color tokens (WordPress/gutenberg#83779)
- REST API: Add action-trash link to posts and comments (WordPress/gutenberg#84045)
- RSS: Add minimum width and height support (WordPress/gutenberg#83913)
- Notes: Reset paragraph top margin in floating notes (WordPress/gutenberg#84101)
- Global Styles: Fix popover position in Styles screen (WordPress/gutenberg#84048)
- Block Switcher: Show design system focus ring on pattern previews (WordPress/gutenberg#83933)
- MediaEdit: Use design system focus ring (WordPress/gutenberg#83854)
- Notes: Delete permanently when the trash is disabled (WordPress/gutenberg#84102)
- Release: Rewrite SVN publication scripts in Node.js (WordPress/gutenberg#84034)
- ContentEditableControl: Keep a disabled field focusable (WordPress/gutenberg#84083)
- States: Scope per-instance rules to the block's root element (WordPress/gutenberg#83986)
- List Item: Add shadow support (WordPress/gutenberg#83925)
- DataViews: Truncate filter chips instead of wrapping them (WordPress/gutenberg#83879)
- Experiments: Turn the React 19 experiment on by default (WordPress/gutenberg#83784)
- Notes: Extract NoteReply and lift AddNote gating (WordPress/gutenberg#84106)
- Interactivity API: Remove expired deprecated behaviors (WordPress/gutenberg#84098)
- Breadcrumbs: Fix typo in aria label translation context (WordPress/gutenberg#84112)
- ESLint: Allow generated test titles (WordPress/gutenberg#83995)
- Icons: Add keywords to icon manifest (WordPress/gutenberg#83884)
- Tooltip: Control the hover delay cancellation test clock (WordPress/gutenberg#84113)
- VS Code: Add managed workspace config (WordPress/gutenberg#84025)
- Breadcrumb: fix getMeasurementRender for React 19 (WordPress/gutenberg#84069)
- Notes: Fix flaky thread scroll e2e test (WordPress/gutenberg#84118)
- Detect the database client in the unit test debug step. (WordPress/gutenberg#84089)
- UI: Preserve Autocomplete item type inference (WordPress/gutenberg#84095)
- UI: Recommend Switch family components (WordPress/gutenberg#84097)
- Env: Add an option to choose the MariaDB version (WordPress/gutenberg#83751)
- UI: Preserve Combobox source item generics (WordPress/gutenberg#84094)
- Menu: Tighten spacing, use 16px prefix icons, and cap width at 320px (WordPress/gutenberg#84028)
- Notes: Preserve unsent note and reply drafts (WordPress/gutenberg#84110)
- Theme: Add integration test coverage for seed colors in artifacts (WordPress/gutenberg#81161)
- Progress: Migrate remaining ProgressBar usages and recommend UI Progress (WordPress/gutenberg#84021)
- Components: Fix polymorphism typings leaking `as` prop (WordPress/gutenberg#82704)
- Media & Text: Add background image, size, and gradient support (WordPress/gutenberg#83927)
- Experiments: Use a mock plugin slug that no WordPress build ships in the unrelated-plugin test (WordPress/gutenberg#84133)
- Button: Add background image, size, and gradient support (WordPress/gutenberg#83950)
- Tests: Isolate Ajv per test in wp-env schema tests to avoid order dependence (WordPress/gutenberg#84139)
- Storybook: Read icon keywords from the manifest (WordPress/gutenberg#84127)
- SandBox: Fix embed previews that require a referrer in Safari (WordPress/gutenberg#84014)
- Notes: Restore child notes trashed along with their parent note (WordPress/gutenberg#84100)
- Style states: fix exception when there's no selected block (WordPress/gutenberg#84140)
- Chore: Use v24.20 in  `.nvmrc` config file. (WordPress/gutenberg#84138)
- Security: Opt in to the npm v12 supply-chain defaults (WordPress/gutenberg#82689)
- Docs: Describe isolated dependencies for agents and contributors (WordPress/gutenberg#84141)
- Upgrade code and types to React 19 (WordPress/gutenberg#83941)
- Latest Comments: Add border support (WordPress/gutenberg#84148)
- Add prettier, eslint and stylelint to the root package.json (WordPress/gutenberg#84017)
- FontSizePicker: Migrate Emotion styles to SCSS Modules (WordPress/gutenberg#84126)
- Fields API: Add the server-side registry and REST route (WordPress/gutenberg#84078)
- Block bindings: add support to `icon` attribute of `core/icon` (WordPress/gutenberg#80730)
- VisuallyHidden: Move hiding styles outside CSS cascade layers (WordPress/gutenberg#84114)
- Theme: Generate complete border token modes for Figma testing (WordPress/gutenberg#84035)
- Developer tools: Simplify editor setup and add Zed settings (WordPress/gutenberg#84143)
- Consolidate wp-admin container radiuses onto the design system scale (WordPress/gutenberg#82427)
- CustomGradientPicker: Extend control point targets to the bar height (WordPress/gutenberg#84124)
- Notes: Draw the canvas divider from body so it uses the theme text color (WordPress/gutenberg#84158)
- Icons: Experiment with proportional stroke scaling (WordPress/gutenberg#84081)
- Global Styles: Ignore theme.json values of unexpected types (WordPress/gutenberg#84523)
- React 19 codemod: apply defaultProps when rendering a memo component (WordPress/gutenberg#84568)
- React 19: add new incompatible plugins (WordPress/gutenberg#84607)
- Tests: Fix HTML comparison tests (WordPress/gutenberg#84294)
- Tests: Fix list item unsafe markup test on older WordPress versions (WordPress/gutenberg#84302)
- Experiments: don't invalidate saved option with a legacy key (WordPress/gutenberg#84619)
- Tests: Scope Classic block media checkbox locator (WordPress/gutenberg#84524)

Props mamaduka.
See #66340



git-svn-id: https://develop.svn.wordpress.org/trunk@64587 602fd350-edb4-49c9-b593-d223f7449a82
wporg-sync pushed a commit to WordPress/WordPress that referenced this pull request Oct 20, 2026
This updates the pinned commit hash of the Gutenberg repository from 954fe7f9e04631c41aec4552acd627a7203a2aad to 7b95ee96b54de2e35886971ccf7eb449c324c830 (version 24.2.0).

A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@954fe7f...7b95ee9

- useServerSideRender: parse messages from caught errors (WordPress/gutenberg#83365)
- Docs: Fix published Vitest migration-guide links (WordPress/gutenberg#83449)
- Fix: Whitespace changes are not shown in the Resolve Block diff. (WordPress/gutenberg#82397)
- Editor: Use SearchableSelect for the post author field (WordPress/gutenberg#83323)
- Docs: Note that block attributes and global styles values are untrusted at render time (WordPress/gutenberg#83473)
- RichText: Remove dead exports and consolidate deprecations (WordPress/gutenberg#83461)
- Inserter: Manage roving tab index to skip re-rendering every item (WordPress/gutenberg#83437)
- SearchableSelectControl: Add to @wordpress/ui (WordPress/gutenberg#80979)
- Try: Bolder "B" icon (WordPress/gutenberg#83321)
- Ignore composer vendor files from top-level gitignore. (WordPress/gutenberg#22283)
- Tests: Add floating notes e2e coverage (WordPress/gutenberg#83477)
- Block Editor: Check the inserter's fallback containers unmemoized (WordPress/gutenberg#83446)
- Packages: Update Ariakit to 0.4.40 (WordPress/gutenberg#83278)
- Tests: Enforce per-call Vitest console expectations (WordPress/gutenberg#83095)
- Theme: Fix virtual modules, root styles, and seed validation (WordPress/gutenberg#83355)
- DataViews: Fix README to describe sort() as receiving field values, not items (WordPress/gutenberg#83483)
- Combobox: Label popup dialogs in stories (WordPress/gutenberg#83476)
- Block editor: Isolate mutable test fixtures (WordPress/gutenberg#83098)
- Blocks: Isolate registration state in tests (WordPress/gutenberg#83099)
- UI: Remove automatic Notice announcements (WordPress/gutenberg#82737)
- Text: Migrate Emotion styles to an SCSS Module (WordPress/gutenberg#82573)
- Block library: Isolate order-sensitive test interactions (WordPress/gutenberg#83101)
- Format Library: unify FormatEditProps to one type, move private types (WordPress/gutenberg#83487)
- UI: Announce selected chips in SearchableChipSelect (WordPress/gutenberg#82863)
- Card: Migrate from Emotion to SCSS modules (WordPress/gutenberg#82577)
- Components: Deprecate the private Menu API (WordPress/gutenberg#82947)
- CustomGradientPicker: Migrate control wrappers to an SCSS module (WordPress/gutenberg#82576)
- Components: Isolate order-sensitive UI tests (WordPress/gutenberg#83103)
- Tests: Isolate mutable configuration fixtures (WordPress/gutenberg#83104)
- Core data: Finish deferred selection updates in RTC test (WordPress/gutenberg#83366)
- Block editor: Wait for final keyboard link suggestions (WordPress/gutenberg#83489)
- Data: Assert and silence resolution error in useSuspenseSelect test (WordPress/gutenberg#83491)
- Tests: Isolate deprecation warning state (WordPress/gutenberg#83107)
- UI: Align selection popup checkmarks with the first label line (WordPress/gutenberg#82942)
- Tests: Resolve Browser Mode commands against the live iframe (WordPress/gutenberg#83495)
- Ensure position type is a string (WordPress/gutenberg#83500)
- MediaUpload: Fix console error when reopening Gallery media library (WordPress/gutenberg#76749)
- Refactor stylelint config detection in lint-style.js (WordPress/gutenberg#79280)
- Docs: Recommend UI Tabs for switching views (WordPress/gutenberg#83516)
- Popover: Close non-modal popovers on iframe interaction (WordPress/gutenberg#83509)
- Typography: List only the weights inside a variable font's range (WordPress/gutenberg#83128)
- Style book: Add link to example text. (WordPress/gutenberg#83448)
- Tests: Add Vitest Browser Mode failure artifacts (WordPress/gutenberg#83093)
- Theme: Make JavaScript token fallback transforms syntax-aware (WordPress/gutenberg#83356)
- Editor: Fix new posts being published with the `auto-draft` slug (WordPress/gutenberg#83518)
- Editor: Gather the View group of the Options menu into submenus (WordPress/gutenberg#82976)
- Tests: Fix PostCSS browser-externalized warnings in Vitest (WordPress/gutenberg#83091)
- Tests: Shuffle test cases in CI (WordPress/gutenberg#83111)
- Update Styles > Blocks description. (WordPress/gutenberg#83515)
- Columns: Remove the column count slider (WordPress/gutenberg#83262)
- BorderControl: Remove `%` from the border width units (WordPress/gutenberg#83492)
- Fields: Fix AuthorView for users who can't edit users (WordPress/gutenberg#83498)
- Update and add justify icons. (WordPress/gutenberg#83519)
- RichText: Refactor useMarkPersistent, fix StrictMode mount mark (WordPress/gutenberg#83463)
- Theme: Improve accessibility, API documentation, and compatibility checks (WordPress/gutenberg#83358)
- Theme: Preserve global token references in Lightning CSS (WordPress/gutenberg#83359)
- Tests: Migrate internal linting to Vitest and remove unused Jest dependencies (WordPress/gutenberg#83502)
- Improve specificity of lightbox button selector (WordPress/gutenberg#70800)
- TextControl: Use design system colors when disabled (WordPress/gutenberg#83307)
- Fix: Image lightbox: overlay becomes unusable (can't close) when it isn't a direct child of `<body>` (WordPress/gutenberg#83480)
- Notes: Extract note selection sync into useNoteSelection hook (WordPress/gutenberg#83528)
- Block Parser: Document `\WP_Block_Parser::$stack` as a list (WordPress/gutenberg#82695)
- CollapsibleCard: Scope the header focus ring to its own trigger (WordPress/gutenberg#81314)
- Fix broken links in docs (WordPress/gutenberg#83545)
- Icons: Use assertEqualHTML() in icons registry tests (WordPress/gutenberg#83544)
- Editor: Merge adjacent revision inline diffs (WordPress/gutenberg#80579)
- Date: Ignore trailing format backslash instead of printing undefined (WordPress/gutenberg#81528)
- Block Supports: Add background-clip block support infrastructure (WordPress/gutenberg#77141)
- Block Editor: Fix translator comments for block count announcements (WordPress/gutenberg#83555)
- Paste: replace non-breaking spaces at the edges of text with regular spaces (WordPress/gutenberg#83464)
- Media Editor: Fix pan drag flooding undo history after wheel zoom (WordPress/gutenberg#83558)
- Rich text: fix iOS double tap selection, preventing focus capture under editable host (WordPress/gutenberg#81042)
- Block editor: migrate state-control badges to UI Badge (WordPress/gutenberg#82608)
- Gallery: Add Order By controls for static gallery, consolidate controls in settings sidebar (WordPress/gutenberg#83438)
- Media editor: show an error when saving attachment details fails (WordPress/gutenberg#83560)
- Position controls: Fix useSelect warning for selected state viewports (WordPress/gutenberg#83570)
- Inserter: Use design system focus ring for previews (WordPress/gutenberg#83126)
- Image: Fix lightbox using thumbnail aspect ratio instead of original image ratio (WordPress/gutenberg#79058)
- Docs: Clarify @wordpress/ui icon color requirements (WordPress/gutenberg#83564)
- docker compose -T if stdin is not a tty (WordPress/gutenberg#78374)
- Storybook: Add new contributing page. (WordPress/gutenberg#83345)
- Widget Primitives: Avoid Vite warnings for runtime widget modules (WordPress/gutenberg#83602)
- Build: Update Vite to 8.3.1 and simplify Storybook tooling (WordPress/gutenberg#83569)
- doc(wp-env) Change core branch from trunk to master in doc (WordPress/gutenberg#83566)
- wp-build: Remove the unused boot, private-apis, and route optional peer dependencies (WordPress/gutenberg#83601)
- CI: Check CHANGELOG presence for published tooling and config packages (WordPress/gutenberg#83577)
- Tests: Enforce Vitest assertion coverage (WordPress/gutenberg#83572)
- Icons: Update heading level icons for optical balance (WordPress/gutenberg#83268)
- ESLint: Add allowUseWithCaution option to use-recommended-components (WordPress/gutenberg#83536)
- Notes: Refactor floating board measurement (WordPress/gutenberg#83485)
- Inserter: Stop re-rendering the block list on block selection change (WordPress/gutenberg#83284)
- Paste: Give each pasted data-URI image unique filename to avoid upload collisions. (WordPress/gutenberg#79480)
- Changelog validator: ignore markdown & configs d46223 (WordPress/gutenberg#83618)
- Font Library: Use UI Menu for collection actions (WordPress/gutenberg#82965)
- Storybook: Show prop descriptions in Canvas controls (WordPress/gutenberg#83581)
- test: Link upstream warning fixes in config (WordPress/gutenberg#83632)
- Storybook: Use one block-editor store module (WordPress/gutenberg#83636)
- Tests: Use strict assertions synced from Core changeset 63934. (WordPress/gutenberg#83619)
- Math: Store cell alignment in the MathML and polyfill alignment and overlines in Chromium (WordPress/gutenberg#83164)
- Storybook: Reuse PostCSS browser resolver in smoke tests (WordPress/gutenberg#83635)
- Editor: Use UI Menu for template options (WordPress/gutenberg#82964)
- RTC: Add a EntitySyncManager interface in core-data (WordPress/gutenberg#83410)
- Term Count: Add margin support (WordPress/gutenberg#83608)
- Archives: Add minimum height support (WordPress/gutenberg#83573)
- Media Editor: Stop the crop pixel snap from recording undo history (WordPress/gutenberg#83571)
- Term Name: Add margin support (WordPress/gutenberg#83606)
- Post Author Biography: Add text indent support (WordPress/gutenberg#83614)
- Code: Add minimum width and height support (WordPress/gutenberg#83574)
- Details: Add minimum width support (WordPress/gutenberg#83576)
- Post Content: Add minimum width support (WordPress/gutenberg#83575)
- Post Excerpt: Add minimum width and height support (WordPress/gutenberg#83578)
- Post Title: Add minimum width and height support (WordPress/gutenberg#83600)
- Footnotes: Add minimum width and height support (WordPress/gutenberg#83579)
- Storybook: Place Notice announcements under Components (WordPress/gutenberg#83617)
- InputControl: Darken the field border on hover (WordPress/gutenberg#83306)
- npm: Switch from legacy-peer-deps to strict-peer-deps (WordPress/gutenberg#81029)
- Term Name: Add minimum width and height support (WordPress/gutenberg#83599)
- Columns: Allow dropping a column at the outer edges (WordPress/gutenberg#83274)
- E2E: Pin the site title in the Interactivity API router specs and give the E2E Storybook build more heap. (WordPress/gutenberg#83474)
- Heading: Add minimum width and height support (WordPress/gutenberg#83580)
- Login/out: Add minimum width and height support (WordPress/gutenberg#83583)
- Verse: Add minimum width support (WordPress/gutenberg#83609)
- Video, Cover: Don't autoplay in the editor when reduced motion is preferred (WordPress/gutenberg#83337)
- Media & Text: Lower the specificity of the content padding (WordPress/gutenberg#83563)
- Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83743)
- Fix peer dependency conflicts left in the lockfile (WordPress/gutenberg#83754)
- Comments Pagination: Add padding, margin, and block gap support (WordPress/gutenberg#83744)
- Term Count: Add minimum width and height support (WordPress/gutenberg#83596)
- Read More: Add border style support (WordPress/gutenberg#83735)
- Cover: Don't autoplay embedded background videos when reduced motion is preferred (WordPress/gutenberg#83452)
- No Results: Add minimum width and height support (WordPress/gutenberg#83584)
- RichText: Rename utils.jsx to utils.js (WordPress/gutenberg#83758)
- Quote: Add minimum width support (WordPress/gutenberg#83592)
- Upgrade typescript-eslint to v8.70.1 (WordPress/gutenberg#83760)
- Tabs: Add minimum width support (WordPress/gutenberg#83595)
- Site Tagline: Add minimum width and height support (WordPress/gutenberg#83589)
- Heading: Add text indent support (WordPress/gutenberg#83615)
- Site Title: Add minimum width and height support (WordPress/gutenberg#83593)
- Home Link: Add padding and margin support (WordPress/gutenberg#83607)
- Preformatted: Add minimum width and height support (WordPress/gutenberg#83587)
- Include E2E Storybook sources in docgen (WordPress/gutenberg#83634)
- Extensible Site Editor: Pass custom block categories to the blocks store (WordPress/gutenberg#83762)
- Packages: Declare missing peer dependencies and check them in CI (WordPress/gutenberg#83765)
- Post Terms: Add minimum width and height support (WordPress/gutenberg#83586)
- Group, Cover: Track drop zone element in state (WordPress/gutenberg#83756)
- Global Styles: Add pseudo-state controls for Navigation Link (WordPress/gutenberg#83451)
- storybook: Register playground core blocks once (WordPress/gutenberg#83637)
- Document Outline: Show the design system focus ring instead of legacy box-shadow (WordPress/gutenberg#83755)
- storybook: Update BlockPopover fixture to API version 3 (WordPress/gutenberg#83642)
- Add typing to iAPI's getConfig() (WordPress/gutenberg#71692)
- Components: deprecate Badge (WordPress/gutenberg#82379)
- Block Editor: Fix style / nested attribute overwrite during multi-selection (WordPress/gutenberg#80070)
- Notes: Restrict menu actions for resolution notes and resolved threads (WordPress/gutenberg#73243)
- UI: Add change actions to form primitive stories (WordPress/gutenberg#83591)
- Icons: Support keyword-based search in the icons registry (WordPress/gutenberg#82367)
- Avatar: Explain that avatars use the Gravatar service (WordPress/gutenberg#83567)
- UI: Add item labels and descriptions to remaining popups (WordPress/gutenberg#83493)
- PaletteEdit: Stop changing the slug when renaming a preset (WordPress/gutenberg#83750)
- Storybook: Fix missing block styles in BlockCanvas playground stories (WordPress/gutenberg#81070)
- Tests: Enforce Vitest callback, promise, and title rules (WordPress/gutenberg#83620)
- ItemGroup: Use design system focus ring (WordPress/gutenberg#83764)
- Keep the legacy CheckboxControl visually consistent across viewports (WordPress/gutenberg#83612)
- Media editor: Use UI Menu for crop aspect ratio (WordPress/gutenberg#82968)
- Use strict assertions in override script tests (WordPress/gutenberg#83782)
- Home Link: Add minimum width and height support (WordPress/gutenberg#83582)
- Tab Panels: Add minimum height support (WordPress/gutenberg#83594)
- Post Time to Read: Add minimum width and height support (WordPress/gutenberg#83598)
- Term Description: Add minimum width and height support (WordPress/gutenberg#83597)
- UI: Keep InputLayout chrome at md on small viewports (WordPress/gutenberg#82764)
- Math: Add minimum width and height support (WordPress/gutenberg#83585)
- Tests: Bump undici in the AI development test lockfile (WordPress/gutenberg#83799)
- Bump brace-expansion in /test/ai-development (WordPress/gutenberg#83807)
- Bump js-yaml and promptfoo in /test/ai-development (WordPress/gutenberg#83797)
- Bump fast-uri from 3.1.7 to 3.1.8 (WordPress/gutenberg#83829)
- Update AI Development package versions after npm audit (WordPress/gutenberg#83830)
- Notes: Add show and hide options for floating notes (WordPress/gutenberg#83768)
- Add separators to item popup components (WordPress/gutenberg#83776)
- Components: Align RadioControl colors with UI Radio (WordPress/gutenberg#83270)
- E2E: Mock Openverse in image drag-and-drop inserter test (WordPress/gutenberg#83842)
- FormToggle: Match Switch colors across states (WordPress/gutenberg#83773)
- Bump `@react-spring/web` from 9.4.5 to 10.1.2 (WordPress/gutenberg#83796)
- ColorPalette: Show design system focus ring on custom color button (WordPress/gutenberg#83841)
- Docs: Remove CheckboxControl heading from InspectorControls example (WordPress/gutenberg#83844)
- Base Styles: Default the admin theme color to Blueberry (WordPress/gutenberg#83749)
- Menu: Guard against nesting Group and RadioGroup (WordPress/gutenberg#83792)
- Template Part: Fall back to rendering a template part from the theme file if the db version is unavailable (WordPress/gutenberg#83809)
- Tests: Reset deprecation history in shared Vitest setup (WordPress/gutenberg#83849)
- Menu: Disable triggers instead of roots in consumers (WordPress/gutenberg#83791)
- Playlist: Replace the waveform player patch with its no-autoinit entry (WordPress/gutenberg#83132)
- Update UI Spinner appearance and add a color prop (WordPress/gutenberg#83775)
- UI: Align component names with their semantics (WordPress/gutenberg#83789)
- Checkbox: Prevent rounded themes from making checkboxes circular (WordPress/gutenberg#83526)
- Storybook: Update manifest snapshot for Spinner color prop (WordPress/gutenberg#83856)
- Button: Only open the link popover on explicit user action (WordPress/gutenberg#30166)
- Gallery Lightbox: Prevent image click from closing the dialog when navigation is enabled (WordPress/gutenberg#78898)
- UI: Recommend Checkbox family components (WordPress/gutenberg#83771)
- RadioControl: Keep a 16px visual with a larger hit target (WordPress/gutenberg#83840)
- Table: replace deprecated word-break with overflow-wrap: anywhere (WordPress/gutenberg#82480)
- Tag Cloud: Update styles and add `!important` (WordPress/gutenberg#70224)
- Correctly document the `blockName` property as being nullable (WordPress/gutenberg#70900)
- Add inertValue helper and use it for setting inert attribute (WordPress/gutenberg#83871)
- Enable editableRoot for the list item block for multi-selection on mobile (WordPress/gutenberg#82816)
- Verify localized data retention in override script test (WordPress/gutenberg#83845)
- Tests: Bump ibm-cloud-sdk-core in the AI development test lockfile (WordPress/gutenberg#83887)
- UI: Recommend Notice component (WordPress/gutenberg#82685)
- Fix: MediaUpload `gallery` prop ignores `allowedTypes` (WordPress/gutenberg#78257)
- Media editor: Add a session boundary above the cropper (WordPress/gutenberg#83550)
- DataViews: Measure the container as the data view mounts to avoid a single column flash (WordPress/gutenberg#83752)
- Pullquote: Add minimum width support (WordPress/gutenberg#83588)
- Media editor: Remove initial state seeding from the session (WordPress/gutenberg#83893)
- UI: Add e2e Storybook popup item layout fixtures (WordPress/gutenberg#83488)
- Storybook: Give CI job a distinct name (WordPress/gutenberg#83869)
- Coding standards: Skip anonymous class methods in block library function name sniff (WordPress/gutenberg#83900)
- Pagination: Add border support (WordPress/gutenberg#83745)
- PR meta: Move the props list into the shared comment (WordPress/gutenberg#82302)
- Comments Pagination: Add border support (WordPress/gutenberg#83746)
- Scripts: Resolve default configs without hoisted dependencies (WordPress/gutenberg#83902)
- Image: Fix invalid CSS url() value in circle-mask style (WordPress/gutenberg#82333)
- Query Total: Add minimum width and height support (WordPress/gutenberg#83590)
- Scripts: Treat files passed after --fix as file arguments (WordPress/gutenberg#83521)
- Editor: Remove icon for 'Export' more menu item (WordPress/gutenberg#83901)
- Dashboard Widgets: let a mounted widget declare actions at runtime (WordPress/gutenberg#83877)
- Framework: Switch from hoisted to isolated dependencies (WordPress/gutenberg#83847)
- Test: Run Vitest type graph validation in process (WordPress/gutenberg#83851)
- Remove use-memo-one usage (missing React 19 compat) (WordPress/gutenberg#83952)
- Fix Post Featured Image crash when isLink is enabled (WordPress/gutenberg#81584)
- Experiment: restyle classic wp-admin controls from design system tokens (WordPress/gutenberg#82425)
- Tests: Lint JavaScript Vitest mock imports (WordPress/gutenberg#83783)
- Build: Remove patch-package (WordPress/gutenberg#83982)
- Docs: Update deprecation testing guidance for shared reset (WordPress/gutenberg#83989)
- DataViews: list hideable fields alphabetically in the view config (WordPress/gutenberg#83947)
- Core Data: Rank link suggestions by type, and stop discarding merged results (WordPress/gutenberg#83407)
- Add new react-inert-value package with inertValue helper (WordPress/gutenberg#83987)
- Connectors: Keep a stored API key read-only when it can't be verified (WordPress/gutenberg#83889)
- Navigation: Search every entity type from the link UI (WordPress/gutenberg#83408)
- Tests: Cover translation setup in override script tests (WordPress/gutenberg#83886)
- Build: Update Vite to 8.3.2 and remove the PostCSS browser resolver (WordPress/gutenberg#83992)
- Update readme title to match block name (WordPress/gutenberg#83999)
- RTC: Fix undo breaking for non-synced entities (WordPress/gutenberg#83888)
- CI: Cover the AI development lockfile with Dependabot instead of npm audit (WordPress/gutenberg#83997)
- Latest Posts: Add minimum width and height support (WordPress/gutenberg#83905)
- Avatar: Add shadow support (WordPress/gutenberg#83929)
- Tab List: Add shadow support (WordPress/gutenberg#83922)
- Buttons: Add minimum width and height support (WordPress/gutenberg#83894)
- Social Icons: Add shadow support (WordPress/gutenberg#83920)
- Columns: Add minimum width and height support (WordPress/gutenberg#83895)
- Gallery: Add shadow support (WordPress/gutenberg#83919)
- File: Add shadow support (WordPress/gutenberg#83918)
- Page List: Add minimum width and height support (WordPress/gutenberg#83908)
- Build Tooling: Read npm v12 pack --json output (WordPress/gutenberg#84011)
- Accordion Heading: Add line height support (WordPress/gutenberg#83958)
- Paragraph: Add shadow support (WordPress/gutenberg#83926)
- Media & Text: Add minimum width and height support (WordPress/gutenberg#83906)
- Tests: Patch basic-ftp in AI development dependencies (WordPress/gutenberg#84000)
- Env, E2E: Update dependencies that ran native install scripts (WordPress/gutenberg#84012)
- Tests: Update Vitest to 5.0.3 and Storybook to 10.6.1 (WordPress/gutenberg#83996)
- Search: Add padding support (WordPress/gutenberg#83984)
- Block editor: Honour background skip serialization in the editor (WordPress/gutenberg#83943)
- Framework: Declare React types in the workspaces that use them (WordPress/gutenberg#84013)
- Fit text: Size each block instance in a loop independently (WordPress/gutenberg#83985)
- FocalPointPicker: end a drag released over the editor canvas (WordPress/gutenberg#83348)
- Tests: Cover Menu scroll lock and LinkControl protocols in browsers (WordPress/gutenberg#83991)
- List: Add shadow support (WordPress/gutenberg#83923)
- UI: Add Progress with custom color support (WordPress/gutenberg#83781)
- ESLint: Allow non-module stylesheet imports in unit tests (WordPress/gutenberg#84019)
- Canvas loader: Use UI Progress and pass color via the indicator prop (WordPress/gutenberg#83860)
- Menu: Align group labels and separators with indented item labels. (WordPress/gutenberg#83993)
- react-inert-value: add missing types/react peer dep (WordPress/gutenberg#84024)
- Docs: Refine design system agent guidance (WordPress/gutenberg#84007)
- Navigation: List allowed blocks in the link UI search results + add transformSuggestions to Link Control (WordPress/gutenberg#83652)
- Sync: Remove exposed wp.sync package (WordPress/gutenberg#81999)
- Style: Update color to use CSS variable in edit-site (WordPress/gutenberg#79002)
- Popover: drop the will-change hint once the popover stops moving (WordPress/gutenberg#77359)
- MediaEdit: Show a checkerboard background behind image previews (WordPress/gutenberg#83846)
- Quote: Add button colour support (WordPress/gutenberg#83983)
- Media & Text: Add duotone support (WordPress/gutenberg#83981)
- Gallery: Add duotone support (WordPress/gutenberg#83978)
- Interactivity API Router: Add reactive navigation lifecycle and initiator API (WordPress/gutenberg#83280)
- Notes: Move floating notes into a canvas margin (WordPress/gutenberg#83786)
- Verse: Add text columns and indent support (WordPress/gutenberg#83962)
- Notes: Scroll floating notes with the canvas (WordPress/gutenberg#83852)
- Notes: Add Undo to deleted note snackbar (WordPress/gutenberg#83988)
- Framework: Move @typescript/native from the root to the workspaces that use it (WordPress/gutenberg#84027)
- Repair invalid peer dependencies in the lockfile (WordPress/gutenberg#84062)
- Term Template: Add minimum width and height support (WordPress/gutenberg#83914)
- Fix check type declarations (WordPress/gutenberg#84070)
- Media: track the original attachment id for edited images (WordPress/gutenberg#81803)
- Post Comments Form: Add font family support (WordPress/gutenberg#83967)
- Media Utils: Add `MediaEdit` as a private API (WordPress/gutenberg#84046)
- Build Tools: Fix flaky ESM package types test timeout (WordPress/gutenberg#84068)
- Embed: Add padding support (WordPress/gutenberg#83963)
- Interactivity API: Add a data-wp-html directive (WordPress/gutenberg#83092)
- Typography and "block-default icon polish. (WordPress/gutenberg#84073)
- Release Tooling: Read the npm v12 JSON output shapes (WordPress/gutenberg#84075)
- Menu: Align submenu labels and highlight open parents (WordPress/gutenberg#84031)
- Props Bot: Skip bare reviews that duplicate their review comment runs (WordPress/gutenberg#84076)
- Dataviews: use inertValue in CompositeGrid (WordPress/gutenberg#84072)
- UI: Add Meter (WordPress/gutenberg#83855)
- Media & Text: Add shadow support (WordPress/gutenberg#83976)
- Media editor: restore original image in modal (WordPress/gutenberg#81805)
- List: Add background image, size, and gradient support (WordPress/gutenberg#83935)
- List Item: Add background image, size, and gradient support (WordPress/gutenberg#83936)
- Block Editor: Fix 'Manage allowed blocks' not shown when its the only 'Advanced' control (WordPress/gutenberg#84067)
- Design System: Clarify tooltip labeling and UI review guidance (WordPress/gutenberg#83898)
- Gallery: Add minimum width and height support (WordPress/gutenberg#83897)
- File: Add minimum width and height support (WordPress/gutenberg#83896)
- Media: Return 0 from the edit root lookup when there is no edit root (WordPress/gutenberg#84096)
- Read More: Add minimum width and height support (WordPress/gutenberg#83912)
- UI: Recommend Radio family components (WordPress/gutenberg#83872)
- Latest Comments: Add minimum width and height support (WordPress/gutenberg#83904)
- chore: Use v24 in .nvmrc (WordPress/gutenberg#84061)
- Embed: Add minimum width and height support (WordPress/gutenberg#83903)
- Post Comments Form: Add minimum width and height support (WordPress/gutenberg#83910)
- Post Featured Image: Add border style support (WordPress/gutenberg#83956)
- Buttons: Add shadow support (WordPress/gutenberg#83916)
- Poetry: Add fit text support (WordPress/gutenberg#83980)
- Video: Add duotone support (WordPress/gutenberg#83979)
- Notes: Keep anchor writes out of undo history (WordPress/gutenberg#84079)
- ProgressBar: Use WPDS color tokens (WordPress/gutenberg#83779)
- REST API: Add action-trash link to posts and comments (WordPress/gutenberg#84045)
- RSS: Add minimum width and height support (WordPress/gutenberg#83913)
- Notes: Reset paragraph top margin in floating notes (WordPress/gutenberg#84101)
- Global Styles: Fix popover position in Styles screen (WordPress/gutenberg#84048)
- Block Switcher: Show design system focus ring on pattern previews (WordPress/gutenberg#83933)
- MediaEdit: Use design system focus ring (WordPress/gutenberg#83854)
- Notes: Delete permanently when the trash is disabled (WordPress/gutenberg#84102)
- Release: Rewrite SVN publication scripts in Node.js (WordPress/gutenberg#84034)
- ContentEditableControl: Keep a disabled field focusable (WordPress/gutenberg#84083)
- States: Scope per-instance rules to the block's root element (WordPress/gutenberg#83986)
- List Item: Add shadow support (WordPress/gutenberg#83925)
- DataViews: Truncate filter chips instead of wrapping them (WordPress/gutenberg#83879)
- Experiments: Turn the React 19 experiment on by default (WordPress/gutenberg#83784)
- Notes: Extract NoteReply and lift AddNote gating (WordPress/gutenberg#84106)
- Interactivity API: Remove expired deprecated behaviors (WordPress/gutenberg#84098)
- Breadcrumbs: Fix typo in aria label translation context (WordPress/gutenberg#84112)
- ESLint: Allow generated test titles (WordPress/gutenberg#83995)
- Icons: Add keywords to icon manifest (WordPress/gutenberg#83884)
- Tooltip: Control the hover delay cancellation test clock (WordPress/gutenberg#84113)
- VS Code: Add managed workspace config (WordPress/gutenberg#84025)
- Breadcrumb: fix getMeasurementRender for React 19 (WordPress/gutenberg#84069)
- Notes: Fix flaky thread scroll e2e test (WordPress/gutenberg#84118)
- Detect the database client in the unit test debug step. (WordPress/gutenberg#84089)
- UI: Preserve Autocomplete item type inference (WordPress/gutenberg#84095)
- UI: Recommend Switch family components (WordPress/gutenberg#84097)
- Env: Add an option to choose the MariaDB version (WordPress/gutenberg#83751)
- UI: Preserve Combobox source item generics (WordPress/gutenberg#84094)
- Menu: Tighten spacing, use 16px prefix icons, and cap width at 320px (WordPress/gutenberg#84028)
- Notes: Preserve unsent note and reply drafts (WordPress/gutenberg#84110)
- Theme: Add integration test coverage for seed colors in artifacts (WordPress/gutenberg#81161)
- Progress: Migrate remaining ProgressBar usages and recommend UI Progress (WordPress/gutenberg#84021)
- Components: Fix polymorphism typings leaking `as` prop (WordPress/gutenberg#82704)
- Media & Text: Add background image, size, and gradient support (WordPress/gutenberg#83927)
- Experiments: Use a mock plugin slug that no WordPress build ships in the unrelated-plugin test (WordPress/gutenberg#84133)
- Button: Add background image, size, and gradient support (WordPress/gutenberg#83950)
- Tests: Isolate Ajv per test in wp-env schema tests to avoid order dependence (WordPress/gutenberg#84139)
- Storybook: Read icon keywords from the manifest (WordPress/gutenberg#84127)
- SandBox: Fix embed previews that require a referrer in Safari (WordPress/gutenberg#84014)
- Notes: Restore child notes trashed along with their parent note (WordPress/gutenberg#84100)
- Style states: fix exception when there's no selected block (WordPress/gutenberg#84140)
- Chore: Use v24.20 in  `.nvmrc` config file. (WordPress/gutenberg#84138)
- Security: Opt in to the npm v12 supply-chain defaults (WordPress/gutenberg#82689)
- Docs: Describe isolated dependencies for agents and contributors (WordPress/gutenberg#84141)
- Upgrade code and types to React 19 (WordPress/gutenberg#83941)
- Latest Comments: Add border support (WordPress/gutenberg#84148)
- Add prettier, eslint and stylelint to the root package.json (WordPress/gutenberg#84017)
- FontSizePicker: Migrate Emotion styles to SCSS Modules (WordPress/gutenberg#84126)
- Fields API: Add the server-side registry and REST route (WordPress/gutenberg#84078)
- Block bindings: add support to `icon` attribute of `core/icon` (WordPress/gutenberg#80730)
- VisuallyHidden: Move hiding styles outside CSS cascade layers (WordPress/gutenberg#84114)
- Theme: Generate complete border token modes for Figma testing (WordPress/gutenberg#84035)
- Developer tools: Simplify editor setup and add Zed settings (WordPress/gutenberg#84143)
- Consolidate wp-admin container radiuses onto the design system scale (WordPress/gutenberg#82427)
- CustomGradientPicker: Extend control point targets to the bar height (WordPress/gutenberg#84124)
- Notes: Draw the canvas divider from body so it uses the theme text color (WordPress/gutenberg#84158)
- Icons: Experiment with proportional stroke scaling (WordPress/gutenberg#84081)
- Global Styles: Ignore theme.json values of unexpected types (WordPress/gutenberg#84523)
- React 19 codemod: apply defaultProps when rendering a memo component (WordPress/gutenberg#84568)
- React 19: add new incompatible plugins (WordPress/gutenberg#84607)
- Tests: Fix HTML comparison tests (WordPress/gutenberg#84294)
- Tests: Fix list item unsafe markup test on older WordPress versions (WordPress/gutenberg#84302)
- Experiments: don't invalidate saved option with a legacy key (WordPress/gutenberg#84619)
- Tests: Scope Classic block media checkbox locator (WordPress/gutenberg#84524)

Props mamaduka.
See #66340


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


git-svn-id: http://core.svn.wordpress.org/trunk@63737 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] Interactivity API API to add frontend interactivity to blocks. Needs Dev Note Requires a developer note for a major WordPress release cycle [Package] E2E Tests /packages/e2e-tests [Package] Interactivity /packages/interactivity [Type] Feature New feature to highlight in changelogs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Interactivity API: Add a data-wp-html directive

3 participants