React HtmlEditor - toolbar.items

Configures toolbar items. These items allow users to format text and execute commands.

Selector: Item

The toolbar provides predefined items and supports custom items. To add a predefined item to the toolbar, include it in the items array:

jQuery
JavaScript
$(function(){
    $("#htmlEditorContainer").dxHtmlEditor({
        toolbar: {
            items: [ "bold", "italic", "alignCenter", "undo", "redo" ]
        }
    })
})
Angular
HTML
TypeScript
<dx-html-editor>
    <dxo-toolbar>
        <dxi-item name="bold"></dxi-item>
        <dxi-item name="italic"></dxi-item>
        <dxi-item name="alignCenter"></dxi-item>
        <dxi-item name="undo"></dxi-item>
        <dxi-item name="redo"></dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { DxHtmlEditorModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxHtmlEditorModule
    ],
    // ...
})
Vue
App.vue
<template>
    <DxHtmlEditor ... >
        <DxToolbar>
            <DxItem name="bold" />
            <DxItem name="italic" />
            <DxItem name="alignCenter" />
            <DxItem name="undo" />
            <DxItem name="redo" />
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>
import 'devextreme/dist/css/dx.light.css';

import DxHtmlEditor, {
    DxToolbar,
    DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    // ...
}
</script>
React
App.js
import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar,
    Item
} from 'devextreme-react/html-editor';

export default function App() {
    return (
        <HtmlEditor>
            <Toolbar>
                <Item name="bold" />
                <Item name="italic" />
                <Item name="alignCenter" />
                <Item name="undo" />
                <Item name="redo" />
            </Toolbar>
        </HtmlEditor>
    );
}
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().HtmlEditor()
    .Toolbar(t => t
        .Items(i => {
            i.Add().Name("bold");
            i.Add().Name("italic");
            i.Add().Name("alignCenter");
            i.Add().Name("undo");
            i.Add().Name("redo");
        })
    )
)

Most of the predefined items are buttons. To customize a button, assign its name to the name property and specify the button options in the options object:

jQuery
JavaScript
$(function(){
    $("#htmlEditorContainer").dxHtmlEditor({
        toolbar: {
            items: [ // ...
            { 
                name: "clear", 
                options: { icon: "clear", type: "danger" }
            }]
        }
    })
})
Angular
HTML
TypeScript
<dx-html-editor>
    <dxo-toolbar>
        <!-- ... -->
        <dxi-item
            name="clear"
            [options]="clearFormatOptions">
        </dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { DxHtmlEditorModule } from "devextreme-angular";
// ...
export class AppComponent {
    clearFormatOptions = {
        icon: "clear",
        type: "danger"
    };
}
@NgModule({
    imports: [
        // ...
        DxHtmlEditorModule
    ],
    // ...
})
Vue
App.vue
<template>
    <DxHtmlEditor ... >
        <DxToolbar>
            <!-- ... -->
            <DxItem
                name="clear"
                :options="clearFormatOptions"
            />
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>
import 'devextreme/dist/css/dx.light.css';

import DxHtmlEditor, {
    DxToolbar,
    DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    data() {
        return {
            clearFormatOptions: {
                icon: "clear",
                type: "danger"
            }
        };
    }
}
</script>
React
App.js
import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar,
    Item
} from 'devextreme-react/html-editor';

const clearFormatOptions = {
    icon: "clear",
    type: "danger"
};

export default function App() {
    return (
        <HtmlEditor>
            <Toolbar>
                </* ... */}
                <Item
                    name="clear"
                    options={clearFormatOptions}
                />
            </Toolbar>
        </HtmlEditor>
    );
}
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().HtmlEditor()
    .Toolbar(t => t
        .Items(i => { 
            i.Add().Name("clear")
                .Widget(w => w.Button()
                    .Icon("clear")
                    .Type(ButtonType.Danger)
                );
        })
    )
)

To use another UI component instead of a button, specify the widget property and configure the UI component in the options object. In this case, you should also implement all the logic.

The toolbar provides a short syntax for implementing a custom drop-down menu with multiple choices. Refer to the name description for more information.

View Demo

acceptedValues

Specifies values for a format with multiple choices. Should be used with the name.

Type:

Array<String | Number | Boolean>

Formats with multiple choices are represented by SelectBox UI components whose properties you can specify in the options object.

View Demo

component

An alias for the template property specified in React. Accepts a custom component. Refer to Using a Custom Component for more information.

cssClass

Specifies a CSS class to be applied to the item.

