import { type JSX, splitProps, createContext, useContext } from 'solid-js'; import { cn } from '../utils/cn'; import { useStickToBottom } from '../primitives/use-stick-to-bottom'; interface ChatContainerContextValue { isAtBottom: () => boolean; scrollToBottom: (behavior?: ScrollBehavior) => void; } const ChatContainerContext = createContext(); export function useChatContainer() { const ctx = useContext(ChatContainerContext); if (!ctx) throw new Error('useChatContainer must be used within ChatContainer'); return ctx; } // --- ChatContainerRoot --- export interface ChatContainerRootProps extends JSX.HTMLAttributes { children: JSX.Element; } function ChatContainerRoot(props: ChatContainerRootProps) { const [local, rest] = splitProps(props, ['children', 'class']); const { ref, isAtBottom, scrollToBottom } = useStickToBottom(); return (
{local.children}
); } // --- ChatContainerContent --- export interface ChatContainerContentProps extends JSX.HTMLAttributes { children: JSX.Element; } function ChatContainerContent(props: ChatContainerContentProps) { const [local, rest] = splitProps(props, ['children', 'class']); return (
{local.children}
); } // --- ChatContainerScrollAnchor --- export interface ChatContainerScrollAnchorProps extends JSX.HTMLAttributes { ref?: HTMLDivElement | ((el: HTMLDivElement) => void); } function ChatContainerScrollAnchor(props: ChatContainerScrollAnchorProps) { const [local, rest] = splitProps(props, ['class']); return (