feat(frontend): upgrade Ant Design from v5 to v6#41636
Conversation
✅ Deploy Preview for superset-docs-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #41636 +/- ##
==========================================
+ Coverage 64.76% 64.77% +0.01%
==========================================
Files 2688 2687 -1
Lines 148926 148796 -130
Branches 34370 34353 -17
==========================================
- Hits 96451 96387 -64
+ Misses 50711 50648 -63
+ Partials 1764 1761 -3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Code Review Agent Run #8eacea
Actionable Suggestions - 1
-
superset-frontend/packages/superset-ui-core/src/components/Tabs/Tabs.test.tsx - 1
- Incomplete refactoring - test/component mismatch · Line 51-51
Additional Suggestions - 7
-
superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx - 1
-
Query method change - needs runtime verification · Line 64-64Changed query from `getByRole('img', { name: 'calendar' })` to `getByLabelText('calendar')`. Verify the DatePicker icon renders with aria-label="calendar" - otherwise tests will fail at runtime when no element matches.
-
-
superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx - 1
-
Dropdown alignment removed · Line 409-409Removing `dropdownAlign` from the `Select` component may cause a regression in dropdown menu positioning. The deleted configuration controlled alignment (`points: ['tl', 'bl']`), vertical offset (`[0, 4]`), and overflow adjustment (`adjustX: 0, adjustY: 1`). If this change was intentional, verify the default behavior meets UX requirements; otherwise restore the prop to avoid positioning issues in the semantic layer type selector.
-
-
superset-frontend/packages/superset-ui-core/src/components/CronPicker/index.tsx - 1
-
Incomplete v6 CSS migration · Line 178-178This selector change from `.ant-select-selector` to `.ant-select-content` appears correct for antd v6 migration, but the same file contains two other ant-select CSS selectors (`.ant-select-selection-placeholder` at line 191 and `.ant-select-selection-overflow-item` at line 196) that still use v5 class names. For consistency and maintainability, verify these other selectors are still valid in v6 or update them as part of the same migration effort.
-
-
superset-frontend/src/components/TableSelector/TableSelector.test.tsx - 1
-
Inconsistent CSS selector pattern · Line 63-63Update `getSelectItemContainer` to handle both antd v5 and v4 class names by first querying for `ant-select-content-has-value` and falling back to `ant-select-selection-item` for broader compatibility.
-
-
superset-frontend/packages/superset-core/src/theme/Theme.test.tsx - 1
-
Semantic duplication in test setup patterns · Line 952-965The light and dark mode token-completeness tests (lines 952-965 and 967-979) share nearly identical setup code. While functionally correct, this duplication creates maintenance risk if the base theme or algorithm selection logic changes.
-
-
superset-frontend/packages/superset-ui-core/src/components/TableCollection/TableCollection.test.tsx - 1
-
Unnecessary optional chaining on parentNode · Line 107-107The optional chaining `?.` on `container?.parentNode` may mask test failures. Since `container` comes from `screen.getByTestId('listview-table').parentNode` and should always exist in the rendered loading state, using `container.parentNode` would align with other assertions (line 106) and better catch regressions if the DOM structure changes.
-
-
superset-frontend/jest.config.js - 1
-
Unreachable pattern dead code · Line 75-75The added `|@x0k/.*|` pattern segment references packages that do not exist in package.json dependencies. This is unreachable dead code within the diff — while it won't cause a compilation or runtime failure, it increases regex complexity without serving any purpose and may confuse future maintainers.
-
Filtered by Review Rules
Bito filtered these suggestions based on rules created automatically for your feedback. Manage rules.
-
superset-frontend/src/dashboard/components/CustomizationsBadge/index.tsx - 1
- Wrong style key for antd v6 · Line 289-289
-
superset-frontend/packages/superset-ui-core/src/components/Select/constants.ts - 1
- Dead code removal incomplete · Line 33-40
Review Details
-
Files reviewed - 54 · Commit Range:
e35c7ae..e35c7ae- superset-frontend/jest.config.js
- superset-frontend/packages/superset-core/src/theme/Theme.test.tsx
- superset-frontend/packages/superset-core/src/theme/__snapshots__/Theme.test.tsx.snap
- superset-frontend/packages/superset-core/src/theme/utils/index.ts
- superset-frontend/packages/superset-ui-core/src/components/Collapse/Collapse.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/CronPicker/index.tsx
- superset-frontend/packages/superset-ui-core/src/components/DropdownContainer/DropdownContainer.tsx
- superset-frontend/packages/superset-ui-core/src/components/Label/index.tsx
- superset-frontend/packages/superset-ui-core/src/components/PageHeaderWithActions/PageHeaderWithActions.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.tsx
- superset-frontend/packages/superset-ui-core/src/components/Select/Select.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/Select/Select.tsx
- superset-frontend/packages/superset-ui-core/src/components/Select/constants.ts
- superset-frontend/packages/superset-ui-core/src/components/Select/types.ts
- superset-frontend/packages/superset-ui-core/src/components/TableCollection/TableCollection.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/Tabs/Tabs.test.tsx
- superset-frontend/packages/superset-ui-core/src/components/Tooltip/index.tsx
- superset-frontend/packages/superset-ui-core/src/components/TooltipParagraph/TooltipParagraph.test.tsx
- superset-frontend/plugins/plugin-chart-table/src/Styles.tsx
- superset-frontend/plugins/plugin-chart-table/test/TableChart.test.tsx
- superset-frontend/spec/helpers/jsDomWithFetchAPI.ts
- superset-frontend/src/SqlLab/components/ColumnElement/index.tsx
- superset-frontend/src/SqlLab/components/TabbedSqlEditors/TabbedSqlEditors.test.tsx
- superset-frontend/src/components/Chart/DrillBy/DrillBySubmenu.tsx
- superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
- superset-frontend/src/components/Datasource/components/DatasourceEditor/components/DatasetUsageTab/index.tsx
- superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/DatasourceEditor.test.tsx
- superset-frontend/src/components/ListView/ListView.tsx
- superset-frontend/src/components/TableSelector/TableSelector.test.tsx
- superset-frontend/src/dashboard/components/AddSliceCard/AddSliceCard.test.tsx
- superset-frontend/src/dashboard/components/CustomizationsBadge/index.tsx
- superset-frontend/src/dashboard/components/gridComponents/Tabs/Tabs.test.tsx
- superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilter.test.tsx
- superset-frontend/src/dashboard/components/nativeFilters/FilterBar/UrlFilters/Vertical.test.tsx
- superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.test.tsx
- superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
- superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/NewItemDropdown.tsx
- superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.test.tsx
- superset-frontend/src/explore/components/controls/DateFilterControl/components/DateFunctionTooltip.tsx
- superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx
- superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx
- superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx
- superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx
- superset-frontend/src/explore/components/controls/NumberControl/NumberControl.test.tsx
- superset-frontend/src/explore/components/controls/SelectControl.test.tsx
- superset-frontend/src/features/alerts/AlertReportModal.test.tsx
- superset-frontend/src/features/semanticLayers/MultiEnumControl.test.tsx
- superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx
- superset-frontend/src/features/tasks/TaskPayloadPopover.tsx
- superset-frontend/src/features/tasks/TaskStackTracePopover.tsx
- superset-frontend/src/pages/ChartCreation/index.tsx
- superset-frontend/src/pages/ChartList/ChartList.listview.test.tsx
- superset-frontend/src/visualizations/TimeTable/TimeTable.test.tsx
-
Files skipped - 5
- superset-frontend/package-lock.json - Reason: Filter setting
- superset-frontend/package.json - Reason: Filter setting
- superset-frontend/packages/superset-core/package.json - Reason: Filter setting
- superset-frontend/packages/superset-ui-chart-controls/package.json - Reason: Filter setting
- superset-frontend/packages/superset-ui-core/package.json - Reason: Filter setting
-
Tools
- Whispers (Secret Scanner) - ✔︎ Successful
- Detect-secrets (Secret Scanner) - ✔︎ Successful
- Eslint (Linter) - ✔︎ Successful
Bito Usage Guide
Commands
Type the following command in the pull request comment and save the comment.
-
/review- Manually triggers a full AI review. -
/pause- Pauses automatic reviews on this pull request. -
/resume- Resumes automatic reviews. -
/resolve- Marks all Bito-posted review comments as resolved. -
/abort- Cancels all in-progress reviews.
Refer to the documentation for additional commands.
Configuration
This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.
Documentation & Help
Code Review Agent Run #7c4d77Actionable Suggestions - 0Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
Code Review Agent Run #a43638Actionable Suggestions - 0Filtered by Review RulesBito filtered these suggestions based on rules created automatically for your feedback. Manage rules.
Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
Code Review Agent Run #43c082Actionable Suggestions - 0Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
|
🎪 Showtime deployed environment on GHA for 78b83aa • Environment: http://34.219.246.22:8080 (admin/admin) |
Code Review Agent Run #d69f33Actionable Suggestions - 0Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
|
🎪 Showtime deployed environment on GHA for fc0b90c • Environment: http://18.236.87.216:8080 (admin/admin) |
Code Review Agent Run #fe62ebActionable Suggestions - 0Filtered by Review RulesBito filtered these suggestions based on rules created automatically for your feedback. Manage rules.
Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
Upgrades antd 5.26 -> 6.5 (and @ant-design/icons -> 6) across the frontend. Theme-safe: the getDesignToken -> allowedAntdTokens -> ConfigProvider/Emotion bridge works on v6 with no token loss (only cosmetic box-shadow recomputation). Adds theme characterization tests that lock the full computed token set for light and dark so any future token rename/removal fails loudly. Key changes: - Theme bridge: coerce boolean `cssVar` (removed from v6 ThemeConfig) to the object form. - Wrappers/app: Select (dropdownAlign removed; showSearch/tokenSeparators union handling), Tooltip/Popover/DropdownContainer styles.body -> styles.container, Steps.Step -> items, Popover/Tooltip/Dropdown visible/onVisibleChange -> open/onOpenChange, Dropdown overlay -> menu, Pagination size="default" removed, .ant-tooltip-inner -> .ant-tooltip-container and .ant-select-selector -> .ant-select-content in styled CSS. - Fixes a real regression the tests caught: antd v6 Tag overwrites its `icon` prop's inline style, dropping Label icon colors; fixed by wrapping the icon. - Deps: remove unused @rjsf/antd (pinned antd 5); bump @rjsf/core/utils/ validator-ajv8 to v6; pin jsonforms-antd-renderers to antd 6 via overrides. - Test env: replace the `MessageChannel = undefined` stub with a polyfill (antd v6's scheduler needs the constructor). - Update test-DOM assertions across suites for v6 class/structure renames. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
E2E specs query antd's internal Select DOM, which v6 renamed. Fixes the Cypress + Playwright failures on the antd6 upgrade: - .ant-select-selection-search-input -> .ant-select-input (central Playwright Select helper + Cypress directories/utils; drives create-dataset, dataset-list modals, sqllab DB selection, and the "Select a dashboard" chart flow) - .ant-select-selector -> .ant-select-content - .ant-select-selection-placeholder -> .ant-select-placeholder - .ant-select-selection-item -> combined .ant-select-content-has-value, .ant-select-selection-item (single + multiple modes) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…tory - Add a direct regression test in Label.test.tsx asserting a Label with a colored icon keeps its color (guards the shared Label/index.tsx fix for antd v6's Tag overwriting the icon's inline style). - Update the Tooltip story argType onVisibleChange -> onOpenChange so the generated docs show the current antd v6 prop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
antd v6 moved the Select `aria-label` onto the combobox <input>, so
getByLabel('Dataset') resolved to the empty input (no text content) instead of
the value container. Scope getDatasetSelectContainer to
`.ant-select-content-has-value` (which wraps the input and holds the selected
value text), fixing the create-dataset wizard assertion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The auth suite only waits for the welcome URL + session cookie, so a
welcome page that routes correctly but renders a blank shell (only the
top nav) would still pass CI. Assert a Home content section ('Recents',
a Collapse panel absent from the nav) is visible, so a blank landing
page fails loudly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…or v6 antd 6 renamed several internal DOM classes; these styled-component and GlobalStyles overrides silently stopped matching (broken visual overrides no test catches). Verified each replacement against real antd 6 rendered DOM: - Popover: .ant-popover-inner -> .ant-popover-container (explore-popover padding) - Select value container: .ant-select-selector/.ant-select-selection-overflow -> .ant-select-content; overflow items .ant-select-selection-overflow-item[-rest|-suffix] -> .ant-select-content-item[-rest|-suffix]; placeholder .ant-select-selection-placeholder -> .ant-select-placeholder; search wrapper .ant-select-selection-search -> .ant-select-input. Multiple-mode tag .ant-select-selection-item is unchanged in v6 and kept as-is. The ColorPicker alpha overrides (#34721) are intentionally left untouched: the geostyler CSS they counteracted no longer hides those controls, and antd 6 removed the alpha-specific slider class — re-pointing them would wrongly restyle sliders. Flagged for visual QA instead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The antd 5->6 DOM class renames broke several CSS overrides silently — no test failed when a selector stopped matching. Add a contract test asserting the antd6 classes our overrides depend on still exist (select value/overflow/ placeholder containers, popover-container, tooltip-container, modal-body), so a future antd bump that renames one fails loudly here instead of shipping a visual regression. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…QL Lab editor) antd 6 restructured the Tabs content DOM, breaking the fullHeight height chain that SQL Lab, Explore, and several modals rely on. The Ace editor rendered into a 0-height container and never became visible — every chromium-sqllab Playwright test timed out at 60s (vs ~8s on master), and the editor was effectively unusable. antd 5 -> 6 positional rename (verified against real v6 rendered DOM): .ant-tabs-content-holder -> .ant-tabs-body-holder .ant-tabs-content (wrapper) -> .ant-tabs-body (new intermediate level) .ant-tabs-tabpane (panel) -> .ant-tabs-content (now the [role=tabpanel]) The new .ant-tabs-body level had no height rule, collapsing the chain. Applied the rename across the core Tabs wrapper and all app overrides that walk this DOM (SQL Lab App/SouthPane/SqlEditor, Explore ControlPanels/ DataTablesPane, DatabaseModal, DatasourceEditor, dashboard). Extended the antd DOM contract test to pin the body-holder -> body -> content chain so a future antd bump fails loudly instead of silently collapsing it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…act test Test-driven audit (rendering each antd6 component and dumping its real classes) surfaced more silently-broken overrides the earlier passes missed: - ChartCreation: `.ant-steps-item-tail` -> `.ant-steps-item-rail` (antd6 renamed the Steps connector line; the 'hide connector' rule had stopped matching). - DropdownContainer + plugin-chart-ag-grid-table: `.ant-popover-inner` -> `.ant-popover-container` (two sites missed when GlobalStyles was fixed). Verified via real v6 DOM that `.ant-modal-close-x`, `.ant-steps`/`-item-icon`/ `-item-title`/`-item-content` are NOT renamed and were correctly left alone. Extended antdDomContract.test.tsx with Steps (incl. the tail->rail rename that SQL Lab loading detection also depends on via `.ant-steps`) and the Select suffix/arrow class, so this whole class of silent breakage is guarded. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
An antd major bump is breaking for downstream plugin/extension authors: renamed .ant-* internal DOM classes (custom CSS silently stops matching), changed/removed component props, and CSS variables on by default. Log the notable renames and point at the upstream migration guide. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Deep review of the branch surfaced ten verified defects; fixes: - Restore the #36963 dropdown-positioning fix: antd 6 removed Select's `dropdownAlign`, and the migration deleted DROPDOWN_ALIGN_BOTTOM without a replacement. Re-expressed via the supported `builtinPlacements` prop (antd 6's own defaults with adjustX disabled). - Bump react-js-cron 5.2 -> 6.0.2 (antd >=6 peer): its vendor stylesheet was written against antd 5 Select classes, silently killing the cron error styling and layout. v6 ships antd6-native selectors. - Migrate the Collapse content family (.ant-collapse-content -> -panel, .ant-collapse-content-box -> -body) across Collapse.tsx, VizTypeGallery, ControlPanelsContainer, StandardModal, config-modal styles, and the Cypress selectors — same silent-override breakage as the Tabs chain. - DateFunctionTooltip: rules were nested inside a stale .ant-tooltip-content ancestor antd 6 never renders; apply them to .ant-tooltip-container. - Cypress advanced-time-range helper: .ant-popover-inner-content -> .ant-popover-content (v6 body element). - Narrow the Select wrapper's `showSearch` to boolean and `tokenSeparators` to string[]: antd 6 widened both (SearchConfig object, function form) but the wrapper silently discards those forms — make the unsupported forms a compile error instead. - AsyncSelect: suffix icon now reflects the effective searchability (allowNewOptions || showSearch), matching Select and the actual antd prop. - Add an rjsf v6 smoke test for ScheduleQueryButton (sole @rjsf consumer; form is config-driven so a breaking rjsf change is invisible to tsc). - Expand the antd DOM contract test: select input/suffix-item, tabs content-active, popover container>title+content structure, and the Collapse panel/body family. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… name)
- Format ScheduleQueryButton.test.tsx (long import line).
- FiltersConfigModal restore/undo tests (new on master, first exercised
against antd6 by the merge): query the filter delete button by its
intended accessible name. @ant-design/icons 6 fixes label precedence —
the developer-provided aria-label ('Remove filter') now correctly wins
over the icon-name default ('delete') that the icons 5 render exposed
and the tests had matched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
antd 6 removed the Tag's default margin-inline-end: 8px in favor of parents spacing tags via flex/Space gaps. App layouts predate that and rely on the v5 default — most visibly the dashboard header, where the Published tag sat flush against the metadata bar. Restore the margin in GlobalStyles (to be removed once Tag-adjacent layouts declare their own gaps) and pin it with a computed-style regression test that exercises the provider -> GlobalStyles -> Tag chain. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… rjsf6 array-button classes Convert the remaining high-risk manual-QA watch items into tests, and fix one more real bug the hardening surfaced: - ScheduleQueryButton (fix): rjsf 6 renamed the array-item button classes (array-item-* -> rjsf-array-item-*), so StyledJsonSchema's up/down/remove glyphs targeted dead classes and the buttons rendered completely empty (their glyphicon <i> is hidden by design). Update the selectors and pin the v6 class names with a test that adds array items and asserts all three buttons render. - jsonforms-antd-renderers (new real-render smoke test): the package has no antd 6 release and is forced onto antd 6 via overrides; the modal tests mock <JsonForms /> away. Render the real renderers exactly as SemanticLayerModal does (same renderers/cells/uischema) and exercise string/enum/boolean/number controls plus typing and dropdown selection. - CronPicker (new error-state test): the invalid-cron error styling was silently dead pre-react-js-cron-6; pin that an invalid value fires onError and applies the vendor's error class. - DROPDOWN_BUILTIN_PLACEMENTS (new characterization test): pin the #36963 contract — all four antd placements present with antd's points/offsets and horizontal viewport adjustment disabled. geostyler remains manual-QA only: it depends on OpenLayers + monaco, which are not meaningfully renderable in jsdom. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…object The Explore Results-grid page object arrived from master using .ant-tabs-tabpane-active; antd 6 renders the active panel as .ant-tabs-content-active, so the locator would never match and any spec using getResultsGrid() would time out. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…stion) The move-button assertions ran outside the waitFor guarding the remove buttons; same render pass so unlikely to flake, but consistent retry wrapping removes the risk entirely. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the `any` in the theme algorithm map with antd's `MappingAlgorithm` type, and apply `&&` specificity boosting to all three selectors in the Select max-height rule instead of just the first (bito suggestions). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
🎪 Showtime deployed environment on GHA for cd88821 • Environment: http://35.94.10.57:8080 (admin/admin) |
EnxDev's Review Agent — #41636 · HEAD cd88821comment — the parity upgrade is verified-complete and unusually well-tested; the only thing between this PR and green CI is two stale test selectors. Verification notes: I grepped the PR head for every class this PR renames ( 🟡 Should-fix
🔵 Nits
🙌 Praise
|
|
AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR). Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
SUMMARY
Upgrades Ant Design from v5.26 to v6 (
antd@6.5,@ant-design/icons@6) across theSuperset frontend. The upgrade is theme-safe: Superset's theme bridge
(
getDesignToken→allowedAntdTokens→ConfigProvider+ Emotion) works on v6with no token loss — the only design-token drift is antd 6 recomputing box-shadow
values (cosmetic; dark-mode shadows are now correctly white-based).
Approach. A characterization test locks the full computed token set for light and
dark (
Theme.test.tsx) so any token rename/removal fails loudly. React is already on18 (v6's floor), and none of v6's removed legacy components were in use, so the code
surface was small and centralized in the
@superset-ui/core/componentswrappers.Notable changes
booleanfromThemeConfig['cssVar'](nowobject-only);
deserializeThemeConfigcoercestrue→{},false→omit.dropdownAlignremoved,showSearch/tokenSeparatorsunionhandling), Tooltip/Popover/DropdownContainer
styles.body→styles.container.Steps.Step→items, Popover/Tooltipvisible/onVisibleChange→open/onOpenChange, Dropdownoverlay→menu, Paginationsize="default"removed,
dropdownAlignremoved,.ant-tooltip-inner→.ant-tooltip-containerand
.ant-select-selector→.ant-select-contentin styled CSS.Tagclones itsiconprop andoverwrites the icon's inline
style, which silently stripped icon colors onLabels. Fixed by wrapping the icon in a span inLabel/index.tsxso the wrapper(not the icon) is Tag's clone target.
@rjsf/antd(the package pinning antd 5) andbumped
@rjsf/core/utils/validator-ajv8to v6 (theme-agnostic, React-onlypeers).
@great-expectations/jsonforms-antd-renderershas no antd 6 release, so itis pinned to antd 6 via an
overridesentry. Installs cleanly — no ERESOLVE, nolegacy-peer-deps.MessageChannel = undefinedstub (an old rc-overflowworkaround) with a lightweight polyfill — antd 6's scheduler requires the
constructor.
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
UI is visually unchanged (parity upgrade). Manual dark/light + Storybook pass
recommended for reviewers; the Label icon-color fix restores v5 behavior.
TESTING INSTRUCTIONS
cd superset-frontend && npm ci && npm run type— 0 type errors.npm run test— full Jest suite green (antd-6 test-DOM assertions updated).npx jest packages/superset-core/src/theme/Theme.test.tsx.labels show colored icons, and Select/Tooltip/Popover render correctly.
ADDITIONAL INFORMATION