Skip to content

🐛 Repair the UI regressions from the MUI 9 upgrade - #910

Merged
0x46616c6b merged 3 commits into
mainfrom
fix/mui-9-ui-regressions
Aug 19, 2026
Merged

🐛 Repair the UI regressions from the MUI 9 upgrade#910
0x46616c6b merged 3 commits into
mainfrom
fix/mui-9-ui-regressions

Conversation

@0x46616c6b

Copy link
Copy Markdown
Member

Summary

The MUI 9 upgrade (#891) broke the admin UI in several places without producing a single runtime error, most visibly on the ticker view: the Configure button collapsed onto the headline and the message form toolbar stacked vertically instead of forming a row.

The cause is that MUI 9 removed support for system props. Layout props passed directly to a component — alignItems, justifyContent, display, flexGrow, mb — are no longer turned into CSS and are forwarded to the DOM as attributes:

<div class="MuiStack-root" alignitems="center" justifycontent="space-between" mb="2">

Moving them into sx restores the previous layout. Typography colours needed the same treatment: dotted palette paths such as color="text.secondary" are no longer resolved.

Auditing the rest of the upgrade surfaced more silent breakage:

  • Button style overrides keyed by variant and colour (containedInherit, containedPrimary, …) no longer exist and are now expressed as style variants, which is what restores the button shadows.
  • CardHeader takes slotProps for title and subheader typography; Typography lost its paragraph prop, making that override dead code.
  • Popover takes slotProps.paper instead of PaperProps, TextField takes slotProps.input instead of InputProps — the latter dropped the phone icon from the Signal admin form.
  • Opening the ticker list row menu threw MenuListContext is missing, because MUI 9's MenuItem requires a MenuList. The user list had already been fixed for this, the ticker list had not.

The last commit clears the remaining type errors from the React 19 and Node type upgrades (the global JSX namespace, NodeJS.Timeout, useRef without an initial value), so that npm run tsc passes again.

Why it slipped through

tsc already flagged most of these as type errors, but no workflow runs it — integration.yml only tests and builds, and Vite's build does not type-check. Adding npm run tsc to CI would have caught the upgrade, and is worth doing in a follow-up.

🤖 Generated with Claude Code

0x46616c6b and others added 3 commits August 19, 2026 19:48
MUI 9 removed support for system props on components: layout props passed
directly to Stack, Box, Grid or Typography are no longer translated into CSS
and end up as plain DOM attributes instead. That silently broke every flex
row in the admin UI, most visibly the ticker headline and the message form
toolbar.

Move alignItems, justifyContent, display, flexGrow and spacing props into
sx, and switch Typography colours to values MUI 9 still resolves.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The MUI 9 upgrade also dropped a set of APIs the theme and a few components
still used, all of them without a runtime error:

- Button style overrides keyed by variant and colour (containedInherit and
  friends) are gone; express them as style variants instead.
- CardHeader takes slotProps for its title and subheader typography.
- Typography no longer has a paragraph prop, so its override is dead code.
- Popover takes slotProps.paper instead of PaperProps, TextField takes
  slotProps.input instead of InputProps.

Opening the ticker list row menu additionally threw, because MenuItem now
requires a MenuListContext. Wrap the items in a MenuList, as already done
for the user list.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The global JSX namespace is gone with React 19, NodeJS.Timeout is no longer
exported, and useRef requires an explicit initial value. Use ReactElement,
derive the timer type from setTimeout, and reference globalThis in the test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@0x46616c6b 0x46616c6b added the bug Something isn't working label Aug 19, 2026
@0x46616c6b
0x46616c6b marked this pull request as ready for review August 19, 2026 17:49
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
75.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@0x46616c6b
0x46616c6b merged commit ec7d9c3 into main Aug 19, 2026
7 of 8 checks passed
@0x46616c6b
0x46616c6b deleted the fix/mui-9-ui-regressions branch August 19, 2026 17:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant