Skip to content

UI: Update Base UI to 1.8.0 - #82835

Merged
ciampo merged 7 commits into
trunkfrom
codex/update-base-ui-1-8
Sep 14, 2026
Merged

ciampo merged 7 commits into
trunkfrom
codex/update-base-ui-1-8

Conversation

@ciampo

@ciampo ciampo commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Existing-test migration extracted to #82838; the PRs can merge independently.

What?

Update Base UI 1.7.0 → 1.8.0 in UI and DataViews.

Why?

Fix grid semantics, labeling and popup/focus behavior. Read-only Select, Combobox and Autocomplete now allow browsing without changing the value.

How?

Remove the obsolete Autocomplete ARIA workaround and Grid story exception. Add read-only browser regressions for Select, Combobox and Autocomplete. Retain local fixes that upstream has not replaced.

Testing Instructions

  1. Storybook → Design System → Components → Form → Primitives → Autocomplete → Grid: type and navigate; expect no accessibility violations.
  2. Exercise SelectControl, SearchableSelect and SearchableChipSelectControl: open, filter, select, clear and reopen. Labels/chips should stay correct. With readOnly, browsing must not change the value.
  3. Exercise Menu/submenus, Tooltip, Dialog, Popover and Drawer: check opening, dismissal, scrolling and focus return. In the post editor, clicking the canvas iframe should dismiss the Options menu.

Testing Instructions for Keyboard

Open a control, navigate with arrows, and press Escape; focus should return to its trigger. Check Tab/Shift+Tab containment in modal dialogs, Tabs navigation after insertion/removal, and blocked selection in read-only controls.

Release impact analysis and adoption decisions

Release scope

1.7.0 → 1.8.0, released August 4 → September 4, 2026, with no intervening stable release. Confirmed the latest stable version and reviewed the complete release notes, implementation changes, installed types and repository consumers.

Changes that affect our components

Upstream issue/PR numbers below refer to mui/base-ui and are listed in the linked release notes.

Upstream changes Repository impact and action
Label association when controls unregister, #5456; stale/duplicate control IDs, #5457; Select root ID inside a Field, #5461 Field, Checkbox, CheckboxGroup, Input and Select inherit these fixes. Existing tests pass; no local replacement is needed.
Controlled field-value synchronization, #5460; custom validity ownership/lifecycle, #5449; controlled blur validation and filled state, #5563 Input and checkbox state benefits automatically. Retain the native validation used by ValidatedInputControl/ValidatedTextareaControl; Field omits upstream validation configuration.
Validate once on Enter inside Base UI Form, #5459; neutral validity during async validation, #5600 No exposed Base UI Form or async Field validate API. These do not replace our validation code.
Autocomplete/Combobox grid groups use rowgroup, #5564; orientation moves to role owners, #5551; group labels are hidden as separate accessibility-tree nodes, #5598 Remove the forced aria-orientation={ undefined } and Grid story exception; assert rowgroup semantics. Menu, Select and Combobox inherit the group-label change while retaining referenced accessible names.
Read-only browsing for Select, #5531, and Combobox/Autocomplete, #5541; Combobox Trigger data-readonly, #5418 Users can open and browse options without committing a value. Root props already forward readOnly; no local CSS disables these triggers. Added browser tests. DataForm's separate field.readOnly path still renders a value instead of an edit control.
Combobox.createItems, #5326 Supports object items with primitive selected values. SearchableSelect/ChipSelect use objects in callbacks, trigger content, chips and creatable metadata. Preserve those contracts; adopting the factory needs API design and consumer migration. No new public export.
Tighter Combobox filtering types, part of #5326 filteredItems/filter now use the source item type instead of any. Our wrapper defaults it to the selected value type. Repository typecheck passes; external consumers mixing object items and primitive selected values may need type changes.
Preserve-filter cancellation, #5362; record-label lookup avoids Object.prototype, #5518 Inherited through Combobox/Select. Object selection, filtering and creatable-item tests pass; inherited object properties no longer become labels.
First selected item anchoring and linear lookup, #5573/#5613 Benefits multiple Combobox/ChipSelect selections. Our Select wrapper explicitly omits multiple, so its multiple-selection path is not exposed.
Select item registration when item count stays unchanged, #5469 Replacing a selected item now reconciles the value even when collection length stays unchanged. Relevant to dynamic options; selected-item alignment geometry is unchanged.
Dynamic roving focus, #5447; unstable-ref loops, #5441; 3D-transform indicator positioning, #4852 Tabs/radio inherit the focus fix; Tabs uses the indicator. Browser tests cover insertion/removal, disabled states, navigation and overflow. Retain our separate scrolling logic.
Ignore outside releases from presses that began before opening, #5378; Popover detached-trigger store migration, #5442 Dialog, AlertDialog and Popover inherit dismissal fixes. Wrappers constrain detached triggers; no new handle API is needed.
Initially open submenu entrance transition, #4383 Menu inherits corrected transition timing. Retain our popup motion styles and submenu composition.
Hover/focus timing, #5037; per-trigger tooltip delay with zero provider delay, #5444 Tooltip forwards trigger delay and inherits these fixes. The hover/disabled-hover test migration is covered by #82838.
Drawer ignores page scroller when starting swipe, #5567; unattributed snap direction, #5477; canceled snap dismissal, #5571 Drawer inherits page-scroller handling; its root does not expose snap points. Retain Content markers, scroll handling and Safari positioning CSS.
Animation completion work, #5535; lazy render prop/ref merging, #5562; trigger mount work, #5426 Inherited automatically; the lazy-element fix concerns React 19. No local replacement or measured speedup is claimed.
Disabled anchor tracking on scroll, #5478; start/end transform origin, #5015; duplicate arrow middleware option, #5606; passive touch listeners, #5572 Positioners/shared interactions inherit the fixes. Retain collision settings, width constraints, motion CSS, WordPress overlay placement and iframe integration.

