# MediaHub Design System ## ๐Ÿ“‹ Overview The MediaHub Design System provides a comprehensive set of design tokens, components, and utilities to ensure consistency across the application. This system is built on modern design principles and follows accessibility best practices. ## ๐ŸŽจ Design Tokens ### Colors Our color system is organized into semantic categories for consistent usage across the application. #### Primary Colors ```typescript import { colors } from '@/lib/design-system'; // Primary brand colors colors.primary[50] // Lightest shade colors.primary[100] // Very light colors.primary[500] // Main brand color colors.primary[600] // Darker shade colors.primary[900] // Darkest shade ``` #### Neutral Colors ```typescript // Neutral colors for text, backgrounds, and borders colors.neutral[50] // Background colors colors.neutral[100] // Light backgrounds colors.neutral[500] // Medium text colors.neutral[700] // Dark text colors.neutral[900] // Darkest text ``` #### Semantic Colors ```typescript // Success states colors.semantic.success.DEFAULT colors.semantic.success[50] // Light background colors.semantic.success[500] // Main success color // Warning states colors.semantic.warning.DEFAULT colors.semantic.warning[50] // Light background colors.semantic.warning[500] // Main warning color // Error states colors.semantic.error.DEFAULT colors.semantic.error[50] // Light background colors.semantic.error[500] // Main error color // Info states colors.semantic.info.DEFAULT colors.semantic.info[50] // Light background colors.semantic.info[500] // Main info color ``` #### Surface Colors ```typescript // Surface colors for UI elements colors.surface.background // Main background colors.surface.foreground // Main text colors.surface.card // Card backgrounds colors.surface.border // Border colors colors.surface.muted // Muted backgrounds ``` ### Spacing Our spacing system uses a 4px base unit for consistent spacing across the application. ```typescript import { spacing } from '@/lib/design-system'; // Base spacing units spacing.xs // 4px spacing.sm // 8px spacing.md // 16px spacing.lg // 24px spacing.xl // 32px spacing['2xl'] // 48px spacing['3xl'] // 64px spacing['4xl'] // 96px spacing['5xl'] // 128px // Component-specific spacing spacing.component.padding.xs // 8px spacing.component.padding.md // 16px spacing.component.padding.lg // 24px spacing.component.margin.xs // 8px spacing.component.margin.md // 16px spacing.component.margin.lg // 24px spacing.component.gap.xs // 4px spacing.component.gap.md // 16px spacing.component.gap.lg // 24px ``` ### Typography Our typography system provides consistent text styles with proper hierarchy. #### Font Families ```typescript import { typography } from '@/lib/design-system'; // Font families typography.fontFamily.sans // DM Sans, system-ui, sans-serif typography.fontFamily.mono // JetBrains Mono, Consolas, monospace ``` #### Font Sizes ```typescript // Font sizes typography.fontSize.xs // 12px typography.fontSize.sm // 14px typography.fontSize.base // 16px typography.fontSize.lg // 18px typography.fontSize.xl // 20px typography.fontSize['2xl'] // 24px typography.fontSize['3xl'] // 30px typography.fontSize['4xl'] // 36px typography.fontSize['5xl'] // 48px typography.fontSize['6xl'] // 60px ``` #### Typography Presets ```typescript // Predefined typography styles typography.presets.h1 // Large headings typography.presets.h2 // Medium headings typography.presets.h3 // Small headings typography.presets.body // Body text typography.presets.bodySmall // Small body text typography.presets.caption // Caption text typography.presets.button // Button text ``` ### Border Radius Consistent border radius values for rounded corners. ```typescript import { borderRadius } from '@/lib/design-system'; borderRadius.none // 0 borderRadius.sm // 2px borderRadius.md // 4px borderRadius.lg // 8px borderRadius.xl // 12px borderRadius['2xl'] // 16px borderRadius['3xl'] // 24px borderRadius.full // 9999px (fully rounded) ``` ### Shadows Elevation and depth through consistent shadow values. ```typescript import { shadows } from '@/lib/design-system'; // Elevation shadows shadows.sm // Subtle elevation shadows.md // Medium elevation shadows.lg // Large elevation shadows.xl // Extra large elevation shadows['2xl'] // Maximum elevation // Custom shadows shadows.card // Card shadows shadows.dropdown // Dropdown shadows shadows.modal // Modal shadows shadows.focus // Focus ring shadows ``` ### Animations Smooth, consistent animations for better user experience. ```typescript import { animations } from '@/lib/design-system'; // Animation durations animations.duration.fast // 150ms animations.duration.normal // 250ms animations.duration.slow // 350ms animations.duration.slower // 500ms // Animation presets animations.presets.fadeIn // Fade in animation animations.presets.fadeOut // Fade out animation animations.presets.slideInFromTop // Slide in from top animations.presets.slideInFromBottom // Slide in from bottom animations.presets.scaleIn // Scale in animation animations.presets.scaleOut // Scale out animation animations.presets.spin // Spinning animation animations.presets.pulse // Pulsing animation animations.presets.bounce // Bouncing animation ``` ## ๐Ÿงฉ Component Library ### Core Components Our component library is built on top of shadcn/ui and Radix UI primitives, enhanced with our design system. #### Button Component ```tsx import { Button } from '@/components/ui/button'; // Usage examples ``` #### Card Component ```tsx import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; Card Title Card content goes here ``` #### Input Component ```tsx import { Input } from '@/components/ui/input'; ``` ### Design System Utilities #### Color Utilities ```typescript import { getColor } from '@/lib/design-system'; // Get color with opacity getColor(colors.primary[500], 0.5) // Primary color with 50% opacity ``` #### Spacing Utilities ```typescript import { getSpacing } from '@/lib/design-system'; // Get spacing value getSpacing('md') // Returns '1rem' ``` #### Typography Utilities ```typescript import { getTypography } from '@/lib/design-system'; // Get typography preset getTypography('h1') // Returns h1 typography styles ``` #### Shadow Utilities ```typescript import { getShadow } from '@/lib/design-system'; // Get shadow value getShadow('card') // Returns card shadow ``` #### Animation Utilities ```typescript import { getAnimation } from '@/lib/design-system'; // Get animation preset getAnimation('fadeIn') // Returns fadeIn animation ``` ## ๐ŸŽฏ Usage Guidelines ### Color Usage 1. **Primary Colors**: Use for main actions, links, and brand elements 2. **Neutral Colors**: Use for text, backgrounds, and borders 3. **Semantic Colors**: Use for status indicators and feedback 4. **Surface Colors**: Use for UI element backgrounds ### Spacing Guidelines 1. **Use consistent spacing**: Always use our predefined spacing values 2. **Follow the 4px grid**: All spacing should be multiples of 4px 3. **Component spacing**: Use component-specific spacing for internal padding/margins ### Typography Guidelines 1. **Hierarchy**: Use appropriate heading levels (h1-h6) 2. **Readability**: Ensure sufficient contrast and line height 3. **Consistency**: Use typography presets for consistent styling ### Animation Guidelines 1. **Purpose**: Use animations to provide feedback and guide attention 2. **Duration**: Keep animations short (150-350ms) for responsiveness 3. **Easing**: Use smooth easing functions for natural movement ## ๐ŸŽจ Design Principles ### 1. Consistency - Use design tokens consistently across all components - Maintain visual hierarchy through typography and spacing - Follow established patterns for similar interactions ### 2. Accessibility - Ensure sufficient color contrast (WCAG 2.1 AA compliance) - Provide focus indicators for keyboard navigation - Use semantic HTML and ARIA attributes ### 3. Performance - Optimize animations for smooth 60fps performance - Use CSS transforms and opacity for animations - Minimize layout shifts during interactions ### 4. Scalability - Design tokens are easily customizable - Components are composable and reusable - System supports both light and dark themes ## ๐Ÿ”ง Customization ### Adding New Colors ```typescript // In lib/design-system.ts export const colors = { // ... existing colors custom: { 50: 'hsl(200, 100%, 95%)', 500: 'hsl(200, 100%, 50%)', 900: 'hsl(200, 100%, 25%)', }, }; ``` ### Adding New Spacing Values ```typescript // In lib/design-system.ts export const spacing = { // ... existing spacing 'custom': '1.25rem', // 20px }; ``` ### Adding New Typography Presets ```typescript // In lib/design-system.ts export const typography = { presets: { // ... existing presets custom: { fontSize: '1.125rem', fontWeight: '600', lineHeight: '1.4', letterSpacing: '-0.025em', }, }, }; ``` ## ๐Ÿ“ฑ Responsive Design Our design system supports responsive design through Tailwind's breakpoint system: ```typescript // Breakpoints breakpoints.xs // 320px breakpoints.sm // 640px breakpoints.md // 768px breakpoints.lg // 1024px breakpoints.xl // 1280px breakpoints['2xl'] // 1536px ``` ### Responsive Usage ```tsx // Responsive spacing
Content
// Responsive typography

Responsive Heading

// Responsive colors
Theme-aware content
``` ## ๐ŸŒ™ Dark Mode Support Our design system includes comprehensive dark mode support: ```typescript // Dark mode colors are automatically applied // Light mode colors.surface.background // hsl(0, 0%, 100%) // Dark mode (applied automatically) colors.surface.background // hsl(222.2, 47.4%, 11.2%) ``` ### Dark Mode Usage ```tsx // Automatic dark mode support
Content automatically adapts to theme
// Manual dark mode classes
Manual theme control
``` ## ๐Ÿงช Testing ### Visual Regression Testing ```typescript // Example test for design system components import { render, screen } from '@testing-library/react'; import { Button } from '@/components/ui/button'; describe('Button Component', () => { it('renders with correct design system styles', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('bg-primary text-primary-foreground'); }); }); ``` ### Accessibility Testing ```typescript // Test for accessibility compliance import { axe, toHaveNoViolations } from 'jest-axe'; expect.extend(toHaveNoViolations); it('should not have accessibility violations', async () => { const { container } = render(); const results = await axe(container); expect(results).toHaveNoViolations(); }); ``` ## ๐Ÿ“š Resources ### Documentation - [Design System Tokens](./DESIGN_SYSTEM.md) - [Component Library](./COMPONENTS.md) - [Accessibility Guidelines](./ACCESSIBILITY.md) ### Tools - [Storybook](./storybook) - Component documentation and testing - [Figma](./figma) - Design files and specifications - [Chromatic](./chromatic) - Visual regression testing ### References - [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) - [Material Design](https://material.io/design) - [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/) --- **Last Updated**: December 2024 **Version**: 1.0.0 **Maintainer**: MediaHub Development Team