243 lines
6.7 KiB
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),
|
|
);
|
|
}
|
|
} |