fix(ui): dark mode for DQ & Observability component surfaces (#6459) - #33586
shah-harshit wants to merge 9 commits into
Conversation
Combined dark-mode pass over the remaining Data Quality & Observability AI-mode routes (workstream open-metadata/openmetadata-collate#6459). Swaps compile-time fixed-hex LESS palette vars and raw Tailwind palette classes for adaptive semantic / auto-inverting utility tokens; light-mode values are preserved (exact for status colors) and only the resolved dark values change. Covers: - #6533 Add/Edit Test Case: TestCaseFormV1.less, add-test-suite-pipeline (@grey-*/@Blue-22 surfaces), AddTestCaseList bg-white -> tw:bg-primary. - #6531 Incident Manager: dimensionality heatmap legend + tooltip, failed sample-data diff rows, incident/result tab surfaces (@grey-*/status hex -> semantic + utility-{success,error,warning}). - #6532 Table DQ + Profiler: ProfilerLatestValue, TestSummaryGraph, no-profiler-banner, table-profiler (neutral greys -> semantic roles). - #6538 Pipeline Observability: data-observability-tab border. - #6530 Alerts: AlertAiNotificationSection bg-white + text-gray-500. Status hexes map to exact-match auto-inverting utility tokens (@red-22=error-500, @warning-400=warning-400, @Green-9=success-50, @Blue-22=blue-light-50, @alert-error-icon-bg-1=error-100). Neutral greys map to --color-bg/border/text semantic roles. Deferred (categorical, tracked for the token foundation): the 5-level incident severity ramp and the heatmap data-viz white-fade gradients in incident-manager.style.less / DimensionalityHeatmap.less need shared dark palette values rather than per-page overrides. Verify-only (no offenders found; AI routes already on semantic tokens): #6540 Test Suites list, #6535 Test Case details/versions, #6537 Test Library, #6536 Suite details/ingestion. Refs open-metadata/openmetadata-collate#6533 open-metadata/openmetadata-collate#6531 open-metadata/openmetadata-collate#6532 open-metadata/openmetadata-collate#6538 open-metadata/openmetadata-collate#6530 open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
❌ PR checklist incompleteThis PR cannot be merged until the following are addressed on its linked issue:
The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically. Maintainers can bypass this check by adding the |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
✅ Playwright Results — workflow succeededValidated commit ✅ 4492 passed · ❌ 0 failed · 🟡 7 flaky · ⏭️ 1 skipped · 🧰 0 lifecycle flaky PerformanceBlocking targets: ✅ met · Optimization targets: 🟡 in progress Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting. 🕒 Full workflow signal wall (to summary) 54m 24s ⏱️ Max setup 4m 39s · max shard execution 23m 56s · max shard-job elapsed before upload 27m 0s · reporting 24s 🌐 220.81 requests/attempt · 2.23 app boots/UI scenario · 43.94% common-shard skew Optimization targets still in progress:
🟡 7 flaky test(s) (passed on retry)
How to debug locally# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip # view trace |
The AI-mode Data Quality summary shells already use adaptive semantic tokens, but the shared widgets they embed (chart backgrounds, status cards, statistic widgets, test-case status chart) baked compile-time fixed-hex LESS palette vars (@grey-26/@grey-9/@grey-2/@grey-50, @Blue-13, @GREEN-*, @RED-*, @yellow-10, @alert-*) that cannot follow the theme, so those surfaces stayed light in dark mode. Swap the fixed palette vars for adaptive tokens: - neutral surfaces/borders -> semantic --color-bg-secondary_subtle / --color-bg-secondary / --color-border-secondary - status colors -> --tw-color-utility-{error,success,warning,blue}-*, which auto-invert in dark (mirrors the merged StatusCardWidget precedent). Every status mapping is an exact light-value match, so light mode does not regress. - AI dashboard section tint tw:bg-gray-blue-25 (fixed light) -> tw:bg-utility-gray-blue-50 (auto-inverting). Already-adaptive utility-gray vars are left as-is. Categorical chart/ status data colors are intentionally unchanged. Refs open-metadata/openmetadata-collate#6539 open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Address review on the DQ summary dark-mode PR: - The coverage/all-tests chart icon mapped @blue-500 (#0ba5ec, cyan) to utility-blue-500 (#2e90fa), a perceptible cyan->blue hue shift in light mode. #0ba5ec is exactly the blue-light-500 ramp, so switch the icon fg to utility-blue-light-500 and its background (@Blue-13 #e0f2fe) to utility-blue-light-100 (#e0f2fe) — both now exact light-value matches. - DataQualityDashboard.test.tsx still asserted the removed bg-gray-blue-25 classes; update both expectations to bg-utility-gray-blue-50 so the focused test matches the component. Suite passes (8/8). Refs open-metadata/openmetadata-collate#6539 open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The dimension-count chip in the AI-mode Test Cases list used the raw palette class tw:bg-blue-50, which does not invert in dark mode, so its light-blue background stayed fixed while tw:text-primary flipped to a light foreground — light-on-light, unreadable in dark. Swap to tw:bg-utility-blue-50, which auto-inverts (light blue tint in light, dark blue in dark) per colors.md §2.7, keeping text-primary readable in both themes. Light mode is unchanged. The rest of the Test Cases list (table header, filters, table shell) was already on adaptive semantic tokens. Refs open-metadata/openmetadata-collate#6534 open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
Address greptile P2: bg-utility-gray-blue-50 resolved to #f8f9fc in light, shifting the section-card surface from the original bg-gray-blue-25 (#fcfcfd). Use tw:bg-secondary_subtle instead — light #fdfdfd (effectively unchanged) and a proper dark surface, matching the LESS card surfaces in this PR. Focused test updated; suite passes 8/8. Refs open-metadata/openmetadata-collate#6539 open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Addressed the P2 light-drift comments (2d6dfd4):
|
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
Replace the per-file dark-mode token swaps with a single global bridge so the fixed-hex legacy LESS palette vars adapt to dark mode everywhere they are used, with zero light-mode drift and no per-component edits. - variables.less: the 27 fixed-hex vars this workstream touched (@grey-1/2/5/7/9/15/25/26/50, @green-9/10/12/100/500, @red-9/10/22, @yellow-10, @blue-13/22/500, @warning-100/400, @alert-*) become `@x: var(--legacy-x, #originalHex)`. Light resolves to the exact original hex (no drift — fixes the greptile light-shift comments); dark picks up the override. - app.less: one `.dark-mode` block maps each `--legacy-*` to the semantic / auto-inverting utility token (neutrals -> --color-bg/border/text roles, status -> utility-{success,error,warning,blue-light}-*). - Revert the individual DQ/Profiler/IncidentManager/Alerts LESS files back to origin/main — they now adapt automatically through the bridge. Verified: variables.less and a consumer (.less) compile via lessc, emitting `var(--legacy-*, #hex)`; no legacy var is used in a LESS color function or operation (checked app-wide), so the var() substitution is safe. @black left literal (mostly non-DQ, app-wide). Categorical severity/heatmap ramps still deferred to the token foundation. Raw Tailwind palette classes in TSX (bg-white, bg-gray-50, text-gray-500, border-gray-300, bg-gray-blue-25) keep their per-file semantic swaps — they are not LESS vars and have no global bridge. Refs open-metadata/openmetadata-collate#6459 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Reworked into a global legacy-var bridge (06c0246) and reverted the per-file LESS swaps:
This also fully resolves the earlier P2 light-drift comments: light mode is the exact original hex via the |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Both P2 light-drift comments are resolved after splitting the token bridge into #33597:
This PR now carries only the DQ consumer changes (TSX raw-class → semantic swaps); the global |
The DQ page header card, tab-nav container, and table container draw their border from @global-border (@Grey-15) — a solid gray that stands out in dark. Scope a dark-only override to border-subtle (rgba(255,255,255,0.08)) to match the subtle white-alpha border used across dark surfaces. Light unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Code Review ✅ Approved🟢 Low risk Replaces non-adaptive Tailwind color classes with semantic tokens across DQ and Observability component surfaces to enable dark mode support. Light mode remains unchanged, and no issues were found. OptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
Describe your changes:
Refs open-metadata/openmetadata-collate#6459
Gate contract: open-metadata/openmetadata-collate#6564
Depends on #33597 (global legacy-var bridge + app background).
DQ/Observability component-level dark-mode fixes — swaps non-adapting Tailwind color classes to semantic ones on the
.tsxsurfaces (bg-white→tw:bg-primary,bg-gray-50→tw:bg-secondary,text-gray-500→tw:text-tertiary,border-gray-300→tw:border-secondary,bg-gray-blue-25→bg-secondary_subtle,bg-blue-50→bg-utility-blue-50).The
.less-surface theming for these pages is delivered globally by the legacy-var bridge in #33597 (kept separate per review) — hence the dependency. Light mode unchanged.Type of change:
Checklist:
.lessbridge.The PR appears safe to merge; no actionable regressions remain in the reviewed changes.
Summary
This PR updates Data Quality and Observability surfaces to use theme-aware semantic colors and adds a dark-only border treatment for the Data Quality page.
Reviews (6) · Last reviewed commit: "fix(ui): DQ page header/tab/table border..."