import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'yanting_text.dart'; import 'yanting_tokens.dart'; ShadThemeData buildYantingShadTheme() => _buildShadTheme(brightness: Brightness.light); ShadThemeData buildYantingDarkShadTheme() => _buildShadTheme(brightness: Brightness.dark); ShadThemeData _buildShadTheme({required Brightness brightness}) { final colors = brightness == Brightness.dark ? ShadColorScheme( background: YantingDarkColors.background, foreground: YantingDarkColors.foreground, card: YantingDarkColors.card, cardForeground: YantingDarkColors.foreground, popover: YantingDarkColors.card, popoverForeground: YantingDarkColors.foreground, primary: YantingDarkColors.primary, primaryForeground: YantingDarkColors.primaryForeground, secondary: YantingDarkColors.secondary, secondaryForeground: YantingDarkColors.secondaryForeground, muted: YantingDarkColors.muted, mutedForeground: YantingDarkColors.mutedForeground, accent: YantingDarkColors.brandSoft, accentForeground: YantingDarkColors.primaryForeground, destructive: YantingDarkColors.destructive, destructiveForeground: YantingDarkColors.background, border: YantingDarkColors.border, input: YantingDarkColors.input, ring: YantingDarkColors.primary, selection: YantingDarkColors.foreground, custom: { 'brandSoft': YantingDarkColors.brandSoft, 'brandSoftBorder': YantingDarkColors.brandSoftBorder, 'link': YantingDarkColors.link, 'chart2': YantingDarkColors.chart2, 'warning': YantingDarkColors.warning, 'warningSoft': YantingDarkColors.warningSoft, 'warningSoftBorder': YantingDarkColors.warningSoftBorder, 'warningSoftForeground': YantingDarkColors.warningSoftForeground, }, ) : ShadColorScheme( background: YantingColors.background, foreground: YantingColors.foreground, card: YantingColors.card, cardForeground: YantingColors.foreground, popover: YantingColors.card, popoverForeground: YantingColors.foreground, primary: YantingColors.primary, primaryForeground: YantingColors.primaryForeground, secondary: YantingColors.secondary, secondaryForeground: YantingColors.secondaryForeground, muted: YantingColors.muted, mutedForeground: YantingColors.mutedForeground, accent: YantingColors.brandSoft, accentForeground: YantingColors.primaryForeground, destructive: YantingColors.destructive, destructiveForeground: YantingColors.background, border: YantingColors.border, input: YantingColors.input, ring: YantingColors.primary, selection: YantingColors.foreground, custom: { 'brandSoft': YantingColors.brandSoft, 'brandSoftBorder': YantingColors.brandSoftBorder, 'link': YantingColors.link, 'chart2': YantingColors.chart2, 'warning': YantingColors.warning, 'warningSoft': YantingColors.warningSoft, 'warningSoftBorder': YantingColors.warningSoftBorder, 'warningSoftForeground': YantingColors.warningSoftForeground, }, ); final textTheme = ShadTextTheme( family: YantingText.fontFamily, h1Large: YantingText.appTitle.copyWith(color: colors.foreground), h1: YantingText.appTitle.copyWith(color: colors.foreground), h2: YantingText.sectionTitle.copyWith(color: colors.foreground), h3: YantingText.cardTitle.copyWith(color: colors.foreground), h4: YantingText.listTitle.copyWith(color: colors.foreground), p: YantingText.body.copyWith(color: colors.foreground), blockquote: YantingText.body.copyWith(color: colors.mutedForeground), table: YantingText.meta.copyWith(color: colors.mutedForeground), list: YantingText.body.copyWith(color: colors.foreground), lead: YantingText.sub.copyWith(color: colors.mutedForeground), large: YantingText.cardTitle.copyWith(color: colors.foreground), small: YantingText.badge.copyWith(color: colors.mutedForeground), muted: YantingText.meta.copyWith(color: colors.mutedForeground), googleFontBuilder: GoogleFonts.dmSans, ); return ShadThemeData( brightness: brightness, colorScheme: colors, radius: BorderRadius.circular(YantingRadius.base), cardTheme: ShadCardTheme( padding: const EdgeInsets.all(YantingSpacing.cardPadding), radius: BorderRadius.circular(YantingRadius.xl), border: ShadBorder.all(color: colors.border), shadows: const [], ), textTheme: textTheme, ); }