import React, { useCallback } from "react"; import { cn } from "../../lib/utils"; import { useCopilotChatConfiguration, CopilotChatDefaultLabels, } from "../../providers/CopilotChatConfigurationProvider"; import { renderSlot, WithSlots } from "../../lib/slots"; import { X } from "lucide-react"; type HeaderSlots = { titleContent: typeof CopilotModalHeader.Title; closeButton: typeof CopilotModalHeader.CloseButton; }; type HeaderRestProps = { title?: string; } & Omit, "children">; export type CopilotModalHeaderProps = WithSlots; export function CopilotModalHeader({ title, titleContent, closeButton, children, className, ...rest }: CopilotModalHeaderProps) { const configuration = useCopilotChatConfiguration(); const fallbackTitle = configuration?.labels.modalHeaderTitle ?? CopilotChatDefaultLabels.modalHeaderTitle; const resolvedTitle = title ?? fallbackTitle; const handleClose = useCallback(() => { configuration?.setModalOpen?.(false); }, [configuration]); const BoundTitle = renderSlot(titleContent, CopilotModalHeader.Title, { children: resolvedTitle, }); const BoundCloseButton = renderSlot( closeButton, CopilotModalHeader.CloseButton, { onClick: handleClose, }, ); if (children) { return children({ titleContent: BoundTitle, closeButton: BoundCloseButton, title: resolvedTitle, ...rest, }); } return (
); } CopilotModalHeader.displayName = "CopilotModalHeader"; export namespace CopilotModalHeader { export const Title: React.FC> = ({ children, className, ...props }) => (
{children}
); export const CloseButton: React.FC< React.ButtonHTMLAttributes > = ({ className, ...props }) => ( ); } CopilotModalHeader.Title.displayName = "CopilotModalHeader.Title"; CopilotModalHeader.CloseButton.displayName = "CopilotModalHeader.CloseButton"; export default CopilotModalHeader;