project-standalo-sonic-cloud/components
mazemaze 0f13aee7fb Deploy update 2025-12-18 21:15:40 +09:00
..
AlbumCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
AlbumHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
ArtistCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
ArtistHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
ArtistRoster.tsx Deploy update 2025-12-18 21:15:40 +09:00
AudioPlayer.tsx Deploy update 2025-12-18 21:15:40 +09:00
AuthForm.tsx Deploy update 2025-12-18 21:15:40 +09:00
AvatarUpload.tsx Deploy update 2025-12-18 21:15:40 +09:00
CreatePlaylistModal.tsx Deploy update 2025-12-18 21:15:40 +09:00
GenreBadge.tsx Deploy update 2025-12-18 21:15:40 +09:00
GenreHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
Header.tsx Deploy update 2025-12-18 21:15:40 +09:00
InvitationCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
InviteArtistModal.tsx Deploy update 2025-12-18 21:15:40 +09:00
LabelCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
LabelHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
LabelProfileForm.tsx Deploy update 2025-12-18 21:15:40 +09:00
LabelStats.tsx Deploy update 2025-12-18 21:15:40 +09:00
NavLink.tsx Deploy update 2025-12-18 21:15:40 +09:00
PlayerControls.tsx Deploy update 2025-12-18 21:15:40 +09:00
PlaylistCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
PlaylistHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
ProfileForm.tsx Deploy update 2025-12-18 21:15:40 +09:00
README.md Deploy update 2025-12-18 21:15:40 +09:00
SearchBar.tsx Deploy update 2025-12-18 21:15:40 +09:00
SearchResults.tsx Deploy update 2025-12-18 21:15:40 +09:00
SectionHeader.tsx Deploy update 2025-12-18 21:15:40 +09:00
ShareButton.tsx Deploy update 2025-12-18 21:15:40 +09:00
ShareModal.tsx Deploy update 2025-12-18 21:15:40 +09:00
SharedContentDisplay.tsx Deploy update 2025-12-18 21:15:40 +09:00
SocialLinks.tsx Deploy update 2025-12-18 21:15:40 +09:00
SocialShareButtons.tsx Deploy update 2025-12-18 21:15:40 +09:00
SongCard.tsx Deploy update 2025-12-18 21:15:40 +09:00
TrackList.tsx Deploy update 2025-12-18 21:15:40 +09:00
UploadForm.tsx Deploy update 2025-12-18 21:15:40 +09:00
UserMenu.tsx Deploy update 2025-12-18 21:15:40 +09:00
WaveformDisplay.tsx Deploy update 2025-12-18 21:15:40 +09:00
index.ts Deploy update 2025-12-18 21:15:40 +09:00

README.md

Sonic Cloud Components

This directory contains all 22 UI components for the Sonic Cloud music platform.

Component Categories

Audio Player (3 components)

  • AudioPlayer - Global audio player with play/pause, progress, volume controls
  • PlayerControls - Reusable control buttons (play, pause, next, previous, shuffle, repeat)
  • WaveformDisplay - Visual audio waveform with seek functionality

Cards (4 components)

  • SongCard - Song display with cover, title, artist, play button
  • AlbumCard - Album display with cover, title, artist, track count
  • ArtistCard - Artist display with avatar, name, followers, verified badge
  • PlaylistCard - Playlist display with cover, title, description, song count

Headers (5 components)

  • ArtistHeader - Artist profile header with banner, avatar, bio, stats
  • AlbumHeader - Album header with cover, title, artist, release info
  • PlaylistHeader - Playlist header with cover, title, actions
  • GenreHeader - Genre page header with gradient background
  • SectionHeader - Reusable section title with "See all" link

Lists (1 component)

  • TrackList - Song list with play buttons, position numbers, duration

Forms (4 components)

  • AuthForm - Login/register/forgot-password form (3 modes)
  • UploadForm - Song upload form with file input, metadata fields
  • ProfileForm - User profile edit form with validation
  • AvatarUpload - Avatar image upload with drag-and-drop preview

Search (2 components)

  • SearchBar - Search input with autocomplete suggestions
  • SearchResults - Search results display (songs, artists, albums)

Modals (1 component)

  • CreatePlaylistModal - Modal for creating new playlists

Utility (2 components)

  • GenreBadge - Small genre tag with variants (default, outlined, minimal)
  • SocialLinks - Social media link icons (Twitter, Instagram, etc.)

Design System

Colors

  • Background: zinc-900, zinc-950
  • Surface: zinc-800
  • Accent: purple-500, purple-600
  • Text: white, zinc-100 (primary), zinc-400 (secondary)
  • Border: zinc-700, zinc-800

Spacing

  • Cards: p-4 (padding)
  • Sections: mb-6, mb-8 (margin bottom)
  • Gaps: gap-3, gap-4, gap-6

Border Radius

  • Small: rounded-lg (8px)
  • Medium: rounded-xl (12px)
  • Large: rounded-2xl (16px)
  • Circle: rounded-full

Typography

  • Headings: font-bold, font-semibold
  • Body: font-medium (default)
  • Sizes: text-sm, text-base, text-lg, text-xl, text-2xl

Component Props

All components use TypeScript interfaces for type safety. Import types like this:

import { SongCard, type SongCardProps } from '@/components'

Usage Examples

Audio Player

import { AudioPlayer } from '@/components'

<AudioPlayer
  songId="123"
  songTitle="My Song"
  artistName="Artist Name"
  audioUrl="/audio/song.mp3"
  coverUrl="/images/cover.jpg"
  onPlayCountIncrement={() => console.log('Play counted')}
/>

Song Card

import { SongCard } from '@/components'

<SongCard
  id="123"
  title="My Song"
  artistName="Artist Name"
  coverUrl="/images/cover.jpg"
  duration={180}
  plays={1000}
  onPlay={() => console.log('Play clicked')}
/>

Auth Form

import { AuthForm } from '@/components'

<AuthForm
  mode="login"
  onSubmit={(data) => console.log(data)}
  onModeChange={(mode) => console.log('Mode changed to', mode)}
/>
import { SearchBar } from '@/components'

<SearchBar
  placeholder="Search..."
  onSearch={(query) => console.log('Searching for:', query)}
  suggestions={[
    { type: 'song', id: '1', title: 'Song Title', subtitle: 'Artist' }
  ]}
  onSuggestionClick={(suggestion) => console.log('Clicked:', suggestion)}
/>

Accessibility

All components follow accessibility best practices:

  • Semantic HTML - Proper element usage (button, nav, etc.)
  • ARIA labels - Screen reader support
  • Keyboard navigation - Tab, Enter, Escape support
  • Focus states - Visible focus indicators
  • Color contrast - WCAG AA compliant

Responsive Design

Components are mobile-first and responsive:

  • Mobile: Base styles
  • Tablet: sm: breakpoint (640px)
  • Desktop: md: breakpoint (768px), lg: breakpoint (1024px)

Component States

All interactive components support:

  • Default - Initial state
  • Hover - Mouse hover effect
  • Focus - Keyboard focus ring
  • Active - Click/tap state
  • Disabled - Non-interactive state
  • Loading - Async operation state

Performance

Components are optimized for performance:

  • 'use client' - Client-side rendering where needed
  • Lazy loading - Images with proper alt text
  • Debouncing - Search input optimized
  • Memoization - React hooks for expensive operations

Browser Support

Components work in all modern browsers:

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+
  • components/index.ts - Barrel export for all components
  • project_manifest.json - Component definitions and dependencies
  • CLAUDE.md - Project workflow and guidelines