eletrotupi / tcc/ frontend/constants/theme.tsc941890054e469bdf624c967e653c5c48b4fb80f
4.7 KB | 214 lines Raw
1
/**
2
 * Below are the colors that are used in the app. The colors are defined in the light and dark mode.
3
 * There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc.
4
 */
5

6
// Primary Colors
7
const NEON_GREEN = "#13ec5b";
8
const PRIMARY_DARK = "#0f172a";
9

10
// Surface & Background
11
const BACKGROUND_LIGHT = "#f6f8f6";
12
const BACKGROUND_DARK_GHOST = "#F8FAFC";
13

14
// Text Colors
15
const TEXT_PRIMARY = "#0f172a";
16
const TEXT_SECONDARY = "#64748b";
17
const TEXT_PLACEHOLDER = "#94A3B8";
18

19
// Borders & Accents
20
const BORDER_SUBTLE = "#f1f5f9";
21
const BORDER_SUBTLE_GRAY = "#E5E7EB";
22
const BORDER_SUBTLE_LIGHT_GRAY = "#CBD5E1";
23
const STATUS_ACTIVE_BG = "rgba(19, 236, 91, 0.1)";
24

25
// Semantic Color Pills and stuff
26
const PILL_BLUE = "#dbeafe";
27
const PILL_INDIGO = "#e0e7ff";
28
const PILL_PURPLE = "#f3e8ff";
29

30
const tintColorLight = "#12ED5C";
31
const tintColorSecondary = "#618A70";
32
const GRAY = "#475569";
33
const LIGHT_GRAY = "#64748B";
34
const LIGHT_SLATE_GRAY = "#94A3B8";
35
const PURE_WHITE = "#FFFFFF";
36

37
export const Colors = {
38
  light: {
39
    // Primary Actions & Focus
40
    text: TEXT_PRIMARY,
41
    textSecondary: TEXT_SECONDARY,
42
    background: BACKGROUND_LIGHT,
43
    surface: PURE_WHITE,
44
    tint: NEON_GREEN,
45
    backgroundDarkGhost: BACKGROUND_DARK_GHOST,
46
    borderDashed: BORDER_SUBTLE_LIGHT_GRAY,
47
    smallAddButtonIcon: BORDER_SUBTLE_LIGHT_GRAY,
48

49
    // Secondary
50
    neutral: '#6F7A6D',
51
    //secondaryBackground: '#E0EBDB',
52
    secondaryBackground: '#0EB545',
53

54
    // Interactive States
55
    icon: TEXT_SECONDARY,
56
    tabIconDefault: TEXT_SECONDARY,
57
    tabIconSelected: NEON_GREEN,
58

59
    // Form Inputs
60
    inputBackgroundColor: PURE_WHITE,
61
    inputBackgroundDarkGhostColor: BACKGROUND_DARK_GHOST,
62
    inputBorderColor: BORDER_SUBTLE_GRAY,
63
    inputFocusBorderColor: NEON_GREEN,
64
    inputPlaceholderColor: TEXT_PLACEHOLDER,
65

66
    // Cards & Containers
67
    cardBackground: PURE_WHITE,
68
    cardBorder: BORDER_SUBTLE,
69
    cardShadow: "rgba(0, 0, 0, 0.05)",
70

71
    // Active / Inactive States
72
    activeBackground: STATUS_ACTIVE_BG,
73
    moodIntensityLabel: "#94a3b8",
74

75
    // Semantic Accents (for categorization)
76
    accentBlue: PILL_BLUE,
77
    accentIndigo: PILL_INDIGO,
78
    accentPurple: PILL_PURPLE,
79
    accentDarkPurple: "#7F77DD",
80

81
    // Some grays
82
    white: PURE_WHITE,
83
    gray: GRAY,
84
    lightGray: LIGHT_GRAY,
85
    lightSlateGray: LIGHT_SLATE_GRAY,
86
    black: PRIMARY_DARK,
87

88
    // Disabled / Secondary
89
    disabled: "#cbd5e1",
90
    divider: BORDER_SUBTLE,
91
    sliderTracking: "#E2E8F0",
92
    sliderLabels: "#94a3b8",
93
    warning: "orange",
94
    success: "#22c55e",
95
    danger: "#EF4444",
96
    textBlack: PRIMARY_DARK,
97
  },
98
};
99

100
export const Typography = {
101
  // Headlines
102
  headlineXg: {
103
    fontFamily: "Inter",
104
    fontSize: 36,
105
    fontWeight: "900" as const,
106
    lineHeight: 40,
107
  },
108
  headlineLg: {
109
    fontFamily: "Inter",
110
    fontSize: 20,
111
    fontWeight: "900" as const,
112
    lineHeight: 28,
113
    letterSpacing: -0.02,
114
  },
115
  headlineMd: {
116
    fontFamily: "Inter",
117
    fontSize: 18,
118
    fontWeight: "700" as const,
119
    lineHeight: 24,
120
  },
121

122
  // Body
123
  bodyLg: {
124
    fontFamily: "Inter",
125
    fontSize: 16,
126
    fontWeight: "700" as const,
127
    lineHeight: 20,
128
  },
129
  bodyMd: {
130
    fontFamily: "Inter",
131
    fontSize: 14,
132
    fontWeight: "500" as const,
133
    lineHeight: 20,
134
  },
135

136
  // Labels
137
  labelSm: {
138
    fontFamily: "Inter",
139
    fontSize: 12,
140
    fontWeight: "600" as const,
141
    lineHeight: 16,
142
    letterSpacing: 0.05,
143
  },
144

145
  // Used for the Slider labels
146
  labelXs: {
147
    fontFamily: "Inter",
148
    fontSize: 10,
149
    lineHeight: 15,
150
    letterSpacing: 0.25,
151
  },
152

153
  cardHint: {
154
    fontFamily: "Inter",
155
    fontSize: 11,
156
    lineHeight: 13.8,
157
    fontStyle: "italic" as const,
158
  },
159
};
160

161
export const Spacing = {
162
  containerPadding: 16, // 1rem
163
  sectionGap: 32, // 2rem
164
  inlineGapSm: 8, // 0.5rem
165
  cardGap: 12, // 0.75rem
166
};
167

168
export const BorderRadius = {
169
  sm: 4, // 0.25rem
170
  default: 8, // 0.5rem
171
  md: 12, // 0.75rem
172
  lg: 16, // 1rem
173
  xl: 24, // 1.5rem
174
  full: 9999, // pill-shaped
175
};
176

177
export const Shadows = {
178
  sm: {
179
    shadowColor: "#000000",
180
    shadowOffset: { width: 0, height: 1 },
181
    shadowOpacity: 0.05,
182
    shadowRadius: 2,
183
    elevation: 2,
184
  },
185
  md: {
186
    shadowColor: "#000000",
187
    shadowOffset: { width: 0, height: 4 },
188
    shadowOpacity: 0.1,
189
    shadowRadius: 8,
190
    elevation: 4,
191
  },
192
  lg: {
193
    shadowColor: NEON_GREEN,
194
    shadowOffset: { width: 0, height: 8 },
195
    shadowOpacity: 0.15,
196
    shadowRadius: 16,
197
    elevation: 8,
198
  },
199
};
200

201
export const Fonts = {
202
  sans: "Inter",
203
  serif: "serif",
204
  rounded: "Inter",
205
  mono: "monospace",
206
};
207

208
export const Theme = {
209
  colors: Colors,
210
  typography: Typography,
211
  spacing: Spacing,
212
  shadows: Shadows,
213
  borderRadius: BorderRadius,
214
};