syncfusion-javascript-chat-ui

Installation
SKILL.md

Implementing Syncfusion TypeScript Chat UI

Overview

The Chat UI component provides a modern, feature-rich interface for building conversational applications including customer support chat, AI chatbots, messaging systems, and collaborative communication tools.

The Syncfusion Chat UI (ChatUI) control is from the @syncfusion/ej2-interactive-chat package that provides:

  • Message Management - Display, send, and manage chat messages with rich content
  • User Differentiation - Visual distinction between current user and other participants
  • Real-time Indicators - Typing indicators for active participants
  • File Attachments - Upload and display files, images, and documents in messages
  • Smart Features - @mentions, quick reply suggestions, message replies
  • Customization - Templates for messages, empty states, headers, footers
  • Accessibility - Keyboard navigation, ARIA support, RTL layout
  • Message Toolbar - Per-message actions (Copy, Reply, Pin, Delete)
  • Load on Demand - Lazy loading for large conversation histories

Package: @syncfusion/ej2-interactive-chat

Dependencies: ej2-base, ej2-navigations, ej2-inputs, ej2-buttons, ej2-dropdowns, ej2-popups


Documentation and Navigation Guide

Getting Started

📄 Read: references/getting-started.md

  • Package installation
  • CSS imports for themes (material, bootstrap, fabric, etc.)
  • Basic Chat UI initialization
  • UserModel configuration (current user and participants)
  • MessageModel structure for initial messages
  • Component dimensions (width, height)
  • created event and component lifecycle

Messages Configuration

📄 Read: references/messages.md

  • MessageModel properties (id, text, author, timestamp, status)
  • messages property - initial message collection
  • Message status indicators (sent, received, read)
  • Message replies (replyTo, MessageReplyModel)
  • Message flags (isForwarded, isPinned)
  • Auto-scroll behavior (autoScrollToBottom)
  • Message grouping by sender
  • Mentions in messages (mentionUsers array)
  • Attached files in messages

Header & Footer Configuration

📄 Read: references/header-footer.md

  • Show/hide header and footer (showHeader, showFooter)
  • Header text and icon (headerText, headerIconCss)
  • Header toolbar configuration (headerToolbar, ToolbarSettingsModel)
  • Toolbar items setup (ToolbarItemModel with text, icon, alignment, tooltip)
  • Toolbar item click events (itemClicked)
  • Footer placeholder text customization
  • Footer template for custom layouts

Typing Indicator

📄 Read: references/typing-indicator.md

  • Show/hide typing indicator (typingUsers property)
  • Dynamic typing user updates (UserModel array)
  • Multiple users typing scenarios
  • Custom typing indicator template (typingUsersTemplate)
  • userTyping event (isTyping, message, user)

Templates & Customization

📄 Read: references/templates.md

  • Empty chat template (emptyChatTemplate)
  • Message template (messageTemplate) with context
  • Typing users template (typingUsersTemplate)
  • Time break template (timeBreakTemplate)
  • Suggestion template (suggestionTemplate)
  • Footer template (footerTemplate)
  • Template context and data binding patterns

Timebreak & Timestamp

📄 Read: references/timebreak-timestamp.md

  • Show time breaks (showTimeBreak) for date-based grouping
  • Time break template customization
  • Show timestamps (showTimeStamp) per message
  • Global timestamp format (timeStampFormat)
  • Per-message timestamp format override
  • Date/time formatting patterns
  • Culture-based formatting

File Attachments

📄 Read: references/file-attachments.md

  • Enable attachments (enableAttachments)
  • Attachment settings (attachmentSettings, FileAttachmentSettingsModel)
  • Server upload configuration (saveUrl, removeUrl)
  • Save format options (Base64 vs Blob)
  • File type restrictions (allowedFileTypes)
  • File size limits (maxFileSize)
  • Maximum attachment count (maximumCount)
  • Drag and drop support (enableDragAndDrop)
  • Custom attachment templates (attachmentTemplate, previewTemplate)
  • Attachment events (click, upload, success, failure, removed)