Type:

String

| undefined
Default Value: undefined

disabled

Specifies whether the UI component item responds to user interaction.

Type:

Boolean

Default Value: false

formatName Deprecated

Use the name property instead.

Specifies the predefined item that this object customizes or a format with multiple choices.

formatValues Deprecated

Use the acceptedValues property instead.

Specifies values for a format with multiple choices.

Type:

Array<String | Number | Boolean>

html

Specifies the HTML markup to be inserted into the item element.

Type:

String

The HtmlEditor component evaluates the html property's value. This evaluation, however, makes the HtmlEditor potentially vulnerable to XSS attacks. To guard against these attacks, encode the HTML markup before you assign it to the html property. Refer to the following help topic for more information: Potentially Vulnerable API - html.

You can use the text property as a safe alternative.

locateInMenu

Specifies when to display an item in the toolbar's overflow menu.

Default Value: 'never'

location

Specifies a location for the item on the toolbar.

Default Value: 'before'

Whatever template you use for UI component items (default or a custom) will be located according to the value specified for the location field in the item data source object.

See Also

menuItemComponent

An alias for the menuItemTemplate property specified in React. Accepts a custom component. Refer to Using a Custom Component for more information.

menuItemRender

An alias for the menuItemTemplate property specified in React. Accepts a rendering function. Refer to Using a Rendering Function for more information.

menuItemTemplate

Specifies a template that should be used to render a menu item.

Type:

template

Template Data: undefined

The following types of the specified value are available.

  • Assign a string containing the name of the required template.
  • Assign a jQuery object of the template's container.
  • Assign a DOM Node of the template's container.
  • Assign a function that returns the jQuery object or a DOM Node of the template's container.
jQuery
index.js
$(function() {
    $("#toolbar").dxToolbar({
        items: [{
            // ...
            menuItemTemplate (data, index) {
                return $(`<div><i class='dx-icon-favorites'></i>${data.options.text}</div>`);
            }
        }],
    });
});
Angular
app.component.html
<dx-toolbar>
    <dxi-item ... 
        menuItemTemplate="menu-item"
    >
    </dxi-item>
    <div *dxTemplate="let data of 'menu-item'">
        <i class="dx-icon-favorites"></i> {{data.options.text}}
    </div>
</dx-toolbar>
Vue
App.vue
<template>
    <DxToolbar>
        <dxItem ... 
            menu-item-template="menu-item"
        >
        </dxItem>
        <template #menu-item="{ data }">
            <i class="dx-icon-favorites"></i> {{data.options.text}}
        </template>
    </DxToolbar>
</template>

<script>
// ...
</script>
React
App.js
import React from 'react';
import Toolbar, { Item } from 'devextreme-react/toolbar';

const renderMenuItem = (data) => {
    return <div><i class="dx-icon-favorites"></i> {data.options.text}</div>;
}

function App() {
    return (
        <Toolbar>
            <Item ... 
                menuItemRender={renderMenuItem}
            >
            </Item>
        </Toolbar>
    );
}

export default App;
See Also

name

Specifies the predefined item that this object customizes or a format with multiple choices.

To customize a predefined item, assign its name to this property and specify the other item properties.

This property also accepts names of formats with multiple choices. In addition to the format name, specify acceptedValues. On the toolbar, such formats are represented by SelectBox UI components whose properties you can specify in the options object.

View Demo

In the following code, the header and size formats are configured as described in the previous paragraph:

jQuery
JavaScript
$(function(){
    $("#htmlEditorContainer").dxHtmlEditor({
        toolbar: {
            items: [ // ...
            {
                name: "header",
                acceptedValues: [1, 2, 3, false],
                options: {
                    width: 150
                }
            }, {
                name: "size",
                acceptedValues: ["11px", "14px", "16px"]
            }]
        }
    })
})
Angular
HTML
TypeScript
<dx-html-editor>
    <dxo-toolbar>
        <dxi-item
            name="header"
            [acceptedValues]="[1, 2, 3, false]"
            [options]="{ width: 150 }">
        </dxi-item>
        <dxi-item
            name="size"
            [acceptedValues]="['11px', '14px', '16px']">
        </dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { DxHtmlEditorModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxHtmlEditorModule
    ],
    // ...
})
Vue
App.vue
<template>
    <DxHtmlEditor ... >
        <DxToolbar>
            <DxItem
                name="header"
                :accepted-values="headerFormatValues" 
                :options="headerFormatOptions"
            />
            <DxItem
                name="size"
                :accepted-values="sizeFormatValues"
            />
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>
import 'devextreme/dist/css/dx.light.css';