Retained workarounds and unused features

Dependencies and runtime compatibility

  • Both direct dependencies are required: DataViews' published /wp build inlines UI but leaves Base UI imports external; UI's CJS/ESM builds also import it. The built-package audit confirms this. Base UI resolves through npm, not window.wp, so there is no new independently supplied WordPress/Base UI version pairing. Retain WordPress compatibility code.
  • Node/React peer requirements are unchanged. React 18 was tested; supported React 17/19 were not separately browser-tested.
  • Required @base-ui/utils: 0.3.2 → 0.4.0. No direct Gutenberg imports; shared store, focus and animation changes are exercised through UI.
  • Required @babel/runtime: 7.29.2 → 7.29.7. Reviewed intervening releases: earlier changes affect other packages; 7.29.7 republishes with provenance. No compiler upgrade.
  • npm also resolves Reselect 5.2.0 to 5.3.0 under Base UI utils. Release changes include memoization fixes/performance, optional cache bounds, a cache-growth development check, removal of experimental autotracking and a TypeScript 5.6 minimum. Gutenberg has no direct imports. Base UI uses createSelectorCreator with lruMemoize, not the removed API; current type and interaction checks pass.
  • The lockfile audit is unchanged: 47 existing findings, comprising 5 low, 27 moderate and 15 high. Advisory entries are identical before/after; none concerns Base UI or changed dependency nodes. A separate installed-tree audit reports 53 findings, also with none attributed to the changed dependencies. Existing repository findings remain.

Browser Mode and accessibility exceptions

New read-only Select, Combobox and Autocomplete browser tests cover browsing, blocked selection, Escape, focus return and reopening; Autocomplete also checks blocked typing.

The 205 existing-test migrations and tooltip/backdrop/iframe assertion improvements are in #82838. That PR runs independently on Base UI 1.7.0. This dependency PR retains the existing jsdom suites. Structure/API contracts, deliberate errors, listener lifecycle and mocked scroll algorithms remain appropriate jsdom coverage; the refactor moves browser-dependent interaction checks.

