@beyondcorp/beyond-ui-native 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beyondcorp/beyond-ui-native",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Accessible, NativeWind-first React Native component library for Beyond Softwares",
5
5
  "author": "Beyond Corp",
6
6
  "license": "MIT",
@@ -148,7 +148,7 @@ export const AccordionItem = React.forwardRef<View, AccordionItemProps>(
148
148
  <AccordionItemContext.Provider value={{ value, isOpen }}>
149
149
  <View
150
150
  ref={ref}
151
- className={cn("border-b border-border py-1", className)}
151
+ className={cn("border-b border-neutral-200 dark:border-neutral-800 py-1", className)}
152
152
  {...props}
153
153
  >
154
154
  {children}
@@ -200,13 +200,13 @@ export const AccordionTrigger = React.forwardRef<View, AccordionTriggerProps>(
200
200
  >
201
201
  <View className="flex-1 pr-2">
202
202
  {typeof children === "string" ? (
203
- <Text className="text-base font-medium text-foreground">{children}</Text>
203
+ <Text className="text-base font-medium text-neutral-900 dark:text-neutral-100">{children}</Text>
204
204
  ) : (
205
205
  children
206
206
  )}
207
207
  </View>
208
208
  <Animated.View style={{ transform: [{ rotate }] }}>
209
- <Text className="text-muted text-base font-semibold">▼</Text>
209
+ <Text className="text-neutral-500 dark:text-neutral-400 text-base font-semibold">▼</Text>
210
210
  </Animated.View>
211
211
  </Pressable>
212
212
  );
@@ -230,11 +230,11 @@ export const AccordionContent = React.forwardRef<View, AccordionContentProps>(
230
230
  return (
231
231
  <View
232
232
  ref={ref}
233
- className={cn("pt-1 pb-3 px-1 text-sm text-muted", className)}
233
+ className={cn("pt-1 pb-3 px-1", className)}
234
234
  {...props}
235
235
  >
236
236
  {typeof children === "string" ? (
237
- <Text className="text-sm text-muted leading-relaxed">{children}</Text>
237
+ <Text className="text-sm text-neutral-600 dark:text-neutral-400 leading-relaxed">{children}</Text>
238
238
  ) : (
239
239
  children
240
240
  )}
@@ -193,14 +193,14 @@ export const BottomSheetContent = React.forwardRef<View, BottomSheetContentProps
193
193
  ref={ref}
194
194
  style={{ transform: [{ translateY }] }}
195
195
  className={cn(
196
- "w-full bg-card rounded-t-3xl border-t border-border shadow-2xl pt-2 pb-8 px-6 max-h-[85%]",
196
+ "w-full bg-white dark:bg-neutral-900 rounded-t-3xl border-t border-neutral-200 dark:border-neutral-800 shadow-2xl pt-2 pb-8 px-6 max-h-[85%]",
197
197
  className
198
198
  )}
199
199
  {...props}
200
200
  >
201
201
  {/* Drag Handle Bar */}
202
202
  <View {...panResponder.panHandlers} className="w-full py-2 items-center">
203
- <View className="w-12 h-1.5 rounded-full bg-muted/40" />
203
+ <View className="w-12 h-1.5 rounded-full bg-neutral-300 dark:bg-neutral-700" />
204
204
  </View>
205
205
 
206
206
  {children}
@@ -240,7 +240,7 @@ export const BottomSheetTitle: React.FC<BottomSheetTitleProps> = ({
240
240
  children,
241
241
  }) => {
242
242
  return (
243
- <Heading level={4} className={cn("text-xl font-bold text-foreground", className)}>
243
+ <Heading level={4} className={cn("text-xl font-bold text-neutral-900 dark:text-neutral-50", className)}>
244
244
  {children}
245
245
  </Heading>
246
246
  );
@@ -259,7 +259,7 @@ export const BottomSheetDescription: React.FC<BottomSheetDescriptionProps> = ({
259
259
  children,
260
260
  }) => {
261
261
  return (
262
- <Text className={cn("text-sm text-muted", className)}>
262
+ <Text className={cn("text-sm text-neutral-500 dark:text-neutral-400", className)}>
263
263
  {children}
264
264
  </Text>
265
265
  );
@@ -124,7 +124,6 @@ export function DataTable<T extends Record<string, any>>({
124
124
  setSearch(val);
125
125
  setCurrentPage(1);
126
126
  }}
127
- className="bg-card"
128
127
  />
129
128
  )}
130
129
 
@@ -137,7 +136,7 @@ export function DataTable<T extends Record<string, any>>({
137
136
  </View>
138
137
  ) : paginatedData.length === 0 ? (
139
138
  <Card className="items-center justify-center p-8">
140
- <Text className="text-muted text-base">{emptyText}</Text>
139
+ <Text className="text-neutral-500 dark:text-neutral-400 text-base">{emptyText}</Text>
141
140
  </Card>
142
141
  ) : mode === "card" ? (
143
142
  /* Mobile Card Mode */
@@ -157,14 +156,14 @@ export function DataTable<T extends Record<string, any>>({
157
156
  return (
158
157
  <View
159
158
  key={String(col.key)}
160
- className="flex-row items-center justify-between py-1 border-b border-border/40 last:border-b-0"
159
+ className="flex-row items-center justify-between py-1 border-b border-neutral-200 dark:border-neutral-800 last:border-b-0"
161
160
  >
162
- <Text className="text-xs font-semibold text-muted uppercase tracking-wider">
161
+ <Text className="text-xs font-semibold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider">
163
162
  {col.title}
164
163
  </Text>
165
164
  <View className="shrink">
166
165
  {typeof renderedVal === "string" ? (
167
- <Text className="text-sm font-medium text-foreground">
166
+ <Text className="text-sm font-medium text-neutral-900 dark:text-neutral-100">
168
167
  {renderedVal}
169
168
  </Text>
170
169
  ) : (
@@ -181,9 +180,9 @@ export function DataTable<T extends Record<string, any>>({
181
180
  ) : (
182
181
  /* Horizontal Table Mode */
183
182
  <ScrollView horizontal showsHorizontalScrollIndicator={false}>
184
- <View className="rounded-2xl border border-border bg-card overflow-hidden">
183
+ <View className="rounded-2xl border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 overflow-hidden">
185
184
  {/* Header */}
186
- <View className="flex-row bg-muted/10 border-b border-border">
185
+ <View className="flex-row bg-neutral-100 dark:bg-neutral-800/60 border-b border-neutral-200 dark:border-neutral-800">
187
186
  {columns.map((col) => (
188
187
  <Pressable
189
188
  key={String(col.key)}
@@ -192,11 +191,11 @@ export function DataTable<T extends Record<string, any>>({
192
191
  style={{ width: col.width || 120 }}
193
192
  className="px-4 py-3 flex-row items-center justify-between"
194
193
  >
195
- <Text className="text-xs font-bold text-foreground uppercase tracking-wider">
194
+ <Text className="text-xs font-bold text-neutral-900 dark:text-neutral-100 uppercase tracking-wider">
196
195
  {col.title}
197
196
  </Text>
198
197
  {col.sortable && (
199
- <Text className="text-xs text-muted">
198
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400">
200
199
  {sortKey === col.key
201
200
  ? sortDirection === "asc"
202
201
  ? "▲"
@@ -214,7 +213,7 @@ export function DataTable<T extends Record<string, any>>({
214
213
  key={keyExtractor(item, idx)}
215
214
  disabled={!onRowPress}
216
215
  onPress={() => onRowPress?.(item)}
217
- className="flex-row border-b border-border/60 active:bg-muted/10"
216
+ className="flex-row border-b border-neutral-200 dark:border-neutral-800 active:bg-neutral-100 dark:active:bg-neutral-800"
218
217
  >
219
218
  {columns.map((col) => {
220
219
  const rawVal = item[col.key as string];
@@ -227,7 +226,7 @@ export function DataTable<T extends Record<string, any>>({
227
226
  className="px-4 py-3 justify-center"
228
227
  >
229
228
  {typeof renderedVal === "string" ? (
230
- <Text className="text-sm text-foreground">{renderedVal}</Text>
229
+ <Text className="text-sm text-neutral-900 dark:text-neutral-100">{renderedVal}</Text>
231
230
  ) : (
232
231
  renderedVal
233
232
  )}
@@ -243,7 +242,7 @@ export function DataTable<T extends Record<string, any>>({
243
242
  {/* Pagination Footer */}
244
243
  {totalPages > 1 && (
245
244
  <View className="flex-row items-center justify-between pt-2">
246
- <Text className="text-xs text-muted">
245
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400">
247
246
  Showing {(currentPage - 1) * pageSize + 1} -{" "}
248
247
  {Math.min(currentPage * pageSize, sortedData.length)} of{" "}
249
248
  {sortedData.length}
@@ -258,7 +257,7 @@ export function DataTable<T extends Record<string, any>>({
258
257
  >
259
258
  Prev
260
259
  </Button>
261
- <Text className="text-xs font-medium text-foreground px-1">
260
+ <Text className="text-xs font-medium text-neutral-900 dark:text-neutral-100 px-1">
262
261
  {currentPage} / {totalPages}
263
262
  </Text>
264
263
  <Button
@@ -12,11 +12,11 @@ import { cn } from "../../utilities/cn";
12
12
  import { Text } from "../text/text";
13
13
 
14
14
  const selectTriggerVariants = cva(
15
- "flex-row items-center justify-between rounded-xl border bg-card px-4 py-3 active:opacity-80",
15
+ "flex-row items-center justify-between rounded-xl border bg-white dark:bg-neutral-900 px-4 py-3 active:opacity-80",
16
16
  {
17
17
  variants: {
18
18
  variant: {
19
- default: "border-border",
19
+ default: "border-neutral-300 dark:border-neutral-700",
20
20
  error: "border-danger",
21
21
  success: "border-success",
22
22
  },
@@ -130,7 +130,7 @@ export const Select: React.FC<SelectProps> = ({
130
130
  >
131
131
  <View className={cn("w-full gap-1.5", className)}>
132
132
  {label && (
133
- <Text className="text-sm font-medium text-foreground">{label}</Text>
133
+ <Text className="text-sm font-medium text-neutral-800 dark:text-neutral-200">{label}</Text>
134
134
  )}
135
135
 
136
136
  {children ? (
@@ -149,19 +149,21 @@ export const Select: React.FC<SelectProps> = ({
149
149
  <Text
150
150
  className={cn(
151
151
  "text-base",
152
- displayLabel ? "text-foreground font-medium" : "text-muted"
152
+ displayLabel
153
+ ? "text-neutral-900 dark:text-neutral-100 font-medium"
154
+ : "text-neutral-500 dark:text-neutral-400 font-normal"
153
155
  )}
154
156
  >
155
157
  {displayLabel || placeholder}
156
158
  </Text>
157
- <Text className="text-muted text-xs">▼</Text>
159
+ <Text className="text-neutral-500 dark:text-neutral-400 text-xs">▼</Text>
158
160
  </Pressable>
159
161
  )}
160
162
 
161
163
  {error ? (
162
164
  <Text className="text-xs text-danger font-medium">{error}</Text>
163
165
  ) : helperText ? (
164
- <Text className="text-xs text-muted">{helperText}</Text>
166
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400">{helperText}</Text>
165
167
  ) : null}
166
168
 
167
169
  {/* Modal Options Picker if options prop was passed */}
@@ -175,13 +177,13 @@ export const Select: React.FC<SelectProps> = ({
175
177
  >
176
178
  <View className="flex-1 justify-end bg-black/60">
177
179
  <Pressable className="flex-1" onPress={() => setOpen(false)} />
178
- <View className="w-full bg-card rounded-t-3xl border-t border-border p-6 max-h-[75%]">
179
- <View className="flex-row items-center justify-between pb-4 border-b border-border mb-3">
180
- <Text className="text-lg font-bold text-foreground">
180
+ <View className="w-full bg-white dark:bg-neutral-900 rounded-t-3xl border-t border-neutral-200 dark:border-neutral-800 p-6 max-h-[75%]">
181
+ <View className="flex-row items-center justify-between pb-4 border-b border-neutral-200 dark:border-neutral-800 mb-3">
182
+ <Text className="text-lg font-bold text-neutral-900 dark:text-neutral-50">
181
183
  {label || placeholder}
182
184
  </Text>
183
185
  <Pressable onPress={() => setOpen(false)} className="p-1">
184
- <Text className="text-muted text-lg font-semibold">✕</Text>
186
+ <Text className="text-neutral-500 dark:text-neutral-400 text-lg font-semibold">✕</Text>
185
187
  </Pressable>
186
188
  </View>
187
189
 
@@ -192,7 +194,7 @@ export const Select: React.FC<SelectProps> = ({
192
194
  onChangeText={setSearchQuery}
193
195
  placeholder="Search options..."
194
196
  placeholderTextColor="#9ca3af"
195
- className="h-11 px-4 rounded-xl border border-border bg-background text-foreground text-base"
197
+ className="h-11 px-4 rounded-xl border border-neutral-300 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-100 text-base"
196
198
  />
197
199
  </View>
198
200
  )}
@@ -200,7 +202,7 @@ export const Select: React.FC<SelectProps> = ({
200
202
  <ScrollView className="max-h-80" showsVerticalScrollIndicator={false}>
201
203
  {filteredOptions.length === 0 ? (
202
204
  <View className="py-8 items-center">
203
- <Text className="text-muted text-sm">No options found</Text>
205
+ <Text className="text-neutral-500 dark:text-neutral-400 text-sm">No options found</Text>
204
206
  </View>
205
207
  ) : (
206
208
  filteredOptions.map((opt) => {
@@ -211,8 +213,8 @@ export const Select: React.FC<SelectProps> = ({
211
213
  disabled={opt.disabled}
212
214
  onPress={() => handleSelect(opt.value)}
213
215
  className={cn(
214
- "flex-row items-center justify-between py-3.5 px-3 rounded-xl active:bg-muted/10",
215
- isSelected && "bg-primary/10",
216
+ "flex-row items-center justify-between py-3.5 px-3 rounded-xl active:bg-neutral-100 dark:active:bg-neutral-800",
217
+ isSelected && "bg-primary-50 dark:bg-primary-950/40",
216
218
  opt.disabled && "opacity-40"
217
219
  )}
218
220
  >
@@ -220,14 +222,14 @@ export const Select: React.FC<SelectProps> = ({
220
222
  className={cn(
221
223
  "text-base",
222
224
  isSelected
223
- ? "text-primary font-semibold"
224
- : "text-foreground font-normal"
225
+ ? "text-primary-600 dark:text-primary-400 font-semibold"
226
+ : "text-neutral-900 dark:text-neutral-100 font-normal"
225
227
  )}
226
228
  >
227
229
  {opt.label}
228
230
  </Text>
229
231
  {isSelected && (
230
- <Text className="text-primary font-bold text-base">✓</Text>
232
+ <Text className="text-primary-600 dark:text-primary-400 font-bold text-base">✓</Text>
231
233
  )}
232
234
  </Pressable>
233
235
  );
@@ -263,13 +265,13 @@ export const SelectTrigger: React.FC<SelectTriggerProps> = ({
263
265
  accessibilityRole="combobox"
264
266
  accessibilityState={{ expanded: open }}
265
267
  className={cn(
266
- "flex-row items-center justify-between rounded-xl border border-border bg-card px-4 py-3 active:opacity-80",
268
+ "flex-row items-center justify-between rounded-xl border border-neutral-300 dark:border-neutral-700 bg-white dark:bg-neutral-900 px-4 py-3 active:opacity-80",
267
269
  className
268
270
  )}
269
271
  {...props}
270
272
  >
271
273
  {children}
272
- <Text className="text-muted text-xs">▼</Text>
274
+ <Text className="text-neutral-500 dark:text-neutral-400 text-xs">▼</Text>
273
275
  </Pressable>
274
276
  );
275
277
  };
@@ -289,7 +291,7 @@ export const SelectValue: React.FC<SelectValueProps> = ({
289
291
  <Text
290
292
  className={cn(
291
293
  "text-base",
292
- value ? "text-foreground font-medium" : "text-muted",
294
+ value ? "text-neutral-900 dark:text-neutral-100 font-medium" : "text-neutral-500 dark:text-neutral-400",
293
295
  className
294
296
  )}
295
297
  >
@@ -318,11 +320,11 @@ export const SelectContent: React.FC<SelectContentProps> = ({ title, children })
318
320
  >
319
321
  <View className="flex-1 justify-end bg-black/60">
320
322
  <Pressable className="flex-1" onPress={() => setOpen(false)} />
321
- <View className="w-full bg-card rounded-t-3xl border-t border-border p-6 max-h-[75%]">
322
- <View className="flex-row items-center justify-between pb-3 border-b border-border mb-3">
323
- <Text className="text-lg font-bold text-foreground">{title || "Select"}</Text>
323
+ <View className="w-full bg-white dark:bg-neutral-900 rounded-t-3xl border-t border-neutral-200 dark:border-neutral-800 p-6 max-h-[75%]">
324
+ <View className="flex-row items-center justify-between pb-3 border-b border-neutral-200 dark:border-neutral-800 mb-3">
325
+ <Text className="text-lg font-bold text-neutral-900 dark:text-neutral-100">{title || "Select"}</Text>
324
326
  <Pressable onPress={() => setOpen(false)} className="p-1">
325
- <Text className="text-muted text-lg font-semibold">✕</Text>
327
+ <Text className="text-neutral-500 dark:text-neutral-400 text-lg font-semibold">✕</Text>
326
328
  </Pressable>
327
329
  </View>
328
330
  <ScrollView className="max-h-80">{children}</ScrollView>
@@ -351,8 +353,8 @@ export const SelectItem: React.FC<SelectItemProps> = ({
351
353
  <Pressable
352
354
  onPress={() => onSelect(itemValue)}
353
355
  className={cn(
354
- "flex-row items-center justify-between py-3.5 px-3 rounded-xl active:bg-muted/10",
355
- isSelected && "bg-primary/10",
356
+ "flex-row items-center justify-between py-3.5 px-3 rounded-xl active:bg-neutral-100 dark:active:bg-neutral-800",
357
+ isSelected && "bg-primary-50 dark:bg-primary-950/40",
356
358
  className
357
359
  )}
358
360
  >
@@ -360,7 +362,7 @@ export const SelectItem: React.FC<SelectItemProps> = ({
360
362
  <Text
361
363
  className={cn(
362
364
  "text-base",
363
- isSelected ? "text-primary font-semibold" : "text-foreground font-normal"
365
+ isSelected ? "text-primary-600 dark:text-primary-400 font-semibold" : "text-neutral-900 dark:text-neutral-100 font-normal"
364
366
  )}
365
367
  >
366
368
  {children}
@@ -368,7 +370,7 @@ export const SelectItem: React.FC<SelectItemProps> = ({
368
370
  ) : (
369
371
  children
370
372
  )}
371
- {isSelected && <Text className="text-primary font-bold text-base">✓</Text>}
373
+ {isSelected && <Text className="text-primary-600 dark:text-primary-400 font-bold text-base">✓</Text>}
372
374
  </Pressable>
373
375
  );
374
376
  };
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { View, useColorScheme as useRNColorScheme } from "react-native";
3
+ import { colorScheme as nwColorScheme } from "nativewind";
3
4
  import { PortalHost } from "@rn-primitives/portal";
4
5
  import { ToastContext, ToastItem, ToastContextValue } from "../components/toast/types";
5
6
  import { ToastContainer } from "../components/toast/toast";
@@ -38,10 +39,28 @@ export function BeyondUIProvider({
38
39
  const activeScheme: "light" | "dark" =
39
40
  selectedScheme === "system" ? systemScheme : selectedScheme;
40
41
 
42
+ // Sync NativeWind colorScheme store with BeyondUIProvider active scheme
43
+ React.useEffect(() => {
44
+ try {
45
+ nwColorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
46
+ } catch (_) {}
47
+ }, [selectedScheme, activeScheme]);
48
+
49
+ const handleSetColorScheme = React.useCallback((scheme: ColorScheme) => {
50
+ setSelectedScheme(scheme);
51
+ try {
52
+ nwColorScheme.set(scheme === "system" ? "system" : scheme);
53
+ } catch (_) {}
54
+ }, []);
55
+
41
56
  const toggleColorScheme = React.useCallback(() => {
42
57
  setSelectedScheme((prev) => {
43
58
  const current = prev === "system" ? systemScheme : prev;
44
- return current === "dark" ? "light" : "dark";
59
+ const next = current === "dark" ? "light" : "dark";
60
+ try {
61
+ nwColorScheme.set(next);
62
+ } catch (_) {}
63
+ return next;
45
64
  });
46
65
  }, [systemScheme]);
47
66
 
@@ -77,10 +96,10 @@ export function BeyondUIProvider({
77
96
  const contextValue: BeyondUIContextValue = React.useMemo(
78
97
  () => ({
79
98
  colorScheme: activeScheme,
80
- setColorScheme: setSelectedScheme,
99
+ setColorScheme: handleSetColorScheme,
81
100
  toggleColorScheme,
82
101
  }),
83
- [activeScheme, toggleColorScheme]
102
+ [activeScheme, handleSetColorScheme, toggleColorScheme]
84
103
  );
85
104
 
86
105
  return (
@@ -88,7 +107,7 @@ export function BeyondUIProvider({
88
107
  <ToastContext.Provider value={toastContextValue}>
89
108
  <View
90
109
  style={{ flex: 1 }}
91
- className={activeScheme === "dark" ? "dark flex-1" : "flex-1"}
110
+ className={activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white"}
92
111
  >
93
112
  {children}
94
113
  <PortalHost />
@@ -50,7 +50,7 @@ export const ForgotPasswordTemplate: React.FC<ForgotPasswordTemplateProps> = ({
50
50
  <KeyboardAvoidingView
51
51
  behavior={Platform.OS === "ios" ? "padding" : "height"}
52
52
  style={{ flex: 1 }}
53
- className={cn("flex-1 bg-background", className)}
53
+ className={cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className)}
54
54
  >
55
55
  <ScrollView
56
56
  style={{ flex: 1 }}
@@ -61,10 +61,10 @@ export const ForgotPasswordTemplate: React.FC<ForgotPasswordTemplateProps> = ({
61
61
  >
62
62
  <View className="w-full max-w-md mx-auto gap-6">
63
63
  <View className="items-center gap-2">
64
- <Heading level={2} className="text-3xl font-extrabold text-foreground text-center">
64
+ <Heading level={2} className="text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center">
65
65
  {title}
66
66
  </Heading>
67
- <Text className="text-muted text-center text-base">
67
+ <Text className="text-neutral-500 dark:text-neutral-400 text-center text-base">
68
68
  {subtitle}
69
69
  </Text>
70
70
  </View>
@@ -117,7 +117,7 @@ export const ForgotPasswordTemplate: React.FC<ForgotPasswordTemplateProps> = ({
117
117
  {onBackToSignIn && (
118
118
  <View className="flex-row justify-center items-center gap-1.5 pt-2">
119
119
  <Pressable onPress={onBackToSignIn}>
120
- <Text className="text-sm font-semibold text-primary">
120
+ <Text className="text-sm font-semibold text-primary-600 dark:text-primary-400">
121
121
  Back to Sign In
122
122
  </Text>
123
123
  </Pressable>
@@ -72,7 +72,7 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
72
72
  <KeyboardAvoidingView
73
73
  behavior={Platform.OS === "ios" ? "padding" : "height"}
74
74
  style={{ flex: 1 }}
75
- className={cn("flex-1 bg-background", className)}
75
+ className={cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className)}
76
76
  >
77
77
  <ScrollView
78
78
  style={{ flex: 1 }}
@@ -85,10 +85,10 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
85
85
  {/* Logo & Header */}
86
86
  <View className="items-center gap-2">
87
87
  {logo && <View className="mb-2">{logo}</View>}
88
- <Heading level={2} className="text-3xl font-extrabold text-foreground text-center">
88
+ <Heading level={2} className="text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center">
89
89
  {title}
90
90
  </Heading>
91
- <Text className="text-muted text-center text-base">
91
+ <Text className="text-neutral-500 dark:text-neutral-400 text-center text-base">
92
92
  {subtitle}
93
93
  </Text>
94
94
  </View>
@@ -129,7 +129,7 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
129
129
  error={passwordError}
130
130
  rightElement={
131
131
  <Pressable onPress={() => setShowPassword((p) => !p)} className="p-1">
132
- <Text className="text-xs text-muted font-semibold">
132
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400 font-semibold">
133
133
  {showPassword ? "HIDE" : "SHOW"}
134
134
  </Text>
135
135
  </Pressable>
@@ -141,12 +141,12 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
141
141
  <View className="flex-row items-center justify-between py-1">
142
142
  <View className="flex-row items-center gap-2">
143
143
  <Checkbox checked={rememberMe} onCheckedChange={setRememberMe} />
144
- <Text className="text-sm text-foreground">Remember me</Text>
144
+ <Text className="text-sm text-neutral-900 dark:text-neutral-100">Remember me</Text>
145
145
  </View>
146
146
 
147
147
  {onForgotPassword && (
148
148
  <Pressable onPress={onForgotPassword}>
149
- <Text className="text-sm font-semibold text-primary">
149
+ <Text className="text-sm font-semibold text-primary-600 dark:text-primary-400">
150
150
  Forgot password?
151
151
  </Text>
152
152
  </Pressable>
@@ -170,7 +170,7 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
170
170
  <View className="gap-4">
171
171
  <View className="flex-row items-center gap-3">
172
172
  <Separator className="flex-1" />
173
- <Text className="text-xs text-muted uppercase">or continue with</Text>
173
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400 uppercase">or continue with</Text>
174
174
  <Separator className="flex-1" />
175
175
  </View>
176
176
 
@@ -200,9 +200,9 @@ export const SignInTemplate: React.FC<SignInTemplateProps> = ({
200
200
  {/* Switch to SignUp */}
201
201
  {onSignUpPress && (
202
202
  <View className="flex-row justify-center items-center gap-1.5 pt-2">
203
- <Text className="text-sm text-muted">Don't have an account?</Text>
203
+ <Text className="text-sm text-neutral-500 dark:text-neutral-400">Don't have an account?</Text>
204
204
  <Pressable onPress={onSignUpPress}>
205
- <Text className="text-sm font-bold text-primary">Sign Up</Text>
205
+ <Text className="text-sm font-bold text-primary-600 dark:text-primary-400">Sign Up</Text>
206
206
  </Pressable>
207
207
  </View>
208
208
  )}
@@ -88,7 +88,7 @@ export const SignUpTemplate: React.FC<SignUpTemplateProps> = ({
88
88
  <KeyboardAvoidingView
89
89
  behavior={Platform.OS === "ios" ? "padding" : "height"}
90
90
  style={{ flex: 1 }}
91
- className={cn("flex-1 bg-background", className)}
91
+ className={cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className)}
92
92
  >
93
93
  <ScrollView
94
94
  style={{ flex: 1 }}
@@ -101,10 +101,10 @@ export const SignUpTemplate: React.FC<SignUpTemplateProps> = ({
101
101
  {/* Header */}
102
102
  <View className="items-center gap-2">
103
103
  {logo && <View className="mb-2">{logo}</View>}
104
- <Heading level={2} className="text-3xl font-extrabold text-foreground text-center">
104
+ <Heading level={2} className="text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center">
105
105
  {title}
106
106
  </Heading>
107
- <Text className="text-muted text-center text-base">
107
+ <Text className="text-neutral-500 dark:text-neutral-400 text-center text-base">
108
108
  {subtitle}
109
109
  </Text>
110
110
  </View>
@@ -164,7 +164,7 @@ export const SignUpTemplate: React.FC<SignUpTemplateProps> = ({
164
164
  if (termsError) setTermsError(undefined);
165
165
  }}
166
166
  />
167
- <Text className="text-sm text-foreground flex-1">
167
+ <Text className="text-sm text-neutral-900 dark:text-neutral-100 flex-1">
168
168
  I agree to the Terms of Service & Privacy Policy
169
169
  </Text>
170
170
  </View>
@@ -190,7 +190,7 @@ export const SignUpTemplate: React.FC<SignUpTemplateProps> = ({
190
190
  <View className="gap-4">
191
191
  <View className="flex-row items-center gap-3">
192
192
  <Separator className="flex-1" />
193
- <Text className="text-xs text-muted uppercase">or continue with</Text>
193
+ <Text className="text-xs text-neutral-500 dark:text-neutral-400 uppercase">or continue with</Text>
194
194
  <Separator className="flex-1" />
195
195
  </View>
196
196
 
@@ -220,9 +220,9 @@ export const SignUpTemplate: React.FC<SignUpTemplateProps> = ({
220
220
  {/* Back to SignIn */}
221
221
  {onSignInPress && (
222
222
  <View className="flex-row justify-center items-center gap-1.5 pt-2">
223
- <Text className="text-sm text-muted">Already have an account?</Text>
223
+ <Text className="text-sm text-neutral-500 dark:text-neutral-400">Already have an account?</Text>
224
224
  <Pressable onPress={onSignInPress}>
225
- <Text className="text-sm font-bold text-primary">Sign In</Text>
225
+ <Text className="text-sm font-bold text-primary-600 dark:text-primary-400">Sign In</Text>
226
226
  </Pressable>
227
227
  </View>
228
228
  )}