import DxHtmlEditor, {
    DxToolbar,
    DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    data() {
        return {
            headerFormatValues: [1, 2, 3, false],
            headerFormatOptions: { width: 150 },
            sizeFormatValues: ["11px", "14px", "16px"]
        };
    }
}
</script>
React
App.js
import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar,
    Item
} from 'devextreme-react/html-editor';

const headerFormatValues = [1, 2, 3, false];
const headerFormatOptions = { width: 150 };
const sizeFormatValues = ["11px", "14px", "16px"];

export default function App() {
    return (
        <HtmlEditor>
            <Toolbar>
                <Item
                    name="header"
                    acceptedValues={headerFormatValues} 
                    options={headerFormatOptions}
                />
                <Item
                    name="size"
                    acceptedValues={sizeFormatValues}
                />
            </Toolbar>
        </HtmlEditor>
    );
}

Refer to the Formats article for a full list of available formats.

See Also

options

Configures the DevExtreme UI component used as a toolbar item.

Type: any

Angular

options should contain the properties of the DevExtreme UI component specified in the widget property. Because of this dependency, options cannot be typed and are not implemented as nested configuration components. Specify options with an object.

app.component.html
app.module.ts
<dx-html-editor ... >
    <dxo-toolbar>
        <dxi-item
            widget="dxCheckBox"
            [options]="{ text: 'Show IDs' }">
        </dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';

import { DxHtmlEditorModule } from 'devextreme-angular';

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        DxHtmlEditorModule
    ],
    providers: [ ],
    bootstrap: [AppComponent]
})
export class AppModule { }
Vue

options should contain the properties of the DevExtreme UI component specified in the widget property. Because of this dependency, options cannot be typed and are not implemented as nested configuration components. Specify options with an object. We recommend that you declare the object outside the configuration component to prevent possible issues caused by unnecessary re-rendering.

App.vue
<template>
    <DxHtmlEditor ... >
        <DxToolbar>
            <DxItem
                widget="dxCheckBox"
                :options="checkBoxOptions"
            />
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>
import 'devextreme/dist/css/dx.light.css';

import DxHtmlEditor, {
    DxToolbar,
    DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    data() {
        return {
            checkBoxOptions: { text: 'Show IDs' }
        }
    }
}
</script>
React

options should contain the properties of the DevExtreme UI component specified in the widget property. Because of this dependency, options cannot be typed and are not implemented as nested configuration components. Specify options with an object. We recommend that you declare the object outside the configuration component to prevent possible issues caused by unnecessary re-rendering.

App.js
import React from 'react';

import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar,
    Item
} from 'devextreme-react/html-editor';

class App extends React.Component {
    checkBoxOptions = { text: 'Show IDs' };

    render() {
        return (
            <HtmlEditor ... >
                <Toolbar>
                    <Item
                        widget="dxCheckBox"
                        options={this.checkBoxOptions}
                    />
                </Toolbar>
            </HtmlEditor>
        );
    }
}
export default App;
NOTE
If you use the Menu UI component as a toolbar item, the adaptivityEnabled property does not apply.

View Demo

render

An alias for the template property specified in React. Accepts a rendering function. Refer to Using a Rendering Function for more information.

showText

Specifies when to display the text for the UI component item.

Type:

ShowTextMode

Default Value: 'always'

The text should be specified in the options configuration object.

NOTE
This property is available only if the widget property's value is "dxButton".

template

Specifies a template that should be used to render this item only.

Type:

template

Template Data:

CollectionWidgetItem

The item object to be rendered.

The following types of the specified value are available.

  • Assign a string containing the name of the required template.
  • Assign a jQuery object of the template's container.
  • Assign a DOM Node of the template's container.
  • Assign a function that returns the jQuery object or a DOM Node of the template's container.

The following example adds a custom item to the component. Note that Angular and Vue use custom templates instead of the template property. In React, specify the render or component properties.

jQuery
index.js
$(function() {
    $("#htmlEditorContainer").dxHtmlEditor({
        // ...
        toolbar: {
            items: [
                {
                    // ...
                    template: '<div>Custom Item</div>'
                }
            ]  
        }           
    });
});
Angular
app.component.html
app.component.ts
app.module.ts
<dx-html-editor ... >
    <dxo-toolbar>
        <dxi-item ...>
            <div *dxTemplate>
                <div>Custom Item</div>
            </div>
        </dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { Component } from '@angular/core';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent {
    // ...
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';

import { DxHtmlEditorModule } from 'devextreme-angular';

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        DxHtmlEditorModule
    ],
    providers: [ ],
    bootstrap: [AppComponent]
})
export class AppModule { }
Vue
App.vue
<template>
    <DxHtmlEditor>
        <DxToolbar>
            <DxItem ...>
                <div>Custom Item</div>
            </DxItem>
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>

