Badge
Small status descriptor.
Installation
Terminal
npx magic-native-ui@latest add badgeUsage
The example running in the preview above. Imports use the default aliases from components.json.
badge-demo.tsx
import { View } from 'react-native'
import { Badge } from '@/components/ui/badge'
import { Text } from '@/components/ui/text'
export function BadgeDemo() {
return (
<View className="flex-row flex-wrap gap-2">
<Badge>
<Text>Default</Text>
</Badge>
<Badge variant="secondary">
<Text>Secondary</Text>
</Badge>
<Badge variant="destructive">
<Text>Destructive</Text>
</Badge>
<Badge variant="outline">
<Text>Outline</Text>
</Badge>
</View>
)
}Component source
What the CLI copies into your project. Once it is there, the code is yours to edit.
registry/ui/badge.tsx
import { View, type ViewProps } from 'react-native'
import { cva, type VariantProps } from 'class-variance-authority'
import { TextClassContext } from '@/registry/ui/text'
import { cn } from '@/registry/lib/utils'
const badgeVariants = cva('flex-row items-center rounded-full border px-2.5 py-0.5', {
variants: {
variant: {
default: 'border-transparent bg-primary',
secondary: 'border-transparent bg-secondary',
destructive: 'border-transparent bg-destructive',
outline: 'border-border',
},
},
defaultVariants: {
variant: 'default',
},
})
const badgeTextVariants = cva('text-xs font-semibold', {
variants: {
variant: {
default: 'text-primary-foreground',
secondary: 'text-secondary-foreground',
destructive: 'text-destructive-foreground',
outline: 'text-foreground',
},
},
defaultVariants: {
variant: 'default',
},
})
type BadgeProps = ViewProps & VariantProps<typeof badgeVariants>
function Badge({ className, variant, ...props }: BadgeProps) {
return (
<TextClassContext.Provider value={badgeTextVariants({ variant })}>
<View className={cn(badgeVariants({ variant }), className)} {...props} />
</TextClassContext.Provider>
)
}
export { Badge, badgeTextVariants, badgeVariants }
export type { BadgeProps }