Files
superport/lib/core/theme/shadcn_theme.dart

243 lines
6.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
class SuperportShadTheme {
static const Color primaryColor = Color(0xFF1B4F87);
static const Color successColor = Color(0xFF2E8B57);
static const Color warningColor = Color(0xFFFFC107);
static const Color dangerColor = Color(0xFFDC3545);
static const Color infoColor = Color(0xFF17A2B8);
static ShadThemeData lightTheme() {
return ShadThemeData(
brightness: Brightness.light,
colorScheme: const ShadColorScheme(
background: Color(0xFFFFFFFF),
foreground: Color(0xFF09090B),
card: Color(0xFFFFFFFF),
cardForeground: Color(0xFF09090B),
popover: Color(0xFFFFFFFF),
popoverForeground: Color(0xFF09090B),
primary: Color(0xFF1B4F87),
primaryForeground: Color(0xFFFAFAFA),
secondary: Color(0xFFF4F4F5),
secondaryForeground: Color(0xFF18181B),
muted: Color(0xFFF4F4F5),
mutedForeground: Color(0xFF71717A),
accent: Color(0xFFF4F4F5),
accentForeground: Color(0xFF18181B),
destructive: Color(0xFFEF4444),
destructiveForeground: Color(0xFFFAFAFA),
border: Color(0xFFE4E4E7),
input: Color(0xFFE4E4E7),
ring: Color(0xFF18181B),
selection: Color(0xFF1B4F87),
),
textTheme: ShadTextTheme(
h1: TextStyle(
fontSize: 36,
fontWeight: FontWeight.w700,
letterSpacing: -0.5,
height: 1.3,
),
h2: TextStyle(
fontSize: 30,
fontWeight: FontWeight.w700,
letterSpacing: -0.5,
height: 1.3,
),
h3: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
height: 1.3,
),
h4: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
height: 1.3,
),
p: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
letterSpacing: -0.2,
height: 1.6,
),
blockquote: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.italic,
),
table: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
),
list: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
),
lead: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w400,
),
large: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
small: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
),
muted: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w400,
letterSpacing: -0.2,
height: 1.6,
),
),
radius: BorderRadius.circular(8),
);
}
static ShadThemeData darkTheme() {
return ShadThemeData(
brightness: Brightness.dark,
colorScheme: const ShadColorScheme(
background: Color(0xFF09090B),
foreground: Color(0xFFFAFAFA),
card: Color(0xFF09090B),
cardForeground: Color(0xFFFAFAFA),
popover: Color(0xFF09090B),
popoverForeground: Color(0xFFFAFAFA),
primary: Color(0xFF1B4F87),
primaryForeground: Color(0xFFFAFAFA),
secondary: Color(0xFF27272A),
secondaryForeground: Color(0xFFFAFAFA),
muted: Color(0xFF27272A),
mutedForeground: Color(0xFFA1A1AA),
accent: Color(0xFF27272A),
accentForeground: Color(0xFFFAFAFA),
destructive: Color(0xFF7F1D1D),
destructiveForeground: Color(0xFFFAFAFA),
border: Color(0xFF27272A),
input: Color(0xFF27272A),
ring: Color(0xFFD4D4D8),
selection: Color(0xFF1B4F87),
),
textTheme: ShadTextTheme(
h1: TextStyle(
fontSize: 36,
fontWeight: FontWeight.w700,
letterSpacing: -0.5,
height: 1.3,
),
h2: TextStyle(
fontSize: 30,
fontWeight: FontWeight.w700,
letterSpacing: -0.5,
height: 1.3,
),
h3: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
height: 1.3,
),
h4: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
height: 1.3,
),
p: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
letterSpacing: -0.2,
height: 1.6,
),
blockquote: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.italic,
),
table: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
),
list: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
),
lead: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w400,
),
large: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
small: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
),
muted: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w400,
letterSpacing: -0.2,
height: 1.6,
),
),
radius: BorderRadius.circular(8),
);
}
static TextStyle koreanTextStyle({
double fontSize = 14,
FontWeight fontWeight = FontWeight.w400,
Color? color,
}) {
return TextStyle(
fontSize: fontSize,
fontWeight: fontWeight,
letterSpacing: -0.2,
height: 1.6,
fontFamily: 'NotoSansKR',
color: color,
);
}
static BoxDecoration statusDecoration(String status) {
Color backgroundColor;
Color borderColor;
switch (status.toLowerCase()) {
case 'active':
case 'success':
backgroundColor = successColor.withValues(alpha: 0.1);
borderColor = successColor;
break;
case 'warning':
case 'pending':
backgroundColor = warningColor.withValues(alpha: 0.1);
borderColor = warningColor;
break;
case 'danger':
case 'error':
backgroundColor = dangerColor.withValues(alpha: 0.1);
borderColor = dangerColor;
break;
case 'inactive':
case 'disabled':
default:
backgroundColor = Colors.grey.withValues(alpha: 0.1);
borderColor = Colors.grey;
}
return BoxDecoration(
color: backgroundColor,
border: Border.all(color: borderColor, width: 1),
borderRadius: BorderRadius.circular(4),
);
}
}