import React, { PropsWithChildren, ReactNode, useMemo } from "react"; import { TouchableOpacity, Text, ActivityIndicator, View } from "react-native"; import * as Haptics from "expo-haptics"; interface ButtonProps { onPress?: () => void; className?: string; textClassName?: string; disabled?: boolean; children?: string; loading?: boolean; color?: "purple" | "red"; iconRight?: ReactNode; } export const Button: React.FC> = ({ onPress, className = "", textClassName = "", disabled = false, loading = false, color = "purple", iconRight, children, }) => { const colorClasses = useMemo(() => { switch (color) { case "purple": return "bg-purple-600 active:bg-purple-700"; case "red": return "bg-red-500 active:bg-red-600"; } }, [color]); return ( { if (!loading && !disabled && onPress) { onPress(); Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); } }} disabled={disabled || loading} > {loading ? ( ) : ( {children} {iconRight} )} ); };