@Mention Integration

📄 Read: references/mention.md

  • Mention trigger character (mentionTriggerChar, default '@')
  • Mention user list (mentionUsers property)
  • UserModel configuration for mentions
  • Mention popup filtering
  • mentionSelect event and cancellation
  • Mention data in messages
  • Custom mention handling

Suggestions

📄 Read: references/suggestions.md

  • Quick reply suggestions (suggestions property)
  • Suggestion template customization (suggestionTemplate)
  • Displaying suggestions above input
  • Suggestion click behavior
  • Dynamic suggestion updates

Load on Demand

📄 Read: references/load-on-demand.md

  • Enable lazy loading (loadOnDemand property)
  • Scroll-triggered message loading
  • Performance optimization for large conversations
  • Pagination patterns
  • Adding older messages programmatically

Methods

📄 Read: references/methods.md

  • addMessage() - add string or MessageModel
  • updateMessage() - modify existing messages
  • scrollToBottom() - scroll to latest message
  • scrollToMessage() - scroll to specific message by ID
  • focus() - set focus on input textarea
  • refresh() and dataBind() for updates
  • Other component methods

Events

📄 Read: references/events.md

  • created - component initialization
  • messageSend - before sending message (with cancellation)
  • userTyping - typing status updates
  • mentionSelect - mention selection handling
  • itemClicked - toolbar item clicks (header and message toolbars)
  • Attachment events (click, beforeUpload, uploadSuccess, uploadFailure, removed)
  • Event handling patterns

Message Toolbar & Appearance

📄 Read: references/message-toolbar-appearance.md

  • Message toolbar settings (messageToolbarSettings)
  • Per-message toolbar items (Copy, Reply, Pin, Delete)
  • Custom toolbar items
  • Message toolbar click events
  • Compact mode (enableCompactMode) - left-align all messages
  • CSS customization (cssClass)
  • Theme integration
  • RTL support (enableRtl)
  • Localization (locale)
  • Persistence (enablePersistence)
  • Accessibility features

Quick Start

Basic Chat UI Setup

import { ChatUI, UserModel, MessageModel } from '@syncfusion/ej2-interactive-chat';
import { enableRipple } from '@syncfusion/ej2-base';

enableRipple(true);

// Define current user
let currentUser: UserModel = {
    id: "user1",
    user: "Albert",
    avatarUrl: "https://example.com/avatar1.png"
};

// Define other participant
let participantUser: UserModel = {
    id: "user2",
    user: "Michale Suyama",
    avatarUrl: "https://example.com/avatar2.png"
};

// Initial messages
let chatMessages: MessageModel[] = [
    {
        author: currentUser,
        text: "Hi Michale, are we on track for the deadline?"
    },
    {
        author: participantUser,
        text: "Yes, the design phase is complete."
    },
    {
        author: currentUser,
        text: "Great! I'll review it and send feedback by today."
    }
];

// Initialize Chat UI
let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    messages: chatMessages,
    headerText: 'Michale Suyama',
    showTimeStamp: true,
    autoScrollToBottom: true
});

// Render
chatUI.appendTo('#chatUI');

HTML Structure

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Chat UI Example</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    <!-- CSS imports -->
    <link href="https://cdn.syncfusion.com/ej2/32.1.19/tailwind3.css" rel="stylesheet" />
</head>
<body>
    <div class="chatui-container" style="height: 500px; width: 400px;">
        <div id="chatUI"></div>
    </div>
</body>
</html>

CSS Imports (via npm)

@import '../node_modules/@syncfusion/ej2-base/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-interactive-chat/styles/tailwind3.css';

Common Patterns

Add a New Message Programmatically

// Add as string (uses current user)
chatUI.addMessage("This is a new message");

// Add as MessageModel (any user)
chatUI.addMessage({
    text: "Response from bot",
    author: botUser,
    timestamp: new Date()
});

Handle Message Send Event

