{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "badge",
  "title": "Badge",
  "description": "Displays a badge.",
  "registryDependencies": [],
  "files": [
    {
      "path": "ui/badge.tsx",
      "content": "import { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n  Children,\n  cloneElement,\n  createContext,\n  useContext,\n  useMemo,\n} from \"react\";\nimport { Text, View } from \"react-native\";\nimport { cn } from \"../lib/utils\";\n\n// Types\ntype InternalBadgeContextType = VariantProps<typeof badgeVariants>;\n\ntype BadgeChildProps = {\n  children: React.ReactNode;\n  className?: string;\n};\n\nexport type BadgeProps = React.ComponentProps<typeof View> &\n  InternalBadgeContextType & {\n    children: React.ReactNode;\n  };\n\n// Context\nconst BadgeContext = createContext<InternalBadgeContextType | null>(null);\n\nconst useBadgeContext = () => {\n  const context = useContext(BadgeContext);\n  if (!context) {\n    throw new Error(\"useBadgeContext must be used within a Badge component\");\n  }\n  return context;\n};\n\n// Components\nexport const Badge = ({\n  children,\n  className,\n  variant,\n  ...props\n}: BadgeProps) => {\n  const ctx = useMemo(() => {\n    return {\n      variant,\n    };\n  }, [variant]);\n\n  return (\n    <BadgeContext.Provider value={ctx}>\n      <View className={cn(badgeVariants({ className, variant }))} {...props}>\n        {Children.map(children, (child) => {\n          if (typeof child === \"string\") {\n            return <BadgeText>{child}</BadgeText>;\n          }\n\n          return child;\n        })}\n      </View>\n    </BadgeContext.Provider>\n  );\n};\n\nexport const BadgeText = (props: BadgeChildProps) => {\n  const ctx = useBadgeContext();\n\n  return (\n    <Text {...props} className={cn(badgeTextVariants(ctx), props.className)} />\n  );\n};\n\nexport const BadgeIcon = ({ children, ...props }: BadgeChildProps) => {\n  const ctx = useBadgeContext();\n\n  const child = Children.only(children);\n\n  if (!child) {\n    if (__DEV__) {\n      throw new Error(\"BadgeIcon expects a single React element as children\");\n    }\n    return null;\n  }\n\n  return cloneElement(child as React.ReactElement<BadgeChildProps>, {\n    ...props,\n    className: cn(badgeIconVariants(ctx), props.className),\n  });\n};\n\n// Styles\nconst badgeVariants = cva(\n  \"flex w-fit shrink-0 flex-row items-center justify-center gap-1.5 self-start overflow-hidden whitespace-nowrap rounded-md border border-border px-2 py-1 font-medium text-xs transition-[color,box-shadow] aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n  {\n    defaultVariants: {\n      variant: \"default\",\n    },\n    variants: {\n      variant: {\n        default: \"border-transparent bg-primary\",\n        destructive: \"border-transparent bg-destructive\",\n        outline: \"\",\n        secondary: \"border-transparent bg-secondary\",\n      },\n    },\n  }\n);\n\nconst badgeTextVariants = cva(\n  \"whitespace-nowrap font-semibold text-sm leading-none\",\n  {\n    defaultVariants: {\n      variant: \"default\",\n    },\n    variants: {\n      variant: {\n        default: \"text-primary-foreground\",\n        destructive: \"text-white\",\n        outline: \"text-foreground\",\n        secondary: \"text-secondary-foreground\",\n      },\n    },\n  }\n);\n\nconst badgeIconVariants = cva(\"size-4\", {\n  defaultVariants: {\n    variant: \"default\",\n  },\n  variants: {\n    variant: {\n      default: \"text-primary-foreground\",\n      destructive: \"text-white\",\n      outline: \"text-foreground\",\n      secondary: \"text-secondary-foreground\",\n    },\n  },\n});\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
