Skip to content

[pull] trunk from WordPress:trunk#611

Merged
pull[bot] merged 18 commits intoMaxMood96:trunkfrom
WordPress:trunk
Apr 11, 2026
Merged

[pull] trunk from WordPress:trunk#611
pull[bot] merged 18 commits intoMaxMood96:trunkfrom
WordPress:trunk

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Apr 11, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

mirka and others added 18 commits April 10, 2026 08:41
Co-authored-by: mirka <0mirka00@git.wordpress.org>
Co-authored-by: oandregal <oandregal@git.wordpress.org>
Co-authored-by: oandregal <oandregal@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>
Co-authored-by: ciampo <mciampini@git.wordpress.org>
…is disabled (#77219)

* fix : update selectors list to include no button case for color settings

* fix: apply color styles to search input when button is hidden and sanitize search query value

* fix : restore false logic for get_search_query

* fix: remove attribute added by another PR which is causing fail test

Co-authored-by: dpmehta <mehtadev@git.wordpress.org>
Co-authored-by: Rishit30G <rishit30g@git.wordpress.org>
Co-authored-by: benniledl <benniledl@git.wordpress.org>
Co-authored-by: mikachan <mikachan@git.wordpress.org>
…ion (#76636)

* Fix unclosed wp_interactivity_state() call in PHP example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Use wp_interactivity_config/getConfig for static data like URLs and nonces

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix typo "sucessfully" to "successfully" in client-side navigation docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix typo "extrat" to "extract" in client-side navigation docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix navigate() call to use actions.navigate() in client-side navigation docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix invalid JSON example in client-side navigation docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix CSS deactivation mechanism docs to match source (sheet.disabled = true)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix Phase 2 ordering to match source: styles applied before region updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix unclosed HTML tag in wp-bind description

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change php language tag to html for HTML-only code blocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove unused event parameter in wp-on example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix trailing comma to semicolon in wp-init example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove unsubstantiated auto-injection claim for data-wp-interactive

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update deprecated two-hyphen unique-ID syntax to three hyphens

The two-hyphen syntax for unique IDs (e.g., data-wp-watch--myId) is
deprecated and will stop working in WordPress 7.1. Updated all
occurrences to use three hyphens (data-wp-watch---myId) and added
deprecation notices.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Clarify async actions scope explanation with getContext() connection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Clean up getElement().attributes example to show only standard HTML attributes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix inaccurate read-only claim for getServerState()/getServerContext()

These functions return a deep clone (snapshot), not a frozen/read-only
object.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix grammar: "have changed" to "has changed"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix typo: "before it's send" to "before it's sent"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix grammar: "allows to set or get" to "allows you to set or get"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add missing getContext imports in Interactivity API code examples

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Fix inaccurate reactivity and read-only claims for getServerState/getServerContext

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Use wp_interactivity_data_wp_context helper instead of raw JSON in example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix typo: "leanier" to "leaner" in iapi-about.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add missing quotes around img width attribute in iapi-about.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix subject-verb agreement: "and add" to "and adds" in iapi-about.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Convert HTML comment to PHP comment inside PHP code block in iapi-about.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix inconsistent isOpen initial value to false in declarative example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Standardize data-wp-interactive quoting to double quotes in iapi-about.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add missing colons after bold links in Interactivity API README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Fix broken anchor link to Docs & Examples section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Remove invalid comments from JSON code blocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Note that --experimental-modules flag is auto-configured by scaffold template

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Break up run-on sentence about Alpine.js in Interactivity API FAQ

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Replace informal 'way easier' with 'much easier' in Interactivity API FAQ

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Standardize '~10kb' to '~10 KB' in Interactivity API FAQ

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Remove outdated 'ongoing' language from Interactivity API FAQ references

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Remove trailing # fragment from GitHub Discussions URL in quick start guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add bash language tags to code fences in quick start guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Clarify build/activation sequence in quick start guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add prerequisites section to Interactivity API quick start guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Standardize code fence tags from `javascript` to `js` in reactive mindset guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add missing getContext import in reactive side effects code example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Clarify spread operator label from "Wrong" to "Unnecessary" in array mutation example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Add comment noting simplified toggleVisibility omits isActive reset

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Fix no-op expression in using-typescript.md increment example

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Remove unused argument from delayedIncrement call in using-typescript.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Improve typescript example

* Revert "Clean up getElement().attributes example to show only standard HTML attributes"

This reverts commit 9e795318af2364ccfd7eab1a1bc71a616f9cd8af.

* Revert "Docs: Add missing getContext imports in Interactivity API code examples"

This reverts commit 6629f3e92e18b373129dd095fe1c286cb7ac19ca.

* Revert "Docs: Add comment noting simplified toggleVisibility omits isActive reset"

This reverts commit 8c4e92d5ed8c1620e81fd0a80f6973ee417c8b23.

* Docs: Add spacing to closing parenthesis per WordPress coding standard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Use dynamic import from @wordpress/interactivity-router for navigate()

The navigate function should come from the core/interactivity-router
store, not from the plugin's own store.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Docs: Format Interactivity API documentation with Prettier

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update docs/reference-guides/interactivity-api/core-concepts/the-reactive-and-declarative-mindset.md

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: luisherranz <3305402+luisherranz@users.noreply.github.com>
Co-authored-by: Luis Herranz <luisherranz@gmail.com>
…tConnectors (#77116)

* Connectors: don't clobber third-party custom render in registerDefaultConnectors

`registerDefaultConnectors()` runs inside the dynamically-imported
`routes/connectors-home/content` module, which means it executes after any
third-party plugin script module that called
`__experimentalRegisterConnector()` at top level (e.g. plugins enqueueing on
`options-connectors-wp-admin_init`). The connectors store reducer spreads
the new config over the existing entry, so the unconditional
`args.render = ApiKeyConnector` for `api_key`-authenticated providers
overwrites any custom render the plugin already supplied.

PR #76722 added e2e coverage for the *server-then-client* direction (where
the JS register correctly wins because it runs after the default register),
but didn't cover the *client-then-server* direction — which is the natural
flow for plugin script modules.

Fix: read the existing entry from the connectors store and only set
`args.render = ApiKeyConnector` when no render has been registered yet.
The reducer's spread of the existing entry preserves the plugin's render
while still merging the server-side metadata (logo, plugin install state,
authentication config) on top.

Adds a third connector `test_api_key_with_custom_render` to the
`connectors-js-extensibility` test plugin and a corresponding e2e test that
asserts the custom render content is visible and the default API Key form
is absent — exercising the previously-uncovered direction.

Closes #77115

* Connectors: polish custom-render regression test and comments

Fixes a Prettier violation in registerDefaultConnectors, tightens the
e2e assertion so it targets the API key textbox role (rather than
matching the card's own accessible name), and rewords the newly added
comments to describe intent instead of neighboring implementation
details that will evolve.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Grzegorz Ziolkowski <grzegorz@gziolo.pl>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Co-authored-by: superdav42 <superdav42@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
* Persist revision history navigation on page refresh

* Fix column alignment regression

Also, eliminate css overrides that creates fragility

* Integrate API call into paginations

* Update additional guideline description

* Harden URL view param and use client-side pagination for filtering

- Validate the `view` URL search param against known paths in
  `getInitialNavigatorPath()` so unrecognised or stale values fall
  back to the main screen instead of rendering a blank Navigator.
- Switch revision-history.tsx JSX pragma from `/* @jsx createElement */`
  to `/* @jsxRuntime automatic */` for consistency with the rest of
  the codebase, and remove the now-unused `createElement` import.
- Fetch all revisions (perPage: 100) in a single request so
  `filterSortAndPaginate` operates on the full dataset. This avoids
  a regression where client-side filters only saw the current page.
  Server-side pagination + filtering will be done together in a
  follow-up.

Co-Authored-By: Agent Rico from Wasif's Paperclip

* Remove unused class
* ui `Dialog`: update Header layout to support multiple trailing elements

Replace `justify-content: space-between` with `gap` + `margin-inline-end: auto`
on the title, so that any number of elements after the title are properly spaced.

Made-with: Cursor

* ui `Dialog.Title`: use `Text` internally with `heading-xl` variant

Refactor Dialog.Title to render through the `Text` component with the
`heading-xl` variant, matching the pattern already used by Popover.Title.
This delegates typography (font-family, size, weight, line-height) to the
design system's `Text` component instead of duplicating it in CSS.

The `.title` CSS class is reduced to just `margin-inline-end: auto`
(needed for the header flex layout), since Text now handles all
typographic properties.

AlertDialog's inline title also drops the `dialogStyles.title` class
override, relying solely on `Text variant="heading-xl"` for consistency.

Made-with: Cursor

* Use global css defense module variables to override margin

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
* ui/README: add additonal css snippet to setup section

* auto format

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
* Refactor Field.Label to use VisuallyHidden as host

Use `<VisuallyHidden render={<_Field.Label />}>` instead of
`<_Field.Label render={<VisuallyHidden />}>` so that the native
`<label>` element is preserved when `hideFromVision` is enabled.

This removes the `nativeLabel: false` workaround that was needed
because the previous pattern replaced the `<label>` with a `<div>`.

Made-with: Cursor

* Refactor Fieldset.Legend to use VisuallyHidden as host

Use `<VisuallyHidden render={<_Fieldset.Legend />}>` instead of
`<_Fieldset.Legend render={<VisuallyHidden />}>` so that the legend's
semantic element is preserved when `hideFromVision` is enabled.

Made-with: Cursor

* Refactor Field.Details to use VisuallyHidden as host

Use `<VisuallyHidden render={<_Field.Description />}>` instead of
`<_Field.Description render={<VisuallyHidden />}>` so that the
description's semantic element is preserved.

Made-with: Cursor

* Add VisuallyHidden Storybook stories for render-prop patterns

Add two new stories alongside the existing Default story:

- WithCustomElement: demonstrates using `render` to swap the
  underlying HTML element (e.g. rendering as a <label>)
- ComposedWithAnotherComponent: demonstrates the recommended
  composition pattern where VisuallyHidden is the host and
  the other component is passed via `render`, preserving its
  semantic element

Made-with: Cursor

* Expand VisuallyHidden JSDoc with composition guidance

Document the two composition patterns and explain why
VisuallyHidden should be the host (outer component) when
composing with other semantic components via the `render` prop.

Made-with: Cursor

* Add VisuallyHidden render-prop docs to Dialog.Title

Update Dialog.Title JSDoc to document the VisuallyHidden composition
pattern, matching the existing Popover.Title documentation.

Add a WithVisuallyHiddenTitle story demonstrating the pattern.

Made-with: Cursor

* Add structural tests for semantic element preservation

Add tests verifying that Field.Label and Fieldset.Legend preserve
their semantic element types when hideFromVision is enabled, rather
than being replaced by a generic <div>.

Made-with: Cursor

* Add CHANGELOG entries for VisuallyHidden composition changes

Made-with: Cursor

* Make Dialog.Title children optional for render-prop composition

Allow `children` to be omitted on `Dialog.Title` when the component
is used as a render element (e.g. `<VisuallyHidden render={<Dialog.Title />}>`),
matching the Popover.Title pattern. Children are provided by the
wrapping component at runtime.

Made-with: Cursor

* Remove redundant story and reword VisuallyHidden JSDoc

Remove the ComposedWithAnotherComponent story — the render-prop
composition pattern is already demonstrated in the Popover and
Dialog stories where it's used in context.

Reword the VisuallyHidden JSDoc to be less prescriptive: explain
both composition directions, their trade-offs, and let consumers
choose based on whether the semantic element matters.

Made-with: Cursor

* Remove unused ts-expext-error

* Move Field.Label CHANGELOG entry from Bug Fixes to Internal

The composition refactor preserves the native <label> element, but
the previous aria-labelledby approach was not broken — the change
is about consistency and removing workarounds, not fixing a bug.

Made-with: Cursor

--- 

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
…77163)

Add a `container` prop to Dialog.Popup, AlertDialog.Popup, Tooltip.Popup,
and Select.Popup, forwarding it to the underlying Base UI Portal. This
lets consumers render overlays into a custom DOM node (e.g. for z-index
stacking contexts or iframe scenarios).

Popover.Popup already has this prop from #76438.

Made-with: Cursor

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
…s only) (#76786)

* Components: Use --wpds-cursor-control design token for interactive controls

* Add changelog

---

Co-authored-by: mirka <0mirka00@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
The Text component now applies `margin: 0` by default (#76970),
making Card.Title's own `.title { margin: 0 }` CSS class unnecessary.

Made-with: Cursor

--- 

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
* Theme: Update PostCSS plugin to throw on missing token

* Theme: Rename typography tokens to use "typography" prefix

* Use real token names in code snippet examples

Otherwise these are flagged by build-time validation on valid token names. In these scenarios, real valid token names should be used anyways.

* Update typography token references in README.md

* Add README section about using design tokens

Encourage usage of build tooling and linters

* Align phrasing of design token usage with similar packages

* Add unit test coverage for addFallbackToVar

* theme: Ensure test files are covered by TypeScript

* theme: Fix changelog sections for unreleased changes

* Add README paragraph about universal CSS

Consistency with other packages like wordpress/ui

Co-authored-by: aduth <aduth@git.wordpress.org>
Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>
* UI: Normalize render prop and ref forwarding patterns

Fix a ref-loss bug in three components (Card.Title, EmptyState.Title,
EmptyState.Description) where the forwarded ref and rest props were
bundled into a render fallback element, causing them to be silently
lost when consumers provided a custom `render` prop.

Also cleans up two inconsistencies found during the audit:
- dialog/title.tsx: unnecessary explicit render destructure
- tabs/list.tsx: render destructured but silently discarded

Adds contributor documentation codifying the canonical patterns.

Made-with: Cursor

* UI Popover: Let render flow implicitly in Title and Description

Both components were explicitly destructuring the render prop only to
pass it through to the Base UI primitive — unnecessary ceremony per the
conventions documented in CONTRIBUTING.md. Let it flow via ...props.

Made-with: Cursor

* UI: Add CHANGELOG entries for render prop normalization

Made-with: Cursor

* UI docs: Address review feedback on render prop guidelines

- Remove the Decision Tree section (redundant with the preceding text).
- Acknowledge render functions alongside JSX elements in the
  "Overriding the Default Element" section, with a Field.Root-style
  example.

Made-with: Cursor

---

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: aduth <aduth@git.wordpress.org>
Co-authored-by: alecgeatches <alecgeatches@git.wordpress.org>
Co-authored-by: maxschmeling <maxschmeling@git.wordpress.org>
…77164)

* Use left/right sweep in mergeYArray() to avoid recreating whole data structure when size changes

* Add tests for new Y.Array merging behavior

* Batch inserts if there are multiple

* Add more tests for insertion, deletion, and replacement at different points in an attribute array

* Avoid unnecessary intermediate arrays

Co-authored-by: alecgeatches <alecgeatches@git.wordpress.org>
Co-authored-by: maxschmeling <maxschmeling@git.wordpress.org>
* Env: Fix loopback requests when running on non-default ports

When wp-env runs on any port other than 80, PHP loopback requests
inside the WordPress container (WP-Cron, REST API loopback, Site
Health diagnostic) fail with "Connection refused" because Apache
only listens on port 80 while WP_HOME points to the host-mapped
port (e.g. localhost:8888).

Fix by injecting two Apache config lines into the generated
WordPress Dockerfile that make Apache also listen on the host-mapped
port. This is a no-op when the port is 80 or 443.

Unlinked contributors: noreply@agent.dev, tbclark3, adrianduffell, Sam-Smyth, celtislab, collinr3.

Co-authored-by: nerrad <nerrad@git.wordpress.org>
Co-authored-by: ObliviousHarmony <obliviousharmony@git.wordpress.org>
Co-authored-by: jeryj <jeryj@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: glendaviesnz <glendaviesnz@git.wordpress.org>
Co-authored-by: miminari <mimitips@git.wordpress.org>
Co-authored-by: jmichaelward <jmichaelward@git.wordpress.org>
Co-authored-by: ryelle <ryelle@git.wordpress.org>
Co-authored-by: mikey242 <iseardmedia@git.wordpress.org>
Co-authored-by: rmorse <codeamp@git.wordpress.org>
Co-authored-by: BrianHenryIE <brianhenryie@git.wordpress.org>
Co-authored-by: noisysocks <noisysocks@git.wordpress.org>
@pull pull bot locked and limited conversation to collaborators Apr 11, 2026
@pull pull bot added the ⤵️ pull label Apr 11, 2026
@pull pull bot merged commit bc6d247 into MaxMood96:trunk Apr 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants