import 'package:flutter/material.dart'; class AppColorPalette extends ThemeExtension { final List eventPresetColors; final List avatarColors; final Color g1Text, g1Divider, g1Border; final Color g2Text, g2Divider, g2Border; final Color g3Text, g3Divider, g3Border; final Color eventDefault; final Color eventArchived; const AppColorPalette({ required this.eventPresetColors, required this.avatarColors, required this.g1Text, required this.g1Divider, required this.g1Border, required this.g2Text, required this.g2Divider, required this.g2Border, required this.g3Text, required this.g3Divider, required this.g3Border, required this.eventDefault, required this.eventArchived, }); static const light = AppColorPalette( eventPresetColors: [ Color(0xFF3B82F6), Color(0xFF8B5CF6), Color(0xFF10B981), Color(0xFFF59E0B), Color(0xFFEF4444), ], avatarColors: [ Color(0xFF3B82F6), Color(0xFF7C3AED), Color(0xFF2563EB), Color(0xFF2D6CDF), Color(0xFF8B5CF6), ], g1Text: Color(0xFFB91C1C), g1Divider: Color(0xFFFEE2E2), g1Border: Color(0xFFF3C6C6), g2Text: Color(0xFFB45309), g2Divider: Color(0xFFFFEDD5), g2Border: Color(0xFFFDE2B8), g3Text: Color(0xFF1D4ED8), g3Divider: Color(0xFFEAF3FF), g3Border: Color(0xFFCFE1FB), eventDefault: Color(0xFF3B82F6), eventArchived: Color(0xFF64748B), ); static const dark = AppColorPalette( eventPresetColors: [ Color(0xFF60A5FA), Color(0xFFA78BFA), Color(0xFF34D399), Color(0xFFFBBF24), Color(0xFFF87171), ], avatarColors: [ Color(0xFF60A5FA), Color(0xFFA78BFA), Color(0xFF3B82F6), Color(0xFF60A5FA), Color(0xFF818CF8), ], g1Text: Color(0xFFFCA5A5), g1Divider: Color(0xFF7F1D1D), g1Border: Color(0xFFB91C1C), g2Text: Color(0xFFFCD34D), g2Divider: Color(0xFF78350F), g2Border: Color(0xFFD97706), g3Text: Color(0xFF93C5FD), g3Divider: Color(0xFF1E3A8A), g3Border: Color(0xFF2563EB), eventDefault: Color(0xFF60A5FA), eventArchived: Color(0xFF94A3B8), ); @override AppColorPalette copyWith({ List? eventPresetColors, List? avatarColors, Color? g1Text, Color? g1Divider, Color? g1Border, Color? g2Text, Color? g2Divider, Color? g2Border, Color? g3Text, Color? g3Divider, Color? g3Border, Color? eventDefault, Color? eventArchived, }) { return AppColorPalette( eventPresetColors: eventPresetColors ?? this.eventPresetColors, avatarColors: avatarColors ?? this.avatarColors, g1Text: g1Text ?? this.g1Text, g1Divider: g1Divider ?? this.g1Divider, g1Border: g1Border ?? this.g1Border, g2Text: g2Text ?? this.g2Text, g2Divider: g2Divider ?? this.g2Divider, g2Border: g2Border ?? this.g2Border, g3Text: g3Text ?? this.g3Text, g3Divider: g3Divider ?? this.g3Divider, g3Border: g3Border ?? this.g3Border, eventDefault: eventDefault ?? this.eventDefault, eventArchived: eventArchived ?? this.eventArchived, ); } @override AppColorPalette lerp(ThemeExtension? other, double t) { if (other is! AppColorPalette) return this; return AppColorPalette( eventPresetColors: eventPresetColors .asMap() .entries .map((e) => Color.lerp(e.value, other.eventPresetColors[e.key], t)!) .toList(), avatarColors: avatarColors .asMap() .entries .map((e) => Color.lerp(e.value, other.avatarColors[e.key], t)!) .toList(), g1Text: Color.lerp(g1Text, other.g1Text, t)!, g1Divider: Color.lerp(g1Divider, other.g1Divider, t)!, g1Border: Color.lerp(g1Border, other.g1Border, t)!, g2Text: Color.lerp(g2Text, other.g2Text, t)!, g2Divider: Color.lerp(g2Divider, other.g2Divider, t)!, g2Border: Color.lerp(g2Border, other.g2Border, t)!, g3Text: Color.lerp(g3Text, other.g3Text, t)!, g3Divider: Color.lerp(g3Divider, other.g3Divider, t)!, g3Border: Color.lerp(g3Border, other.g3Border, t)!, eventDefault: Color.lerp(eventDefault, other.eventDefault, t)!, eventArchived: Color.lerp(eventArchived, other.eventArchived, t)!, ); } } class AppSpacing { AppSpacing._(); static const double none = 0.0; static const double xs = 4.0; static const double sm = 8.0; static const double md = 12.0; static const double lg = 16.0; static const double xl = 20.0; static const double xxl = 24.0; } class AppRadius { AppRadius._(); static const double sm = 6.0; static const double md = 12.0; static const double lg = 16.0; static const double xl = 18.0; static const double xxl = 24.0; static const double full = 999.0; }