Skip to content

Update Bundled @wordpress/* monorepo - #52187

Merged
retrofox merged 27 commits into
trunkfrom
renovate/bundled-@wordpress-monorepo
Sep 16, 2026
Merged

retrofox merged 27 commits into
trunkfrom
renovate/bundled-@wordpress-monorepo

Conversation

@matticbot

@matticbot matticbot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Closes MONOREP-1277

This PR contains the following updates:

Package Change Age Confidence
@wordpress/a11y (source) 4.54.0 → 4.55.0 age confidence
@wordpress/admin-ui (source) 2.9.0 → 2.10.0 age confidence
@wordpress/boot (source) ^0.21.0 → ^0.22.0 age confidence
@wordpress/boot (source) 0.21.0 → 0.22.0 age confidence
@wordpress/build (source) 0.22.0 → 0.23.0 age confidence
@wordpress/compose (source) 8.7.0 → 8.8.0 age confidence
@wordpress/data (source) 10.54.0 → 10.55.0 age confidence
@wordpress/dataviews (source) 18.1.0 → 19.0.0 age confidence
@wordpress/icons (source) 15.5.0 → 16.0.0 age confidence
@wordpress/icons (source) ^15.0.0 → ^16.0.0 age confidence
@wordpress/interface (source) 10.0.0 → 10.1.0 age confidence
@wordpress/notices (source) 5.54.0 → 5.55.0 age confidence
@wordpress/private-apis (source) 1.54.0 → 1.55.0 age confidence
@wordpress/rich-text (source) 7.54.0 → 7.55.0 age confidence
@wordpress/route (source) 0.20.0 → 0.21.0 age confidence
@wordpress/route (source) ^0.20.0 → ^0.21.0 age confidence
@wordpress/theme (source) 2.0.0 → 2.1.0 age confidence
@wordpress/theme (source) 2.1.1-next.v.202608281122.0 → 2.1.1-next.v.202609031004.0 age confidence
@wordpress/ui (source) 0.21.0 → 0.22.0 age confidence
@wordpress/ui (source) ^0.21.0 → ^0.22.0 age confidence
@wordpress/views (source) ~1.21.0 → ~1.22.0 age confidence
@wordpress/widget-primitives (source) 0.6.2-next.v.202609031004.0 → 0.7.0 age confidence

Release Notes

WordPress/gutenberg (@​wordpress/a11y)

v4.55.0

Compare Source

WordPress/gutenberg (@​wordpress/admin-ui)

v2.10.0

Compare Source

Internal
  • Stop publishing the src directory to npm. The package's exports field only exposes the built artifacts, so the source files were unreachable by consumers and only inflated the package size (#​77285).
WordPress/gutenberg (@​wordpress/boot)

v0.22.0

Compare Source

Internal
  • Remove unused dependency @wordpress/commands (#​82103).
WordPress/gutenberg (@​wordpress/build)

v0.23.0

Compare Source

Breaking Changes
  • @wordpress/build no longer parses JSX syntax in .js source files. Rename these files to .jsx or .tsx before building (#​82189).
Enhancements
  • Target @wordpress/browserslist-config for JavaScript and CSS when the project has no Browserslist config, instead of Browserslist's implicit defaults (#​82179).
  • Transpile .jsx package, route, and widget source files alongside the existing JavaScript and TypeScript extensions, and ignore JSX tests during watch rebuilds (#​80990).
Bug Fixes
  • Fix generated regular CSS injection in Browser Mode while retaining the existing Node and jsdom test behavior (#​82154).
  • Pages: require authentication and a configurable capability (new capability page setting, default manage_options) before rendering generated standalone pages, so admin_init entry points such as admin-post.php no longer serve them to logged-out visitors (#​82254).
  • Widen the optional @wordpress/theme peer dependency range to allow 2.x releases. (#​82139)
  • Pages: preserve the Core Boot layout compatibility class in generated wp-admin page templates so short pages fill the viewport when using Core's bundled Boot module (#​82112).
Internal
  • Update the @types/node development dependency to v24, matching the Node.js version the repository builds and tests against (#​82616).
WordPress/gutenberg (@​wordpress/compose)

v8.8.0

Compare Source

Bug Fixes
  • useResizeObserver: Disconnect the observer when the hook unmounts so queued callbacks cannot run after teardown (#​82687).
Internal
  • Use the .jsx extension for JavaScript source files that contain JSX (#​80990).
WordPress/gutenberg (@​wordpress/data)

v10.55.0

Compare Source

Internal
  • Remove unused dependency use-memo-one (#​82103).
WordPress/gutenberg (@​wordpress/dataviews)

v19.0.0

Compare Source

Breaking Changes
  • Removed the rich text options (className, clientId, allowedFormats, disableFormats, withoutInteractiveFormatting, preserveWhiteSpace, disableLineBreaks) from the config prop of DataFormControlProps. They were added for the built-in richtext control (#​78471), which has since moved to @wordpress/editor (#​81430), so nothing in this package sets or reads them (#​82330).

  • DataForm: a combined form field (one with children) is now treated purely as a layout container. Its id is no longer resolved against the field definitions: a field sharing that id no longer contributes validation rules to the group, and the panel layout no longer uses it for the collapsed summary or readOnly state, falling back to the group's first leaf child instead (#​82175).

    If a combined field relied on sharing its id with a field to pick the panel summary, declare it through layout.summary instead. For example, a discussion field whose render summarizes comment_status and ping_status together:

    // Before: the summary came from the `discussion` field because the group shares its id.
    const form = {
    	layout: { type: 'panel' },
    	fields: [
    		{ id: 'discussion', children: [ 'comment_status', 'ping_status' ] },
    	],
    };
    
    // After: the summary field is explicit. Without it, the group would
    // now be summarized by its first child, `comment_status`.
    const form = {
    	layout: { type: 'panel' },
    	fields: [
    		{
    			id: 'discussion',
    			layout: { type: 'panel', summary: 'discussion' },
    			children: [ 'comment_status', 'ping_status' ],
    		},
    	],
    };

    If a combined field relied on a same-id field's isValid rules being applied to the group, move those rules to the child fields.

Enhancements
  • DataForm: Add a showPlaceholderIfEmpty option to the panel layout, which shows the field's placeholder in the summary when the value is empty (#​82527).
  • Give unselected multi-selection filter indicators solid, themed backgrounds. (#​82391)
  • Validated form controls: Use --wpds-color-stroke-interactive-error for the invalid-state focus ring and border (#​82410).
  • DataForm: Communicate the timezone a datetime value is edited in. When the site timezone differs from the visitor's, the control renders help text under the input naming the site timezone: the zone name (e.g. (CEST) Europe/Madrid) or the UTC offset for sites pinned to one (#​82291).
  • Export the DataViewsProps and ItemWithId types (#​82326).
  • Export the DataViewsProps and ItemWithId types and document every type property (#​82326).
Bug Fixes
  • DataViews and DataViewsPicker: the table and pickerTable layouts no longer render an empty column for an id in view.fields that has no matching field definition, matching what the other layouts already did. The column header menu moves, inserts and hides columns relative to the rendered columns, so a skipped id no longer offsets those operations; such ids are dropped from view.fields the next time the menu changes the view (#​82601).
  • Fix Field.sort TypeScript type definition to reflect that sort receives extracted field values rather than Item objects (#​82162).
  • DataForm: Render read-only fields without requiring an edit control (#​82514).
  • Operators: Support the isAny and isNone filter operators for numeric field values, which previously matched nothing (#​77942).
  • Field types: Drop isAll from the valid operators of the number, integer, text, email, url and telephone types. Their values are scalars, so "includes all of" can never hold for more than one selected value (#​82463).
  • DataViews and DataViewsPicker: move the view back to the last available page when it points past the end of the collection, for instance after deleting the only item of the last page (#​82244).
Documentation
  • DataViews: Document that the layout.styles of the table and pickerTable views applies to the columns listed in fields and not to the primary column, which takes the width the other columns leave over. Fix the swapped maxWidth/minWidth descriptions of ColumnStyle (#​82238).
Internal
  • Declare the dependencies imported by the ./wp bundle (build-wp/index.js) so they resolve without relying on hoisting. (#​81843)
  • DataViews: Use Menu.PrefixIcon for table column menu icons. (#​82346)
  • DataForm date control: Space ValidityIndicator with Stack now that the indicator has no outer margin. (#​82267)
  • Add a HierarchicalLevels story that demonstrates getItemLevel and view.showLevels in the table layout (#​82344).
  • Remove unused dependency @wordpress/primitives (#​82103).
  • Remove tsconfig project references to packages that are not dependencies (#​82106).
  • Note in the /wp bundle build script that its singleton externals list must stay in sync with the transitive private API usage check (#​82027).
  • Update the @types/node development dependency to v24, matching the Node.js version the repository builds and tests against (#​82616).
Bug Fix
  • Color filter and selected-option icons with color rather than fill, so they stay visible now that those icons are stroke-based. (#​78812)
  • DataViews: Scope the search field's fixed width to the default UI search row (#​82128).
WordPress/gutenberg (@​wordpress/icons)

v16.0.0

Compare Source

Breaking Changes
  • The search icon is now stroke-based. Use CSS color rather than fill to recolor it. (#​82338)
  • Stroke-based icons now declare fill: none via inline style on the outer <svg> instead of the fill attribute, so the source's intent survives ordinary third-party CSS overrides like .foo svg { fill: currentColor } without using !important. Consumers should use CSS color to recolor icons. A fill prop or ordinary CSS fill declaration no longer overrides the intrinsic fill: none; pass style={ { fill: value } } to deliberately replace it. (#​78808)
  • Stroke-based icons use vector-effect="non-scaling-stroke", so their stroke width stays constant when rendered outside the Icon block at sizes other than 24px. The Icon block deliberately restores the previous proportional stroke scaling. When new bundled icon elements run with an older externalized wp.components.Icon, supplying an unrelated style prop can replace the icon's intrinsic style; update the paired packages together to retain merged styles. (#​78808)
Enhancements
  • Redraw 35 icons as stroke-based for variable stroke-width support, and introduce the vector-effect="non-scaling-stroke" convention so stroke weight stays consistent across icon sizes (originally landed in #​78774, reverted in #​78854 due to CSS-override regressions, re-introduced here with the resilience fix): addCard, addTemplate, cancelCircleFilled, caution, cautionFilled, code, commentAuthorAvatar, cover, currencyDollar, currencyEuro, currencyPound, drafts, help, helpFilled, image, info, lifesaver, link, linkOff, navigation, notAllowed, paragraph, pending, plusCircle, plusCircleFilled, published, scheduled, siteLogo, square, starEmpty, starFilled, starHalf, styles, time, tip. (#​78808)
  • Redraw a further 63 icons as stroke-based for variable stroke-width support, following the convention introduced in #​78808: alignCenter, alignJustify, alignLeft, alignNone, alignRight, arrowDownLeft, arrowDownRight, arrowDown, arrowLeft, arrowRight, arrowUpLeft, arrowUpRight, arrowUp, blockMeta, category, chartBar, check, chevronDownSmall, chevronDown, chevronLeftSmall, chevronLeft, chevronRightSmall, chevronRight, chevronUpDown, chevronUpSmall, chevronUp, closeSmall, close, create, download, handle, homeButton, justifyBottom, justifyCenterVertical, justifyCenter, justifyLeft, justifyRight, justifySpaceBetweenVertical, justifySpaceBetween, justifyStretchVertical, justifyStretch, justifyTop, lineDashed, lineDotted, lineSolid, listView, menu, next, plus, positionCenter, positionLeft, positionRight, previous, pullLeft, pullRight, pullquote, reset, resizeCornerNE, rss, separator, stretchFullWidth, stretchWide, upload. (#​78812)
Bug Fixes
  • Icon: Merge a consumer-supplied style prop with the icon's intrinsic styles instead of replacing them, so styles like fill: none on stroke-based icons survive unless the consumer overrides the same property explicitly. (#​78808)
WordPress/gutenberg (@​wordpress/interface)

v10.1.0

Compare Source

Internal
  • ComplementaryAreaMoreMenuItem: Stop passing a selectedIcon. The component the item renders as shows the selection (#​81564).
  • Remove unused dependency @wordpress/a11y (#​82103).
  • Use the .jsx extension for JavaScript source files that contain JSX (#​80990).
WordPress/gutenberg (@​wordpress/notices)

v5.55.0

Compare Source

WordPress/gutenberg (@​wordpress/private-apis)

v1.55.0

Compare Source

Bug fixes
  • Restore @wordpress/dataviews in the list of core modules allowed to use private APIs. DataViews copies published to npm before the private API cleanup opt in at module load, so plugin bundles embedding them throw without the entry. #​82221
WordPress/gutenberg (@​wordpress/rich-text)

v7.55.0

Compare Source

New Features
  • Export the RichTextFormat type, describing a single format applied to a range of characters within a RichTextValue (#​79486).
Bug Fixes
  • Restore a rich text element's contenteditable attribute when a pointer interaction ends with pointercancel, so that swipe scrolling on touch devices no longer leaves text blocks uneditable (#​82598).
WordPress/gutenberg (@​wordpress/route)

v0.21.0

Compare Source

WordPress/gutenberg (@​wordpress/theme)

v2.1.0

Compare Source

New Features
  • Add neutral interactive background tokens for resting, active, and disabled input and selection control states. (#​82391)
Documentation
  • Explain how consumers define light and dark themes through ThemeProvider color seeds (#​82039).
Enhancements
  • Add a Lightning CSS visitor plugin that injects design system token fallbacks, available as @wordpress/theme/lightningcss-plugins/lightningcss-ds-token-fallbacks, with an optional peer range of >=1.33.0 <2.0.0. (#​80401)
Bug Fixes
  • Calculate exact chroma capacity so weak intent backgrounds retain their color near lightness boundaries. (#​82591)
  • Make color ramp generation independent of cache population order. (#​82505)
  • Keep active fills moving in the color ramp direction and preserve text contrast for both states. (#​82542)
Internal
  • Update type-checking for script files to enforce NodeNext module resolution (#​82622).
  • Remove esbuild-esm-loader dependency in favor of Node.js TypeScript native type-stripping (#​82680).
  • Migrate design token modes to the DTCG resolver and Terrazzo CSS permutations. (#​82537)
  • Reuse seed-dependent calculations during color-ramp constraint searches. (#​82545)
  • Generate the default ramps before derived token artifacts so one build uses the current ramp algorithm throughout. (#​82525)
  • Cache relative luminance calculations used by color-ramp contrast checks. (#​82445)
  • Enforce NodeNext module resolution in the build project so future declaration imports are checked against the package's published ESM resolution rules. (#​82088)
  • Update the @types/node development dependency to v24, matching the Node.js version the repository builds and tests against (#​82616).
  • Declare the @storybook/addon-docs development dependency used by the package's story documentation (#​82676).
WordPress/gutenberg (@​wordpress/ui)

v0.22.0

Compare Source

Breaking Changes
  • SearchableSelect, SearchableChipSelect, and SearchableChipSelectControl: Hide the creatable footer when the create action is not in the filtered results. It still renders in the footer (not the main list) when it remains in items and matches the query. To keep a create action after an unmatched query, keep that item in items with a label or filter that matches (#​82566).
  • RangeCalendar: Start a new range by default when selecting a date after the current range is complete. Set resetOnSelect={ false } to preserve the previous behavior. (#​82612)
  • Menu: --wp-ui-menu-selection-indicator-size now controls the selection indicator width only. Its height follows the item label line height. (#​82346)
  • Autocomplete.Popup, Combobox.Popup, Select.Popup, SearchableChipSelect, and SearchableChipSelectControl: The popup now defaults to a fixed anchor width. Use width="content" on Popups, or popupWidth="content" on composites, to restore content-sized width between the anchor and available viewport bounds (#​82087, #​82193).
  • Portaled overlays (AlertDialog, Autocomplete, Combobox, Dialog, Drawer, Menu, Popover, and Select) now inherit the theme from their portal destination instead of re-emitting the trigger's nearest contextual theme. Default portals use the document root theme; custom portal containers use their DOM ancestry (#​82038).
New Features
  • Add CheckboxControl component (#​82213).
  • Add Radio form primitive (#​82214).
  • Add a responsive Breadcrumb navigation component. (#​80425)
  • Add SearchableSelect form primitive (#​80961).
  • Add Field.VisualLabel for a purely visual label outside Field.Root (#​82095).
  • Menu: Add PrefixIcon for label-aligned prefix icons, with a default size of 24px. (#​82346)
Enhancements
  • Select.Popup: Put overflow on Select.List instead of a nested wrapper, so the listbox is the scroll container. (#​82470)
  • Compound components: Throw clear development errors when required parent context is missing (#​82510).
  • Give input fields and checkboxes solid, state-aware themed backgrounds while keeping minimal Select triggers transparent. (#​82391)
  • AlertDialog, Dialog, Drawer, Popover, and Tooltip: Derive Trigger props from the corresponding Base UI components. (#​81824)
  • Autocomplete.Status, Combobox.Status: Add a Status subcomponent that announces async list status to screen readers. Item popups give Status its own collapsing grid row so a visible result count sits above the list without overlaying items (#​82195).
  • Autocomplete.Popup, Combobox.Popup, SearchableChipSelect, SearchableChipSelectControl, Select.Popup, and SelectControl: Add width on Popups and popupWidth on composites, with preset width constraints (anchor, content, sm, md, lg, and available) for the item popup. SelectControl defaults to content to preserve prior popup sizing (#​82087, #​82193).
  • Link, Menu.LinkItem: Accept target, apply the new-tab indicator and accessible notice for _blank, and preserve explicit targets when openInNewTab is set. (#​82347)
  • Menu: Support multiple item descriptions. (#​81825)
  • Menu: Use Text for item labels and descriptions to share typography and apply text-wrap: pretty. (#​82237)
  • Text: Apply text-wrap: pretty by default to improve line wrapping. (#​82133)
Bug Fixes
  • Fieldset: Fix gap token to match spec (#​75479).
  • Field.Label: Reset variant="plain" to the default font weight so it no longer inherits the uppercase label emphasis weight (#​82213).
  • Select (variant="minimal"): Keep the trigger borderless and unfilled when disabled. InputLayout no longer applies disabled field chrome to .is-borderless. (#​82468)
  • Link: Show the new-tab indicator and accessible notice when target is an ASCII case-insensitive match for "_blank". (#​82447)
  • AlertDialog, Dialog, Drawer: Keep descendant focus rings visible at pinned header and footer edges. (#​82443)
  • Menu.LinkItem: Show the new-tab indicator and accessible notice when target is an ASCII case-insensitive match for "_blank". (#​82442)
  • Input, Textarea, InputControl, TextareaControl: Use --wpds-color-foreground-interactive-neutral-weak for enabled placeholder text so it meets the 4.5:1 contrast minimum (#​82304).
  • SearchableChipSelect, SearchableChipSelectControl: Fix the gray background on disabled search fields in WordPress admin (#​82304).
  • ValidityIndicator: Remove the built-in outer margin. Spacing belongs on the consumer. ControlWithError now uses Stack with gap="sm" so validated controls keep the same gap. (#​82267)
  • ControlWithError: Re-read the native validity after the control blurs, so a control that commits an adjusted value on blur (e.g. a number control clamping to its min) doesn't keep showing a stale error message (#​82376).
  • AlertDialog: Use a neutral tone for the cancel button. (#​82261)
  • Input: Hide the field focus ring when a prefix or suffix slot control is focused. (#​82257)
  • Icon: Merge a consumer-supplied style prop with the icon's intrinsic styles instead of replacing them, so styles like fill: none on stroke-based icons survive unless the consumer overrides the same property explicitly. (#​78808)
  • Menu: Align selection indicators and prefix icons with the first label line, including wrapped labels and items with descriptions, and improve checkbox checkmarks' optical alignment. (#​82346)
Documentation
  • Add a Form best practices Storybook page for labeling composed controls (#​82197).
Internal
  • AlertDialog: Move confirmation lifecycle state to a private external store so event handlers and React renders read the same synchronous snapshot. (#​82131)
  • Use stable event callbacks and remove the remaining react-hooks/refs ESLint suppressions. (#​82131)
  • Update the @types/node development dependency to v24, matching the Node.js version the repository builds and tests against (#​82616).
WordPress/gutenberg (@​wordpress/views)

v1.22.0

Compare Source

Bug Fixes
  • useViewConfig: request the full configuration under the same cache key as getViewConfig( kind, name ), so a route loader that preloads it no longer triggers a second request. (#​82141)
  • useView, loadView: ignore a persisted layout type that defaultLayouts does not offer, resolving the type out of the layers below instead. DataViews renders nothing for a layout it is not given, so a preference saved when a screen still offered that layout used to leave the screen empty, with no way to reset it. Such a type does not count as a modification and is written out of the preference on the next update. (#​82457)
WordPress/gutenberg (@​wordpress/widget-primitives)

v0.7.0

Compare Source

Documentation
  • WidgetHostLinks.match: the in-app route it returns carries the
    route's query when the href has one; docblock, README, Storybook page
    and seam diagram say so
    (#​82066).
  • WidgetAction.download: any value but false downloads; true or ''
    keep the original filename
    (#​82073).

Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 02:59 AM, on day 1 of the month ( * 0-2 1 * * ) in timezone UTC, Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

@matticbot
matticbot requested a review from a team as a code owner September 10, 2026 13:07
@matticbot matticbot added [Status] Needs Review This PR is ready for review. Task labels Sep 10, 2026
@matticbot
matticbot requested review from a team as code owners September 10, 2026 13:07
@matticbot matticbot added [Status] Needs Review This PR is ready for review. Task labels Sep 10, 2026
@matticbot
matticbot requested review from a team September 10, 2026 13:07
@matticbot

This comment was marked as resolved.

blocks 16 types findTransform's result as the union of every transform kind, and files.isMatch takes the file list alone
e2e-test-utils-playwright 2.0.0 looks for Gutenberg trunk's 'Preview (opens in a new tab)', while the WP 7.0/7.1 editor still says 'Preview in new tab', so Forms' openPreviewPage never found it
the substring match also resolved Document Overview in the editor top bar
@retrofox

retrofox commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Pushed the fold and a trunk sync. Board is green at a6285060d3.

Fold of #52188 (08a70aebf6, 37209580eb): the whole tree is on the .55 train (components 40.1, element 8.7, core-data 8.0), with private-apis, data, notices and core-data each down to a single copy.

The .pnpmfile.cjs dataviews hack is gone; dataviews 19 declares its own dependencies (WordPress/gutenberg#81843). Backup's Jest suite drops from 38 s to 16 s locally.

Trunk sync (590b10982f + 96c39ac625 + 92f6ee12b3): conflicts were the lockfile and the package.json files touched by #52297; the My Jetpack wp-build port (#52204) came in pinned to the previous train and is aligned; dedupe on top.

Compat fixes the bump surfaced, one commit each:

  • @wordpress/jest-console 9.3.0 keeps its console spies across restoreAllMocks()/clearAllMocks() (Test: Migrate Node unit tests to Vitest WordPress/gutenberg#82211), so five tests that were logging console.error unnoticed now fail: Forms useCreateForm (db4967730d), Charts useElementSize (670b673892), the Newsletter email toggle test (43072f43a7), the legacy Popover prop type (b5bf678ad3), and one real bug in Social (669e09f948): InputControl ignores defaultValue, so the Bluesky handle was never pre-filled when reconnecting. That one changes product code and has changelog entries; cc @Automattic/jetpack-social.

  • @wordpress/blocks 16 types findTransform as a union; VideoPress narrows it to the files transform (e5151b7aab).

  • @wordpress/e2e-test-utils-playwright 2.0.0 looks for Gutenberg trunk's "Preview (opens in a new tab)" menu item; WP 7.0/7.1 still say "Preview in new tab". Our EditorPage accepts both (bfddfc0444, a6285060d3). Open question: that package has to match the editor under test, so it probably should not follow the train's majors.

Every project with a test-js script and the monorepo-wide typecheck is green locally.

Next: #52188 closes as superseded, and #52316 revives #50868 so both trains move as one group from now on.

@retrofox retrofox mentioned this pull request Sep 15, 2026
1 task
@anomiex

anomiex commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

The .pnpmfile.cjs dataviews hack is gone, dataviews 19 declares its own dependencies (WordPress/gutenberg#81843).

🎉

We could probably remove the spies workaround in projects/packages/paypal-payments/tests/js/paypal-payment-buttons-block-tests/edit.test.jsx then.

jest-console 9.3.0 keeps its console spies across restoreAllMocks(), so afterEach can restore every spy the suite made again
@retrofox

retrofox commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Manual pass, round 2: a6285060d3 builds

Same cells as yesterday, on the tiger docker site through the tunnel. Package provenance per cell matches the table above, and the console filtered by unlock|module specifier|Failed|TypeError|ReferenceError|SyntaxError|Uncaught stayed empty on every screen. Not covered here: dropping a video file into the editor (the VideoPress transforms change), which its nine unit tests exercise.

Cell G: WordPress 7.1, Gutenberg off

Core serves everything it ships; wp-views and @wordpress/widget-primitives come from the polyfill. Stats v2 (Traffic, Insights, Subscribers, Referrers report, post detail), Forms, My Jetpack, VideoPress and the editor with the Jetpack sidebar and the Social connections modal all render. The Bluesky handle field keeps what you type and validates it, which is the 669e09f948 fix at work.

Cell E: WordPress 7.0.4, Gutenberg off (what Atomic runs)

wp-private-apis and wp-rich-text are forced to the polyfill, widget-primitives and wp-views fall back to it, the rest comes from core. Same screens as G.

Cell G2: WordPress 7.1, Gutenberg 23.9.1

Gutenberg serves everything, widget-primitives included; wp-views is the only polyfill left. Stats v2, Forms and the editor.

Cell F: WordPress 7.0.4, Gutenberg 23.9.1

Same picture as G2 on the older core.

@retrofox

retrofox commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

@wordpress/jest-console 9.3.0 keeps its console spies across restoreAllMocks()/clearAllMocks() (WordPress/gutenberg#82211)

We could probably remove the spies workaround in projects/packages/paypal-payments/tests/js/paypal-payment-buttons-block-tests/edit.test.jsx then.

Done in 008a1f7e47: track() and the spies list are gone and that afterEach calls jest.restoreAllMocks() again; the whole paypal-payments suite passes (533 tests).

@louwie17

louwie17 commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Gave this a test run across a WP × Gutenberg matrix — everything looks good apart from one icon regression.

Matrix: WP 7.0 (minimum supported) and WP 7.1.1, each with Gutenberg active and inactive, every cell run against both this branch and a trunk control, over 8 admin screens (Premium Analytics, Newsletter, Forms, Jetpack dashboard, Activity Log, Social, VideoPress, block editor).

All four cells came back with no runtime differences from trunk — console errors, page errors and failed requests were identical in each one. The only visual difference was the Newsletter onboarding tooltip re-wrapping its text, which is @wordpress/ui 0.22 applying text-wrap: pretty to Text by default. Cosmetic and intended upstream.

The one thing worth a look: @wordpress/icons 16 redraws ~98 icons as stroke-based, and those now carry an inline style="fill:none" that CSS fill can't override. carrousel.scss colours the AI image modal's arrows with fill: #fff (and #808080 when disabled), so both rules become no-ops and the arrows fall back to the inherited color — dark-on-dark over a generated image, with enabled and disabled no longer distinguishable.

AI image carousel arrows, @wordpress/icons 15 vs 16

Two smaller instances of the same pattern: search / notAllowed in Search's experience-selector previews (embedded-preview.scss:17, off-preview.scss:11), and info in the AI logo generator (prompt.scss:113, where a path { fill } rule fills the outlined icon in). All are one-line fill → color swaps.

Caveat: I couldn't reach the AI image modal directly, so the image above is a reconstruction — the exact SVG markup from both installed icon versions with the exact CSS from the repo, rather than a live capture. Worth confirming against the real modal, and worth checking whether that carousel is still used as-is before anyone spends time on it.

@wordpress/icons 16 draws 98 icons as strokes with an inline fill:none, so the CSS fill rules that tinted them stopped applying; the AI message keeps fill for its own filled SVG
@retrofox

Copy link
Copy Markdown
Contributor

Good catch, and it goes further than those four.

icons 16 redraws 98 icons as strokes, so I checked every stylesheet next to a component that imports one of them. Wherever fill was the only thing colouring the icon, it was broken. About twenty more spots:

  • Notice and PricingTable in @automattic/jetpack-components
  • My Jetpack: close link, product detail and interstitial checks, the Protect card's critical icon
  • VideoPress admin: notices, video list, plays counter, thumbnail warning
  • Scan threat icons, Activity Log icons, Publicize share status, Podcast plan features
  • The wpcom expiry-notice modal and the SSO survey close button

All swapped to color in 655bbc18da, with changelog entries in the packages and in the plugins that ship those screens. The AI message keeps fill as well: its own errorExclamation SVG is a filled shape.

Left alone: rules that already had a matching color next to the fill, and fill: currentColor rules (inert now, harmless).

Not verified live. The carousel and the logo generator still need a look from someone who can reach those modals.

…rdpress-monorepo

# Conflicts:
#	pnpm-lock.yaml

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

Re-tested after the icon fix (655bbc18da8) and the trunk merge: WP 7.0.4 and 7.1, Gutenberg active and inactive, compared against trunk. No differences apart from the expected Newsletter tooltip re-wrap, and the AI image modal's arrows now match trunk. LGTM 👍

@kat3samsin a quick question since you worked on Image Studio: the legacy AI image modal (with the carousel in ai-client) still opens as a fallback when Image Studio isn't active, e.g. from Social's "Generate image" option or the featured image "Generate with AI" menu. Is that fallback meant to stay, or is it on the way out?

@kat3samsin

Copy link
Copy Markdown
Contributor

@louwie17 thanks for the tag! Yes the legacy AI Image Modal should be on its way out of Social pages. However, it should not show anymore in the Featured Image menu.

@anomiex anomiex mentioned this pull request Sep 30, 2026
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Admin Page React-powered dashboard under the Jetpack menu E2E Tests [Feature] Contact Form [Feature] Masterbar WordPress.com Toolbar and Dashboard customizations [Feature] Publicize Now Jetpack Social, auto-sharing [Feature] Theme Tools [JS Package] AI Client [JS Package] API [JS Package] Base Styles [JS Package] Boost Score Api [JS Package] Charts [JS Package] Components [JS Package] Connection [JS Package] Eslint Config Target Es [JS Package] I18n Loader Webpack Plugin [JS Package] IDC [JS Package] Jetpack Shared Stores [JS Package] Licensing [JS Package] Partner Coupon [JS Package] Scan [JS Package] Shared Extension Utils [JS Package] Social Previews [JS Package] Storybook [JS Package] Webpack Config [mu wpcom Feature] Expiry Notices [Package] Activity Log [Package] Admin Ui [Package] Agents Manager [Package] Assets [Package] Backup [Package] Blaze [Package] Classic Theme Helper [Package] Comments [Package] Connection [Package] Cookie Consent [Package] Explat [Package] External Connections [Package] External Media [Package] Forms [Package] Jetpack mu wpcom WordPress.com Features [Package] Jitm [Package] Masterbar [Package] My Jetpack [Package] Newsletter [Package] Paypal Payments [Package] Podcast [Package] Post List [Package] Premium Analytics [Package] Publicize [Package] Rtc [Package] Scan [Package] Search Contains core Search functionality for Jetpack and Search plugins [Package] Seo [Package] VideoPress [Package] Wp Build Polyfills [Package] Yoast Promo [Plugin] Automattic For Agencies Client [Plugin] Backup A plugin that allows users to save every change and get back online quickly with one-click restores. [Plugin] Boost A feature to speed up the site and improve performance. [Plugin] Classic Theme Helper Plugin [Plugin] Inspect [Plugin] Jetpack Issues about the Jetpack plugin. https://wordpress.org/plugins/jetpack/ [Plugin] Paypal Payment Buttons [Plugin] Protect A plugin with features to protect a site: brute force protection, security scanning, and a WAF. [Plugin] Search A plugin to add an instant search modal to your site to help visitors find content faster. [Plugin] Social Issues about the Jetpack Social plugin [Plugin] Starter Plugin [Plugin] Stats Data [Plugin] VideoPress A standalone plugin to add high-quality VideoPress videos to your site. RNA Task [Tests] Includes Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants