Files
uzdb/doc/design-system.md
loveuer 5a83e86bc9 feat: Initial project setup - uzdb database client
Initialize complete Wails (Go + React) database management tool

## Project Structure
- Frontend: React 18 + TypeScript + Vite
- Backend: Go 1.23 + Gin + GORM + SQLite + Zap
- Desktop: Wails v2

## Features Implemented

### UI/UX Design
- Complete design system with colors, typography, spacing
- Wireframes for all major screens
- User flows and interaction specifications
- Layout design with 3-panel architecture

### Frontend Components
- ConnectionPanel: Database connection sidebar with status indicators
- AppLayout: Resizable main layout framework
- MenuBar & ToolBar: Navigation and quick actions
- QueryEditor: SQL editor with syntax highlighting support
- DataGrid: Sortable, filterable, editable data table
- TableStructure: Table metadata viewer
- StatusBar: Connection info and query statistics
- StatusIndicator: Animated connection status component

### Backend Services
- Wails bindings: 15+ methods exposed to frontend
- Connection management: CRUD operations with connection pooling
- Query execution: SQL execution with result handling
- Table metadata: Schema introspection
- Encryption service: AES-256-GCM password encryption
- HTTP API: RESTful endpoints for debugging/integration

### Documentation
- Design system specification
- Feature requirements document
- Wireframes and user flows
- API testing guide
- Project README

## Technical Details
- Password encryption using AES-256-GCM
- Thread-safe connection manager with sync.RWMutex
- Unified error handling and logging
- Clean architecture with dependency injection
- SQLite for storing user data (connections, history)

🤖 Generated with Qoder
2026-03-29 06:49:23 -07:00

218 lines
6.3 KiB
Markdown

# uzdb Design System
## Overview
uzdb is a lightweight database management tool inspired by DBeaver and Navicat, built with Wails (Go + React). This document defines the visual design language and component system.
---
## Color Palette
### Primary Colors
| Token | Value | Usage |
|-------|-------|-------|
| `--primary` | `#3b82f6` | Main actions, active states, links |
| `--primary-hover` | `#2563eb` | Hover states |
| `--primary-active` | `#1d4ed8` | Active/pressed states |
### Semantic Colors
| Token | Value | Usage |
|-------|-------|-------|
| `--success` | `#10b981` | Successful operations, connected status |
| `--warning` | `#f59e0b` | Warnings, pending states |
| `--error` | `#ef4444` | Errors, disconnected status, destructive actions |
| `--info` | `#06b6d4` | Informational messages |
### Neutral Colors
| Token | Value | Usage |
|-------|-------|-------|
| `--bg-primary` | `#ffffff` | Main background |
| `--bg-secondary` | `#f8fafc` | Secondary backgrounds, sidebars |
| `--bg-tertiary` | `#f1f5f9` | Cards, panels |
| `--border` | `#e2e8f0` | Borders, dividers |
| `--text-primary` | `#0f172a` | Primary text |
| `--text-secondary` | `#64748b` | Secondary text, labels |
| `--text-muted` | `#94a3b8` | Placeholder text, hints |
### Database Type Colors
| Token | Value | Usage |
|-------|-------|-------|
| `--db-mysql` | `#00758f` | MySQL connections |
| `--db-postgresql` | `#336791` | PostgreSQL connections |
| `--db-sqlite` |#003b57` | SQLite connections |
| `--db-mariadb` | `#003541` | MariaDB connections |
---
## Typography
### Font Family
```css
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
```
### Font Sizes
| Token | Size | Line Height | Usage |
|-------|------|-------------|-------|
| `--text-xs` | 12px | 16px | Captions, hints |
| `--text-sm` | 14px | 20px | Body text, labels |
| `--text-base` | 16px | 24px | Default text |
| `--text-lg` | 18px | 28px | Section titles |
| `--text-xl` | 20px | 28px | Panel titles |
| `--text-2xl` | 24px | 32px | Modal titles |
---
## Spacing
### Base Scale (4px grid)
| Token | Value |
|-------|-------|
| `--space-1` | 4px |
| `--space-2` | 8px |
| `--space-3` | 12px |
| `--space-4` | 16px |
| `--space-5` | 20px |
| `--space-6` | 24px |
| `--space-8` | 32px |
| `--space-10` | 40px |
| `--space-12` | 48px |
---
## Layout
### Application Shell
```
┌─────────────────────────────────────────────────────────────┐
│ Menu Bar (File, Edit, View, Tools, Help) │
├─────────────────────────────────────────────────────────────┤
│ Toolbar (Quick actions, search) │
├──────────┬──────────────────────────────────────────────────┤
│ │ │
│ Sidebar │ Main Content Area │
│ (200px) │ (Query editor, │
│ │ data grid, │
│ - Conn │ schema viewer) │
│ - DBs │ │
│ - Tables│ │
│ │ │
├──────────┴──────────────────────────────────────────────────┤
│ Status Bar (Connection info, query time, row count) │
└─────────────────────────────────────────────────────────────┘
```
### Breakpoints
- **Sidebar collapsible**: < 768px width
- **Responsive panels**: Stack vertically on small screens
---
## Components
### Button Styles
```css
.btn-primary {
background: var(--primary);
color: white;
padding: var(--space-2) var(--space-4);
border-radius: 6px;
font-size: var(--text-sm);
}
.btn-secondary {
background: transparent;
border: 1px solid var(--border);
color: var(--text-primary);
padding: var(--space-2) var(--space-4);
border-radius: 6px;
}
```
### Input Fields
```css
.input {
border: 1px solid var(--border);
border-radius: 6px;
padding: var(--space-2) var(--space-3);
font-size: var(--text-sm);
}
.input:focus {
outline: 2px solid var(--primary);
border-color: transparent;
}
```
### Data Grid
- Row height: 36px
- Header height: 40px
- Cell padding: 8px 12px
- Border: 1px solid var(--border)
- Alternating row colors for readability
### Tabs
- Active tab: Primary color underline (2px)
- Inactive tab: Transparent background
- Tab height: 36px
---
## Icons
Use [Lucide Icons](https://lucide.dev/) or [Heroicons](https://heroicons.com/)
Common icons:
- `database` - Connection/database
- `table` - Table view
- `search` - Search/query
- `play` - Execute query
- `download` - Export data
- `upload` - Import data
- `settings` - Settings/preferences
- `plus` - Add new
- `trash-2` - Delete
---
## Interactions
### Hover States
- Buttons: Darken background by 10%
- Links: Underline + primary color
- Table rows: Background `--bg-tertiary`
### Focus States
- All interactive elements: 2px primary outline
- Visible focus ring for keyboard navigation
### Loading States
- Spinner for async operations
- Skeleton screens for data loading
- Disabled state during execution
### Transitions
- Duration: 150ms
- Easing: `ease-in-out`
- Properties: color, background-color, transform
---
## Accessibility
### Requirements
- Minimum contrast ratio: 4.5:1 (AA standard)
- Focus indicators on all interactive elements
- Keyboard navigation support
- Screen reader friendly labels
- Resizable text up to 200%
### Keyboard Shortcuts
| Action | Shortcut |
|--------|----------|
| Execute query | Ctrl/Cmd + Enter |
| New connection | Ctrl/Cmd + N |
| Save | Ctrl/Cmd + S |
| Find | Ctrl/Cmd + F |
| Close tab | Ctrl/Cmd + W |