Apply Dixie refresh style deltas - #33
Conversation
- Card: add hairline border in light mode (dark unchanged) - Pill TabBar: read as a segmented control — drop uppercase/tracking, size up, add container border - Sidebar: active nav row carries the orange brand accent (SidebarLink and SidebarItem), softer rounded-lg corners - Sidebar chrome is now always navy in both light and dark mode; reworked SidebarLink, SidebarItem, SidebarUser, SidebarSearch, SidebarSection, SidebarGroup, and the collapse toggle to their on-navy treatment Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Preview deployed! 🚀View the playground preview at: https://thegpvc.github.io/gp-ui/pr-33/ Last updated: 2026-07-18T05:26:06.045Z |
Review: Apply Dixie refresh style deltas (#33)Reviewed the diff via Overview
Code quality / conventions
Potential issues
PerformanceNo concerns — purely class-name/CSS changes, no new renders, no new dependencies. SecurityNo concerns — no user input, no new DOM injection, no new external calls. Test coverageNo test files exist for VerdictSolid, well-scoped style PR. Recommend snapping the |
- Layout and ContentPane main-area background falls back to cream in light mode (was bg-gray-50); dark unchanged - ProportionChart: add legendColumns prop; legend now lays out in a single non-wrapping row (defaults to the visible segment count) so a trailing item can't become a lone widow. Labels/values truncate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
🧹 Preview deployment has been cleaned up. |
ReviewOverall this is a clean, well-scoped style PR that follows the repo's conventions well (three-tier dark hierarchy, muted-text contrast rule, token usage). A few things worth a look before merge: 🐛 Likely bug: active nav item loses its orange accent on hoverIn both const baseClasses = cn(
"flex items-center gap-3 px-2 py-2 rounded-lg text-sm font-medium transition-colors w-full",
"text-navy-300 hover:text-white hover:bg-navy-700",
isActive && "bg-orange-500/[0.14] text-orange-300 hover:text-orange-300"
);
The previous code avoided this because active and hover resolved to the same color in dark mode ( Breaking visual change with no changelog entryDelta 4 makes Also worth double-checking against the CLAUDE.md guidance that
|
Style + layout changes to match the Dixie session + dashboard mocks, plus a couple of follow-up tunes.
Changes
theme.css.gp-cardTabBar.tsxSidebarLink.tsx/SidebarItem.tsxSidebar.tsx+ sub-componentsLayout.tsx/ContentPane.tsxProportionChart.tsx1 — Card light-mode border
.gp-cardgets a hairlineborder-gray-200in light mode for cleaner separation on the cream page (dark unchanged).2 — Pill TabBar → segmented control
The pill
TabBardrops the uppercase/tracking treatment, sizes up (px-5 py-1.5 text-sm), and gets a container border so it reads as a modern segmented control. Active state unchanged. (This doubles as the "button group in pill mode" control — session sub-nav, dashboard time-range switch.)3 — Orange-tinted active nav item
The active nav row now carries the orange brand accent. Applied to both
SidebarLink(compound API) andSidebarItem(theitems-prop API) so the two code paths stay visually identical, plus softerrounded-lgcorners.4 — Always-navy sidebar chrome (brand decision)
The sidebar is chrome, so it now renders navy in both light and dark mode. Reworked
SidebarLink,SidebarItem,SidebarUser,SidebarSearch,SidebarSection,SidebarGroup, and the collapse toggle to their on-navy treatment (collapsing the redundantlight dark:pairs into a single navy treatment) so text stays readable on navy in light mode.5 — Cream page background in light mode
The main content area fell back to
bg-gray-50in light mode; it now uses thecreambrand token (Layout.tsx×2 page wrappers +ContentPane.tsx). Dark (navy-950) unchanged. Dropdown-menu hover states keepbg-gray-50(chrome).6 — Non-wrapping ProportionChart legend
Added a
legendColumns?: numberprop (defaults to the visible segment count). The legend now lays out in a single non-wrapping row of that many columns, so a trailing item can't become a lone "widow" on a second row. Labels/valuestruncate. Note: this drops the old responsivegrid-cols-2 sm:grid-cols-5— a wide legend stays one row on narrow viewports rather than reflowing.Playground
SidebarDemonote updated to reflect always-navy chrome.ProportionChartDemogains a "Fixed legend columns (no widow)" example + usage note.Verification
npm run build✓npm run typecheck✓npm run lint✓npm run test:run✓ (63 tests)🤖 Generated with Claude Code