
The code is also _declarative_ &mdash; it describes what you're creating.
It's also an abstraction, because it describes _what's_ in the user interface,
but not _how_ it's rendered.

<pre class="runnable text readonly">
import Component from '../../../node_modules/neo.mjs/src/component/Base.mjs';
import TabContainer from '../../../node_modules/neo.mjs/src/tab/Container.mjs';
import Viewport from '../../../node_modules/neo.mjs/src/container/Viewport.mjs';

class MainContainer extends Viewport {
    static config = {
        className: 'Starter.view.MainContainer',
        ntype: 'main',
        autoMount: true,
        style: { padding: '20px' },
        layout: { ntype: 'fit' },
        items: [{
            module: TabContainer,
            itemDefaults: {
                module: Component,
                cls: ['neo-examples-tab-component'],
                style: { padding: '20px' }
            },
            items: [{
                header: {
                    iconCls: 'fa fa-home',
                    text: 'Tab 1'
                },
                vdom: { html: 'Welcome to your new Neo App.' }
            }, {
                header: {
                    iconCls: 'fa fa-play-circle',
                    text: 'Tab 2'
                },
                vdom: { html: 'Have fun creating something awesome!' }
            }]
        }]
    }
}
Neo.setupClass(MainContainer);
export default MainContainer;
</pre>
