{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "avatar-upload",
  "type": "registry:ui",
  "title": "Avatar upload",
  "description": "React profile photo uploader with an avatar preview and an Upload button that opens a hidden image file input. Shows initials until a picture is chosen.",
  "dependencies": [],
  "registryDependencies": [
    "https://ui.minidev.pro/r/avatar.json",
    "https://ui.minidev.pro/r/button.json",
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/avatar-upload.tsx",
      "type": "registry:ui",
      "target": "components/ui/avatar-upload.tsx",
      "content": "\"use client\"\nimport * as React from \"react\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { cn } from \"@/lib/utils\"\nfunction AvatarUpload({ name = \"User\", className }: { name?: string; className?: string }) {\n  const [src, setSrc] = React.useState<string | null>(null)\n  const inputRef = React.useRef<HTMLInputElement>(null)\n  return (\n    <div data-slot=\"avatar-upload\" className={cn(\"flex items-center gap-3\", className)}>\n      <Avatar className=\"size-14\">\n        {src ? <AvatarImage src={src} alt={name} /> : null}\n        <AvatarFallback>{name.slice(0, 2).toUpperCase()}</AvatarFallback>\n      </Avatar>\n      <div>\n        <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => inputRef.current?.click()}>\n          Upload\n        </Button>\n        <input\n          ref={inputRef}\n          type=\"file\"\n          accept=\"image/*\"\n          className=\"sr-only\"\n          onChange={(e) => {\n            const f = e.target.files?.[0]\n            if (f) setSrc(URL.createObjectURL(f))\n          }}\n        />\n      </div>\n    </div>\n  )\n}\nexport { AvatarUpload }\n"
    }
  ]
}