The Grid story exception is removed. A Chromium axe audit with suppressions bypassed confirms that Autocomplete Inline/Combobox DetachedInline still trigger scrollable-region-focusable. DataViews' suppressed labeling, contrast, unnamed-button, nested-interactive, scrolling and required-parent violations also reproduce. Retain those exceptions.

Verification
  • Production build, typecheck, changed-file lint, dependency/lockfile checks, test routing and conventions passed.
  • UI: 74 files / 859 tests passed. DataViews/Fields: 475 passed, 3 pre-existing skips.
  • Autocomplete grid semantics and read-only Select regression checks fail on 1.7.0 and pass on 1.8.0.
  • All 9 Autocomplete Storybook accessibility tests and the Storybook build passed. Regenerated component manifest is unchanged.
  • Published-package audit: 128 packages checked, zero findings. Installed dependencies match the lockfile.
  • Independent adversarial and simplicity review completed; no remaining actionable findings.

Use of AI Tools

Codex audited releases, implemented and verified changes, and drafted this PR. A separate Codex agent performed the adversarial review.

@github-actions github-actions Bot added [Package] DataViews /packages/dataviews [Package] UI /packages/ui labels Sep 14, 2026
@ciampo ciampo added the [Type] Task Issues or PRs that have been broken down into an individual action to take label Sep 14, 2026
@github-actions

github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown

🤖 PR meta 🤖

📦 Bundle size

Size Change: +13 kB (+0.16%)

Total Size: 8.2 MB

📦 View Changed
Filename Size Change
build/modules/boot/index.min.js 57.9 kB +394 B (+0.68%)
build/modules/workflow/index.min.js 84.9 kB +1.51 kB (+1.82%)
build/scripts/block-directory/index.min.js 44.4 kB +451 B (+1.03%)
build/scripts/block-editor/index.min.js 497 kB +1.87 kB (+0.38%)
build/scripts/block-library/index.min.js 365 kB +1.17 kB (+0.32%)
build/scripts/components/index.min.js 326 kB +801 B (+0.25%)
build/scripts/customize-widgets/index.min.js 59.3 kB +393 B (+0.67%)
build/scripts/edit-post/index.min.js 53.1 kB +440 B (+0.84%)
build/scripts/edit-site/index.min.js 380 kB +822 B (+0.22%)
build/scripts/edit-widgets/index.min.js 67 kB +415 B (+0.62%)
build/scripts/editor/index.min.js 609 kB +2.4 kB (+0.4%)
build/scripts/format-library/index.min.js 41.7 kB +1.32 kB (+3.28%)
build/scripts/media-utils/index.min.js 204 kB +989 B (+0.49%)
build/scripts/patterns/index.min.js 12.4 kB +28 B (+0.23%)

52ad8dc Run

⚡ Performance

Show the results

Client side metrics exclude the server response time.

front-end-block-theme

Metric 8521778 trunk % Change
timeToFirstByte 55.45 ms +10.37% -2.43% 55.65 ms +12.4% -3.68% -0.36%
largestContentfulPaint 92 ms +10.87% -4.35% 96 ms +4.17% -8.33% -4.17%
lcpMinusTtfb 34.3 ms +15.01% -2.62% 34.85 ms +23.1% -4.02% -1.58%
wpBeforeTemplate 27.28 ms +17.08% -2.38% 27.1 ms +21.99% -1.73% 0.66%
wpTemplate 23.85 ms +3.86% -2.01% 24.03 ms +4.29% -4.54% -0.75%
wpTotal 51.52 ms +11.01% -2.54% 51.55 ms +12.71% -3.41% -0.06%
wpMemoryUsage 7.53 MB +0% -0% 7.49 MB +0% -0% 0.46%
wpDbQueries 17 +0% -0% 17 +0% -0% 0%

front-end-classic-theme

