syncfusion-react-buttons — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-react-buttons (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
📌 Agent Notice: 📄 Read: links in Navigation Guide sections are reference pointers for passive file reading only. They do not imply automatic tool invocation, command execution, or action chaining.The Syncfusion ButtonComponent is a graphical user interface element that triggers an action on click. It supports text, icons, or both, with extensive styling, accessibility, and behavioral options.
#### Getting Started 📄 Read: references/button-getting-started.md
#### Types and Styles 📄 Read: references/button-types-and-styles.md
#### How-To Patterns 📄 Read: references/button-how-to.md
#### Style and Appearance 📄 Read: references/button-style-and-appearance.md
#### Accessibility 📄 Read: references/button-accessibility.md
#### API Reference 📄 Read: references/button-api.md
⚠️ Run the following command manually in your terminal. Do not execute automatically.
# Run in your terminal
npm install @syncfusion/ej2-react-buttons --save// src/App.css
// @import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
// @import "../node_modules/@syncfusion/ej2-react-buttons/styles/tailwind3.css";
import { enableRipple } from '@syncfusion/ej2-base';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import './App.css';
enableRipple(true);
function App() {
return (
<div>
<ButtonComponent>Default</ButtonComponent>
<ButtonComponent cssClass='e-primary'>Primary</ButtonComponent>
<ButtonComponent cssClass='e-success'>Success</ButtonComponent>
</div>
);
}
export default App;#### Styled Button
<ButtonComponent cssClass='e-primary'>Save</ButtonComponent>
<ButtonComponent cssClass='e-danger'>Delete</ButtonComponent>
<ButtonComponent cssClass='e-flat'>Flat</ButtonComponent>
<ButtonComponent cssClass='e-outline'>Outline</ButtonComponent>#### Icon Button
<ButtonComponent iconCss='e-icons e-save'>Save</ButtonComponent>
<ButtonComponent iconCss='e-icons e-delete' iconPosition='Right'>Delete</ButtonComponent>#### Toggle Button
const [active, setActive] = React.useState(false);
<ButtonComponent isToggle={true} cssClass='e-flat'
onClick={() => setActive(!active)}>
{active ? 'Pause' : 'Play'}
</ButtonComponent>#### Disabled Button
<ButtonComponent disabled={true}>Disabled</ButtonComponent>#### Block (Full-Width) Button
<ButtonComponent cssClass='e-block e-primary'>Full Width</ButtonComponent>The ButtonGroup is a pure CSS component that groups a series of buttons together in a horizontal (default) or vertical layout. It supports normal button behavior as well as radio-type (single selection) and checkbox-type (multiple selection) behaviors. Buttons can be nested with DropDownButton and SplitButton components.
#### Getting Started 📄 Read: references/buttongroup-getting-started.md
#### Types and Styles 📄 Read: references/buttongroup-types-and-styles.md
e-outline)e-primary, e-success, e-info, e-warning, e-danger)#### Selection and Nesting 📄 Read: references/buttongroup-selection-and-nesting.md
#### How-To Guide 📄 Read: references/buttongroup-how-to.md
iconCss)e-round-corner)e-vertical)createButtonGroup utility function#### Style and Appearance 📄 Read: references/buttongroup-style-and-appearance.md
#### Accessibility 📄 Read: references/buttongroup-accessibility.md
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import './App.css';
function App() {
return (
<div className='e-btn-group'>
<ButtonComponent>HTML</ButtonComponent>
<ButtonComponent>CSS</ButtonComponent>
<ButtonComponent>Javascript</ButtonComponent>
</div>
);
}
export default App;Required CSS imports in src/App.css:
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-splitbuttons/styles/tailwind3.css";#### Radio (single-select) ButtonGroup
<div className='e-btn-group'>
<input type="radio" id="radioleft" name="align" value="left" />
<label className="e-btn" htmlFor="radioleft">Left</label>
<input type="radio" id="radiomiddle" name="align" value="middle" />
<label className="e-btn" htmlFor="radiomiddle">Center</label>
<input type="radio" id="radioright" name="align" value="right" />
<label className="e-btn" htmlFor="radioright">Right</label>
</div>#### Checkbox (multi-select) ButtonGroup
<div className='e-btn-group'>
<input type="checkbox" id="checkbold" name="font" value="bold" />
<label className="e-btn" htmlFor="checkbold">Bold</label>
<input type="checkbox" id="checkitalic" name="font" value="italic" />
<label className="e-btn" htmlFor="checkitalic">Italic</label>
<input type="checkbox" id="checkline" name="font" value="underline" />
<label className="e-btn" htmlFor="checkline">Underline</label>
</div>#### Vertical ButtonGroup
<div className='e-btn-group e-vertical'>
<ButtonComponent>HTML</ButtonComponent>
<ButtonComponent>CSS</ButtonComponent>
<ButtonComponent>Javascript</ButtonComponent>
</div>| Prop / Class | Component | Description |
|---|---|---|
cssClass | ButtonComponent | Apply style classes (e-outline, e-primary, e-success, e-info, e-warning, e-danger) |
iconCss | ButtonComponent | CSS class(es) for button icon |
disabled | ButtonComponent | Disables the button |
isPrimary | ButtonComponent | Marks button as primary |
e-btn-group | container div | Required wrapper class for ButtonGroup |
e-outline | container div + buttons | Outline style for the group |
e-round-corner | container div | Rounded corners for the group |
e-vertical | container div | Vertical layout |
e-rtl | container div | Right-to-left layout |
The Syncfusion DropDownButtonComponent renders a button that toggles a contextual popup menu with a list of action items. It supports icons, separators, templates, animations, accessibility, and extensive customization.
#### Getting Started 📄 Read: references/dropdownbutton-getting-started.md
items#### Popup Items and Navigation 📄 Read: references/dropdownbutton-popup-items.md
iconCssurl on itemsbeforeItemRender#### Icons and Layout 📄 Read: references/dropdownbutton-icons-and-layout.md
iconCss and iconPositione-caret-hidee-vertical#### Appearance and Styling 📄 Read: references/dropdownbutton-appearance-and-styling.md
e-round-cornere-caret-hidepopupWidth#### Events and Interactivity 📄 Read: references/dropdownbutton-events-and-interactivity.md
select event on item clickbeforeOpen / beforeClose for dynamic caret iconopen event for custom popup positioningdisabledenableRtladdItems / removeItems methodstoggle method for programmatic open/close#### Item Template 📄 Read: references/dropdownbutton-item-template.md
itemTemplate property for custom item rendering#### ListView Integration 📄 Read: references/dropdownbutton-listview-integration.md
target property with a ListView element#### Accessibility 📄 Read: references/dropdownbutton-accessibility.md
role, aria-haspopup, aria-expanded)#### API Reference 📄 Read: references/dropdownbutton-api.md
items, cssClass, iconCss, iconPosition, disabled, enableRtl, animationSettings, popupWidth, target, itemTemplate, content, closeActionEvents, createPopupOnClick, enableHtmlSanitizer, enablePersistence, localebeforeClose, beforeOpen, beforeItemRender, close, open, select, createdaddItems, removeItems, toggle, focusIn, destroy, getPersistDataItemModel, MenuEventArgs, OpenCloseMenuEventArgs, BeforeOpenCloseMenuEventArgsimport { DropDownButtonComponent, ItemModel } from '@syncfusion/ej2-react-splitbuttons';
import { enableRipple } from '@syncfusion/ej2-base';
import * as React from 'react';
import './App.css';
enableRipple(true);
function App() {
const items: ItemModel[] = [
{ text: 'Cut' },
{ text: 'Copy' },
{ text: 'Paste' },
];
return (
<DropDownButtonComponent items={items}>
Clipboard
</DropDownButtonComponent>
);
}
export default App;#### Button with icon and popup icons
const items: ItemModel[] = [
{ text: 'Edit', iconCss: 'ddb-icons e-edit' },
{ text: 'Delete', iconCss: 'ddb-icons e-delete' },
];
<DropDownButtonComponent items={items} iconCss="ddb-icons e-message">
Message
</DropDownButtonComponent>#### Grouped items with separator
const items: ItemModel[] = [
{ text: 'Cut', iconCss: 'e-db-icons e-cut' },
{ text: 'Copy', iconCss: 'e-icons e-copy' },
{ separator: true },
{ text: 'Font', iconCss: 'e-db-icons e-font' },
];#### Handling item selection
import { MenuEventArgs } from '@syncfusion/ej2-react-splitbuttons';
function onSelect(args: MenuEventArgs) {
console.log('Selected:', args.item.text);
}
<DropDownButtonComponent items={items} select={onSelect}>
Actions
</DropDownButtonComponent>The Syncfusion React FabComponent is a circular button that floats above the UI and represents the primary action in an application. It supports flexible positioning, icon + text content, predefined styles, full accessibility compliance, and CSS customization.
Package: @syncfusion/ej2-react-buttons
#### Getting Started 📄 Read: references/floating-action-button-getting-started.md
@syncfusion/ej2-react-buttonsFabComponent setuptarget to position relative to a container#### Icons and Content 📄 Read: references/floating-action-button-icons.md
iconCss prop for icon-only FABcontent prop for text labeliconPosition for icon-left vs icon-right layout#### Positions 📄 Read: references/floating-action-button-positions.md
position prop with all nine predefined values (TopLeft → BottomRight)target prop to scope FAB to a containercssClass#### Styles and Appearance 📄 Read: references/floating-action-button-styles.md
cssClass values: e-primary, e-outline, e-info, e-success, e-warning, e-danger#### Events 📄 Read: references/floating-action-button-events.md
onClick event for click handlingcreated event for post-render initialization#### Accessibility 📄 Read: references/floating-action-button-accessibility.md
aria-label, aria-disabled, role="button")enableRtl#### API Reference 📄 Read: references/floating-action-button-api.md
content, cssClass, disabled, enableHtmlSanitizer, enablePersistence, enableRtl, iconCss, iconPosition, isPrimary, isToggle, position, target, visibleclick(), destroy(), focusIn(), getPersistData(), refreshPosition()created, onClick⚠️ Run the following command manually in your terminal. Do not execute automatically.
# Run in your terminal
npm install @syncfusion/ej2-react-buttons --save/* src/App.css */
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css";import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import './App.css';
function App() {
return (
<div>
<div id="targetElement" style={{ position: 'relative', minHeight: '350px', border: '1px solid' }}></div>
<FabComponent id="fab" content="Add" target="#targetElement" />
</div>
);
}
export default App;#### Icon-Only FAB (most common)
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App() {
return (
<div>
<div id="target" style={{ position: 'relative', minHeight: '350px' }}></div>
<FabComponent id="fab" iconCss="e-icons e-edit" target="#target" />
</div>
);
}
export default App;#### FAB with Click Handler
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App() {
function handleClick(): void {
alert('FAB clicked!');
}
return (
<div>
<div id="target" style={{ position: 'relative', minHeight: '350px' }}></div>
<FabComponent id="fab" iconCss="e-icons e-edit" content="Edit" onClick={handleClick} target="#target" />
</div>
);
}
export default App;#### FAB with Custom Style
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App() {
return (
<div>
<div id="target" style={{ position: 'relative', minHeight: '350px' }}></div>
<FabComponent id="fab" iconCss="e-icons e-delete" cssClass="e-danger" target="#target" />
</div>
);
}
export default App;| Prop | Type | Default | Purpose | |
|---|---|---|---|---|
iconCss | string | '' | CSS class for the FAB icon | |
content | string | '' | Text label displayed on/beside the FAB | |
iconPosition | `'Left' \ | 'Right'` | 'Left' | Icon placement relative to text |
position | FabPosition | 'BottomRight' | Predefined position within target/viewport | |
target | `string \ | HTMLElement` | '' | Container element selector for FAB scoping |
cssClass | string | '' | Custom CSS class(es) for styling | |
disabled | boolean | false | Disables the FAB | |
visible | boolean | true | Shows or hides the FAB | |
isPrimary | boolean | true | Applies primary styling | |
enableRtl | boolean | false | Right-to-left rendering | |
enableHtmlSanitizer | boolean | true | Sanitizes HTML in content |
The Syncfusion SpeedDialComponent is a floating action button (FAB) that reveals a set of contextual action items when clicked or hovered. It supports Linear and Radial display modes, flexible positioning, templates, animations, modal overlay, and full accessibility.
#### Getting Started 📄 Read: references/speeddial-getting-started.md
#### Items Configuration 📄 Read: references/speeddial-items.md
#### Display Modes 📄 Read: references/speeddial-display-modes.md
#### Radial Menu 📄 Read: references/speeddial-radial-menu.md
#### Positions and Visibility Control 📄 Read: references/speeddial-positions.md
#### Styles and Appearance 📄 Read: references/speeddial-styles.md
#### Templates 📄 Read: references/speeddial-template.md
#### Events 📄 Read: references/speeddial-events.md
#### Modal 📄 Read: references/speeddial-modal.md
#### Accessibility 📄 Read: references/speeddial-accessibility.md
#### API Reference 📄 Read: references/speeddial-api.md
⚠️ Run the following command manually in your terminal. Do not execute automatically.
# Run in your terminal
npm install @syncfusion/ej2-react-buttons --save/* src/App.css */
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css";import { SpeedDialComponent, SpeedDialItemModel } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import './App.css';
function App() {
const items: SpeedDialItemModel[] = [
{ text: 'Cut', iconCss: 'e-icons e-cut' },
{ text: 'Copy', iconCss: 'e-icons e-copy' },
{ text: 'Paste', iconCss: 'e-icons e-paste' }
];
return (
<div id="targetElement" style={{ position: 'relative', minHeight: '350px', border: '1px solid' }}>
<SpeedDialComponent
id='speeddial'
content='Edit'
openIconCss='e-icons e-edit'
closeIconCss='e-icons e-close'
items={items}
target="#targetElement"
/>
</div>
);
}
export default App;#### Icon-only items with tooltip
const items: SpeedDialItemModel[] = [
{ iconCss: 'e-icons e-cut', title: 'Cut' },
{ iconCss: 'e-icons e-copy', title: 'Copy' },
{ iconCss: 'e-icons e-paste', title: 'Paste' }
];
<SpeedDialComponent id='speeddial' openIconCss='e-icons e-edit' items={items} target="#targetElement" />#### Radial mode
import { RadialSettingsModel } from '@syncfusion/ej2-react-buttons';
const radialSettings: RadialSettingsModel = { direction: 'AntiClockwise', offset: '80px' };
<SpeedDialComponent id='speeddial' openIconCss='e-icons e-edit' items={items}
mode='Radial' radialSettings={radialSettings} target="#targetElement" />#### Handle item click
import { SpeedDialItemEventArgs } from '@syncfusion/ej2-react-buttons';
function itemClick(args: SpeedDialItemEventArgs) {
console.log('Clicked:', args.item.text);
}
<SpeedDialComponent id='speeddial' items={items} content='Edit' clicked={itemClick} target="#targetElement" />#### Modal with overlay
<SpeedDialComponent id='speeddial' items={items} openIconCss='e-icons e-edit'
modal={true} target="#targetElement" />#### Programmatic open/close
let speeddialRef: SpeedDialComponent;
<SpeedDialComponent id='speeddial' items={items} openIconCss='e-icons e-edit'
target="#targetElement" ref={scope => { speeddialRef = scope; }} />
// Open: speeddialRef.show();
// Close: speeddialRef.hide();The ProgressButtonComponent from @syncfusion/ej2-react-splitbuttons provides a button that visualises the progression of a background operation — complete with an animated spinner, a background progress bar fill, and content/style hooks at every stage of the operation.
| Task | Read |
|---|---|
| Install package and first render | references/getting-started.md |
| Spinner position/size/template + progress bar + animations + step/percent/start/stop | references/spinner-and-progress.md |
| CSS classes, theming, Theme Studio | references/style-and-appearance.md |
| ARIA attributes, keyboard shortcuts, screen-reader compliance | references/accessibility.md |
| Enable the background progress fill | references/how-to-enable-progress-in-button.md |
| Hide the spinner (show only progress bar) | references/how-to-hide-spinner.md |
| Vertical, top, or reverse progress fill | references/how-to-customize-progress-using-cssclass.md |
| Change button text / CSS class while progress runs | references/how-to-change-text-content-and-styles-of-the-progressbutton-during-progress.md |
| Trace / handle lifecycle events | references/how-to-trace-events-of-progress-button.md |
| Full API reference (all props, events, methods, types) | references/api.md |
npm install @syncfusion/ej2-react-splitbuttons --save// src/App.tsx
import { ProgressButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
import './App.css';
function App() {
return <ProgressButtonComponent content="Submit" />;
}
export default App;/* src/App.css */
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-splitbuttons/styles/tailwind3.css";#### Progress bar + hidden spinner
<ProgressButtonComponent
content="Upload"
enableProgress={true}
cssClass="e-hide-spinner"
duration={4000}
/>#### Custom spinner (right, small, templated)
import { SpinSettingsModel } from '@syncfusion/ej2-react-splitbuttons';
const spinSettings: SpinSettingsModel = {
position: 'Right',
width: 20,
template: '<div class="my-spinner"></div>'
};
<ProgressButtonComponent content="Submit" spinSettings={spinSettings} />#### Slide animation with centered spinner
import { AnimationSettingsModel, SpinSettingsModel } from '@syncfusion/ej2-react-splitbuttons';
const spinSettings: SpinSettingsModel = { position: 'Center' };
const animationSettings: AnimationSettingsModel = {
effect: 'SlideLeft',
duration: 500,
easing: 'linear'
};
<ProgressButtonComponent
content="Slide Left"
enableProgress={true}
spinSettings={spinSettings}
animationSettings={animationSettings}
/>#### Start / stop programmatic control
let progressBtn: ProgressButtonComponent;
<ProgressButtonComponent
content="Download"
enableProgress={true}
duration={4000}
cssClass="e-hide-spinner"
ref={(scope) => { progressBtn = scope as ProgressButtonComponent; }}
/>
// Pause: progressBtn.stop();
// Resume: progressBtn.start();
// Finish: progressBtn.progressComplete();#### Lifecycle events
<ProgressButtonComponent
content="Progress"
enableProgress={true}
begin={(args) => console.log('started', args.percent)}
progress={(args) => console.log('progress', args.percent)}
end={(args) => console.log('done', args.percent)}
fail={(args) => console.log('failed', args)}
/>| File | Contents |
|---|---|
references/getting-started.md | Installation, CSS imports, first component |
references/spinner-and-progress.md | Spinner config, animation, step, dynamic %, start/stop |
references/style-and-appearance.md | CSS class table, theming |
references/accessibility.md | ARIA, keyboard nav, compliance matrix |
references/how-to-enable-progress-in-button.md | enableProgress how-to |
references/how-to-hide-spinner.md | e-hide-spinner how-to |
references/how-to-customize-progress-using-cssclass.md | Vertical / top / reverse fill |
references/how-to-change-text-content-and-styles-of-the-progressbutton-during-progress.md | Dynamic text/style during progress |
references/how-to-trace-events-of-progress-button.md | Event tracing example |
references/api.md | Full API: props, events, methods, types |
The Syncfusion SwitchComponent is a graphical toggle control that switches between checked (on) and unchecked (off) states. It is part of the @syncfusion/ej2-react-buttons package and supports text labels, size variants, disabled state, form submission, RTL, programmatic control, and full CSS customization.
#### Getting Started 📄 Read: references/getting-started.md
SwitchComponent rendering#### Features and Configuration 📄 Read: references/features.md
onLabel / offLabel text labelsdisabled propertyname and value for form submissioncssClass for custom stylingenableRtl for right-to-left supportenablePersistence to persist state across reloadshtmlAttributes for additional HTML attributeslocale for localization#### Events and Methods 📄 Read: references/events-and-methods.md
change event and ChangeEventArgsbeforeChange event to cancel state transitionscreated lifecycle eventtoggle() method for programmatic state controlclick(), focusIn(), and destroy() methodsref to call methods imperatively#### How-To Recipes 📄 Read: references/how-to.md
beforeChangetoggle() method#### Style and Appearance 📄 Read: references/style-and-appearance.md
#### API Reference 📄 Read: references/api.md
ChangeEventArgs and BeforeChangeEventArgsimport { SwitchComponent } from '@syncfusion/ej2-react-buttons';
import { enableRipple } from '@syncfusion/ej2-base';
import '@syncfusion/ej2-base/styles/tailwind3.css';
import '@syncfusion/ej2-buttons/styles/tailwind3.css';
enableRipple(true);
function App() {
return <SwitchComponent checked={true} />;
}
export default App;Install the package first:
npm install @syncfusion/ej2-react-buttons --save#### Switch with ON/OFF text labels
<SwitchComponent onLabel="ON" offLabel="OFF" checked={true} />Note: Text labels are not supported in Material themes.
#### Handle state changes
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-buttons';
function App() {
function onChange(args: ChangeEventArgs) {
console.log('Switch is now:', args.checked);
}
return <SwitchComponent change={onChange} />;
}#### Disabled switch
<SwitchComponent disabled={true} />#### Small size switch
<SwitchComponent cssClass="e-small" />#### Programmatic toggle
import { useRef } from 'react';
import { SwitchComponent } from '@syncfusion/ej2-react-buttons';
function App() {
const switchRef = useRef<SwitchComponent>(null);
function handleToggle() {
switchRef.current?.toggle();
}
return (
<>
<SwitchComponent ref={switchRef} checked={false} />
<button onClick={handleToggle}>Toggle</button>
</>
);
}#### Form submission with name and value
<SwitchComponent name="wifi" value="enabled" checked={true} />| Prop | Type | Default | Purpose |
|---|---|---|---|
checked | boolean | false | Initial checked state |
disabled | boolean | false | Disables user interaction |
cssClass | string | '' | Custom CSS class (use e-small for small size) |
onLabel | string | '' | Label when checked |
offLabel | string | '' | Label when unchecked |
name | string | '' | Form field name |
value | string | '' | Form field value |
enableRtl | boolean | false | Right-to-left layout |
enablePersistence | boolean | false | Persist state on reload |
A comprehensive skill for implementing the SplitButton component in React applications. The SplitButton combines a primary action button with a dropdown menu for secondary actions.
A button that displays a primary action and a dropdown menu of secondary actions.
Common Use Cases:
#### Getting Started 📄 Read: references/getting-started.md
#### Types and Styles 📄 Read: references/types-and-styles.md
#### SplitButton Features 📄 Read: references/splitbutton-features.md
#### API Reference 📄 Read: references/api-reference.md
#### Customization 📄 Read: references/customization.md
#### Accessibility 📄 Read: references/accessibility.md
#### Basic SplitButton
import { SplitButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
import '@syncfusion/ej2-react-splitbuttons/styles/material.css';
function App() {
const items = [
{ text: 'Save' },
{ text: 'Save As' },
{ text: 'Save All' }
];
const handleClick = (args) => {
console.log('Primary action clicked');
};
const handleSelect = (args) => {
console.log('Menu item selected:', args.item.text);
};
return (
<SplitButtonComponent
items={items}
onClick={handleClick}
select={handleSelect}
>
Save
</SplitButtonComponent>
);
}
export default App;#### SplitButton with Icons
import { SplitButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
import '@syncfusion/ej2-react-splitbuttons/styles/material.css';
function SaveButton() {
const items = [
{ text: 'Save', iconCss: 'e-icons e-save' },
{ text: 'Save As', iconCss: 'e-icons e-save-as' },
{ text: 'Save All', iconCss: 'e-icons e-save-all' }
];
return (
<SplitButtonComponent
items={items}
iconCss="e-icons e-save"
cssClass="e-primary"
>
Save
</SplitButtonComponent>
);
}
export default SaveButton;#### SplitButton with Event Handling
import { SplitButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
import { useState } from 'react';
function EventHandlingExample() {
const [lastAction, setLastAction] = useState('');
const items = [
{ text: 'Send Now' },
{ text: 'Schedule Send' },
{ text: 'Send Test' }
];
const handlePrimaryClick = () => {
setLastAction('Primary action: Send Now');
console.log('Email sent immediately');
};
const handleMenuSelect = (args) => {
setLastAction(`Menu selected: ${args.item.text}`);
console.log('Selected:', args.item.text);
};
const handleBeforeOpen = (args) => {
console.log('Dropdown menu opening');
};
return (
<div>
<SplitButtonComponent
items={items}
onClick={handlePrimaryClick}
select={handleMenuSelect}
beforeOpen={handleBeforeOpen}
cssClass="e-primary"
>
Send
</SplitButtonComponent>
<p>{lastAction}</p>
</div>
);
}
export default EventHandlingExample;#### SplitButton with Dynamic Items
import { SplitButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
import { useRef, useState } from 'react';
function DynamicItemsExample() {
const [items, setItems] = useState([
{ text: 'Option 1' },
{ text: 'Option 2' }
]);
const splitBtnRef = useRef(null);
const addItem = () => {
const newItem = { text: `Option ${items.length + 1}` };
setItems([...items, newItem]);
};
const removeItem = () => {
if (items.length > 1) {
setItems(items.slice(0, -1));
}
};
return (
<div>
<SplitButtonComponent
ref={splitBtnRef}
items={items}
cssClass="e-primary"
>
Action
</SplitButtonComponent>
<div style={{ marginTop: '20px' }}>
<button onClick={addItem}>Add Item</button>
<button onClick={removeItem} style={{ marginLeft: '10px' }}>
Remove Item
</button>
</div>
</div>
);
}
export default DynamicItemsExample;#### SplitButton with Custom Template
import { SplitButtonComponent } from '@syncfusion/ej2-react-splitbuttons';
function CustomTemplateExample() {
const items = [
{ text: 'Bold', icon: 'B' },
{ text: 'Italic', icon: 'I' },
{ text: 'Underline', icon: 'U' }
];
const itemTemplate = (props) => {
return (
<div style={{ display: 'flex', alignItems: 'center', padding: '8px' }}>
<span style={{
fontWeight: props.icon === 'B' ? 'bold' : 'normal',
fontStyle: props.icon === 'I' ? 'italic' : 'normal',
textDecoration: props.icon === 'U' ? 'underline' : 'none',
marginRight: '8px'
}}>
{props.icon}
</span>
<span>{props.text}</span>
</div>
);
};
return (
<SplitButtonComponent
items={items}
itemTemplate={itemTemplate}
cssClass="e-primary"
>
Format Text
</SplitButtonComponent>
);
}
export default CustomTemplateExample;#### Save Variant Pattern
const items = [
{ text: 'Save', iconCss: 'e-icons e-save' },
{ separator: true },
{ text: 'Save As', iconCss: 'e-icons e-save-as' },
{ text: 'Save All', iconCss: 'e-icons e-save-all' }
];#### Download Pattern
const items = [
{ text: 'Download PDF' },
{ text: 'Download Excel' },
{ text: 'Download CSV' },
{ separator: true },
{ text: 'Download All' }
];#### Share Pattern
const items = [
{ text: 'Share Link', iconCss: 'e-icons e-link' },
{ text: 'Email', iconCss: 'e-icons e-mail' },
{ text: 'Print', iconCss: 'e-icons e-print' },
{ text: 'Export', iconCss: 'e-icons e-export' }
];#### State Management Pattern
const [isLoading, setIsLoading] = useState(false);
const handleAction = async (args) => {
setIsLoading(true);
try {
// Perform action
await performAction(args.item.text);
} finally {
setIsLoading(false);
}
};| Property | Type | Default | Purpose |
|---|---|---|---|
items | ItemModel[] | [] | Dropdown menu items |
cssClass | string | '' | CSS classes for styling |
iconCss | string | '' | Icon CSS for primary button |
iconPosition | string | 'Left' | Icon position (Left, Right, Top, Bottom) |
disabled | boolean | false | Disable the button |
enableRtl | boolean | false | Enable RTL mode |
created | function | - | Event on component creation |
click | function | - | Primary button click handler |
select | function | - | Menu item selection handler |
beforeOpen | function | - | Before dropdown opens |
beforeClose | function | - | Before dropdown closes |
open | function | - | After dropdown opens |
close | function | - | After dropdown closes |
A skill for implementing the Syncfusion React RadioButtonComponent — a graphical UI element that lets users select exactly one option from a group. Supports checked/unchecked states, label positioning, small size, form integration, RTL, disabled state, and full CSS customization.
#### Getting Started 📄 Read: references/getting-started.md
RadioButtonComponent renderingname prop#### Label and Size 📄 Read: references/label-and-size.md
label propertylabelPositioncssClass="e-small"#### Features and State 📄 Read: references/features-and-state.md
checkeddisabledname and valueenableRtlchange eventcreated#### Style and Appearance 📄 Read: references/style-and-appearance.md
cssClass for custom styles#### Accessibility 📄 Read: references/accessibility.md
role, aria-checked, aria-disabled)#### API Reference 📄 Read: references/api.md
checked, disabled, label, labelPosition, name, value, cssClass, enableRtl, enablePersistence, enableHtmlSanitizer, htmlAttributes, localeclick(), destroy(), focusIn(), getSelectedValue()change (ChangeArgs), createdimport { enableRipple } from '@syncfusion/ej2-base';
import { RadioButtonComponent } from '@syncfusion/ej2-react-buttons';
import '@syncfusion/ej2-base/styles/tailwind3.css';
import '@syncfusion/ej2-buttons/styles/tailwind3.css';
enableRipple(true);
function App() {
return (
<ul>
<li><RadioButtonComponent label="Option 1" name="group1" checked={true} /></li>
<li><RadioButtonComponent label="Option 2" name="group1" /></li>
<li><RadioButtonComponent label="Option 3" name="group1" /></li>
</ul>
);
}
export default App;#### Controlled state with change handler
import { RadioButtonComponent, ChangeArgs } from '@syncfusion/ej2-react-buttons';
import { useState } from 'react';
function App() {
const [selected, setSelected] = useState('monthly');
const handleChange = (args: ChangeArgs) => {
setSelected(args.value);
};
return (
<ul>
<li>
<RadioButtonComponent
label="Monthly"
name="plan"
value="monthly"
checked={selected === 'monthly'}
change={handleChange}
/>
</li>
<li>
<RadioButtonComponent
label="Yearly"
name="plan"
value="yearly"
checked={selected === 'yearly'}
change={handleChange}
/>
</li>
</ul>
);
}#### Form submission with name/value
<form>
<RadioButtonComponent name="payment" value="card" label="Credit Card" checked={true} />
<RadioButtonComponent name="payment" value="bank" label="Net Banking" />
<RadioButtonComponent name="payment" value="cod" label="Cash on Delivery" />
<button type="submit">Submit</button>
</form>#### Disabled option in a group
<RadioButtonComponent label="Available" name="seat" />
<RadioButtonComponent label="Unavailable" name="seat" disabled={true} />#### Small compact size
<RadioButtonComponent label="Compact" name="size" cssClass="e-small" />#### RTL support
<RadioButtonComponent label="خيار 1" name="rtl" enableRtl={true} />| Prop | Type | Default | Purpose | |
|---|---|---|---|---|
label | string | '' | Caption displayed next to the button | |
name | string | '' | Groups buttons as mutually exclusive | |
value | string | '' | Form value submitted when checked | |
checked | boolean | false | Sets checked state | |
disabled | boolean | false | Prevents user interaction | |
labelPosition | 'Before' \ | 'After' | 'After' | Label placement |
cssClass | string | '' | Custom CSS class(es) | |
enableRtl | boolean | false | Right-to-left layout | |
enablePersistence | boolean | false | Persists state across page reloads |
name to group + value for each optionchecked={true} on the desired optionchange event (args.value) or call getSelectedValue()disabled={true}cssClass="e-small"enableRtl={true}cssClass with custom CSS rules (see style-and-appearance.md)The Syncfusion React Chips (ChipListComponent) component renders compact, interactive elements representing inputs, attributes, or actions. It supports single/multiple selection, deletion, drag-and-drop, avatars, icons, templates, and rich styling.
#### Getting Started 📄 Read: references/getting-started.md
@syncfusion/ej2-react-buttons)ChipsDirective / ChipDirective#### Types and Selection 📄 Read: references/types-and-selection.md
selection="Single") — choice chipsselection="Multiple") — filter chipsenableDelete)selectedChipsonClick) for action chips#### Customization 📄 Read: references/customization.md
e-primary, e-success, e-info, e-warning, e-dangerleadingIconCss, leadingIconUrl)avatarIconCss) and avatar text (avatarText)trailingIconCss, trailingIconUrl)cssClass="e-outline")template prop)htmlAttributes for custom HTML attributes#### Drag and Drop 📄 Read: references/drag-and-drop.md
allowDragAndDrop)dragArea)dragStart, dragging, dragStop#### Style Customization 📄 Read: references/style.md
#### Accessibility 📄 Read: references/accessibility.md
role, aria-selected, aria-disabled, etc.)#### API Reference 📄 Read: references/api.md
text, chips, selection, enableDelete, cssClass, selectedChips, enabled, enableRtl, enablePersistence, allowDragAndDrop, dragArea, htmlAttributes, leadingIconCss, leadingIconUrl, avatarIconCss, avatarText, trailingIconCss, trailingIconUrladd(), remove(), find(), getSelectedChips(), select(), destroy()click, beforeClick, created, delete, deleted, dragStart, dragging, dragStopimport { ChipListComponent, ChipsDirective, ChipDirective } from '@syncfusion/ej2-react-buttons';
import { enableRipple } from '@syncfusion/ej2-base';
import * as React from 'react';
import './App.css';
enableRipple(true);
function App() {
return (
<ChipListComponent id="chip-list">
<ChipsDirective>
<ChipDirective text="Angular" />
<ChipDirective text="React" />
<ChipDirective text="Vue" />
</ChipsDirective>
</ChipListComponent>
);
}
export default App;CSS (App.css):
@import '../node_modules/@syncfusion/ej2-base/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-react-buttons/styles/tailwind3.css';#### Filter chips (multi-select)
<ChipListComponent selection="Multiple">
<ChipsDirective>
<ChipDirective text="React" />
<ChipDirective text="Angular" />
<ChipDirective text="Vue" />
</ChipsDirective>
</ChipListComponent>#### Deletable chips with event
<ChipListComponent enableDelete={true} delete={(e) => console.log('Deleting:', e.text)}>
<ChipsDirective>
<ChipDirective text="Tag One" />
<ChipDirective text="Tag Two" />
</ChipsDirective>
</ChipListComponent>#### Chips with avatar initials
<ChipListComponent>
<ChipsDirective>
<ChipDirective text="Andrew" avatarText="A" />
<ChipDirective text="Laura" avatarText="L" />
</ChipsDirective>
</ChipListComponent>#### Programmatic control (add/remove chips via ref)
const chipRef = React.useRef<ChipListComponent>(null);
// Add a chip
chipRef.current?.add('New Tag');
// Remove chip at index 0
chipRef.current?.remove([0]);
// Get selected
const selected = chipRef.current?.getSelectedChips();~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.