Skip to content

Commit e5cb719

Browse files
Copilothotlong
andcommitted
feat: add transition-colors to interactive elements, replace remaining hardcoded grays in ObjectGrid and LayoutRenderer
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 3e2c554 commit e5cb719

File tree

6 files changed

+24
-17
lines changed

6 files changed

+24
-17
lines changed

ROADMAP.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,24 +786,30 @@ The `FlowDesigner` is a canvas-based flow editor that bridges the gap between th
786786
> All items from the UI consistency optimization (Issue #749) have been implemented.
787787
788788
**Global Theme & Design Tokens:**
789-
- [x] Hardcoded gray colors in `GridField.tsx` and `ReportRenderer.tsx` replaced with theme tokens (`text-muted-foreground`, `bg-muted`, `border-border`)
789+
- [x] Hardcoded gray colors in `GridField.tsx`, `ReportRenderer.tsx`, and `ObjectGrid.tsx` replaced with theme tokens (`text-muted-foreground`, `bg-muted`, `border-border`, `border-foreground`)
790790
- [x] Global font-family (`Inter`, ui-sans-serif, system-ui) injected in `index.css` `:root`
791791
- [x] `--config-panel-width: 280px` CSS custom property added for unified config panel sizing
792792
- [x] Border radius standardized to `rounded-lg` across report/grid components
793+
- [x] `transition-colors duration-150` added to all interactive elements (toolbar buttons, tab bar, sidebar menu buttons)
794+
- [x] `LayoutRenderer.tsx` outer shell `bg-slate-50/50 dark:bg-zinc-950` replaced with `bg-background` theme token
793795

794796
**Sidebar Navigation:**
795797
- [x] `SidebarMenuButton` active state enhanced with 3px left indicator bar via `before:` pseudo-element
798+
- [x] `SidebarMenuButton` transition expanded to include `color, background-color` with `duration-150`
796799
- [x] `SidebarGroupLabel` visual separator added (`border-t border-border/30 pt-3 mt-2`)
797800
- [x] Collapsed-mode tooltip support in `SidebarNav` via `tooltip={item.title}` prop
801+
- [ ] `LayoutRenderer.tsx` hand-written sidebar → `SidebarNav` unification (deferred: requires extending SidebarNav to support nested menus, logo, version footer)
798802

799803
**ListView Toolbar:**
800804
- [x] Search changed from expandable button to always-visible inline `<Input>` (`w-48`)
801805
- [x] Activated state (`bg-primary/10 border border-primary/20`) added to Filter/Sort/Group/Color buttons when active
802806
- [x] Toolbar overflow improved with `overflow-x-auto` for responsive behavior
807+
- [x] `transition-colors duration-150` added to all toolbar buttons
803808

804809
**ObjectGrid Cell Renderers:**
805810
- [x] `formatRelativeDate()` function added for relative time display ("Today", "2 days ago", "Yesterday")
806811
- [x] DataTable/VirtualGrid header styling unified: `text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70 bg-muted/30`
812+
- [x] Remaining hardcoded gray colors in ObjectGrid loading spinner and status badge fallback replaced with theme tokens
807813

808814
**ConfigPanelRenderer:**
809815
- [x] `<Separator>` added between sections for visual clarity
@@ -812,6 +818,7 @@ The `FlowDesigner` is a canvas-based flow editor that bridges the gap between th
812818
**View Tab Bar:**
813819
- [x] Tab spacing tightened (`gap-0.5`, `px-3 py-1.5`)
814820
- [x] Active tab indicator changed to bottom border (`border-b-2 border-primary font-medium text-foreground`)
821+
- [x] `transition-colors duration-150` added to tab buttons
815822

816823
### P2.5 PWA & Offline (Real Sync)
817824

packages/components/src/ui/sidebar.tsx

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/plugin-grid/src/ObjectGrid.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -708,8 +708,8 @@ export const ObjectGrid: React.FC<ObjectGridProps> = ({
708708
}
709709
return (
710710
<div className="p-4 sm:p-8 text-center">
711-
<div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900"></div>
712-
<p className="mt-2 text-sm text-gray-600">Loading grid...</p>
711+
<div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-foreground"></div>
712+
<p className="mt-2 text-sm text-muted-foreground">Loading grid...</p>
713713
</div>
714714
);
715715
}
@@ -909,7 +909,7 @@ export const ObjectGrid: React.FC<ObjectGridProps> = ({
909909
return 'bg-indigo-100 text-indigo-800 border-indigo-300';
910910
if (v.includes('prospecting') || v.includes('new') || v.includes('open'))
911911
return 'bg-purple-100 text-purple-800 border-purple-300';
912-
return 'bg-gray-100 text-gray-800 border-gray-300';
912+
return 'bg-muted text-muted-foreground border-border';
913913
};
914914

915915
// Left border color for card accent based on stage

packages/plugin-list/src/ListView.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,7 +1019,7 @@ export const ListView: React.FC<ListViewProps> = ({
10191019
variant="ghost"
10201020
size="sm"
10211021
className={cn(
1022-
"h-7 px-2 text-muted-foreground hover:text-primary text-xs",
1022+
"h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150",
10231023
hiddenFields.size > 0 && "text-primary"
10241024
)}
10251025
>
@@ -1078,7 +1078,7 @@ export const ListView: React.FC<ListViewProps> = ({
10781078
variant="ghost"
10791079
size="sm"
10801080
className={cn(
1081-
"h-7 px-2 text-muted-foreground hover:text-primary text-xs",
1081+
"h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150",
10821082
hasFilters && "bg-primary/10 border border-primary/20 text-primary"
10831083
)}
10841084
>
@@ -1117,7 +1117,7 @@ export const ListView: React.FC<ListViewProps> = ({
11171117
variant="ghost"
11181118
size="sm"
11191119
className={cn(
1120-
"h-7 px-2 text-muted-foreground hover:text-primary text-xs",
1120+
"h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150",
11211121
groupingConfig && "bg-primary/10 border border-primary/20 text-primary"
11221122
)}
11231123
>
@@ -1177,7 +1177,7 @@ export const ListView: React.FC<ListViewProps> = ({
11771177
variant="ghost"
11781178
size="sm"
11791179
className={cn(
1180-
"h-7 px-2 text-muted-foreground hover:text-primary text-xs",
1180+
"h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150",
11811181
currentSort.length > 0 && "bg-primary/10 border border-primary/20 text-primary"
11821182
)}
11831183
>
@@ -1216,7 +1216,7 @@ export const ListView: React.FC<ListViewProps> = ({
12161216
variant="ghost"
12171217
size="sm"
12181218
className={cn(
1219-
"h-7 px-2 text-muted-foreground hover:text-primary text-xs",
1219+
"h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150",
12201220
rowColorConfig && "bg-primary/10 border border-primary/20 text-primary"
12211221
)}
12221222
>
@@ -1281,7 +1281,7 @@ export const ListView: React.FC<ListViewProps> = ({
12811281
<Button
12821282
variant="ghost"
12831283
size="sm"
1284-
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs"
1284+
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150"
12851285
>
12861286
<Download className="h-3.5 w-3.5 mr-1.5" />
12871287
<span className="hidden sm:inline">Export</span>
@@ -1311,7 +1311,7 @@ export const ListView: React.FC<ListViewProps> = ({
13111311
<Button
13121312
variant="ghost"
13131313
size="sm"
1314-
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs"
1314+
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150"
13151315
title={`Sharing: ${schema.sharing?.visibility || schema.sharing?.type || 'private'}`}
13161316
data-testid="share-button"
13171317
>
@@ -1325,7 +1325,7 @@ export const ListView: React.FC<ListViewProps> = ({
13251325
<Button
13261326
variant="ghost"
13271327
size="sm"
1328-
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs"
1328+
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150"
13291329
onClick={() => window.print()}
13301330
data-testid="print-button"
13311331
>
@@ -1342,7 +1342,7 @@ export const ListView: React.FC<ListViewProps> = ({
13421342
<Button
13431343
variant="ghost"
13441344
size="sm"
1345-
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs"
1345+
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150"
13461346
data-testid="add-record-button"
13471347
onClick={() => props.onAddRecord?.()}
13481348
>
@@ -1456,7 +1456,7 @@ export const ListView: React.FC<ListViewProps> = ({
14561456
<Button
14571457
variant="ghost"
14581458
size="sm"
1459-
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs"
1459+
className="h-7 px-2 text-muted-foreground hover:text-primary text-xs transition-colors duration-150"
14601460
data-testid="add-record-button"
14611461
onClick={() => props.onAddRecord?.()}
14621462
>

packages/plugin-list/src/components/TabBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export const TabBar: React.FC<TabBarProps> = ({
100100
variant="ghost"
101101
size="sm"
102102
className={cn(
103-
"h-7 px-3 py-1.5 text-xs rounded-none",
103+
"h-7 px-3 py-1.5 text-xs rounded-none transition-colors duration-150",
104104
isActive
105105
? "border-b-2 border-primary font-medium text-foreground"
106106
: "text-muted-foreground hover:text-foreground"

packages/runner/src/LayoutRenderer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export const LayoutRenderer = ({ app, children, currentPath, onNavigate }: Layou
150150
const LogoIcon = app.logo && !app.logo.includes('/') && !app.logo.includes('.') ? getIcon(app.logo) : null;
151151

152152
return (
153-
<div className={`flex min-h-screen w-full bg-slate-50/50 dark:bg-zinc-950 ${app.className || ''}`}>
153+
<div className={`flex min-h-screen w-full bg-background ${app.className || ''}`}>
154154
{/* Sidebar - Only if configured */}
155155
{layout === 'sidebar' && (
156156
<aside

0 commit comments

Comments
 (0)