Init Repo
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# TaskStatusBadge Custom Colors Implementation
|
||||
|
||||
## Overview
|
||||
Updated the `TaskStatusBadge` component to support custom colors for custom task statuses while maintaining backward compatibility with system statuses.
|
||||
|
||||
## Changes Made
|
||||
|
||||
### Component Updates
|
||||
|
||||
**File: `frontend/src/components/task/TaskStatusBadge.vue`**
|
||||
|
||||
#### Key Features:
|
||||
1. **Dual Mode Support**: Component now accepts either a string (system status) or a status object with color property
|
||||
2. **Custom Color Application**: When a status object with color is provided, applies the custom background color
|
||||
3. **Contrast Calculation**: Automatically calculates whether to use black or white text based on background luminance
|
||||
4. **Backward Compatibility**: Existing usage with string statuses continues to work with default variant styling
|
||||
|
||||
#### Implementation Details:
|
||||
|
||||
```typescript
|
||||
interface StatusObject {
|
||||
id: string
|
||||
name: string
|
||||
color?: string
|
||||
is_system?: boolean
|
||||
}
|
||||
|
||||
interface Props {
|
||||
status: string | StatusObject
|
||||
compact?: boolean
|
||||
}
|
||||
```
|
||||
|
||||
**Contrast Color Algorithm:**
|
||||
- Uses WCAG relative luminance formula: `(0.299 * R + 0.587 * G + 0.114 * B) / 255`
|
||||
- Returns black text for light backgrounds (luminance > 0.5)
|
||||
- Returns white text for dark backgrounds (luminance ≤ 0.5)
|
||||
|
||||
**Rendering Logic:**
|
||||
- If status has no color property → Use Badge component with variant styling
|
||||
- If status has color property → Render custom div with inline styles
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### System Status (String)
|
||||
```vue
|
||||
<TaskStatusBadge status="in_progress" />
|
||||
<TaskStatusBadge status="approved" :compact="true" />
|
||||
```
|
||||
|
||||
### Custom Status (Object)
|
||||
```vue
|
||||
<TaskStatusBadge
|
||||
:status="{
|
||||
id: 'custom_1',
|
||||
name: 'Ready for Review',
|
||||
color: '#3b82f6'
|
||||
}"
|
||||
/>
|
||||
```
|
||||
|
||||
### Mixed Usage
|
||||
```vue
|
||||
<!-- System status -->
|
||||
<TaskStatusBadge status="not_started" />
|
||||
|
||||
<!-- Custom status with color -->
|
||||
<TaskStatusBadge
|
||||
:status="customStatus"
|
||||
/>
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Created test file: `frontend/test-task-status-badge-custom-colors.html`
|
||||
|
||||
Test cases cover:
|
||||
1. ✅ System statuses with default variant styling
|
||||
2. ✅ Custom status objects with various colors
|
||||
3. ✅ Light background colors (verifying black text)
|
||||
4. ✅ Dark background colors (verifying white text)
|
||||
5. ✅ Compact mode with custom colors
|
||||
|
||||
## Requirements Validated
|
||||
|
||||
- ✅ **Requirement 7.1**: Accept status object with color property
|
||||
- ✅ **Requirement 7.2**: Apply custom background color from status
|
||||
- ✅ **Requirement 7.3**: Calculate contrast color for text (black or white)
|
||||
- ✅ Maintain existing styling for system statuses
|
||||
- ✅ Backward compatibility with string status values
|
||||
|
||||
## Next Steps
|
||||
|
||||
The following components will need to be updated to pass status objects instead of strings:
|
||||
1. `EditableTaskStatus.vue` - Task status dropdown
|
||||
2. `TaskStatusFilter.vue` - Asset task status filter
|
||||
3. `ShotTaskStatusFilter.vue` - Shot task status filter
|
||||
4. `TaskBulkActionsMenu.vue` - Bulk status update
|
||||
|
||||
These updates are covered in subsequent tasks (18-20) in the implementation plan.
|
||||
|
||||
## Technical Notes
|
||||
|
||||
### Color Format
|
||||
- Expects hex color format: `#RRGGBB`
|
||||
- Handles colors with or without `#` prefix
|
||||
- Validates RGB values for contrast calculation
|
||||
|
||||
### Styling Consistency
|
||||
- Custom colored badges maintain same dimensions as system badges
|
||||
- Uses same border radius, padding, and font styling
|
||||
- Includes focus ring styles for accessibility
|
||||
|
||||
### Performance
|
||||
- Contrast calculation is computed property (cached)
|
||||
- No external dependencies for color manipulation
|
||||
- Minimal overhead for system statuses (no calculation needed)
|
||||
Reference in New Issue
Block a user