Files
2025-11-30 09:02:33 +08:00

261 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Custom Widget Component
A specialized widget component that extends the basic card with custom properties for dashboard and data display.
## Dashboard Widget
```
┌────────────────────────────────┐
│ {{data.icon}} {{data.title}} │⟳│
├────────────────────────────────┤
│ │
│ {{data.value}} │
│ │
│ {{data.trend}} │
└────────────────────────────────┘
```
## Compact Widget
```
┌─────────────────────────┐
│ {{data.icon}} {{data.title}} │⟳│
│ {{data.value}} {{data.trend}} │
└─────────────────────────┘
```
## Loading State
```
┌────────────────────────────────┐
│ ⟳ Loading... │
├────────────────────────────────┤
│ │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
└────────────────────────────────┘
```
## Error State
```
┌────────────────────────────────┐
│ ⚠ Error Loading Data │
├────────────────────────────────┤
│ │
│ Failed to load widget data. │
│ Click to retry. │
│ │
└────────────────────────────────┘
```
## Widget Types
### Analytics Widget
```
┌────────────────────────────────┐
│ 📊 Sales Analytics │⟳│
├────────────────────────────────┤
│ │
│ $45,678 │
│ │
│ ↗ +23% vs last month │
└────────────────────────────────┘
```
### Status Widget
```
┌────────────────────────────────┐
│ 🟢 System Status │⟳│
├────────────────────────────────┤
│ │
│ All Systems │
│ Operational │
│ │
└────────────────────────────────┘
```
### Counter Widget
```
┌────────────────────────────────┐
│ 👥 Active Users │⟳│
├────────────────────────────────┤
│ │
│ 2,347 │
│ │
│ +12 new this hour │
└────────────────────────────────┘
```
### Progress Widget
```
┌────────────────────────────────┐
│ 🎯 Goal Progress │⟳│
├────────────────────────────────┤
│ │
│ ████████████████░░░░ 80% │
│ │
│ 8 of 10 completed │
└────────────────────────────────┘
```
## Interactive Elements
### Refreshable Widget
```
┌────────────────────────────────┐
│ {{data.icon}} {{data.title}} │⟳│ ← Click to refresh
├────────────────────────────────┤
│ │
│ {{data.value}} │
│ │
│ Last updated: 2 min ago │
└────────────────────────────────┘
```
### Auto-Refresh Indicator
```
┌────────────────────────────────┐
│ {{data.icon}} {{data.title}} │●│ ← Auto-refresh active
├────────────────────────────────┤
│ │
│ {{data.value}} │
│ │
│ Next refresh: 25s │
└────────────────────────────────┘
```
## Dimensions
- **Standard**: 30×8 characters
- **Compact**: 25×4 characters
- **Large**: 40×10 characters
- **Full Width**: Responsive to container
## Variables
- `widgetType` (string): Type of widget ("dashboard", "analytics", "status", "counter", "progress")
- `data` (object): Widget data with title, value, trend, and icon
- `title` (string): Widget heading
- `value` (string): Main display value
- `trend` (string): Trend indicator (optional)
- `icon` (string): Widget icon (emoji or symbol)
- `refreshable` (boolean): Whether widget can be manually refreshed
- `autoRefresh` (number): Auto-refresh interval in milliseconds (0 = disabled)
- `compact` (boolean): Use compact layout
## Accessibility
- **Role**: widget or region
- **Focusable**: Yes, if interactive
- **Keyboard Support**:
- Enter/Space: Refresh widget (if refreshable)
- Tab: Navigate to next widget
- **ARIA**:
- `aria-label`: Widget title and current value
- `aria-live`: "polite" for auto-updating widgets
- `aria-busy`: "true" when loading
## Usage Examples
### Sales Dashboard Widget
```
┌────────────────────────────────┐
│ 💰 Monthly Revenue │⟳│
├────────────────────────────────┤
│ │
│ $127,890 │
│ │
│ ↗ +15.3% vs last month │
└────────────────────────────────┘
```
### Server Monitoring Widget
```
┌────────────────────────────────┐
│ 🖥 Server Load │⟳│
├────────────────────────────────┤
│ │
│ CPU: 45% │
│ RAM: 67% │
│ Disk: 23% │
└────────────────────────────────┘
```
### Task Progress Widget
```
┌────────────────────────────────┐
│ ✅ Sprint Progress │⟳│
├────────────────────────────────┤
│ │
│ ████████████░░░░░░░░ 67% │
│ │
│ 12 of 18 tasks completed │
└────────────────────────────────┘
```
## Component Behavior
### Data Loading
1. **Initial Load**: Show loading state while fetching data
2. **Error Handling**: Display error message and retry option
3. **Success**: Show formatted data with trend indicators
4. **Auto-Refresh**: Periodically update data in background
### Refresh Functionality
- **Manual Refresh**: Click refresh icon to update immediately
- **Auto-Refresh**: Configurable interval for automatic updates
- **Loading Feedback**: Visual indication during data fetch
- **Error Recovery**: Retry mechanism for failed requests
### State Management
- **Loading**: Semi-transparent with spinner
- **Error**: Red border with error message
- **Success**: Normal display with data
- **Stale**: Subtle indication when data is outdated
## Design Tokens
### Visual Elements
- `┌─┐└┘─│` = Widget container borders
- `⟳` = Refresh button icon
- `●` = Auto-refresh active indicator
- `░` = Loading placeholder blocks
- `⚠` = Error/warning indicator
- Emoji icons for widget types (📊, 💰, 🟢, etc.)
### Status Colors
- **Success**: Green indicators for positive trends
- **Warning**: Yellow for caution states
- **Error**: Red for error states
- **Neutral**: Gray for normal/inactive states
## Related Components
- **Card**: Base component that this extends
- **Dashboard**: Container for multiple widgets
- **Chart**: Data visualization components
- **Metric**: Simple numeric display components
## Implementation Notes
This widget component extends the base card component with:
1. **Data Management**: Built-in data fetching and state management
2. **Auto-Refresh**: Configurable automatic data updates
3. **Error Handling**: Robust error states and recovery
4. **Accessibility**: Full screen reader and keyboard support
5. **Customization**: Flexible widget types and layouts
6. **Performance**: Efficient rendering and update mechanisms
## Extension Points
- **Custom Widget Types**: Add new widget variations
- **Data Sources**: Integrate with different APIs
- **Visualization**: Add charts and graphs
- **Theming**: Custom color schemes and layouts
- **Interactions**: Additional click handlers and actions