import DxHtmlEditor, {
    DxToolbar, DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    // ...
}
</script>
React
App.js
import React from 'react';

import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar, Item
} from 'devextreme-react/html-editor';

const renderCustomItem = () => {
    return <div>Custom Item</div>;
}

function App() {
    return (
        <HtmlEditor ... >
            <Toolbar>
                <Item ... 
                    render={renderCustomItem}
                >
                </Item>
            </Toolbar>
        </HtmlEditor>
    );
}
export default App;
See Also

text

Specifies text displayed for the UI component item.

Type:

String

If you use both this property and a template, the template overrides the text.

visible

Specifies whether or not a UI component item must be displayed.

Type:

Boolean

Default Value: true

widget

The name of the UI component that should represent the toolbar item.

NOTE
Import the specified UI component's module when using DevExtreme modules.

Configure the specified UI component in the options object. You can find information on available UI component properties in the UI component's API reference.

View Demo

In the following example, the CheckBox UI component is added as a custom toolbar item. It has a label and a custom valueChanged event handler. The toolbar item's locateInMenu property is set to "never" to specify that the toolbar item should never be hidden in the overflow menu.

jQuery
JavaScript
$(function(){
    $("#htmlEditorContainer").dxHtmlEditor({
        toolbar: {
            items: [ // ...
            {
                widget: "dxCheckBox",
                options: {
                    text: "My Format",  
                    onValueChanged: function(e) {
                        // Implement your logic here
                    },
                    // ...
                },
                locateInMenu: "never"
            }]
        }
    })
})
Angular
HTML
TypeScript
<dx-html-editor>
    <dxo-toolbar>
        <dxi-item
            widget="dxCheckBox"
            [options]="checkboxOptions"
            locateInMenu="never">
        </dxi-item>
    </dxo-toolbar>
</dx-html-editor>
import { DxHtmlEditorModule, DxCheckBoxModule } from "devextreme-angular";
// ...
export class AppComponent {
    checkboxOptions = {
        text: "My Format",
        onValueChanged: function(e) {
            // Implement your logic here
        },
        // ...
    }
}
@NgModule({
    imports: [
        // ...
        DxHtmlEditorModule,
        DxCheckBoxModule
    ],
    // ...
})
Vue
App.vue
<template>
    <DxHtmlEditor ... >
        <DxToolbar>
            <DxItem
                widget="dxCheckBox"
                :options="checkboxOptions"
                locate-in-menu="never"
            />
        </DxToolbar>
    </DxHtmlEditor>
</template>

<script>
import 'devextreme/dist/css/dx.light.css';

import DxHtmlEditor, {
    DxToolbar,
    DxItem
} from 'devextreme-vue/html-editor';

export default {
    components: {
        DxHtmlEditor,
        DxToolbar,
        DxItem
    },
    data() {
        return {
            checkboxOptions: {
                text: "My Format",
                onValueChanged: function(e) {
                    // Implement your logic here
                },
                // ...
            }
        };
    }
}
</script>
React
App.js
import { useMemo } from 'react';
import 'devextreme/dist/css/dx.light.css';

import HtmlEditor, {
    Toolbar,
    Item
} from 'devextreme-react/html-editor';

export default function App() {
    const checkboxOptions = useMemo(() => {
        return {
            text: "My Format",
            onValueChanged: function(e) {
                // Implement your logic here
            },
            // ...
        }
    }, []);

    return (
        <HtmlEditor>
            <Toolbar>
                <Item
                    widget="dxCheckBox"
                    options={checkboxOptions}
                    locateInMenu="never"
                />
            </Toolbar>
        </HtmlEditor>
    );
}
ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().HtmlEditor()
    .Toolbar(t => t 
        .Items(i => {
            i.Add().LocateInMenu(ToolbarItemLocateInMenuMode.Never)
                .Widget(w => w.CheckBox()
                    .Text("My Format")
                    .OnValueChanged("myFormat_valueChanged")
                );
        })
    )
)

<script>
    function myFormat_valueChanged(e) {
        // Implement your logic here
    }
</script>
See Also