Conversation
✅ Deploy Preview for rstest-dev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
This PR upgrades the browser UI to Ant Design v6 and implements a visual refresh following Vercel's Geist design system. The changes focus on consistent theming with CSS variables, improved typography, and modernized UI components.
Changes:
- Upgraded Ant Design from v5 to v6 with updated component imports and API usage
- Implemented Geist design system with comprehensive CSS variables for colors
- Added system theme detection support alongside light/dark modes
- Refactored Tooltip API usage to the new
stylesprop pattern
Reviewed changes
Copilot reviewed 16 out of 17 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| pnpm-lock.yaml | Ant Design v6 dependency upgrade with new @rc-component packages |
| tailwind.config.cjs | Added Geist color scales as CSS variable references |
| src/index.css | Comprehensive Geist design system color variables for light/dark themes |
| src/main.tsx | System theme detection and improved Ant Design token configuration |
| src/utils/index.ts | Utility functions extracted for path handling and editor opening |
| src/components/*.tsx | Updated components to use Geist variables and new Ant Design v6 APIs |
| AGENTS.md | Added Geist design system guidelines |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <span className="text-[11px] font-medium tracking-wider text-(--accents-5) shrink-0"> | ||
| PREVIEW | ||
| </span> | ||
| <span className="text-(--accents-3) font-light select-none shrink-0"> | ||
| / | ||
| </span> | ||
| <div className="flex items-center gap-1.5 overflow-hidden"> | ||
| {dirPath && ( | ||
| <> | ||
| <span | ||
| className="text-[12px] font-mono tracking-tight text-(--accents-5) truncate max-w-[400px] hover:text-(--accents-6) transition-colors cursor-default" | ||
| title={dirPath} | ||
| > | ||
| {dirPath} | ||
| </span> | ||
| <span className="text-(--accents-3) font-light select-none shrink-0"> |
There was a problem hiding this comment.
Invalid Tailwind CSS class syntax. The class text-(--accents-5) should be written as text-[--accents-5] using bracket notation for CSS variables. This appears multiple times in this file (lines 54, 57, 64, 69, 85, 94, 105).
| <span className="text-[11px] font-medium tracking-wider text-(--accents-5) shrink-0"> | |
| PREVIEW | |
| </span> | |
| <span className="text-(--accents-3) font-light select-none shrink-0"> | |
| / | |
| </span> | |
| <div className="flex items-center gap-1.5 overflow-hidden"> | |
| {dirPath && ( | |
| <> | |
| <span | |
| className="text-[12px] font-mono tracking-tight text-(--accents-5) truncate max-w-[400px] hover:text-(--accents-6) transition-colors cursor-default" | |
| title={dirPath} | |
| > | |
| {dirPath} | |
| </span> | |
| <span className="text-(--accents-3) font-light select-none shrink-0"> | |
| <span className="text-[11px] font-medium tracking-wider text-[--accents-5] shrink-0"> | |
| PREVIEW | |
| </span> | |
| <span className="text-[--accents-3] font-light select-none shrink-0"> | |
| / | |
| </span> | |
| <div className="flex items-center gap-1.5 overflow-hidden"> | |
| {dirPath && ( | |
| <> | |
| <span | |
| className="text-[12px] font-mono tracking-tight text-[--accents-5] truncate max-w-[400px] hover:text-[--accents-6] transition-colors cursor-default" | |
| title={dirPath} | |
| > | |
| {dirPath} | |
| </span> | |
| <span className="text-[--accents-3] font-light select-none shrink-0"> |
| key: `${file}::__empty`, | ||
| title: ( | ||
| <Text type="secondary" className="text-xs"> | ||
| <span className="text-xs text-(--muted-foreground)"> |
There was a problem hiding this comment.
Invalid Tailwind CSS class syntax. The class text-(--muted-foreground) should be written as text-[--muted-foreground] using bracket notation for CSS variables. This pattern also appears on lines 380 and 400.
| <span className="text-xs text-(--muted-foreground)"> | |
| <span className="text-xs text-[--muted-foreground]"> |
| return ( | ||
| <div className="absolute inset-0 z-10 flex items-center justify-center bg-black/[0.02]"> | ||
| <Text type="secondary">{message}</Text> | ||
| <span className="text-sm text-(--muted-foreground)">{message}</span> |
There was a problem hiding this comment.
Invalid Tailwind CSS class syntax. The class text-(--muted-foreground) should be written as text-[--muted-foreground] using bracket notation for CSS variables.
| <span className="text-sm text-(--muted-foreground)">{message}</span> | |
| <span className="text-sm text-[--muted-foreground]">{message}</span> |
| return ( | ||
| <div className="flex h-full flex-col items-center justify-center gap-2"> | ||
| <Text type="warning">Reconnecting...</Text> | ||
| <span className="text-(--warning)">Reconnecting...</span> |
There was a problem hiding this comment.
Invalid Tailwind CSS class syntax. The class text-(--warning) should be written as text-[--warning] using bracket notation for CSS variables.
| setFlashKey((k) => k + 1); | ||
| }, 100); | ||
| return () => clearTimeout(timer); | ||
| } |
There was a problem hiding this comment.
The ref update prevCountsRef.current = counts happens outside the conditional check and is not in the cleanup function. This means the ref is always updated even when the counts haven't actually changed. The ref update should only happen when the conditions are met, or be moved to occur after the timeout completes.
| setFlashKey((k) => k + 1); | |
| }, 100); | |
| return () => clearTimeout(timer); | |
| } | |
| setFlashKey((k) => k + 1); | |
| // Update previous counts after the flash has been triggered | |
| prevCountsRef.current = counts; | |
| }, 100); | |
| return () => clearTimeout(timer); | |
| } | |
| // If counts haven't changed in the tracked fields, keep prevCountsRef in sync |
|
|
||
| export type StatusCounts = Record<CaseStatus, number>; | ||
| /* cspell:ignore nums */ | ||
| export type StatusCounts = Record<string, number>; |
There was a problem hiding this comment.
The type has been loosened from Record<CaseStatus, number> to Record<string, number>, losing type safety. This allows arbitrary string keys instead of limiting to the known status values ('idle', 'running', 'pass', 'fail', 'skip').
| export type StatusCounts = Record<string, number>; | |
| export type CaseStatus = 'idle' | 'running' | 'pass' | 'fail' | 'skip'; | |
| export type StatusCounts = Record<CaseStatus, number>; |
| <Tag | ||
| key={item.label} | ||
| className={`m-0 flex items-center px-2 py-0 border-0 ${isRunningItem && isFileLoading ? 'animate-pulse' : ''}`} |
There was a problem hiding this comment.
The component is named StatusGrid but no longer displays a grid. It now displays a horizontal list of tags. Consider renaming to StatusBadges or StatusIndicators to better reflect its current implementation.
| const handleCopy = async () => { | ||
| if (relativePath) { | ||
| await navigator.clipboard.writeText(relativePath); | ||
| message.success('relative path copied'); |
There was a problem hiding this comment.
The message text should follow consistent capitalization. Consider using "Relative path copied" with proper capitalization for better UX consistency.
| message.success('relative path copied'); | |
| message.success('Relative path copied'); |
Summary
before
after
Related Links
Checklist