Skip to main content Home Creators syncfusion react-ui-components-skills syncfusion-react-popups
syncfusion-react-popups Comprehensive guide for implementing Syncfusion React popup components including Dialog, ToolTip. Use this when building modal/modeless dialogs, confirmation popups, forms in dialogs, draggable windows, popovers, tooltips, and overlaid content with custom positioning, animations, WCAG 2.2 accessibility, forms integration, and event handling in React applications.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/syncfusion/react-ui-components-skills --skill syncfusion-react-popupsThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository
name syncfusion-react-popups description Comprehensive guide for implementing Syncfusion React popup components including Dialog, ToolTip. Use this when building modal/modeless dialogs, confirmation popups, forms in dialogs, draggable windows, popovers, tooltips, and overlaid content with custom positioning, animations, WCAG 2.2 accessibility, forms integration, and event handling in React applications. metadata {"author":"Syncfusion Inc","version":"34.1.29","category":"Layout"}
Syncfusion React Popups Component
Implementing Syncfusion React Dialog Component
The DialogComponent displays content in a floating window with support for modal and modeless modes, custom positioning, dragging, resizing, animations, templating, and comprehensive accessibility features.
Component Overview
DialogComponent Features:
Modal/Modeless modes : Control parent interaction blocking
9 preset positions + custom X/Y : Flexible placement
Dragging : Header-based drag and drop (allowDragging)
Resizing : Diagonal resize grip (enableResize)
Templating : Custom header, content, footer
Animations : 16 effects (Fade, Zoom, Flip, Slide, FadeZoom, etc.)
Buttons : Built-in action buttons with click handlers
Events : open, close, beforeOpen, beforeClose, drag, dragStart, dragStop, resize events
Keyboard Navigation : Tab, Escape (closeOnEscape), Enter
WCAG 2.2 Accessibility : ARIA roles, focus management
: 20+ locales via locale property
Localization
RTL Support : Right-to-left rendering
Documentation & Navigation Guide
Getting Started
Installation (@syncfusion/ej2-react-popups)
CSS/theme imports (material, bootstrap, tailwind)
Basic DialogComponent JSX structure
show()/hide() methods and refs
Functional component patterns with hooks
Initial visibility with visible prop
Modal vs Modeless
isModal boolean property (true/false)
Modal overlay behavior and parent blocking
Modeless floating behavior
Focus management differences
When to choose each mode
Side-by-side comparisons
Positioning and Dragging
position object (X: 'center'|'left'|'right'|number, Y: 'top'|'center'|'bottom'|number)
9 preset position combinations
Custom pixel-based positioning
allowDragging boolean property
enableResize and resizeHandles configuration
Target element constraints with target prop
Templates and Content
content property (string, HTML, JSX function)
header property (text or template)
footerTemplate (custom footer JSX)
Dynamic content updates
HTML sanitization (enableHtmlSanitizer)
Styling content and edge cases
Buttons and Actions
buttons array with ButtonPropsModel[]
ButtonPropsModel structure (buttonModel, click, isFlat, type)
buttonModel properties (content, isPrimary, cssClass)
Click event handlers
Styling buttons with cssClass
Button types (Button, Submit, Reset)
Animation Effects
AnimationSettingsModel (effect, duration, delay)
16 animation effects (Fade, FadeZoom, FlipLeftDown, FlipLeftUp, etc.)
Duration in milliseconds
Delay before animation starts
Disable animations (effect: 'None')
Performance considerations
Localization and Accessibility
locale property for culture/language
WCAG 2.2 compliance
Keyboard navigation (Tab, Enter, Escape)
closeOnEscape behavior control
ARIA roles and attributes
Screen reader support
RTL support with enableRtl
Focus management patterns
Advanced Patterns
Events: open, close, beforeOpen, beforeClose, drag, dragStart, dragStop, resizeStart, resizeStop, resizing
Nested and stacked dialogs
Forms with validation
AJAX content loading
Prevent close logic (beforeClose event)
Full-screen dialogs
HTML sanitization and security
CSS classes and z-index management
Enable persistence (enablePersistence)
Common edge cases and troubleshooting
API Reference (Complete)
All 24 DialogModel properties with types and defaults
All 11 events with event arguments
Methods: show(), hide(), refresh(), destroy()
ButtonPropsModel structure (buttonModel, click, isFlat, type)
AnimationSettingsModel with all 16 effects
Types and enumerations
Quick reference patterns
Quick Start Example
⚠️ Dependency Alignment: All @syncfusion/ej2-* packages must be on the same major version to avoid peer-dependency conflicts and supply-chain mismatches. Install them together:
npm install @syncfusion/ej2-react-popups @syncfusion/ej2-base @syncfusion/ej2-buttons @syncfusion/ej2-popups
import React , { useRef, useState } from 'react' ;
import { DialogComponent } from '@syncfusion/ej2-react-popups' ;
import '@syncfusion/ej2-base/styles/material.css' ;
import '@syncfusion/ej2-buttons/styles/material.css' ;
import '@syncfusion/ej2-popups/styles/material.css' ;
export default function App ( ) {
const dialogRef = useRef (null );
const [isOpen, setIsOpen] = useState (false );
const handleOpen = ( ) => {
dialogRef.current ?.show ();
setIsOpen (true );
};
const handleClose = ( ) => {
dialogRef.current ?.hide ();
setIsOpen (false );
};
const buttons = [
{
buttonModel : {
content : 'OK' ,
cssClass : 'e-flat' ,
isPrimary : true ,
},
click : handleClose,
},
{
buttonModel : {
content : 'Cancel' ,
cssClass : 'e-flat' ,
},
click : handleClose,
},
];
return (
<div id ="dialog-target" style ={{ position: 'relative ', width: '100 %', minHeight: '400px ' }}>
<button onClick ={handleOpen} className ="e-control e-btn e-primary" >
Open Dialog
</button >
<DialogComponent
ref ={dialogRef}
header ="Confirm Action"
buttons ={buttons}
showCloseIcon ={true}
target ="#dialog-target"
width ="400px"
isModal ={true}
visible ={false}
>
<p > Are you sure you want to proceed with this action?</p >
</DialogComponent >
</div >
);
}
Common Patterns
Pattern 1: Confirmation Dialog Delete action with confirmation buttons:
const buttons = [
{
buttonModel : { content : 'Delete' , cssClass : 'e-flat e-danger' , isPrimary : true },
click : () => { performDelete (); dialogRef.current ?.hide (); }
},
{
buttonModel : { content : 'Cancel' , cssClass : 'e-flat' },
click : () => dialogRef.current ?.hide ()
}
];
Pattern 2: Form Dialog Dialog with form inputs and validation:
<DialogComponent header="Edit Profile" buttons={buttons} isModal={true } width="500px" >
<div style ={{ padding: '16px ' }}>
<input type ="text" placeholder ="Name" className ="form-control" />
<input type ="email" placeholder ="Email" className ="form-control" />
<textarea placeholder ="Bio" className ="form-control" > </textarea >
</div >
</DialogComponent >
Pattern 3: Centered Dialog Position dialog in center of screen:
<DialogComponent
header="Alert"
position={{ X : 'center' , Y : 'center' }}
isModal={true }
showCloseIcon={true }
width="350px"
>
This dialog is centered on the screen.
</DialogComponent >
Pattern 4: Draggable Floating Panel Non-modal, draggable properties panel:
<DialogComponent
header="Properties"
isModal={false }
allowDragging={true }
position={{ X : 200 , Y : 150 }}
width="300px"
enableResize={true }
resizeHandles={['All' ]}
showCloseIcon={true }
>
Drag me around! I don't block the page.
</DialogComponent>
Pattern 5: Animated Dialog Dialog with Zoom animation:
<DialogComponent
header="Welcome"
animationSettings={{ effect : 'Zoom' , duration : 400 , delay : 0 }}
isModal={true }
position={{ X : 'center' , Y : 'center' }}
width="400px"
>
This dialog zooms in smoothly!
</DialogComponent >
Pattern 6: Custom Footer Template Custom footer instead of buttons:
<DialogComponent
header="Custom Footer"
isModal={true }
footerTemplate={
<div style ={{ padding: '12px ', textAlign: 'right ' }}>
<button className ="e-control e-btn e-primary" style ={{ marginRight: '8px ' }}>
Save
</button >
<button className ="e-control e-btn" > Cancel</button >
</div >
}
>
Dialog content with custom footer.
</DialogComponent >
Pattern 7: Nested Dialogs Parent dialog containing child dialog:
const childDialogRef = useRef (null );
<DialogComponent header ="Parent" isModal ={true} width ="400px" >
<button onClick ={() => childDialogRef.current?.show()} className="e-control e-btn">
Open Child Dialog
</button >
<DialogComponent
ref ={childDialogRef}
header ="Child"
isModal ={true}
width ="300px"
visible ={false}
>
Nested dialog content
</DialogComponent >
</DialogComponent >
Key Props (DialogModel) Prop Type Description Default When to Use isModalboolean Enable modal mode (blocks parent interaction) false Confirmations, alerts, critical actions visibleboolean Initial visibility state false Control initial dialog display headerstring | JSX Dialog header/title - Every dialog needs a title contentstring | HTML | JSX Dialog body content - Main dialog information buttonsButtonPropsModel[] Action buttons in footer - For OK/Cancel, action confirmations footerTemplateJSX Custom footer content - When buttons prop doesn't fit showCloseIconboolean Show close button in header false Allow users to dismiss positionPositionData X/Y positioning (center, top, etc.) { X: 'center', Y: 'center' } Custom placement allowDraggingboolean Enable drag functionality false Movable dialogs, floating panels enableResizeboolean Enable resize with grip false Resizable dialogs resizeHandlesResizeDirections[] Which edges/corners resize ['All'] Control resize behavior widthstring | number Dialog width '330px' Control dialog size heightstring | number Dialog height 'auto' Control dialog size minHeightstring | number Minimum height - Prevent too-small resize animationSettingsAnimationSettingsModel Animation effect/duration/delay - Smooth open/close transitions closeOnEscapeboolean Close on Escape key press true Keyboard navigation targetstring (selector) Container element document.body Modal positioning enableHtmlSanitizerboolean Sanitize HTML content true Security (prevent XSS) cssClassstring Custom CSS classes - Styling and theming enableRtlboolean Right-to-left rendering false RTL languages localestring Culture/language code 'en-US' Localization zIndexnumber Stack order - Manage overlapping dialogs enablePersistenceboolean Persist state on reload false Remember size/position
Common Use Cases
Confirmation Dialogs - Confirm delete, submit, or critical actions before proceeding
Alert/Info Popups - Display system messages, warnings, or notifications
Form Dialogs - Edit profiles, settings, or create new records in modal forms
Input Prompts - Collect user input for specific actions (e.g., "Enter file name")
Properties Panels - Draggable, non-modal panels for settings or properties
Multi-Step Workflows - Nested dialogs for step-by-step processes
Loading/Processing - Show progress indicators or loading states
Help/Documentation - Contextual help, tips, or tutorial overlays
Image Galleries - Lightbox dialogs for images or media previews
Settings/Preferences - Organize application settings in tabbed dialogs
Next: Choose a reference based on what you need to implement. All references include working code examples, best practices, and troubleshooting guidance.
Implementing Syncfusion React Predefined Dialog Component
Table of Contents
Key Concept Syncfusion Predefined Dialogs are not component-based (<ejs-dialog>). They are opened
imperatively via the DialogUtility utility class:
Dialog Type Method Alert DialogUtility.alert({ ... })Confirm DialogUtility.confirm({ ... })Prompt (input) DialogUtility.confirm({ content: '<input .../>', ... })
Import: import { DialogUtility } from '@syncfusion/ej2-react-popups';
Quick Start import { ButtonComponent } from '@syncfusion/ej2-react-buttons' ;
import { DialogUtility } from '@syncfusion/ej2-react-popups' ;
import * as React from 'react' ;
function App ( ) {
function showAlert ( ) {
DialogUtility .alert ({
title : 'Low Battery' ,
width : '250px' ,
content : '10% of battery remaining' ,
});
}
return <ButtonComponent cssClass ="e-danger" onClick ={showAlert} > Alert</ButtonComponent > ;
}
export default App ;
Documentation Guide
Getting Started
Installation (@syncfusion/ej2-react-popups)
CSS imports
Alert, Confirm, and Prompt minimal examples
Functional and class component patterns
Animation
animationSettings property with effect, duration, delay
Alert / Confirm / Prompt animation examples
Draggable
isDraggable boolean property
Alert / Confirm / Prompt drag examples
Position
position property: { X, Y } — left|center|right / top|center|bottom or numeric offset
Alert / Confirm / Prompt position examples
Dimension
width and height properties
cssClass for max-width / min-width constraints
Alert / Confirm / Prompt dimension examples
Customization
okButton / cancelButton — custom text, icon, click handler
showCloseIcon and closeOnEscape
Custom content for prompt dialogs
API Reference
Full DialogUtility.alert() / confirm() option properties
All supported fields: title, content, width, height, position, animationSettings, isDraggable, okButton, cancelButton, showCloseIcon, closeOnEscape, cssClass
Common Patterns const dialogObj = DialogUtility .alert ({
title : 'Info' ,
content : 'Operation complete.' ,
okButton : { click : () => { dialogObj.hide (); } }
});
const dialogObj = DialogUtility .confirm ({
title : 'Delete?' ,
content : 'Are you sure?' ,
width : '300px' ,
okButton : { text : 'Yes' , click : () => { dialogObj.hide (); } },
cancelButton : { text : 'No' , click : () => { dialogObj.hide (); } }
});
const dialogObj = DialogUtility .confirm ({
title : 'Enter Name' ,
content : '<p>Your name:</p><input id="nameInput" class="e-input" placeholder="Type here..." />' ,
width : '300px' ,
okButton : {
text : 'Submit' ,
click : () => {
const val = (document .getElementById ('nameInput' ) as HTMLInputElement ).value ;
dialogObj.hide ();
}
},
cancelButton : { click : () => dialogObj.hide () }
});
Implementing Syncfusion React Tooltip A comprehensive skill for implementing the Syncfusion React TooltipComponent — covering setup, content strategies, positioning, open modes, animation, customization, accessibility, and advanced how-to patterns.
Package: @syncfusion/ej2-react-popups
Import: import { TooltipComponent } from '@syncfusion/ej2-react-popups';
Quick Start npm install @syncfusion/ej2-react-popups --save
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css" ;
@import "../node_modules/@syncfusion/ej2-react-popups/styles/tailwind3.css" ;
import * as React from 'react' ;
import { TooltipComponent } from '@syncfusion/ej2-react-popups' ;
import './App.css' ;
function App ( ) {
return (
<TooltipComponent content ="Tooltip Content" position ="TopCenter" >
<button className ="e-btn" > Show Tooltip</button >
</TooltipComponent >
);
}
export default App ;
Navigation Guide
Getting Started & Setup
Installation and CSS imports
Basic tooltip on a single element
Tooltip on multiple targets within a container (target prop)
Using title attribute as fallback content
Running the application
Content
Plain string content
Template content (JSX function)
Dynamic content loaded via Fetch/Ajax (beforeRender event)
HTML content (iframe, embedded elements)
Updating content programmatically with dataBind()
Positioning
12 static positions (TopLeft, TopCenter, TopRight, BottomLeft, BottomCenter, BottomRight, LeftTop, LeftCenter, LeftBottom, RightTop, RightCenter, RightBottom)
Tip pointer show/hide (showTipPointer) and positioning (tipPointerPosition: Auto, Start, Middle, End)
Dynamic positioning with refresh() method (draggable targets)
Mouse trailing (mouseTrail)
Offset values (offsetX, offsetY)
Collision handling (auto-flip behavior, windowCollision)
Open Modes
Auto, Hover, Click, Focus, Custom modes via opensOn
Combining multiple modes (opensOn="Hover Click")
Sticky mode (isSticky) — close button appears
Open/close delay (openDelay, closeDelay)
Custom open mode with open() and close() methods
Mobile behavior (tap-and-hold)
Animation
animation property (open/close AnimationModel)
All 15 available animation effects (FadeIn, ZoomIn, FlipX/Y, etc.)
Custom duration and delay
Animating via open() and close() methods programmatically
Transition effect using beforeRender + CSS transitions
Customization
cssClass for custom themes and styles
Tip pointer size, background, and border customization
Full tooltip appearance (background, opacity, font)
Curved tip and bubble tip arrow patterns
Dimension control (width, height) and scroll mode
RTL support (enableRtl)
How-To Patterns
Tooltip on multiple targets (dynamic content per target)
Tooltip on disabled elements
Enabling/disabling tooltip with destroy() and render()
Displaying tooltip on SVG and Canvas elements
Embedding iframes or HTML elements in tooltip content
Custom open modes (double-click, right-click)
Accessibility
WCAG 2.2 and Section 508 compliance
WAI-ARIA attributes (role="tooltip", aria-describedby, aria-hidden)
Keyboard shortcuts (Escape, Tab)
Screen reader behavior
API Reference
All properties, methods, and events with types and defaults
TooltipAnimationSettings, TooltipEventArgs types
Position and TipPointerPosition enum values
Common Patterns
Tooltip on a Button <TooltipComponent content="Submit the form" position="TopCenter" >
<button className ="e-btn e-primary" > Submit</button >
</TooltipComponent >
Multi-Target Tooltip in a Container
<TooltipComponent target=".e-info" position="RightCenter" >
<form >
<input className ="e-info" type ="text" title ="Enter your name" />
<input className ="e-info" type ="email" title ="Enter a valid email" />
</form >
</TooltipComponent >
Click-Triggered Sticky Tooltip <TooltipComponent
content="Click the × to close me"
opensOn="Click"
isSticky={true }
position="BottomCenter"
>
<button className ="e-btn" > Click Me</button >
</TooltipComponent >
Programmatic Open/Close import * as React from 'react' ;
import { TooltipComponent } from '@syncfusion/ej2-react-popups' ;
function App ( ) {
let tooltipRef : TooltipComponent ;
const target = React .useRef <HTMLButtonElement >(null );
return (
<TooltipComponent
ref ={t => (tooltipRef = t)}
content="Tooltip opened programmatically"
opensOn="Custom"
>
<button
ref ={target}
className ="e-btn"
onClick ={() => {
if (target.current.getAttribute('data-tooltip-id')) {
tooltipRef.close();
} else {
tooltipRef.open(target.current);
}
}}
>
Toggle Tooltip
</button >
</TooltipComponent >
);
}
Mouse-Trailing Tooltip <TooltipComponent
content="Following your mouse!"
mouseTrail={true }
showTipPointer={false }
>
<div style ={{ width: '200px ', height: '100px ', background: '#eee ' }}>
Hover over me
</div >
</TooltipComponent >
Key Props at a Glance Prop Type Default Purpose contentstring | HTMLElement | Function— Tooltip text, HTML, or JSX template targetstring— CSS selector for multi-target mode positionPosition'TopCenter'12 placement values opensOnstring'Auto'Hover / Click / Focus / Custom isStickybooleanfalseKeep visible until user closes mouseTrailbooleanfalseFollow mouse cursor showTipPointerbooleantrueShow/hide arrow tip tipPointerPositionTipPointerPosition'Auto'Auto / Start / Middle / End openDelaynumber0ms delay before opening closeDelaynumber0ms delay before closing offsetX / offsetYnumber0Distance from target (px) width / heightstring | number'auto'Tooltip dimensions cssClassstringnullCustom CSS class animationAnimationModelFadeIn/FadeOut 150ms Open/close animation enableRtlbooleanfalseRight-to-left rendering enableHtmlSanitizerbooleantrueSanitize HTML content containerstring | HTMLElementbodyPopup append target windowCollisionbooleanfalseCollision vs viewport
syncfusion-react-accordion Guide users to implement Syncfusion React Accordion component for collapsible content panels. Use this skill whenever the user needs to create expandable/collapsible sections, accordion layouts, tabbed content panels, multi-step forms, FAQs, or navigation with expandable items. Covers component setup, expand modes, animations, dynamic content loading, styling, events, lifecycle, React hooks integration, and complete API reference.
Create responsive navigation headers with AppBar component. Build top, bottom, or sticky app bars with buttons, menus, icons, and sidebars. Use when building navigation elements, toolbars, action bars, or responsive headers with dynamic content layout. Includes color modes (Light, Dark, Primary, Inherit), size modes (Regular, Prominent, Dense), spacing, separators, and full accessibility support.
Related occupations SOC
Based on SOC occupation classification