Metric 8521778 trunk % Change
timeToFirstByte 45.65 ms +8.76% -1.75% 44.25 ms +6.67% -1.13% 3.16%
largestContentfulPaint 100 ms +6% -0% 98 ms +2.04% -2.04% 2.04%
lcpMinusTtfb 55.15 ms +4.62% -1.36% 52.95 ms +3.68% -1.42% 4.15%
wpBeforeTemplate 24.16 ms +8.9% -1.2% 23.62 ms +2.58% -0.97% 2.29%
wpTemplate 18.26 ms +2.25% -3.18% 17.52 ms +2.85% -2.17% 4.22%
wpTotal 42.32 ms +9.55% -1.54% 41.24 ms +6.84% -1.82% 2.62%
wpMemoryUsage 6.15 MB +0% -0% 6.11 MB +0% -0% 0.58%
wpDbQueries 14 +0% -0% 14 +0% -0% 0%

media-processing

Metric 8521778 trunk % Change
mediaProcessingJpeg 414.26 ms +1.13% -1.27% 412.87 ms +1.14% -1.03% 0.34%
mediaProcessingAvif 6145.16 ms +0.32% -0.08% 6196.64 ms +0.53% -0.18% -0.83%
mediaProcessingJpegToAvif 4303.11 ms +0.02% -0.22% 4313.37 ms +0.34% -0.1% -0.24%

media-upload

Metric 8521778 trunk % Change
jpegUploadProcessing 1443.53 ms +33.79% -1.54% 1430.84 ms +0.78% -0.69% 0.89%
pngUploadProcessing 206.07 ms +5.34% -4.26% 212.05 ms +2.87% -3.84% -2.82%
largeJpegUploadProcessing 1410.28 ms +0.4% -0.75% 1427.06 ms +1.21% -0.74% -1.18%
multipleImageUploadProcessing 1573.04 ms +2.47% -1.15% 1585.64 ms +0.62% -1.06% -0.79%

post-editor

Metric 8521778 trunk % Change
serverResponse 411.1 ms +4.08% -6.63% 405.71 ms +3.67% -4.48% 1.33%
firstPaint 251.88 ms +15.45% -18.68% 250.22 ms +19.35% -20.83% 0.66%
domContentLoaded 1086.35 ms +3.34% -2.14% 1133.15 ms +1.38% -0.86% -4.13%
loaded 1087.76 ms +3.33% -2.14% 1134.73 ms +1.39% -0.87% -4.14%
firstContentfulPaint 449.8 ms +3.8% -3.75% 474.56 ms +2.04% -3.06% -5.22%
firstBlock 3215.57 ms +1.94% -2.04% 3349.55 ms +1.74% -1.63% -4%
type 22.78 ms +8.3% -4.08% 22.69 ms +4.63% -2.03% 0.4%
typeWithoutInspector 23.3 ms +8.37% -4.68% 22.14 ms +2.94% -6.1% 5.24%
typeWithTopToolbar 29.29 ms +2.97% -3.55% 27.21 ms +6.25% -2.17% 7.64%
typeContainer 8.99 ms +17.46% -1.78% 8.96 ms +11.72% -7.59% 0.33%
focus 80.1 ms +4.59% -5.92% 79.41 ms +3.01% -9.47% 0.87%
firstFocus 214.46 ms +0% -0% 197.11 ms +0% -0% 8.8%
selectAll 519.35 ms +0.93% -1.24% 537.05 ms +3.63% -5.72% -3.3%
listViewOpen 70.89 ms +7.66% -5.01% 68.78 ms +4.84% -7.47% 3.07%
inserterOpen 26.11 ms +5.86% -8.39% 25.33 ms +7.74% -5.45% 3.08%
inserterHover 4.44 ms +7.66% -4.95% 3.73 ms +12.33% -8.58% 19.03%
inserterSearch 8.3 ms +11.33% -3.98% 9.14 ms +11.05% -11.71% -9.19%
loadPatterns 683.04 ms +0.48% -2.59% 681.71 ms +2.21% -2.63% 0.2%
wpTotal 399.83 ms +4.25% -6.8% 394.04 ms +3.82% -4.49% 1.47%
wpMemoryUsage 13.06 MB +0% -0% 13.03 MB +0% -0% 0.25%
wpDbQueries 54 +0% -1.85% 54 +0% -1.85% 0%

site-editor