let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    messageSend: (args: MessageSendEventArgs) => {
        console.log("Message being sent:", args.message.text);
        
        // Cancel send if needed
        if (args.message.text.trim() === '') {
            args.cancel = true;
        }
        
        // Send to server/API
        sendToServer(args.message);
    }
});

Show Typing Indicator

// Show user is typing
chatUI.typingUsers = [participantUser];

// Hide typing indicator (after message received)
chatUI.typingUsers = [];

Enable File Attachments with Upload

let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    enableAttachments: true,
    attachmentSettings: {
        saveUrl: 'https://your-server.com/api/upload',
        removeUrl: 'https://your-server.com/api/remove',
        allowedFileTypes: '.jpg,.png,.pdf,.docx',
        maxFileSize: 5242880, // 5MB in bytes
        maximumCount: 3
    },
    attachmentUploadSuccess: (args) => {
        console.log("File uploaded successfully:", args.file.name);
    }
});

Add @Mention Support

let mentionableUsers: UserModel[] = [
    { id: "user1", user: "Albert" },
    { id: "user2", user: "Michale" },
    { id: "user3", user: "Janet" }
];

let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    mentionTriggerChar: '@',
    mentionUsers: mentionableUsers,
    mentionSelect: (args: MentionSelectEventArgs) => {
        console.log("Mentioned user:", args.itemData);
    }
});

Update Existing Message

// Update message content
chatUI.updateMessage({
    text: "Updated message content",
    author: currentUser
}, "message-id-123");

Scroll to Specific Message

// Scroll to bottom (latest message)
chatUI.scrollToBottom();

// Scroll to specific message by ID
chatUI.scrollToMessage("message-id-456");

Key Properties Summary

Property Type Description
user UserModel Current user interacting with the chat
messages MessageModel[] Collection of chat messages
showHeader boolean Show/hide header (default: true)
showFooter boolean Show/hide footer (default: true)
headerText string Text displayed in header
placeholder string Input placeholder text
typingUsers UserModel[] Users currently typing
showTimeStamp boolean Show message timestamps (default: true)
showTimeBreak boolean Group messages by date (default: false)
autoScrollToBottom boolean Auto-scroll on new message (default: false)
enableAttachments boolean Enable file attachments (default: false)
attachmentSettings FileAttachmentSettingsModel File upload configuration
mentionTriggerChar string Character to trigger mentions (default: '@')
mentionUsers UserModel[] Users available for @mention
suggestions string[] Quick reply suggestions
loadOnDemand boolean Lazy load messages (default: false)
enableCompactMode boolean Left-align all messages (default: false)
messageToolbarSettings MessageToolbarSettingsModel Per-message toolbar config
headerToolbar ToolbarSettingsModel Header toolbar config
width string | number Component width (default: '100%')
height string | number Component height (default: '100%')
cssClass string Custom CSS classes
enableRtl boolean Right-to-left layout (default: false)
locale string Localization culture

Common Use Cases

Customer Support Chat

  • Real-time agent-customer conversations
  • Typing indicators for agent availability
  • File attachments for screenshots/documents
  • Message status (sent, delivered, read)
  • Quick reply suggestions for common responses

AI Chatbot Interface

  • User-bot message differentiation
  • Typing indicator during AI processing
  • Suggested responses and quick actions
  • Message templates for rich responses
  • Empty state with welcome message

Team Collaboration Tool

  • @mention team members
  • Message replies and threading
  • Pin important messages
  • File sharing with preview
  • Load on demand for long conversations

Live Help Widget

  • Compact mode for embedded widget
  • Custom header with agent info
  • Footer with typing status
  • Auto-scroll to latest message
  • Minimize/maximize functionality

Documentation Q&A

  • Question-answer format with clear user distinction
  • Code snippet attachments
  • Time breaks for conversation sessions
  • Message toolbar with copy functionality
  • Search and scroll to specific messages
Related skills

More from syncfusion/javascript-ui-controls-skills

Installs
7
First Seen
Mar 31, 2026