# Custom Button Implementations Audit

**Date**: 2025-01-27  
**Action**: 9.2.1.1 - Find all custom button implementations  
**Purpose**: Identify all buttons with inline className styles that should be replaced with the Button component from `@/components/ui/button`

## Summary

- **Total files with button elements**: 166 files
- **Button component location**: `apps/web/src/components/ui/button.tsx`
- **Legacy Button component**: `apps/web/src/components/base/Button.tsx` (uses CSS classes, different API)

## Custom Button Implementations Found

### High Priority (Should be replaced)

#### 1. Live Stream Components
- **File**: `apps/web/src/components/live/LiveStreamDetailView.tsx`
  - Line 195-200: Send chat button with `className="absolute right-1.5 top-1.5 p-1.5 bg-kodo-cyan text-black rounded-full hover:bg-white transition-colors"`
  - Line 205-211: Tip button with `className="text-kodo-gold hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="default" for send, variant="ghost" for tip)

#### 2. Dashboard Page
- **File**: `apps/web/src/pages/DashboardPage.tsx`
  - Line 235-237: Time filter button with complex className
  - Line 238-240: Active time filter button with `className="text-xs font-medium text-kodo-cyan bg-kodo-cyan/10 px-2 py-1 rounded-lg border border-kodo-cyan/20..."`
  - Line 241-243: Time filter button with complex className
  - **Recommendation**: Replace with Button component (variant="outline" for inactive, variant="default" for active)

#### 3. Social Components
- **File**: `apps/web/src/components/social/CommentItem.tsx`
  - Line 61: Button with `className="hover:text-white transition-colors"`
  - **Recommendation**: Replace with Button component (variant="ghost")

- **File**: `apps/web/src/components/social/PostCard.tsx`
  - Line 239: Button with `className="w-full text-center text-xs text-kodo-cyan mt-4 hover:underline"`
  - **Recommendation**: Replace with Button component (variant="link")

- **File**: `apps/web/src/pages/SocialPage.tsx`
  - Line 112: Button with `className="flex items-center gap-2 text-kodo-secondary hover:text-kodo-magenta transition-colors"`
  - Line 116: Button with `className="flex items-center gap-2 text-kodo-secondary hover:text-kodo-cyan transition-colors"`
  - Line 120: Button with `className="flex items-center gap-2 text-kodo-secondary hover:text-white transition-colors"`
  - **Recommendation**: Replace with Button component (variant="ghost")

- **File**: `apps/web/src/components/views/SocialView.tsx`
  - Line 75: Button with `className="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium text-gray-400 hover:text-white"`
  - Line 146-150: Multiple buttons with `className="hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="ghost")

#### 4. Admin Components
- **File**: `apps/web/src/components/admin/AdminUsersView.tsx`
  - Line 169: Disabled button with `className="hover:text-white disabled:opacity-50"`
  - Line 172: Next button with `className="hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="ghost", disabled prop)

- **File**: `apps/web/src/components/admin/UserTableRow.tsx`
  - Line 99: Button with `className="w-full text-left px-4 py-2.5 text-xs text-gray-300 hover:bg-white/10 flex items-center gap-2"`
  - **Recommendation**: Replace with Button component (variant="ghost")

#### 5. Studio Components
- **File**: `apps/web/src/components/studio/ProjectsManager.tsx`
  - Line 196: Button with `className="p-1.5 rounded bg-kodo-slate text-white"`
  - Line 199: Button with `className="p-1.5 rounded text-gray-500 hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="secondary" and "ghost")

- **File**: `apps/web/src/components/studio/CloudFileBrowser.tsx`
  - Line 403: Button with `className="p-1.5 hover:bg-white/10 rounded text-gray-400 hover:text-white"`
  - Line 406: Similar button
  - **Recommendation**: Replace with Button component (variant="ghost")

#### 6. File Manager
- **File**: `apps/web/src/components/views/FileManagerView.tsx`
  - Line 357: Button with `className="p-1.5 hover:bg-white/10 rounded text-gray-400 hover:text-white"`
  - Line 363: Similar button
  - **Recommendation**: Replace with Button component (variant="ghost")

#### 7. Modal Components
- **File**: `apps/web/src/components/modals/CreatorModal.tsx`
  - Line 66: Close button with `className="text-gray-400 hover:text-white"`
  - Line 113: Button with `className="p-3 rounded border border-kodo-cyan bg-kodo-cyan/10 text-kodo-cyan..."`
  - Line 117: Button with `className="p-3 rounded border border-kodo-steel bg-kodo-slate text-gray-400..."`
  - Line 121: Similar button
  - **Recommendation**: Replace with Button component (variant="ghost" for close, variant="outline" for others)

- **File**: `apps/web/src/components/ui/ImageCropper.tsx`
  - Line 138: Cancel button with `className="text-gray-400 hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="ghost")

- **File**: `apps/web/src/components/upload/BulkUploadModal.tsx`
  - Line 46: Close button with `className="text-gray-400 hover:text-white"`
  - **Recommendation**: Replace with Button component (variant="ghost")

### Medium Priority (Context-specific, may need custom handling)

#### 8. UI Component Internals
- **File**: `apps/web/src/components/ui/dropdown-menu.tsx`
  - Line 120: Internal button with `className={cn('outline-none', className)}`
  - **Note**: This is part of a Radix UI component wrapper, may need to stay as-is

### Low Priority (May be intentional custom buttons)

#### 9. Specialized Components
- **File**: `apps/web/src/components/ui/FAB.tsx`
  - Floating Action Button - may be intentionally custom
  - **Note**: Review if FAB should use Button component or remain custom

- **File**: `apps/web/src/features/tracks/components/LikeButton.tsx`
  - Specialized like button component
  - **Note**: May use Button component internally, needs verification

## Statistics

- **High Priority Replacements**: ~30+ instances across 15+ files
- **Medium Priority**: ~5 instances (UI component internals)
- **Low Priority**: ~5 instances (specialized components)

## Migration Strategy

1. **Phase 1**: Replace high-priority custom buttons in:
   - Live stream components
   - Dashboard page
   - Social components
   - Admin components

2. **Phase 2**: Replace medium-priority buttons in:
   - Studio components
   - File manager
   - Modal components

3. **Phase 3**: Review and decide on low-priority specialized components

## Button Component Variants Available

From `apps/web/src/components/ui/button.tsx`:
- `default`: Primary button with cyan background
- `destructive`: Red variant for destructive actions
- `outline`: Outlined button
- `secondary`: Secondary button with steel background
- `ghost`: Minimal button with hover effect
- `link`: Link-style button
- `neon`: Neon effect button
- `glass`: Glass morphism effect
- `premium`: Premium gradient button

## Notes

- Some buttons may need size adjustments (Button component supports `sm`, `md`, `lg`, `xl`)
- Some buttons may need icon support (Button component supports `asChild` prop for custom content)
- Legacy Button component (`components/base/Button.tsx`) uses different API and CSS classes - should be migrated separately

## Next Steps

1. ✅ Audit complete (Action 9.2.1.1)
2. ⏳ Replace custom buttons with Button component (Action 9.2.1.2)
3. ⏳ Create ESLint rule to enforce Button usage (Action 9.2.1.3)
4. ⏳ Create component usage guide (Action 9.2.1.4)
