Component Props

Complete API reference for the <InAppAI /> component.

Required Props

These props must be provided:

agentId

  • Type: string
  • Required: Yes
  • Description: Your AI agent ID from the InAppAI platform
<InAppAI agentId="your-agent-id" />

Get your agent ID from app.inappai.com.

messages

  • Type: Message[]
  • Required: Yes
  • Description: Array of conversation messages
const [messages, setMessages] = useState<Message[]>([]);

<InAppAI
  messages={messages}
  onMessagesChange={setMessages}
/>

See Message type for details.

onMessagesChange

  • Type: (messages: Message[]) => void
  • Required: Yes
  • Description: Callback when messages array changes
<InAppAI
  messages={messages}
  onMessagesChange={(newMessages) => {
    setMessages(newMessages);
    // Optionally save to backend or localStorage
  }}
/>

Display Configuration

displayMode

  • Type: 'popup' | 'sidebar-left' | 'sidebar-right' | 'panel-left' | 'panel-right' | 'embedded'
  • Default: 'popup'
  • Description: Layout mode for the chat interface
{/* Popup with floating button */}
<InAppAI displayMode="popup" />

{/* Sidebar overlay */}
<InAppAI displayMode="sidebar-right" />

{/* Resizable panel */}
<InAppAI displayMode="panel-left" />

{/* Embedded in your layout */}
<InAppAI displayMode="embedded" />

See Display Modes Guide for details.

position

  • Type: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'
  • Default: 'bottom-right'
  • Description: Button position (popup mode only)
<InAppAI
  displayMode="popup"
  position="bottom-left"
/>

defaultFolded

  • Type: boolean
  • Default: false
  • Description: Start in folded state (sidebar/panel mode only)
<InAppAI
  displayMode="sidebar-right"
  defaultFolded={true}
/>

showHeader

  • Type: boolean
  • Default: true
  • Description: Show/hide the chat header
<InAppAI
  displayMode="embedded"
  showHeader={false}  // Hide header for custom layouts
/>

Styling & Theming

theme

  • Type: 'light' | 'dark' | 'professional' | 'playful' | 'minimal' | 'ocean' | 'sunset'
  • Default: 'light'
  • Description: Built-in theme to use
<InAppAI theme="dark" />

See Themes Guide for preview and details.

customStyles

  • Type: CustomStyles
  • Default: {}
  • Description: Override theme with custom styles
<InAppAI
  theme="light"
  customStyles={{
    primaryColor: '#6366f1',
    buttonIcon: '💬',
    headerTitle: 'Support',
    windowWidth: '500px',
  }}
/>

See CustomStyles API for all available properties.

Context & Data

context

  • Type: Record<string, any> | (() => Record<string, any>)
  • Default: undefined
  • Description: Application context sent to AI with each message

Static context (object):

<InAppAI
  context={{
    page: 'dashboard',
    userId: user.id,
    userRole: user.role,
  }}
/>

Dynamic context (function):

<InAppAI
  context={() => ({
    currentUrl: window.location.pathname,
    scrollPosition: window.scrollY,
    selectedText: window.getSelection()?.toString(),
  })}
/>

See Context Guide for best practices.

conversationId

  • Type: string
  • Default: Auto-generated
  • Description: Conversation identifier sent to backend
<InAppAI
  conversationId="user-123-support"
  messages={messages}
  onMessagesChange={setMessages}
/>

Useful for:

  • Multi-conversation apps
  • Backend conversation tracking
  • Analytics and logging

Tools & Function Calling

tools

  • Type: Tool[]
  • Default: []
  • Description: Array of tools the AI can execute
const tools: Tool[] = [
  {
    name: 'search',
    description: 'Search for information',
    parameters: {
      type: 'object',
      properties: {
        query: { type: 'string', description: 'Search query' },
      },
      required: ['query'],
    },
    handler: async ({ query }) => {
      const results = await search(query);
      return { success: true, results };
    },
  },
];

