{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "conversation", "dependencies": [ "use-stick-to-bottom" ], "registryDependencies": [ "button" ], "files": [ { "path": "components/ui/conversation.tsx", "content": "\"use client\"\n\nimport type { ComponentProps } from \"react\"\nimport { useCallback } from \"react\"\nimport { ArrowDownIcon } from \"lucide-react\"\nimport { StickToBottom, useStickToBottomContext } from \"use-stick-to-bottom\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nexport type ConversationProps = ComponentProps\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n \n)\n\nexport type ConversationContentProps = ComponentProps<\n typeof StickToBottom.Content\n>\n\nexport const ConversationContent = ({\n className,\n ...props\n}: ConversationContentProps) => (\n \n)\n\nexport type ConversationEmptyStateProps = Omit<\n ComponentProps<\"div\">,\n \"title\"\n> & {\n title?: React.ReactNode\n description?: React.ReactNode\n icon?: React.ReactNode\n}\n\nexport const ConversationEmptyState = ({\n className,\n title = \"No messages yet\",\n description = \"Start a conversation to see messages here\",\n icon,\n children,\n ...props\n}: ConversationEmptyStateProps) => (\n \n {children ?? (\n <>\n {icon &&
{icon}
}\n
\n

{title}

\n {description && (\n

{description}

\n )}\n
\n \n )}\n \n)\n\nexport type ConversationScrollButtonProps = ComponentProps\n\nexport const ConversationScrollButton = ({\n className,\n ...props\n}: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext()\n\n const handleScrollToBottom = useCallback(() => {\n scrollToBottom()\n }, [scrollToBottom])\n\n return (\n !isAtBottom && (\n \n \n \n )\n )\n}\n", "type": "registry:ui" } ], "type": "registry:ui" }