{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "message",
  "type": "registry:component",
  "title": "Message",
  "description": "Message bubble or chat component",
  "registryDependencies": [
    "avatar"
  ],
  "files": [
    {
      "path": "components/chatcn/ai/message.tsx",
      "content": "\"use client\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport { cn } from \"@/lib/utils\";\nimport {\n  Tooltip,\n  TooltipProvider,\n  TooltipTrigger,\n  TooltipContent,\n} from \"@/components/ui/tooltip\";\nimport { createContext, useContext } from \"react\";\n\ntype MessageVariant = \"user\" | \"ai\";\n\ntype MessageProps = {\n  children: React.ReactNode;\n  className?: string;\n  variant?: MessageVariant;\n} & React.HTMLProps<HTMLDivElement>;\n\ntype MessageContext = {\n  disabled?: boolean;\n  variant: MessageVariant;\n};\n\nconst MessageContext = createContext<MessageContext>({\n  disabled: false,\n  variant: \"ai\",\n});\n\nfunction useMessageContext() {\n  const ctx = useContext(MessageContext);\n  if (!ctx) {\n    throw Error(\"useMessageContext must be used within a Message\");\n  }\n  return ctx;\n}\n\nexport function Message({\n  children,\n  className,\n  variant = \"ai\",\n  ...props\n}: MessageProps) {\n  return (\n    <TooltipProvider>\n      <MessageContext.Provider value={{ disabled: false, variant }}>\n        <div\n          className={cn(\n            \"flex gap-3 items-end group/message\",\n            \"animate-in fade-in-0 slide-in-from-bottom-2 duration-300 ease-out\",\n            variant === \"user\" && \"flex-row-reverse\",\n            className\n          )}\n          {...props}\n        >\n          {children}\n        </div>\n      </MessageContext.Provider>\n    </TooltipProvider>\n  );\n}\n\ntype MessageAvatarProps = {\n  src: string;\n  alt: string;\n  fallback?: string;\n  className?: string;\n};\n\nexport function MessageAvatar({\n  src,\n  alt,\n  fallback,\n  className,\n}: MessageAvatarProps) {\n  const { variant } = useMessageContext();\n\n  return (\n    <Avatar className={cn(\"h-8 w-8 shrink-0\", className)}>\n      <AvatarImage src={src} alt={alt} className=\"object-cover\" />\n      <AvatarFallback\n        className={cn(\n          \"text-xs font-medium\",\n          variant === \"user\"\n            ? \"bg-primary text-primary-foreground\"\n            : \"bg-muted text-muted-foreground\"\n        )}\n      >\n        {fallback || alt?.slice(0, 2).toUpperCase()}\n      </AvatarFallback>\n    </Avatar>\n  );\n}\n\ntype MessageContentProps = {\n  className?: string;\n  children: React.ReactNode;\n} & React.HTMLProps<HTMLDivElement>;\n\nexport function MessageContent({ children, className }: MessageContentProps) {\n  const { variant } = useMessageContext();\n  const isUser = variant === \"user\";\n\n  return (\n    <div className=\"relative max-w-[80%]\">\n      <div\n        className={cn(\n          \"relative px-4 py-2.5 text-[15px] leading-relaxed\",\n          \"wrap-break-word whitespace-pre-wrap\",\n          \"rounded-2xl\",\n          isUser ? \"bg-blue-500 text-white\" : \"bg-secondary text-foreground\",\n          className\n        )}\n      >\n        {children}\n      </div>\n    </div>\n  );\n}\n\ntype MessageActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function MessageActions({\n  children,\n  className,\n  ...props\n}: MessageActionsProps) {\n  return (\n    <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n      {children}\n    </div>\n  );\n}\n\ntype MessageActionProps = {\n  className?: string;\n  tooltip: React.ReactNode;\n  children: React.ReactNode;\n  side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n} & React.ComponentProps<typeof Tooltip>;\n\nexport function MessageAction({\n  className,\n  tooltip,\n  children,\n  ...props\n}: MessageActionProps) {\n  const { disabled } = useMessageContext();\n  return (\n    <Tooltip {...props}>\n      <TooltipTrigger\n        asChild\n        disabled={disabled}\n        onClick={(event) => event.stopPropagation()}\n      >\n        {children}\n      </TooltipTrigger>\n      <TooltipContent className={className}>{tooltip}</TooltipContent>\n    </Tooltip>\n  );\n}\n",
      "type": "registry:component"
    }
  ]
}