JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://cdn.alloyui.com/2.0.0pr6/aui/aui-min.js"></script>
<link rel="stylesheet" href="http://cdn.alloyui.com/2.0.0pr6/aui-css/css/bootstrap.css">
<div id="myDiagramContainer">
    <div id="myDiagramBuilder" width=100></div>
</div>
<button id="myButton">save</button>

CSS

.diagram-node-custom .diagram-node-content {
    background: url(http://a.deviantart.net/avatars/m/e/mercedes77.gif?5) no-repeat scroll center transparent;
}
.diagram-node-custom-icon {
    background: url(http://dribbble.s3.amazonaws.com/users/1266/screenshots/213334/emoticon-0188-nyancat.gif) no-repeat scroll center transparent;
}

JavaScript

var Y = YUI().use(
    'aui-diagram-builder',

function (Y) {

    Y.DiagramNodeCustom = Y.Component.create({
        NAME: 'diagram-node',

        ATTRS: {
            type: {
                value: 'custom'
            },
            customAttr: {
                validator: Y.Lang.isString,
                value: 'A Custom default'
            }
        },

        EXTENDS: Y.DiagramNodeTask,

        prototype: {
            getPropertyModel: function () {
                var instance = this;

                var model = Y.DiagramNodeTask.superclass.getPropertyModel.apply(instance, arguments);

                model.push({
                    attributeName: 'customAttr',
                    name: 'Custom Attribute'
                });

                return model;
            }
        }
    });

    Y.DiagramBuilder.types['custom'] = Y.DiagramNodeCustom;

    var availableFields = [{
        iconClass: 'diagram-node-start-icon',
        label: 'Start',
        type: 'start'
    }, {
        iconClass: 'diagram-node-task-icon',
        label: 'Task',
        type: 'task'
    }, {
        iconClass: 'diagram-node-custom-icon',
        label: 'Custom',
        type: 'custom'
    }, {
        iconClass: 'diagram-node-end-icon',
        label: 'End',
        type: 'end'
    }];

    diagram = new Y.DiagramBuilder({
        availableFields: availableFields,
        boundingBox: '#myDiagramContainer',
        srcNode: '#myDiagramBuilder'
    }).render();
    
    var node = Y.one('#myButton');
           node.on(
           'click',
                      function() {
                      var jasondata = Y.DiagramBuilder.toJSON();
                            console.log(jasondata)
                                    }
                                    );
});