192 lines
7.3 KiB
Markdown
192 lines
7.3 KiB
Markdown
|
|
# Custom Components Audit (Non-Button)
|
||
|
|
|
||
|
|
**Date**: 2025-01-27
|
||
|
|
**Action**: 9.2.1.5 - Audit other custom components (not just buttons)
|
||
|
|
**Purpose**: Identify all custom implementations of Card, Input, Select, and other components that should be replaced with design system components
|
||
|
|
|
||
|
|
## Summary
|
||
|
|
|
||
|
|
- **Design System Components Location**: `apps/web/src/components/ui/`
|
||
|
|
- **Legacy Components Location**: `apps/web/src/components/base/`
|
||
|
|
- **Total Card/Input imports**: 230 matches across 179 files
|
||
|
|
|
||
|
|
## Component Inventory
|
||
|
|
|
||
|
|
### 1. Card Component
|
||
|
|
|
||
|
|
#### Design System Card
|
||
|
|
- **Location**: `apps/web/src/components/ui/card.tsx`
|
||
|
|
- **Status**: ✅ Current design system component
|
||
|
|
- **API**: Simple className-based, no variants
|
||
|
|
- **Sub-components**: CardHeader, CardTitle, CardDescription, CardContent, CardFooter
|
||
|
|
|
||
|
|
#### Legacy Card Components
|
||
|
|
- **Location**: `apps/web/src/components/base/Card.tsx`
|
||
|
|
- **Status**: ⚠️ Legacy component using CSS classes
|
||
|
|
- **API**: Variant-based (`default`, `manga`, `neon`, `nature`, `elevated`, `glass`)
|
||
|
|
- **Usage**:
|
||
|
|
- `pages/DesignSystemDemo.tsx` (demo page only)
|
||
|
|
- Exported in `components/index.ts` (type exports)
|
||
|
|
|
||
|
|
#### Custom Card-Like Components
|
||
|
|
1. **StatCard** (`components/dashboard/StatCard.tsx`)
|
||
|
|
- ✅ Uses design system Card correctly
|
||
|
|
- Custom styling for stats display (acceptable)
|
||
|
|
|
||
|
|
2. **UserCard** (`components/user/UserCard.tsx`)
|
||
|
|
- ⚠️ Uses design system Card but with invalid `variant` prop
|
||
|
|
- Line 22: `variant="default"` (doesn't exist in design system Card)
|
||
|
|
- Custom gradient overlay (line 26)
|
||
|
|
- **Recommendation**: Remove `variant` prop, use className only
|
||
|
|
|
||
|
|
3. **LicenceCard** (`components/marketplace/LicenceCard.tsx`)
|
||
|
|
- ⚠️ Uses design system Card but with invalid `variant` prop
|
||
|
|
- Line 22: `variant={selected ? 'gaming' : 'default'}` (doesn't exist)
|
||
|
|
- **Recommendation**: Remove `variant` prop, use className for selected state
|
||
|
|
|
||
|
|
4. **ProductCard** (`components/marketplace/ProductCard.tsx`)
|
||
|
|
- Needs verification
|
||
|
|
|
||
|
|
5. **AchievementCard** (`components/gamification/AchievementCard.tsx`)
|
||
|
|
- Needs verification
|
||
|
|
|
||
|
|
6. **EquipmentCard** (`components/inventory/EquipmentCard.tsx`)
|
||
|
|
- Needs verification
|
||
|
|
|
||
|
|
7. **CourseCard** (`components/education/CourseCard.tsx`)
|
||
|
|
- Needs verification
|
||
|
|
|
||
|
|
8. **GroupCard** (`components/social/groups/GroupCard.tsx`)
|
||
|
|
- Needs verification
|
||
|
|
|
||
|
|
#### Backup Card
|
||
|
|
- **Location**: `apps/web/src/components/ui.backup/card.tsx`
|
||
|
|
- **Status**: ⚠️ Old backup version (should be removed)
|
||
|
|
|
||
|
|
### 2. Input Component
|
||
|
|
|
||
|
|
#### Design System Input
|
||
|
|
- **Location**: `apps/web/src/components/ui/input.tsx`
|
||
|
|
- **Status**: ✅ Current design system component
|
||
|
|
- **API**: Standard HTML input props with Kodo design system styling
|
||
|
|
|
||
|
|
#### Legacy Input Components
|
||
|
|
1. **Base Input** (`components/base/Input.tsx`)
|
||
|
|
- **Status**: ⚠️ Legacy component (no styling, just props wrapper)
|
||
|
|
- **Usage**: Exported in `components/index.ts` (type exports)
|
||
|
|
- **Note**: Minimal wrapper, may be acceptable
|
||
|
|
|
||
|
|
2. **FormField Input** (`components/ui/FormField.tsx`)
|
||
|
|
- **Status**: ⚠️ Custom Input component with Tailwind default colors
|
||
|
|
- Line 134-153: Custom Input with `border-gray-300`, `focus:ring-blue-500`, `border-red-500`
|
||
|
|
- **Recommendation**: Replace with design system Input component
|
||
|
|
|
||
|
|
#### Custom Input Components
|
||
|
|
1. **AuthInput** (`features/auth/components/AuthInput.tsx`)
|
||
|
|
- **Status**: ⚠️ Custom input wrapper
|
||
|
|
- **Note**: May be acceptable if it wraps design system Input
|
||
|
|
|
||
|
|
2. **ChatInput** (`features/chat/components/ChatInput.tsx`)
|
||
|
|
- **Status**: ⚠️ Custom chat input
|
||
|
|
- **Note**: Specialized component, may need custom styling
|
||
|
|
|
||
|
|
#### Backup Input
|
||
|
|
- **Location**: `apps/web/src/components/ui.backup/input.tsx`
|
||
|
|
- **Status**: ⚠️ Old backup version (should be removed)
|
||
|
|
|
||
|
|
### 3. Select Component
|
||
|
|
|
||
|
|
#### Design System Select
|
||
|
|
- **Location**: `apps/web/src/components/ui/select.tsx`
|
||
|
|
- **Status**: ✅ Current design system component
|
||
|
|
- **API**: Advanced select with search, multi-select, groups
|
||
|
|
- **Dependencies**: Uses design system Button and Input internally
|
||
|
|
|
||
|
|
#### Legacy Select Components
|
||
|
|
1. **FormField Select** (`components/ui/FormField.tsx`)
|
||
|
|
- **Status**: ⚠️ Custom Select component
|
||
|
|
- Line 183-211: Custom Select with native HTML select
|
||
|
|
- **Recommendation**: Replace with design system Select component
|
||
|
|
|
||
|
|
#### Backup Select
|
||
|
|
- **Location**: `apps/web/src/components/ui.backup/select.tsx`
|
||
|
|
- **Status**: ⚠️ Old backup version (should be removed)
|
||
|
|
|
||
|
|
### 4. Other Custom Components
|
||
|
|
|
||
|
|
#### Custom Components with Inline Styles
|
||
|
|
1. **Search Component** (`components/search/Search.tsx`)
|
||
|
|
- Line 305: Custom dropdown with `className="absolute z-50 mt-2 w-full rounded-md border bg-popover shadow-lg"`
|
||
|
|
- **Recommendation**: Use design system Dropdown component
|
||
|
|
|
||
|
|
## Statistics
|
||
|
|
|
||
|
|
### Card Component Usage
|
||
|
|
- **Design System Card**: Used in ~50+ files
|
||
|
|
- **Legacy Card**: Used in 1 file (demo page)
|
||
|
|
- **Custom Card-like**: ~8 specialized components
|
||
|
|
- **Issues**: 2 components using invalid `variant` prop
|
||
|
|
|
||
|
|
### Input Component Usage
|
||
|
|
- **Design System Input**: Used in ~100+ files
|
||
|
|
- **Legacy Input**: Minimal usage (type exports)
|
||
|
|
- **Custom Input**: 2 specialized components (AuthInput, ChatInput)
|
||
|
|
- **Issues**: 1 component (FormField) using Tailwind default colors
|
||
|
|
|
||
|
|
### Select Component Usage
|
||
|
|
- **Design System Select**: Used in ~30+ files
|
||
|
|
- **Custom Select**: 1 component (FormField) using native HTML select
|
||
|
|
- **Issues**: 1 component should use design system Select
|
||
|
|
|
||
|
|
## Migration Priority
|
||
|
|
|
||
|
|
### High Priority
|
||
|
|
1. **FormField Input** - Replace with design system Input (removes Tailwind defaults)
|
||
|
|
2. **FormField Select** - Replace with design system Select
|
||
|
|
3. **UserCard** - Remove invalid `variant` prop
|
||
|
|
4. **LicenceCard** - Remove invalid `variant` prop
|
||
|
|
|
||
|
|
### Medium Priority
|
||
|
|
1. **Legacy Card component** - Remove or migrate demo page
|
||
|
|
2. **Backup components** - Remove `ui.backup/` directory
|
||
|
|
3. **Custom card-like components** - Verify they use design system Card correctly
|
||
|
|
|
||
|
|
### Low Priority
|
||
|
|
1. **Specialized components** (AuthInput, ChatInput) - Review if custom styling is needed
|
||
|
|
2. **Base Input** - Review if wrapper is needed or can be removed
|
||
|
|
|
||
|
|
## Recommendations
|
||
|
|
|
||
|
|
### Immediate Actions
|
||
|
|
1. **Remove invalid variant props** from UserCard and LicenceCard
|
||
|
|
2. **Replace FormField Input** with design system Input
|
||
|
|
3. **Replace FormField Select** with design system Select
|
||
|
|
4. **Remove backup components** in `ui.backup/` directory
|
||
|
|
|
||
|
|
### Future Actions
|
||
|
|
1. **Audit all card-like components** to ensure they use design system Card
|
||
|
|
2. **Create ESLint rules** to prevent invalid props on design system components
|
||
|
|
3. **Document component usage** guidelines
|
||
|
|
|
||
|
|
## Files Requiring Changes
|
||
|
|
|
||
|
|
### High Priority
|
||
|
|
- `apps/web/src/components/ui/FormField.tsx` - Replace Input and Select
|
||
|
|
- `apps/web/src/components/user/UserCard.tsx` - Remove variant prop
|
||
|
|
- `apps/web/src/components/marketplace/LicenceCard.tsx` - Remove variant prop
|
||
|
|
|
||
|
|
### Medium Priority
|
||
|
|
- `apps/web/src/pages/DesignSystemDemo.tsx` - Migrate from legacy Card
|
||
|
|
- `apps/web/src/components/index.ts` - Remove legacy type exports
|
||
|
|
|
||
|
|
### Low Priority
|
||
|
|
- `apps/web/src/components/ui.backup/` - Remove entire directory
|
||
|
|
- `apps/web/src/components/base/Input.tsx` - Review and potentially remove
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. ✅ Audit complete (Action 9.2.1.5)
|
||
|
|
2. ⏳ Replace custom components with design system components (Action 9.2.1.6)
|
||
|
|
3. ⏳ Create ESLint rules to enforce component usage
|
||
|
|
4. ⏳ Create component usage guide
|