import { type TextStyle, View, type ViewStyle } from "react-native"; import { Text } from "../text"; import { makeStyles } from "../theme"; import { type Colors } from "../theme/theme.types"; type BadgeProps = { children: React.ReactNode; color?: keyof Colors; size?: "xs" | "sm" | "md" | "lg" | "xl"; containerStyle?: ViewStyle; textStyle?: TextStyle; }; export function Badge({ children, color, size, containerStyle, textStyle, }: BadgeProps) { const styles = useStyles({ color, size }); const childComponent = typeof children === "string" ? ( {children} ) : ( children ); return ( {childComponent} ); } const paddings = { xs: { h: 4, v: 2, }, sm: { h: 6, v: 3, }, md: { h: 8, v: 4, }, lg: { h: 12, v: 6, }, xl: { h: 16, v: 8, }, }; const useStyles = makeStyles((theme, props: Omit) => ({ container: { paddingVertical: paddings[props.size ?? "xs"].v, paddingHorizontal: paddings[props.size ?? "xs"].h, borderRadius: theme.radius("default") * 2, backgroundColor: theme.colors.get(props.color ?? "primary", "background"), justifyContent: "center", alignItems: "center", }, text: { fontWeight: "bold", fontSize: theme.fontSize(props.size ?? "default"), color: "#fff", }, }));