- Audited Card, Input, and Select component implementations - Identified design system, legacy, and custom components - Found 4 high-priority issues: - UserCard and LicenceCard using invalid variant prop - FormField Input using Tailwind default colors - FormField Select using native HTML select - Documented ~8 custom card-like components - Created comprehensive audit report: apps/web/docs/CUSTOM_COMPONENTS_AUDIT.md - Includes migration priorities and specific files requiring changes
7.3 KiB
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
-
StatCard (
components/dashboard/StatCard.tsx)- ✅ Uses design system Card correctly
- Custom styling for stats display (acceptable)
-
UserCard (
components/user/UserCard.tsx)- ⚠️ Uses design system Card but with invalid
variantprop - Line 22:
variant="default"(doesn't exist in design system Card) - Custom gradient overlay (line 26)
- Recommendation: Remove
variantprop, use className only
- ⚠️ Uses design system Card but with invalid
-
LicenceCard (
components/marketplace/LicenceCard.tsx)- ⚠️ Uses design system Card but with invalid
variantprop - Line 22:
variant={selected ? 'gaming' : 'default'}(doesn't exist) - Recommendation: Remove
variantprop, use className for selected state
- ⚠️ Uses design system Card but with invalid
-
ProductCard (
components/marketplace/ProductCard.tsx)- Needs verification
-
AchievementCard (
components/gamification/AchievementCard.tsx)- Needs verification
-
EquipmentCard (
components/inventory/EquipmentCard.tsx)- Needs verification
-
CourseCard (
components/education/CourseCard.tsx)- Needs verification
-
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
-
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
-
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
-
AuthInput (
features/auth/components/AuthInput.tsx)- Status: ⚠️ Custom input wrapper
- Note: May be acceptable if it wraps design system Input
-
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
- 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
- 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
- Line 305: Custom dropdown with
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
variantprop
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
- FormField Input - Replace with design system Input (removes Tailwind defaults)
- FormField Select - Replace with design system Select
- UserCard - Remove invalid
variantprop - LicenceCard - Remove invalid
variantprop
Medium Priority
- Legacy Card component - Remove or migrate demo page
- Backup components - Remove
ui.backup/directory - Custom card-like components - Verify they use design system Card correctly
Low Priority
- Specialized components (AuthInput, ChatInput) - Review if custom styling is needed
- Base Input - Review if wrapper is needed or can be removed
Recommendations
Immediate Actions
- Remove invalid variant props from UserCard and LicenceCard
- Replace FormField Input with design system Input
- Replace FormField Select with design system Select
- Remove backup components in
ui.backup/directory
Future Actions
- Audit all card-like components to ensure they use design system Card
- Create ESLint rules to prevent invalid props on design system components
- Document component usage guidelines
Files Requiring Changes
High Priority
apps/web/src/components/ui/FormField.tsx- Replace Input and Selectapps/web/src/components/user/UserCard.tsx- Remove variant propapps/web/src/components/marketplace/LicenceCard.tsx- Remove variant prop
Medium Priority
apps/web/src/pages/DesignSystemDemo.tsx- Migrate from legacy Cardapps/web/src/components/index.ts- Remove legacy type exports
Low Priority
apps/web/src/components/ui.backup/- Remove entire directoryapps/web/src/components/base/Input.tsx- Review and potentially remove
Next Steps
- ✅ Audit complete (Action 9.2.1.5)
- ⏳ Replace custom components with design system components (Action 9.2.1.6)
- ⏳ Create ESLint rules to enforce component usage
- ⏳ Create component usage guide