<InAppAI tools={tools} />

See Tools Guide for complete documentation.

Panel-Specific Props

These props only apply when displayMode is panel-left or panel-right:

panelMinWidth

  • Type: string
  • Default: '20%'
  • Description: Minimum panel width (percentage or pixels)
<InAppAI
  displayMode="panel-right"
  panelMinWidth="300px"
/>

panelMaxWidth

  • Type: string
  • Default: '33.33%'
  • Description: Maximum panel width (percentage or pixels)
<InAppAI
  displayMode="panel-right"
  panelMaxWidth="50%"
/>

panelDefaultWidth

  • Type: string
  • Default: '25%'
  • Description: Initial panel width
<InAppAI
  displayMode="panel-right"
  panelDefaultWidth="400px"
/>

onPanelResize

  • Type: (width: number) => void
  • Default: undefined
  • Description: Callback when panel is resized
<InAppAI
  displayMode="panel-right"
  onPanelResize={(width) => {
    console.log('Panel width:', width);
    localStorage.setItem('panelWidth', width.toString());
  }}
/>

Authentication

authToken

  • Type: string | (() => string | null | undefined)
  • Default: undefined
  • Description: JWT token for per-user rate limiting and identification

Static token (string):

<InAppAI
  agentId="your-agent-id"
  messages={messages}
  onMessagesChange={setMessages}
  authToken={user.token}
/>

Dynamic token (function):

<InAppAI
  agentId="your-agent-id"
  messages={messages}
  onMessagesChange={setMessages}
  authToken={() => localStorage.getItem('authToken')}
/>

The function form is useful when:

  • Tokens may be refreshed during the session
  • Token retrieval is async or conditional
  • You want to return null to indicate unauthenticated state

See Authentication Guide for complete documentation.

Endpoint Configuration

endpoint

  • Type: string
  • Default: 'https://api.inappai.com/api'
  • Description: Custom API endpoint (for self-hosted backends)
<InAppAI
  endpoint="https://your-backend.com/api"
  agentId="your-agent-id"
  messages={messages}
  onMessagesChange={setMessages}
/>

Note: Most users don’t need to set this - the default InAppAI backend is used automatically.

Complete Example

import { useState } from 'react';
import { InAppAI, Message, Tool } from '@inappai/react';
import '@inappai/react/styles.css';

function App() {
  const [messages, setMessages] = useState<Message[]>([]);

  const tools: Tool[] = [
    {
      name: 'getWeather',
      description: 'Get current weather for a city',
      parameters: {
        type: 'object',
        properties: {
          city: { type: 'string', description: 'City name' },
        },
        required: ['city'],
      },
      handler: async ({ city }) => {
        // Fetch weather data
        return { temperature: 72, condition: 'Sunny' };
      },
    },
  ];

  return (
    <InAppAI
      // Required
      agentId="your-agent-id"
      messages={messages}
      onMessagesChange={setMessages}

      // Display
      displayMode="sidebar-right"
      position="bottom-right"
      defaultFolded={false}
      showHeader={true}

      // Styling
      theme="professional"
      customStyles={{
        headerTitle: 'Customer Support',
        buttonIcon: '💬',
        primaryColor: '#6366f1',
      }}

      // Context & Data
      context={() => ({
        page: window.location.pathname,
        userId: 'user-123',
      })}
      conversationId="support-chat-1"

      // Tools
      tools={tools}

      // Panel (if using panel mode)
      panelMinWidth="300px"
      panelMaxWidth="600px"
      panelDefaultWidth="400px"
      onPanelResize={(width) => console.log('Width:', width)}
    />
  );
}

TypeScript Support

All props are fully typed. Import types from the package:

import type { InAppAIProps, Message, Tool, CustomStyles } from '@inappai/react';

See TypeScript Types for complete type definitions.

Next Steps