syncfusion-javascript-inputs
Syncfusion javascript inputs
ColorPicker
The ColorPicker component is a user interface for selecting and adjusting color values. It supports HEX, RGB, and HSV color models, palette and picker modes, opacity control, inline rendering, custom preset palettes, and dual-mode switching.
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package setup (
@syncfusion/ej2-inputs) - Required CSS imports and theme configuration
- Basic initialization with
<input type="color"> - Picker mode vs. palette mode
- Inline rendering with
inline: true - Pre-setting a color value
- Lifecycle events:
created
Modes and Display
📄 Read: references/modes-display.md
mode: 'Picker'— HSV gradient area, hue slider, opacity slidermode: 'Palette'— color grid tilesmodeSwitcher— show/hide mode-toggle buttoninline: true— render embedded without popupcreatePopupOnClick— lazy popup creationshowButtons— show/hide Apply/CancelshowRecentColors— recent color strip (palette mode only)
Palette Customization
📄 Read: references/palette-customization.md
- Default palette colors (100-color grid)
presetColors— custom color groups with named sectionscolumns— number of tiles per rownoColor— no-color transparent tilebeforeTileRenderevent — customize tile elements- Custom palette groups (multiple named sections)
Color Value and Conversion
📄 Read: references/color-value-conversion.md
valueproperty — HEX8 format (#rrggbbaa)getValue(value?, type?)— convert between HEX, HEXA, RGB, RGBA, HSV, HSVA- Reading color from
changeandselectevents (currentValue.hex,currentValue.rgba) - Opacity handling with
enableOpacity - Setting programmatic color changes with
value+dataBind()
Opacity and Accessibility
📄 Read: references/opacity-accessibility.md
enableOpacity— show/hide opacity slider and alpha channelenableRtl— right-to-left layoutdisabled— disable the componentenablePersistence— persist selected value across reloadscssClass— custom CSS classes for styling- Keyboard navigation in picker and palette modes
focusIn()— programmatic focus
Events
📄 Read: references/events.md
change— fires when color is applied (Apply button or immediate ifshowButtons: false)select— fires on color selection whenshowButtons: truebeforeOpen/open— popup open lifecycle (cancel support)beforeClose— popup close lifecycle (cancel support)beforeModeSwitch/onModeSwitch— mode switch lifecyclebeforeTileRender— palette tile customizationcreated— component ready
API Reference
📄 Read: references/api.md
- All 14 properties with types and defaults
- All 11 methods with parameter tables
- All 9 events with argument interfaces
- Event argument interfaces:
ColorPickerEventArgs,PaletteTileEventArgs,BeforeOpenCloseEventArgs,OpenEventArgs,ModeSwitchEventArgs
Quick Start
Minimal Picker (Popup Mode)
import { ColorPicker } from '@syncfusion/ej2-inputs';
const colorPicker: ColorPicker = new ColorPicker({
value: '#008000ff',
change: (args) => {
console.log('Selected hex:', args.currentValue.hex);
console.log('Selected rgba:', args.currentValue.rgba);
}
});
colorPicker.appendTo('#color-picker');
<input type="color" id="color-picker" />
Palette Mode (Inline)
import { ColorPicker } from '@syncfusion/ej2-inputs';
const colorPicker: ColorPicker = new ColorPicker({
mode: 'Palette',
inline: true,
showButtons: false,
change: (args) => {
document.getElementById('preview').style.backgroundColor = args.currentValue.rgba;
}
});
colorPicker.appendTo('#color-picker');
Common Patterns
| Goal | Property / Method |
|---|---|
| Set initial color | value: '#ff5733ff' |
| Palette grid layout | mode: 'Palette' |
| Embed in page | inline: true |
| Hide Apply/Cancel | showButtons: false |
| Custom color groups | presetColors: { primary: [...], accent: [...] } |
| Disable opacity | enableOpacity: false |
| Transparent option | noColor: true (palette mode only) |
| Show recent colors | showRecentColors: true (palette mode only) |
| Convert color format | colorPicker.getValue(hex, 'rgba') |
| Toggle popup | colorPicker.toggle() |
| Focus component | colorPicker.focusIn() |
| Apply changes | colorPicker.value = '#ff0000'; colorPicker.dataBind() |
MaskedTextBox
The MaskedTextBox (@syncfusion/ej2-inputs) enforces structured input by applying a mask pattern that guides and validates user input character by character. Use it whenever you need to ensure input follows a specific format — phone numbers, dates, IP addresses, SSNs, zip codes, and more.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and CSS imports
- Basic MaskedTextBox setup
- Setting the
maskproperty - Placeholder and float label
- Minimal working example
Mask Configuration
📄 Read: references/mask-configuration.md
- Standard mask elements table (0, 9, #, L, ?, &, C, A, a, <, >, |, \)
- Custom characters via
customCharacters - Regular expression masks
- Prompt character customization (
promptChar)
Value Access and Programmatic Control
📄 Read: references/value-access.md
valueproperty (raw, unmasked)getMaskedValue()method (with mask format)- Setting value programmatically
- Reading input in
changeevent focusIn()/focusOut()methods
Customization and Appearance
📄 Read: references/customization.md
cssClassfor custom stylingfloatLabelType(Never / Always / Auto)enableRtl,enabled,readonlyshowClearButtonhtmlAttributesfor extra HTML attributeswidth,placeholder- CSS overrides for wrapper and hover states
Adornments
📄 Read: references/adornments.md
prependTemplate— inject HTML before the input (icons, labels, country codes)appendTemplate— inject HTML after the input (buttons, icons, unit suffixes)e-input-separatorclass for visual dividers- Common adornment patterns table
Events and Interaction
📄 Read: references/events.md
changeevent withMaskChangeEventArgsfocusevent withMaskFocusEventArgs(cursor positioning)blurevent withMaskBlurEventArgscreatedanddestroyedevents- Setting cursor position at start/end/custom position
Validation and How-To
📄 Read: references/validation-how-to.md
- FormValidator integration with custom rules
- Numeric keypad on mobile (
htmlAttributes: { type: 'tel' }) - Checking for complete vs. partial input
- Accessibility (ARIA attributes, WCAG compliance)
API Reference
📄 Read: references/api.md
- All properties, methods, events, and interfaces
- Complete MaskedTextBox API surface
Quick Start
import { MaskedTextBox } from '@syncfusion/ej2-inputs';
// CSS in styles.css:
// @import '../node_modules/@syncfusion/ej2-base/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
// HTML: <input id="mask" type="text" />
let mask: MaskedTextBox = new MaskedTextBox({
mask: '000-000-0000',
placeholder: 'Phone Number',
floatLabelType: 'Always'
});
mask.appendTo('#mask');
Common Patterns
| Scenario | Pattern |
|---|---|
| Phone number | mask: '(999) 999-9999' |
| US zip code | mask: '00000' or mask: '00000-9999' |
| Date | mask: '00/00/0000' |
| IP address | mask: '[0-2][0-9][0-9].[0-2][0-9][0-9].[0-2][0-9][0-9].[0-2][0-9][0-9]' |
| Credit card | mask: '0000 0000 0000 0000' |
| Time (AM/PM) | mask: '00:00 >PM' with customCharacters: { P: 'P,A,p,a', M: 'M,m' } |
| Letters only | mask: 'LLLLLL' |
| Alphanumeric | mask: 'AAAAAA' |
| Mixed case control | mask: '>LLL<LLL' (first 3 upper, next 3 lower) |
Read the raw value
let mask: MaskedTextBox = new MaskedTextBox({
mask: '(999) 999-9999',
change: (args) => {
console.log('Raw value:', args.value); // digits only
console.log('Masked value:', args.maskedValue); // with mask chars
}
});
mask.appendTo('#mask');
// Or programmatically:
const raw = mask.value;
const formatted = mask.getMaskedValue();
Floating label with pre-filled value
let mask: MaskedTextBox = new MaskedTextBox({
mask: '(999) 9999-999',
value: '8674321756',
placeholder: 'Mobile Number',
floatLabelType: 'Auto'
});
mask.appendTo('#mask');
OTP Input
The OTP Input (@syncfusion/ej2-inputs) renders a set of individual input fields for one-time password entry. It supports configurable length, input types (number/text/password), styling modes, separators, placeholders, accessibility attributes, and full event handling. Use it for 2FA screens, OTP verification forms, and PIN entry flows.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and CSS imports
- Basic OTP Input initialization
- Setting and reading the
valueproperty autoFocusfor auto-focusing on render- Minimal working example
Input Types and Value
📄 Read: references/input-types.md
type—number(default),text,passwordvalue— pre-setting or reading the OTP value- Choosing the right type for numeric vs alphanumeric OTPs
Appearance and Configuration
📄 Read: references/appearance.md
length— number of OTP input fields (default 4)disabled— disabling the entire controlcssClass— custom and predefined classes (e-success,e-warning,e-error)enableRtl— right-to-left rendering
Styling Modes
📄 Read: references/styling-modes.md
stylingMode—outlined(default),filled,underlined- When to use each mode
Placeholder
📄 Read: references/placeholder.md
- Single character placeholder (same for all fields)
- Multi-character placeholder (one character per field)
Separator
📄 Read: references/separator.md
separator— character displayed between each input field- Common separator patterns (
/,-,·)
Events
📄 Read: references/events.md
created— fires after component is renderedfocus/blur— focus in/out events (OtpFocusEventArgs)input— fires on each individual field change (OtpInputEventArgs)valueChanged— fires when all fields are filled and focus-out (OtpChangedEventArgs)
Accessibility
📄 Read: references/accessibility.md
- WCAG 2.2, Section 508, ARIA compliance
ariaLabels— per-field ARIA label arrayhtmlAttributes— custom HTML attributes- Keyboard navigation (Arrow keys, Tab, Shift+Tab)
API Reference
📄 Read: references/api.md
- All properties, methods, events, and interfaces
- Complete OTP Input API surface
Quick Start
import { OtpInput } from '@syncfusion/ej2-inputs';
// CSS in styles.css:
// @import '../node_modules/@syncfusion/ej2-base/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
// HTML: <div id="otp_input"></div>
let otpInput: OtpInput = new OtpInput({
length: 6,
placeholder: 'x',
stylingMode: 'outlined'
});
otpInput.appendTo('#otp_input');
Common Patterns
| Scenario | Key Properties |
|---|---|
| 4-digit numeric OTP | type: 'number' (default) |
| 6-digit numeric OTP | length: 6 |
| Alphanumeric code | type: 'text' |
| Hidden/password entry | type: 'password' |
| Dash separator | separator: '-' |
| Auto focus on load | autoFocus: true |
| Outlined style (default) | stylingMode: 'outlined' |
| Filled style | stylingMode: 'filled' |
| Underlined style | stylingMode: 'underlined' |
| Pre-filled value | value: '1234' |
| Disabled state | disabled: true |
| Success state styling | cssClass: 'e-success' |
| Error state styling | cssClass: 'e-error' |
Capture completed OTP value
import { OtpInput, OtpChangedEventArgs } from '@syncfusion/ej2-inputs';
let otpInput: OtpInput = new OtpInput({
length: 6,
valueChanged: (args: OtpChangedEventArgs) => {
console.log('Entered OTP:', args.value);
// Trigger verification here
}
});
otpInput.appendTo('#otp_input');
Password-masked OTP with separator
import { OtpInput } from '@syncfusion/ej2-inputs';
let otpInput: OtpInput = new OtpInput({
length: 6,
type: 'password',
separator: '-',
stylingMode: 'outlined',
autoFocus: true
});
otpInput.appendTo('#otp_input');
Range Slider
The Range Slider (@syncfusion/ej2-inputs) allows users to select a single value or a range of values by dragging handles over a track. It supports three types (Default, MinRange, Range), ticks, tooltips, limits, orientation, formatting, accessibility, and form validation.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and dependencies (
@syncfusion/ej2-inputs,@syncfusion/ej2-base,@syncfusion/ej2-popups,@syncfusion/ej2-buttons) - CSS theme imports
- Basic Slider initialization and
appendTo - Setting
value,min,max,step - Orientation (horizontal/vertical)
- Show/hide buttons (
showButtons)
Slider Types and Core Configuration
📄 Read: references/types-and-configuration.md
type—Default,MinRange,Range- Single value vs range value (
value: 30vsvalue: [30, 70]) min,max,stepconfigurationenabled,readonly,enableRtlenableAnimation,cssClass,width- Reversible slider (swap min/max values)
Ticks and Formatting
📄 Read: references/ticks-and-format.md
ticksobject:placement,largeStep,smallStep,showSmallTicks,format- Tick placement options:
Before,After,Both,None - Format API (Numeric N, Percentage P, Currency C,
#specifiers) - Custom formatting via
renderingTicksandtooltipChangeevents - Date/time formatting patterns
- Custom numeric value formatting
Tooltip
📄 Read: references/tooltip-and-buttons.md
tooltipobject:isVisible,placement,showOn,format,cssClass- Tooltip placement:
Before,After showOnvalues:Auto,Always,Hover,Focus,ClickshowButtons— increment/decrement buttons- Localization with
L10nfor button labels
Limits
📄 Read: references/limits.md
limitsobject:enabled,minStart,minEnd,maxStart,maxEnd,startHandleFixed,endHandleFixed- Restricting handle movement range
- Locking handles in place
- Default/MinRange limits vs Range limits
Customization and Styling
📄 Read: references/customization.md
- CSS class overrides for track, handle, limits, ticks, buttons
- Dynamic color changes via
changeevent - Gradient/color-band styling
- Thumb shape customization (square, circle, oval, image)
- Custom tick labels via
renderedTicksevent
Advanced How-To
📄 Read: references/advanced-how-to.md
- Date format slider (milliseconds-based)
- Time format slider
- Custom numeric formatting (Km, decimal, leading zeros)
- Reversible slider pattern
- Show slider from hidden state using
refresh() - Form validation with
FormValidatorandchangedevent
Accessibility
📄 Read: references/accessibility.md
- WCAG 2.2, Section 508 compliance
- WAI-ARIA attributes (
role=slider,aria-valuemin/max/now/text,aria-orientation,aria-label) - Keyboard navigation (Arrow keys, Home, End, Page Up/Down)
API Reference
📄 Read: references/api.md
- All properties, methods, events, and sub-model interfaces
TicksDataModel,TooltipDataModel,LimitDataModel- Event argument types
Quick Start
import { Slider } from '@syncfusion/ej2-inputs';
// CSS in styles.css:
// @import '../node_modules/@syncfusion/ej2-base/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
// HTML: <div id="slider"></div>
let slider: Slider = new Slider({
value: 30,
min: 0,
max: 100,
step: 1
});
slider.appendTo('#slider');
Common Patterns
| Scenario | Key Configuration |
|---|---|
| Single value slider | type: 'Default' (default), value: 30 |
| Min-range shadow | type: 'MinRange', value: 30 |
| Range with two handles | type: 'Range', value: [30, 70] |
| Vertical orientation | orientation: 'Vertical' |
| Show ticks | ticks: { placement: 'After', largeStep: 20 } |
| Show tooltip always | tooltip: { isVisible: true, showOn: 'Always' } |
| Increment/decrement buttons | showButtons: true |
| Restrict handle movement | limits: { enabled: true, minStart: 10, minEnd: 40 } |
| Currency format tooltip | tooltip: { isVisible: true, format: 'C2' } |
| Percentage format | ticks: { format: 'P0' } |
| Reversible (descending) | min: 100, max: 0 |
| RTL layout | enableRtl: true |
| Disabled slider | enabled: false |
| Read-only slider | readonly: true |
Range Slider with Ticks and Tooltip
import { Slider } from '@syncfusion/ej2-inputs';
let rangeSlider: Slider = new Slider({
type: 'Range',
value: [20, 80],
min: 0,
max: 100,
step: 5,
ticks: { placement: 'After', largeStep: 20, smallStep: 5, showSmallTicks: true },
tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' }
});
rangeSlider.appendTo('#range-slider');
Listen to value changes
import { Slider, SliderChangeEventArgs } from '@syncfusion/ej2-inputs';
let slider: Slider = new Slider({
value: 30,
changed: (args: SliderChangeEventArgs) => {
console.log('Final value:', args.value);
},
change: (args: SliderChangeEventArgs) => {
console.log('While dragging:', args.value);
}
});
slider.appendTo('#slider');
TextArea
The TextArea (@syncfusion/ej2-inputs) provides a rich multiline text input with built-in support for floating labels, resize modes, adornments, max length enforcement, form integration, and full event handling. Use it whenever you need multiline user input — comment boxes, feedback forms, description fields, and more.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package dependencies
- CSS imports and theme setup
- Basic TextArea initialization
- Setting and getting values (
valueproperty) - Reading value from
changeevent - Minimal working example
Floating Label and Localization
📄 Read: references/floating-label.md
floatLabelType—Never,Always,Autobehaviorplaceholderproperty usage- Localization with
localeproperty - Loading translations with
L10n
Resize and Dimensions
📄 Read: references/resize.md
resizeMode—Vertical,Horizontal,Both,Nonewidthproperty for explicit width controlrowsandcolsproperties for visible dimensions
Styles and Appearance
📄 Read: references/styles-appearance.md
- Sizing classes:
e-small,e-bigger - Filled (
e-filled) and Outline (e-outline) modes cssClassfor custom stylingenabled(disabled state) andreadonlypropertiesshowClearButtonande-static-clearclass- Rounded corners, background/text color customization
- Floating label color (success/warning states)
- Mandatory asterisk on placeholder
Adornments
📄 Read: references/adornments.md
prependTemplate— HTML before the textarea (icons, buttons)appendTemplate— HTML after the textarea (action buttons)adornmentFlow—HorizontalorVerticallayoutadornmentOrientation— how items inside adornments are arrangedAdornmentsDirectiontype usage
Max Length
📄 Read: references/max-length.md
maxLengthproperty for character limit enforcement- User feedback on limit reached
Events
📄 Read: references/events.md
created,destroyedeventsinputevent — fires on every keystroke (InputEventArgs)changeevent — fires on focus-out with changed value (ChangedEventArgs)focusevent — fires on focus-in (FocusInEventArgs)blurevent — fires on focus-out (FocusOutEventArgs)
Methods
📄 Read: references/methods.md
focusIn()— programmatically set focusfocusOut()— programmatically remove focusgetPersistData()— retrieve persisted state propertiesaddAttributes()/removeAttributes()— dynamic HTML attributesdataBind()— apply pending property changes immediatelyrefresh()— re-render the componentdestroy()— remove component from DOM
Form Support
📄 Read: references/form-support.md
- HTML form integration
FormValidatorintegration with validation rules- Required, minLength, maxLength rules
- Custom placement of error messages
API Reference
📄 Read: references/api.md
- All properties, methods, events, and interfaces
- Complete TextArea API surface
Quick Start
import { TextArea } from '@syncfusion/ej2-inputs';
// CSS in styles.css:
// @import '../node_modules/@syncfusion/ej2-base/styles/material.css';
// @import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
// HTML: <textarea id="default"></textarea>
let textareaObj: TextArea = new TextArea({
placeholder: 'Enter your comments',
floatLabelType: 'Auto',
resizeMode: 'Vertical'
});
textareaObj.appendTo('#default');
Common Patterns
| Scenario | Key Properties |
|---|---|
| Auto-floating label | floatLabelType: 'Auto' |
| Max 200 chars | maxLength: 200 |
| Vertical resize only | resizeMode: 'Vertical' |
| Outline style (Material) | cssClass: 'e-outline' |
| Filled style (Material) | cssClass: 'e-filled' |
| Read-only content | readonly: true |
| Disabled state | enabled: false |
| Always show clear button | showClearButton: true, cssClass: 'e-static-clear' |
| Pre-set value | value: 'Initial text' |
| Custom dimensions | rows: 5, cols: 40 |
| RTL layout | enableRtl: true |
Read value on change
import { TextArea, ChangedEventArgs } from '@syncfusion/ej2-inputs';
let textareaObj: TextArea = new TextArea({
placeholder: 'Enter your comments',
floatLabelType: 'Auto',
change: (args: ChangedEventArgs) => {
console.log('Value:', args.value);
}
});
textareaObj.appendTo('#default');
Outline TextArea with floating label and max length
import { TextArea } from '@syncfusion/ej2-inputs';
let textareaObj: TextArea = new TextArea({
placeholder: 'Feedback',
floatLabelType: 'Auto',
cssClass: 'e-outline',
maxLength: 500,
resizeMode: 'Vertical',
rows: 4
});
textareaObj.appendTo('#default');
NumericTextBox
The Syncfusion EJ2 TypeScript NumericTextBox (@syncfusion/ej2-inputs) is a feature-rich numeric input control that supports range validation, number formatting (standard and custom), decimal precision, spin buttons, adornments, localization, RTL, and full WCAG 2.2 accessibility.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package dependencies
- Project setup (webpack quickstart)
- CSS theme imports
- Basic NumericTextBox initialization
- Range validation with
min,max,step - Formatting with
format - Decimal precision with
decimalsandvalidateDecimalOnType
Formats
📄 Read: references/formats.md
- Standard formats:
n,p(percentage),c(currency) - Custom format strings using
#and0specifiers - Combining format with
min,maxfor percentage inputs - Currency format with
currencyproperty
Adornments (Prefix/Suffix Templates)
📄 Read: references/adornments.md
prependTemplate– add elements before the input (currency symbols, icons)appendTemplate– add elements after the input (units, action buttons)- Linking two NumericTextBox instances via
changeevent - Custom action icons with click event handlers
Globalization & Localization
📄 Read: references/globalization.md
localeproperty for culture-specific formattingL10n.load()to override spin button tooltip text- CLDR data setup for non-English cultures
- RTL support with
enableRtl - Currency formatting with
currencyandformat: 'c2'
Style & Appearance
📄 Read: references/style-appearance.md
- Customizing wrapper element height and font size
- Customizing spin button icons CSS
- Applying custom
cssClassfor UI appearance changes - Overriding
e-spin-upande-spin-downicon glyphs
How-To Recipes
📄 Read: references/how-to.md
- Customize spin button up/down arrow icons
- Customize step value and hide spin buttons
- Customize UI appearance with
cssClass - Maintain trailing zeros while focused
- Perform custom validation using FormValidator
- Prevent nullable input (default to 0 instead of null)
Accessibility
📄 Read: references/accessibility.md
- WAI-ARIA roles and attributes (
spinbuttonrole) - Keyboard interaction (Arrow Up/Down)
- WCAG 2.2, Section 508 compliance
- Screen reader support details
API Reference
📄 Read: references/api.md
- All properties with types and defaults
- All methods (
increment,decrement,getText,focusIn,focusOut,dataBind, etc.) - All events (
change,blur,focus,created,destroyed) - Event argument types (
ChangeEventArgs,NumericBlurEventArgs,NumericFocusEventArgs)
Quick Start
npm install @syncfusion/ej2-inputs
<!-- index.html -->
<input id="numeric" type="text" />
import { NumericTextBox } from '@syncfusion/ej2-inputs';
let numeric: NumericTextBox = new NumericTextBox({
value: 10,
min: 0,
max: 100,
step: 1,
format: 'n2',
placeholder: 'Enter a number',
floatLabelType: 'Auto'
});
numeric.appendTo('#numeric');
/* styles.css – import one theme */
@import '../../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../../node_modules/@syncfusion/ej2-inputs/styles/material.css';
Common Patterns
Currency Input
let currency: NumericTextBox = new NumericTextBox({
format: 'c2',
value: 100,
placeholder: 'Price',
floatLabelType: 'Auto'
});
currency.appendTo('#currency');
Percentage Input
let percent: NumericTextBox = new NumericTextBox({
format: 'p2',
value: 0.5,
min: 0,
max: 1,
step: 0.01,
placeholder: 'Percentage',
floatLabelType: 'Auto'
});
percent.appendTo('#percent');
Hidden Spin Buttons with Custom Step
let numeric: NumericTextBox = new NumericTextBox({
step: 5,
showSpinButton: false,
min: 0,
max: 100,
value: 20
});
numeric.appendTo('#numeric');
Read-Only NumericTextBox
let numeric: NumericTextBox = new NumericTextBox({
value: 42,
readonly: true
});
numeric.appendTo('#numeric');
Programmatic Increment / Decrement
numeric.increment(5); // increase value by 5
numeric.decrement(2); // decrease value by 2
Disable the Component
let numeric: NumericTextBox = new NumericTextBox({
value: 10,
enabled: false
});
numeric.appendTo('#numeric');
Clear Button
let numeric: NumericTextBox = new NumericTextBox({
value: 10,
showClearButton: true
});
numeric.appendTo('#numeric');
Mouse Wheel Disabled
let numeric: NumericTextBox = new NumericTextBox({
value: 10,
allowMouseWheel: false
});
numeric.appendTo('#numeric');
Key Props at a Glance
| Property | Type | Default | Purpose |
|---|---|---|---|
value |
number | null | Current numeric value |
min |
number | null | Minimum allowed value |
max |
number | null | Maximum allowed value |
step |
number | 1 | Increment/decrement step |
format |
string | 'n2' | Display format when unfocused |
decimals |
number | null | Decimal precision when focused |
validateDecimalOnType |
boolean | false | Restrict decimals while typing |
strictMode |
boolean | true | Clamp value to min/max on blur |
floatLabelType |
FloatLabelType | 'Never' | Label float behavior |
placeholder |
string | null | Hint text / float label |
showSpinButton |
boolean | true | Show/hide spin buttons |
showClearButton |
boolean | false | Show clear (×) icon |
readonly |
boolean | false | Read-only mode |
enabled |
boolean | true | Enable/disable control |
enableRtl |
boolean | false | Right-to-left layout |
locale |
string | '' | Culture code |
currency |
string | null | ISO 4217 currency code |
cssClass |
string | null | Custom CSS class |
width |
number|string | null | Component width |
allowMouseWheel |
boolean | true | Enable mouse wheel change |
enablePersistence |
boolean | false | Persist value across reloads |
prependTemplate |
string|Function | null | HTML before input |
appendTemplate |
string|Function | null | HTML after input |
htmlAttributes |
object | {} | Extra HTML attributes |
Rating
The Rating component (@syncfusion/ej2-inputs) lets users select a value on a numeric scale by clicking or tapping symbols (stars by default). It supports precision ratings, custom templates, labels, tooltips, and full accessibility compliance.
Dependencies
@syncfusion/ej2-inputs
└── @syncfusion/ej2-base
└── @syncfusion/ej2-popups
Quick Start
import { Rating } from '@syncfusion/ej2-inputs';
let rating: Rating = new Rating({ value: 3.0 });
rating.appendTo('#rating');
@import "../../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../../node_modules/@syncfusion/ej2-popups/styles/material.css";
<input id="rating" />
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package setup
- CSS imports and theme configuration
- Basic Rating initialization
- Setting the
valueproperty - Running the application
Selection and Value Control
📄 Read: references/selection.md
- Setting and reading the rating value
- Minimum value with
minproperty - Single-selection mode (
enableSingleSelection) - Show/hide reset button (
allowReset) - Programmatic reset via
reset()method
Precision Modes
📄 Read: references/precision-modes.md
- Full precision (whole numbers)
- Half precision (0.5 increments)
- Quarter precision (0.25 increments)
- Exact precision (0.1 increments)
PrecisionTypeenum usage
Labels
📄 Read: references/labels.md
- Showing the current value as a label (
showLabel) - Label positions: Top, Bottom, Left, Right (
labelPosition) - Custom label template (
labelTemplate) LabelPositionenum values
Tooltip
📄 Read: references/tooltip.md
- Enabling/disabling tooltip on hover (
showTooltip) - Custom tooltip template (
tooltipTemplate) - Tooltip appearance customization via
cssClass
Templates (Custom Symbols)
📄 Read: references/templates.md
emptyTemplatefor unrated itemsfullTemplatefor rated items- Emoji icons as rating symbols
- SVG icons as rating symbols
- PNG images as rating symbols
- Template context:
valueandindex
Appearance and Styling
📄 Read: references/appearance.md
- Changing item count (
itemsCount) - Disabled state (
disabled) - Visibility control (
visible) - Read-only mode (
readOnly) - Custom CSS with
cssClass - Changing icon border color, fill color, item spacing
- Swapping the default icon using CSS
Events
📄 Read: references/events.md
valueChanged– fires when rating changesbeforeItemRender– fires before each item rendersonItemHover– fires on item hovercreated– fires after render completes- Event argument types:
RatingChangedEventArgs,RatingItemEventArgs,RatingHoverEventArgs
Accessibility
📄 Read: references/accessibility.md
- WAI-ARIA attributes (
role=slider,aria-valuenow, etc.) - Keyboard navigation shortcuts
- WCAG 2.2 / Section 508 compliance
- RTL support
API Reference
📄 Read: references/api.md
- All 16 properties with types and defaults
- All 7 methods
- All 4 events and their argument types
Common Patterns
Rating with reset button and label
import { Rating } from '@syncfusion/ej2-inputs';
let rating: Rating = new Rating({
value: 3.0,
allowReset: true,
showLabel: true
});
rating.appendTo('#rating');
Half-precision rating with change handler
import { Rating, PrecisionType, RatingChangedEventArgs } from '@syncfusion/ej2-inputs';
let rating: Rating = new Rating({
value: 2.5,
precision: PrecisionType.Half,
valueChanged: (args: RatingChangedEventArgs) => {
console.log('New rating:', args.value);
}
});
rating.appendTo('#rating');
Read-only display rating
import { Rating } from '@syncfusion/ej2-inputs';
let rating: Rating = new Rating({
value: 4.0,
readOnly: true,
showLabel: true
});
rating.appendTo('#rating');
Custom item count with min value
import { Rating } from '@syncfusion/ej2-inputs';
let rating: Rating = new Rating({
value: 3,
itemsCount: 10,
min: 1
});
rating.appendTo('#rating');
Signature
The Syncfusion EJ2 TypeScript Signature (@syncfusion/ej2-inputs) is a canvas-based control that allows users to draw smooth signatures using variable-width bezier curve interpolation with mouse, touch, or stylus input. It supports text-drawing, stroke/background customization, save/load operations, undo/redo history, and full WCAG 2.2 accessibility.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Package dependencies (
@syncfusion/ej2-inputs,@syncfusion/ej2-base) - Project setup with webpack quickstart
- CSS theme imports
- HTML canvas element setup
- Basic Signature initialization
- Default canvas dimensions (300 × 150)
Customization
📄 Read: references/customization.md
- Stroke width:
maxStrokeWidth,minStrokeWidth,velocity - Stroke color with
strokeColor(hex, RGB, named colors) - Background color with
backgroundColor - Background image with
backgroundImage - Saving with background using
saveWithBackground
Open & Save
📄 Read: references/open-save.md
- Load pre-drawn signatures via
load(url, width?, height?)(Base64 or hosted URL) - Save as image (PNG/JPEG/SVG) via
save(type?, fileName?) - Get Base64 string via
getSignature() - Save as Blob via
saveAsBlob() - Get Blob via
getBlob(url) - Control background inclusion with
saveWithBackground
User Interaction
📄 Read: references/user-interaction.md
- Undo via
undo()and guard withcanUndo() - Redo via
redo()and guard withcanRedo() - Clear canvas via
clear() - Check empty state via
isEmpty() - Disable component with
disabledproperty - Read-only mode with
isReadOnlyproperty changeevent for reacting to strokes, undo, redo, and clearcreatedevent on first renderbeforeSaveevent for keyboard save (Ctrl+S) customization
Toolbar Integration
📄 Read: references/toolbar-integration.md
- Integrating Signature with EJ2 Toolbar component
- Wiring Undo/Redo/Clear/Save toolbar buttons
- Adding ColorPicker for stroke and background color
- Adding DropDownList for stroke width control
- Enabling/disabling toolbar items based on
canUndo,canRedo,isEmpty - Using
changeevent to keep toolbar state in sync
Accessibility
📄 Read: references/accessibility.md
- WCAG 2.2 and Section 508 compliance
- Keyboard shortcuts (Ctrl+Z, Ctrl+Y, Ctrl+S, Delete)
- Screen reader support
- Mobile/touch device support
API Reference
📄 Read: references/api.md
- All properties with types and defaults
- All methods (
draw,load,save,saveAsBlob,getSignature,getBlob,undo,redo,clear,canUndo,canRedo,isEmpty,refresh,destroy) - All events (
change,created,beforeSave) - Supporting types (
SignatureFileType,SignatureChangeEventArgs,SignatureBeforeSaveEventArgs)
Quick Start
npm install @syncfusion/ej2-inputs
<!-- index.html -->
<canvas id="signature"></canvas>
import { Signature } from '@syncfusion/ej2-inputs';
let signature: Signature = new Signature({}, '#signature');
/* styles.css */
@import '../../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../../node_modules/@syncfusion/ej2-inputs/styles/material.css';
The Signature component renders with the default HTML canvas size (300 × 150) when no explicit
widthorheightis set on the canvas element.
Common Patterns
Draw Text as Signature
// Draw "John Doe" in Arial, size 30
signature.draw('John Doe', 'Arial', 30);
Save Signature as PNG
signature.save('Png', 'my-signature');
Get Base64 and Reload
const base64 = signature.getSignature(); // returns base64 PNG string
signature.load(base64); // reload the same signature
Undo / Redo with Guards
if (signature.canUndo()) { signature.undo(); }
if (signature.canRedo()) { signature.redo(); }
Disable and Read-Only
signature.disabled = true; // user cannot draw; opacity shows disabled state
signature.isReadOnly = true; // focusable but drawing is prevented
React to Signature Changes
let signature: Signature = new Signature({
change: (args) => {
console.log('Signature changed; empty?', signature.isEmpty());
}
}, '#signature');
TextBox
The Syncfusion EJ2 TypeScript TextBox (@syncfusion/ej2-inputs) is a feature-rich text input component that supports floating labels, multiline (textarea) mode, icon groups, adornments, validation states, sizing, RTL, autocomplete, and full WCAG 2.2 accessibility.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package dependencies
- Project setup (webpack quickstart)
- CSS theme imports
- Basic TextBox initialization
- Adding icons with
addIcon() - Floating label with
floatLabelType
Multiline (Textarea) Mode
📄 Read: references/multiline.md
- Enable multiline with
multiline: true - Floating label on multiline inputs
- Auto-resize based on content
- Disable resize via CSS
- Limit text length with
addAttributes({ maxlength }) - Character count in
inputevent
Groups, Icons & Clear Button
📄 Read: references/groups.md
- Adding icons with
addIcon('append' | 'prepend', iconClass) - Icon with floating label
showClearButtonto show a clear (×) icon- Floating label without
requiredattribute - Multi-line input with floating label
Adornments (Prefix/Suffix Templates)
📄 Read: references/adornments.md
prependTemplate– add icons or text before inputappendTemplate– add icons or buttons after input- Password visibility toggle pattern
- Delete/clear icon pattern with
dataBind()
Validation States
📄 Read: references/validation.md
- Apply
e-warning,e-error,e-successviacssClass - Change floating label color for validation states (CSS)
- Change TextBox color based on value (keyup + regex)
Sizing
📄 Read: references/sizing.md
- Normal size (default)
- Small size via
cssClass: 'e-small' - Bigger size via
cssClass: 'e-bigger' - Combining sizing with icons and float labels
Style & Appearance
📄 Read: references/style-appearance.md
- Filled mode:
cssClass: 'e-filled' - Outlined mode:
cssClass: 'e-outline' - Customize background color and text color (CSS override)
- Customize floating label color (CSS)
- Rounded corners with
cssClass: 'e-corner' - Scoping styles with
cssClass
How-To Recipes
📄 Read: references/how-to.md
- Add TextBox programmatically using
Input.createInput() - Add floating label programmatically
- Add floating label to read-only TextBox
- Set disabled state (
enabled: false) - Set read-only state (
readonly: true) - Set rounded corner (
cssClass: 'e-corner') - Change floating label color for validation states
- Change TextBox color based on value (keyup regex)
- Customize background and text color
Accessibility
📄 Read: references/accessibility.md
- WAI-ARIA role
textboxand attributes aria-placeholder,aria-labelledby- WCAG 2.2, Section 508, screen reader support
- RTL support
API Reference
📄 Read: references/api.md
- All properties with types and defaults
- All methods (
addIcon,addAttributes,removeAttributes,focusIn,focusOut,dataBind, etc.) - All events (
change,input,blur,focus,created,destroyed) - Event argument types
Quick Start
npm install @syncfusion/ej2-inputs
<!-- index.html -->
<input id="firstName" />
import { TextBox } from '@syncfusion/ej2-inputs';
let textBox: TextBox = new TextBox({
placeholder: 'Enter your name',
floatLabelType: 'Auto'
});
textBox.appendTo('#firstName');
/* styles.css */
@import '../../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../../node_modules/@syncfusion/ej2-inputs/styles/material.css';
Common Patterns
Floating Label Types
// Auto – floats label above on focus or when value entered
let autoFloat: TextBox = new TextBox({ placeholder: 'Name', floatLabelType: 'Auto' });
autoFloat.appendTo('#auto');
// Always – label always floats above
let alwaysFloat: TextBox = new TextBox({ placeholder: 'Name', floatLabelType: 'Always' });
alwaysFloat.appendTo('#always');
// Never – label stays as placeholder (default)
let neverFloat: TextBox = new TextBox({ placeholder: 'Name', floatLabelType: 'Never' });
neverFloat.appendTo('#never');
TextBox with Icon
import { TextBox } from '@syncfusion/ej2-inputs';
let iconTextBox: TextBox = new TextBox({
placeholder: 'Enter Date',
created: () => {
iconTextBox.addIcon('append', 'e-icons e-date-range');
}
});
iconTextBox.appendTo('#textbox');
Multiline / Textarea
import { TextBox } from '@syncfusion/ej2-inputs';
let textarea: TextBox = new TextBox({
placeholder: 'Enter your address',
multiline: true,
floatLabelType: 'Auto'
});
textarea.appendTo('#textarea');
Password Input with Visibility Toggle
import { TextBox } from '@syncfusion/ej2-inputs';
let passwordBox: TextBox = new TextBox({
placeholder: 'Password',
type: 'password',
floatLabelType: 'Auto',
appendTemplate: '<span class="e-input-separator"></span><span id="eye-icon" class="e-icons e-eye"></span>',
created: () => {
const eyeIcon = document.querySelector('#eye-icon') as HTMLElement;
if (eyeIcon) {
eyeIcon.addEventListener('click', () => {
if (passwordBox.type === 'password') {
passwordBox.type = 'text';
eyeIcon.className = 'e-icons e-eye-slash';
} else {
passwordBox.type = 'password';
eyeIcon.className = 'e-icons e-eye';
}
passwordBox.dataBind();
});
}
}
});
passwordBox.appendTo('#password');
Validation States
import { TextBox } from '@syncfusion/ej2-inputs';
let errorBox: TextBox = new TextBox({ placeholder: 'Error state', cssClass: 'e-error' });
errorBox.appendTo('#error');
let warningBox: TextBox = new TextBox({ placeholder: 'Warning state', cssClass: 'e-warning' });
warningBox.appendTo('#warning');
let successBox: TextBox = new TextBox({ placeholder: 'Success state', cssClass: 'e-success' });
successBox.appendTo('#success');
Disabled and Read-Only
// Disabled
let disabled: TextBox = new TextBox({ placeholder: 'Disabled', enabled: false });
disabled.appendTo('#disabled');
// Read-only
let readOnly: TextBox = new TextBox({ placeholder: 'Read-only', readonly: true });
readOnly.appendTo('#readonly');
Clear Button
let clearable: TextBox = new TextBox({
placeholder: 'Type to clear',
showClearButton: true,
floatLabelType: 'Auto'
});
clearable.appendTo('#clearable');
Key Props at a Glance
| Property | Type | Default | Purpose |
|---|---|---|---|
value |
string | null | Text content |
placeholder |
string | null | Hint text / float label |
floatLabelType |
FloatLabelType | 'Never' | Label float behavior |
multiline |
boolean | false | Enable textarea mode |
type |
string | 'text' | Input type (text, password, email, etc.) |
enabled |
boolean | true | Enable/disable the control |
readonly |
boolean | false | Read-only mode |
showClearButton |
boolean | false | Show clear (×) icon |
cssClass |
string | '' | Custom CSS class(es) |
width |
number|string | null | Component width |
enableRtl |
boolean | false | Right-to-left layout |
autocomplete |
string | 'on' | Browser autocomplete ('on'|'off') |
locale |
string | '' | Culture/locale override |
enablePersistence |
boolean | false | Persist value across reloads |
prependTemplate |
string|Function | null | HTML before input |
appendTemplate |
string|Function | null | HTML after input |
htmlAttributes |
object | {} | Extra HTML attributes |
Uploader
The Syncfusion Uploader component provides a robust, feature-rich file upload solution for TypeScript applications. It supports multiple upload modes, file validation, drag-and-drop, chunked uploads for large files, and extensive customization options.
Component Overview
The Uploader component offers:
- Multiple upload modes: Async, chunked, and form-based uploads
- Comprehensive validation: File type, size, and count restrictions
- Rich UI: Customizable templates, themes, and styling options
- Advanced features: JWT authentication, localization, image preview/resize, progress tracking
- Developer-friendly: Full TypeScript support with type definitions, events, and methods
Documentation Navigation Guide
Getting Started
📄 Read: references/uploader-getting-started.md
- Dependencies and package requirements
- Installation via quickstart project, npm, or CDN
- TypeScript module imports
- Basic component initialization
- HTML structure and CSS imports
- Drop area configuration
- Async settings configuration
- Success and failure event handling
- Your first upload example
- Key configuration options
File Validation
📄 Read: references/uploader-file-validation.md
- File type validation with allowedExtensions
- File size restrictions (minFileSize, maxFileSize)
- Maximum files count limiting with isModified flag
- Duplicate file validation
- Pre-upload validation strategies
- Custom validation logic
- Validation event handling
Upload Modes & Features
📄 Read: references/uploader-upload-modes.md
- Async upload configuration (single/multiple/sequential)
- Preloaded files with
filesproperty - Save/Remove action with server-side examples
- Adding custom HTTP headers to upload requests
- Chunked upload with retryCount and retryAfterDelay
- Drag-and-drop with
dropAreaproperty - Paste-to-upload from clipboard
- Directory upload with
directoryUploadproperty - Form submission with file upload
- File source options and events
- Event handling and callbacks (pause/resume/cancel)
Customization & Styling
📄 Read: references/uploader-customization-and-styling.md
- Component-specific CSS selectors (wrapper, browse button, drop text, file container)
- CSS customization and themes
- Button template customization
- Progress bar styling
- Appearance modifications
- RTL (Right-to-Left) support
- Responsive design patterns
Advanced Features
📄 Read: references/uploader-advanced-features.md
- JWT authentication (uploading + removing events with currentRequest)
- Server-side JWT validation (ASP.NET Core example)
- Localization with full key reference table
- File preview functionality
- Image resizing before upload
- File list template and custom template (showFileList)
- Form data binding
- File removal and cleanup handlers
How-To Guides & Patterns
📄 Read: references/uploader-how-to-guides.md
- Programmatic upload triggers
- Invisible/hidden uploader UI
- Additional data with uploads
- Confirmation dialogs for removal
- Custom button elements
- MIME type validation
- Convert images to binary format
- File size check using
bytesToSizemethod - Hide drop areas
- Open/edit uploaded files
- Sort selected files
- External button triggers
- Image validation on drop
- WAI-ARIA accessibility compliance and keyboard shortcuts
Troubleshooting & Patterns
📄 Read: references/uploader-troubleshooting-and-examples.md
- Common issues and solutions (including name attribute mismatch)
- Browser compatibility notes
- Performance optimization techniques
- Edge cases and gotchas
- Form support pattern (non-async uploads with FormValidator)
- Real-world implementation patterns
- Debugging tips and techniques
API Reference
📄 Read: references/uploader-api.md
- Complete properties reference with types, descriptions, and defaults
- All public methods with parameter tables and return types
- All events with event argument details and usage examples
- Supporting interfaces:
AsyncSettingsModel,ButtonsPropsModel,FilesPropModel,FileInfo,ValidationMessages - Event argument interfaces:
SelectedEventArgs,UploadingEventArgs,RemovingEventArgs,BeforeRemoveEventArgs,BeforeUploadEventArgs,ActionCompleteEventArgs,CancelEventArgs,ClearingEventArgs,FileListRenderingEventArgs,PauseResumeEventArgs DropEffectenum values- Deprecated APIs noted with recommended replacements
Quick Start Example
Here's a minimal TypeScript example to get started:
import { Uploader } from '@syncfusion/ej2-inputs';
// Initialize Uploader component
const uploaderObj = new Uploader({
asyncSettings: {
saveUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/Save',
removeUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/Remove'
},
allowedExtensions: '.jpg,.png,.pdf'
});
// Render to DOM element with id 'fileupload'
uploaderObj.appendTo('#fileupload');
// Handle file selection
uploaderObj.selected = (args: any) => {
console.log('Files selected:', args.filesData);
};
// Handle upload completion
uploaderObj.success = (args: any) => {
console.log('Upload successful:', args.responseText);
};
HTML element:
<input type="file" id="fileupload" name="UploadFiles" />
Common Patterns
Pattern 1: Validated File Upload
Restrict uploads to specific file types and sizes:
const uploader = new Uploader({
asyncSettings: {
saveUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/save',
removeUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/remove'
},
allowedExtensions: '.jpg,.jpeg,.png,.gif',
minFileSize: 5000, // 5 KB
maxFileSize: 5242880 // 5 MB
});
uploader.appendTo('#fileupload');
Pattern 2: Drag-and-Drop Upload
Enable modern file upload UX:
const uploader = new Uploader({
asyncSettings: {
saveUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/save',
removeUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/remove'
},
dropEffect: 'Copy',
multiple: true,
allowedExtensions: '.pdf,.doc,.docx'
});
uploader.appendTo('#fileupload');
// Files that are dropped also trigger the selected event
uploader.selected = (args: SelectedEventArgs) => {
console.log('Files selected/dropped:', args.filesData);
};
Pattern 3: Large File Chunked Upload
Handle large files with resumable chunks:
const uploader = new Uploader({
asyncSettings: {
saveUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/save-chunk',
removeUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/remove',
chunkSize: 5242880 // 5 MB chunks
},
allowedExtensions: '.iso,.zip,.rar',
minFileSize: 26214400 // 25 MB minimum
});
uploader.appendTo('#fileupload');
uploader.chunkSuccess = (args: any) => {
console.log('Chunk uploaded:', args.chunkIndex, 'size:', args.chunkSize);
};
uploader.chunkFailure = (args: any) => {
console.log('Chunk failed for:', args.file.name, 'chunk:', args.chunkIndex);
};
Pattern 4: File Preview Before Upload
Display images and details before uploading:
const uploader = new Uploader({
asyncSettings: {
saveUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/save',
removeUrl: 'https://services.syncfusion.com/js/production/api/FileUploader/remove'
},
allowedExtensions: '.jpg,.jpeg,.png'
});
uploader.appendTo('#fileupload');
uploader.selected = (args: any) => {
// Render preview for each file
args.filesData.forEach((file: any) => {
const reader = new FileReader();
reader.onload = (e: any) => {
const preview = document.createElement('img');
preview.src = e.target.result;
preview.style.maxWidth = '100px';
document.getElementById('preview')?.appendChild(preview);
};
reader.readAsDataURL(file.rawFile);
});
};
Key Properties & Events
For the complete API reference including all properties, methods, events, and type definitions, see references/uploader-api.md.
Essential Properties
| Property | Type | Purpose |
|---|---|---|
asyncSettings |
AsyncSettingsModel |
Configure upload endpoint and behavior |
allowedExtensions |
string |
Comma-separated file extensions to allow |
minFileSize |
number |
Minimum file size in bytes |
maxFileSize |
number |
Maximum file size in bytes |
multiple |
boolean |
Allow multiple file selection |
autoUpload |
boolean |
Auto-upload on file selection |
sequentialUpload |
boolean |
Upload files one after another |
showFileList |
boolean |
Show or hide the default file list |
template |
string | Function |
Custom file item template |
directoryUpload |
boolean |
Enable folder/directory upload |
dropArea |
string | HTMLElement |
Custom drag-and-drop target |
dropEffect |
DropEffect |
Visual drag-and-drop effect |
files |
FilesPropModel[] |
Preloaded files on render |
enabled |
boolean |
Enable or disable the component |
enableRtl |
boolean |
Right-to-left rendering |
enableHtmlSanitizer |
boolean |
Prevent XSS in filenames |
buttons |
ButtonsPropsModel |
Customize button labels/content |
cssClass |
string |
Custom CSS class on root element |
htmlAttributes |
object |
Additional HTML attributes |
locale |
string |
Override global localization |
Key Events
| Event | Triggered | Use Case |
|---|---|---|
selected |
File(s) selected | Validate, preview, or modify files |
uploading |
Before upload starts | Add headers, metadata, show progress |
beforeUpload |
Before upload process | Add parameters to upload request |
success |
Upload completes successfully | Handle server response |
failure |
Upload fails | Retry logic, error handling |
removing |
File being removed | Confirm removal, add custom data |
beforeRemove |
Before remove sent to server | Prevent or modify removal request |
actionComplete |
All files processed | Batch completion handling |
chunkUploading |
Each chunk starts | Add data to chunk requests |
chunkSuccess |
Chunk uploaded | Progress tracking |
chunkFailure |
Chunk failed | Retry or error handling |
pausing |
Chunk upload paused | Track pause state |
resuming |
Paused upload resumed | Track resume state |
canceling |
Chunk upload canceled | Track cancel state |
clearing |
File list being cleared | Prevent or confirm clearing |
fileListRendering |
Each file item rendered | Customize file item structure |
progress |
File uploading (AJAX progress) | Real-time progress bar updates |
change |
File list changes | React to add/remove actions |
created |
Component created | Post-init setup |
Common Use Cases
Use Case 1: Product Image Upload
Validate images, resize before upload, show preview → See references/uploader-advanced-features.md
Use Case 2: Document Management
Multiple file types, large file support, form integration → See references/uploader-upload-modes.md and references/uploader-advanced-features.md
Use Case 3: User Avatar Upload
Single image, size validation, custom styling → See references/uploader-getting-started.md and references/uploader-customization-and-styling.md
Use Case 4: Secure File Uploads
JWT authentication, server validation, error handling → See references/uploader-advanced-features.md and references/uploader-troubleshooting-and-examples.md
Related Skills
- Implementing Form Validation
- Handling Async Operations in TypeScript
- Custom Event Handling
Next Step: Start with references/uploader-getting-started.md to learn installation and basic setup, jump directly to the reference matching your use case, or consult references/uploader-api.md for the complete API reference.
More from syncfusion/javascript-ui-controls-skills
syncfusion-javascript-gantt-chart
Implement Syncfusion Gantt Chart using JavaScript/TypeScript (Essential JS 2). Use this when working with ej2-gantt component for project scheduling, task dependencies, and timeline management. Covers full Gantt implementation including data binding, task scheduling, columns, resources, timeline configuration, WBS, resource view, critical path, baseline tracking, filtering, sorting, editing, and export functionality (Excel/PDF).
9syncfusion-javascript-maps
Guide to implementing Syncfusion Maps in TypeScript and JavaScript. Use this skill whenever the user needs to create interactive maps, add markers, visualize geographical data, work with map layers, apply color mapping, add annotations, configure legends, or handle map interactions and events. Works with TypeScript (module-based) and JavaScript (CDN/ES5).
8syncfusion-javascript-accumulation-chart
Implements Syncfusion JavaScript accumulation charts (Pie, Doughnut, Funnel, Pyramid) for proportional and percentage-based visualizations. Use when displaying categorical or proportional data. Covers legend and label configuration, interactivity, accessibility, and customization. Works with TypeScript (modules) and JavaScript (CDN/ES5).
8syncfusion-javascript-rich-text-editor
Implements the Syncfusion Rich Text Editor and Markdown Editor using TypeScript (ej2-richtexteditor). Supports both HTML (WYSIWYG) and Markdown modes via editorMode on a single RichTextEditor class. Use this skill for toolbar setup, image/media/table handling, inline or iframe editing, AI assistant, smart editing, import/export, and all content editor scenarios.
8syncfusion-javascript-chart
Implements Syncfusion JavaScript chart controls (Line, Area, Bar, Column, Pie, Polar, Radar, Waterfall, Stock). Use when building interactive data visualizations, dashboards, or real-time charts. Covers series and axes configuration, styling, animations, exporting, and technical indicators. Works with TypeScript (webpack/modules) and JavaScript (CDN/ES5).
8syncfusion-javascript-dropdowns
Comprehensive guide for implementing Syncfusion TypeScript dropdown components including AutoComplete, ComboBox, Mention, Dropdownlist and Multiselect. Use this when building selection interfaces, data binding, filtering, cascading dropdowns, custom templates, and accessible dropdown experiences.
7