Metric 8521778 trunk % Change
serverResponse 308.1 ms +3% -7.89% 316.04 ms +4.39% -9.38% -2.51%
firstPaint 197.43 ms +20.84% -12.48% 194.34 ms +11.11% -5.85% 1.59%
domContentLoaded 864.56 ms +2.23% -3% 890.31 ms +1.09% -2.02% -2.89%
loaded 865.52 ms +2.24% -3.01% 891.31 ms +1.12% -2.01% -2.89%
firstContentfulPaint 353 ms +3.16% -1.71% 363.09 ms +1.46% -1.88% -2.78%
firstBlock 3134.54 ms +0.98% -1.93% 3189.33 ms +0.54% -1.54% -1.72%
type 17.71 ms +2.6% -3.39% 18.49 ms +7.63% -2.16% -4.22%
navigate 110.78 ms +3.2% -5.46% 82.8 ms +10.89% -0.97% 33.79%
loadPatterns 1002.75 ms +3.27% -12.1% 970.01 ms +4.1% -5.69% 3.38%
loadPages 1037.99 ms +1.31% -0.91% 1050.88 ms +3.85% -2.36% -1.23%
wpTotal 299.78 ms +3.01% -8.21% 307.33 ms +4.56% -9.64% -2.46%
wpMemoryUsage 12.02 MB +0% -0% 11.98 MB +0% -0% 0.31%
wpDbQueries 44 +0% -2.27% 44 +0% -2.27% 0%

52ad8dc Run

🏁 Flaky tests

Show the failures

Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

should only mutate text data on input in /test/e2e/specs/editor/various/rich-text.spec.js, passed after 1 failed attempt.
Error: locator.evaluate: Error: The selection change event listener was never called.
    at eval (eval at evaluate (:311:30), <anonymous>:6:15)
    at UtilityScript.evaluate (<anonymous>:313:16)
    at UtilityScript.<anonymous> (<anonymous>:1:44)
    at eval (eval at evaluate (:311:30), <anonymous>:6:15)
    at UtilityScript.evaluate (<anonymous>:313:16)
    at UtilityScript.<anonymous> (<anonymous>:1:44)
    at /home/runner/work/gutenberg/gutenberg/test/e2e/specs/editor/various/rich-text.spec.js:375:42

52ad8dc Run

@ciampo
ciampo marked this pull request as ready for review September 14, 2026 11:03
@ciampo
ciampo requested review from a team, gigitux, ntsekouras and oandregal as code owners September 14, 2026 11:03
@github-actions

github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: ciampo <mciampini@git.wordpress.org>
Co-authored-by: mirka <0mirka00@git.wordpress.org>

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

Comment thread packages/ui/CHANGELOG.md

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Combobox.Root now inherits Base UI 1.8's tighter filter/filteredItems types, with Item defaulting to the selected value type. Consumers that mix object items with primitive values can start failing typecheck. Might be worth noting in the changelog?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That's true. I added a breaking-change note for filteredItems. I kept it specific to filteredItems, since filter already used the selected value type in 1.7.

@ciampo
ciampo force-pushed the codex/update-base-ui-1-8 branch from d06457a to 0190b14 Compare September 14, 2026 20:05
@ciampo
ciampo enabled auto-merge (squash) September 14, 2026 20:09
@ciampo
ciampo disabled auto-merge September 14, 2026 20:10
@ciampo
ciampo enabled auto-merge (squash) September 14, 2026 20:10
@ciampo
ciampo force-pushed the codex/update-base-ui-1-8 branch from 0190b14 to 52ad8dc Compare September 14, 2026 20:43
@ciampo
ciampo merged commit 809cee1 into trunk Sep 14, 2026
100 of 103 checks passed
@ciampo
ciampo deleted the codex/update-base-ui-1-8 branch September 14, 2026 21:26
@github-actions github-actions Bot added this to the Gutenberg 24.1 milestone Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Package] DataViews /packages/dataviews [Package] UI /packages/ui [Type] Task Issues or PRs that have been broken down into an individual action to take

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants