style(ui): refine component layouts and improve visual consistency

Comprehensive UI polish across multiple components to enhance visual
design, improve user experience, and maintain consistency.

UsageScriptModal Component (1302 lines refactored):
- Complete layout overhaul for better usability
- Improved script editor with syntax highlighting
- Better template selection interface
- Enhanced test/preview panels with clearer separation
- Improved error feedback and validation messages
- Better modal sizing and responsiveness
- Cleaner tab navigation between sections
- Enhanced code formatting and readability
- Improved loading states for async operations
- Better integration with parent components

MCP Components:
- McpFormModal (42 lines):
  * Streamlined form layout
  * Better server type selection (stdio/http)
  * Improved field grouping and labels
  * Enhanced validation feedback
- UnifiedMcpPanel (14 lines):
  * Minor layout adjustments
  * Better list item spacing
  * Improved server status indicators
  * Enhanced action button placement

Provider Components:
- ProviderCard (11 lines):
  * Refined card layout and spacing
  * Better visual hierarchy
  * Improved badge placement
  * Enhanced hover effects
- ProviderList (5 lines):
  * Minor grid layout adjustments
  * Better drag-and-drop visual feedback
- GeminiConfigSections (4 lines):
  * Field label alignment
  * Improved spacing consistency

Editor & Footer Components:
- JsonEditor (13 lines):
  * Better editor height management
  * Improved error display
  * Enhanced syntax highlighting
- UsageFooter (10 lines):
  * Refined footer layout
  * Better quota display
  * Improved refresh button placement

Settings & Environment:
- ImportExportSection (24 lines):
  * Better button layout
  * Improved action grouping
  * Enhanced visual feedback
- EnvWarningBanner (4 lines):
  * Refined alert styling
  * Better dismiss button placement

Global Styles (index.css):
- Added 11 lines of utility classes
- Improved transition timing
- Better focus indicators
- Enhanced scrollbar styling
- Refined spacing utilities

Design Improvements:
- Consistent spacing using design tokens
- Unified color palette application
- Better typography hierarchy
- Improved shadow system for depth
- Enhanced interactive states (hover, active, focus)
- Better border radius consistency
- Refined animation timings

Accessibility:
- Improved focus indicators
- Better keyboard navigation
- Enhanced screen reader support
- Improved color contrast ratios

Code Quality:
- Net increase of 68 lines due to UsageScriptModal improvements
- Better component organization
- Cleaner style application
- Reduced style duplication

These visual refinements create a more polished and professional
interface while maintaining excellent usability and accessibility
standards across all components.
This commit is contained in:
YoVinchen
2025-11-21 11:09:24 +08:00
parent 482b8a1cab
commit 03af3600b0
11 changed files with 757 additions and 689 deletions

View File

@@ -45,7 +45,9 @@ export function ImportExportSection({
return (
<section className="space-y-4">
<header className="space-y-2">
<h3 className="text-base font-semibold text-foreground">{t("settings.importExport")}</h3>
<h3 className="text-base font-semibold text-foreground">
{t("settings.importExport")}
</h3>
<p className="text-sm text-muted-foreground">
{t("settings.importExportHint")}
</p>
@@ -166,11 +168,15 @@ function ImportStatusMessage({
if (status === "importing") {
return (
<div className={`${baseClass} border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400`}>
<div
className={`${baseClass} border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400`}
>
<Loader2 className="mt-0.5 h-5 w-5 flex-shrink-0 animate-spin" />
<div>
<p className="font-semibold">{t("settings.importing")}</p>
<p className="text-blue-600/80 dark:text-blue-400/80">{t("common.loading")}</p>
<p className="text-blue-600/80 dark:text-blue-400/80">
{t("common.loading")}
</p>
</div>
</div>
);
@@ -189,7 +195,9 @@ function ImportStatusMessage({
{t("settings.backupId")}: {backupId}
</p>
) : null}
<p className="text-green-600/80 dark:text-green-400/80">{t("settings.autoReload")}</p>
<p className="text-green-600/80 dark:text-green-400/80">
{t("settings.autoReload")}
</p>
</div>
</div>
);
@@ -203,7 +211,9 @@ function ImportStatusMessage({
<AlertCircle className="mt-0.5 h-5 w-5 flex-shrink-0" />
<div className="space-y-1.5">
<p className="font-semibold">{t("settings.importPartialSuccess")}</p>
<p className="text-yellow-600/80 dark:text-yellow-400/80">{t("settings.importPartialHint")}</p>
<p className="text-yellow-600/80 dark:text-yellow-400/80">
{t("settings.importPartialHint")}
</p>
</div>
</div>
);
@@ -212,7 +222,9 @@ function ImportStatusMessage({
const message = errorMessage || t("settings.importFailed");
return (
<div className={`${baseClass} border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400`}>
<div
className={`${baseClass} border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400`}
>
<AlertCircle className="mt-0.5 h-5 w-5 flex-shrink-0" />
<div className="space-y-1.5">
<p className="font-semibold">{t("settings.importFailed")}</p>