constructor(options) {
        super(options.name)
        this.box          = null // DOM Element that holds the element
        this.name         = null // unique name for w2ui
        this.active       = null
        this.reorder      = false
        this.flow         = 'down' // can be down or up
        this.tooltip      = 'top|left' // can be top, bottom, left, right
        this.tabs         = []
        this.routeData    = {} // data for dynamic routes
        this.last         = {} // placeholder for internal variables
        this.right        = ''
        this.style        = ''
        this.onClick      = null
        this.onMouseEnter = null // mouse enter and lease
        this.onMouseLeave = null
        this.onMouseDown  = null
        this.onMouseUp    = null
        this.onClose      = null
        this.onRender     = null
        this.onRefresh    = null
        this.onResize     = null
        this.onDestroy    = null
        this.tab_template = {
            id: null,
            text: null,
            route: null,
            hidden: false,
            disabled: false,
            closable: false,
            tooltip: null,
            style: '',
            onClick: null,
            onRefresh: null,
            onClose: null
        }
        let tabs = options.tabs
        delete options.tabs
        // mix in options
        Object.assign(this, options)
        // add item via method to makes sure item_template is applied
        if (Array.isArray(tabs)) this.add(tabs)
        // need to reassign back to keep it in config
        options.tabs = tabs
        // render if box specified
        if (typeof this.box == 'string') this.box = query(this.box).get(0)
        if (this.box) this.render(this.box)
    }
Part of w2ui 2.0 library
 - Dependencies: mQuery, w2utils, w2base, w2tooltip

== 2.0 changes
 - CSP - fixed inline events
 - removed jQuery dependency
 - observeResize for the box
 - refactored w2events
 - scrollIntoView - removed callback
 - scroll, scrollIntoView return promise
 - animateInsert, animateClose - returns a promise
 - add, insert return a promise
 - onMouseEnter, onMouseLeave, onMouseDown, onMouseUp