--- title: CopilotPopup description: "Floating popup chat dialog" --- `CopilotPopup` is a React component that provides a floating popup chat interface. It wraps [CopilotChat](/reference/copilot-chat) with additional popup-specific behavior including a toggle button, fade/scale animation, and optional click-outside-to-close functionality. ## What is CopilotPopup? The CopilotPopup component: - Provides a floating dialog with smooth fade/scale animation - Includes a toggle button for open/close - Supports click-outside-to-close behavior - Responsive design (fullscreen on mobile, fixed size on desktop) - Built on [CopilotChat](/reference/copilot-chat) - inherits all its features and customization options ## Component Architecture CopilotPopup extends [CopilotChat](/reference/copilot-chat#component-architecture) with additional slots: ```mermaid graph LR CP[CopilotPopup] --> header CP --> toggleButton ``` ### Slot Descriptions | Slot | Description | | -------------- | --------------------------------------- | | `header` | Header bar with title and close button | | `toggleButton` | Floating button to open/close the popup | CopilotPopup also inherits all slots from CopilotChat: `messageView`, `scrollView`, `input`, `suggestionView`, and `welcomeScreen`. See [Slot Customization](#slot-customization) for details on how to customize these slots. ## Basic Usage ```tsx import { CopilotPopup, CopilotKitProvider } from "@copilotkit/react-core"; function App() { return ( ); } ``` ## Props ### Popup-Specific Props These props are unique to CopilotPopup: | Prop | Type | Default | Description | | --------------------- | ------------------ | ------- | --------------------------------------------------- | | `defaultOpen` | `boolean` | `true` | Whether the popup is open initially | | `width` | `number \| string` | `420` | Popup width in pixels or CSS unit | | `height` | `number \| string` | `560` | Popup height in pixels or CSS unit | | `clickOutsideToClose` | `boolean` | `false` | Close the popup when clicking outside | | `header` | `SlotValue` | - | Custom header component with title and close button | | `toggleButton` | `SlotValue` | - | Custom toggle button to open/close the popup | ### Shared Props CopilotPopup inherits all props from [CopilotChat](/reference/copilot-chat), including: - `agentId` - The agent to connect to - `threadId` - The conversation thread ID - `labels` - Customize text labels - `autoScroll` - Auto-scroll behavior - `className` - CSS class for the root container See [CopilotChat Props](/reference/copilot-chat#props) for the complete list. ## Header Customization The popup includes a header with a title and close button. Customize it through the `header` prop: ```tsx ``` ### Header Sub-Slots | Sub-Slot | Description | | -------------- | -------------------------------- | | `titleContent` | The title text or component | | `closeButton` | The close button (can be hidden) | ### Custom Header Component Replace the entire header with your own component: ```tsx function CustomHeader() { return (
My AI Assistant
); } ``` ## Toggle Button Customization The popup includes a floating toggle button to open and close it. Customize it through the `toggleButton` prop: ```tsx ``` ### Toggle Button Sub-Slots | Sub-Slot | Description | | ----------- | ----------------------------------------------- | | `openIcon` | Icon shown when popup is closed (click to open) | | `closeIcon` | Icon shown when popup is open (click to close) | ### Custom Toggle Button Component Replace the toggle button entirely: ```tsx function CustomToggleButton() { return ( ); } ; ``` ## Slot Customization CopilotPopup uses the same [slot system](/reference/slot-system) as CopilotChat. Each slot accepts four types of values: 1. **Tailwind class string** - Add or override CSS classes 2. **Props object** - Pass additional props to the default component 3. **Custom component** - Replace the component entirely 4. **Nested sub-slots** - Drill down to customize child components ### Custom Dimensions ```tsx // Or with CSS units ``` ### Click Outside to Close ```tsx ``` ### Custom Header Styling ```tsx ``` ### Nested Slot Customization ```tsx console.log("Liked:", msg.id), onThumbsDown: (msg) => console.log("Disliked:", msg.id), }, }} input={{ className: "border-2 border-gray-200", sendButton: "bg-blue-500 hover:bg-blue-600", }} /> ``` ## Related - [CopilotChat](/reference/copilot-chat) - Base chat component with full customization options - [CopilotSidebar](/reference/copilot-sidebar) - Slide-in sidebar chat interface - [Slot System](/reference/slot-system) - Deep dive into slot customization - [CopilotKitProvider](/reference/copilotkit-provider) - Provider configuration