<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="lib/simpleRequire.js"></script>
    <script src="lib/config.js"></script>
</head>

<body>
    <style>
        html,
        body,
        #main {
            width: 100%;
            padding: 0;
            margin: 0;
            height: 100%;
        }
    </style>
    <div id="main"></div>
    <script>
        require([
            'echarts'
        ], function (echarts) {
            var chart = echarts.init(document.getElementById('main'), null, {

            });

            chart.setOption({
                series: [
                    {
                        type: 'treemap',
                        animation: false,
                        data: [
                            {
                                name: 'nodeA', // First tree
                                value: 10,
                                children: [
                                    {
                                        name: 'nodeAa', // First leaf of first tree
                                        value: 4,
                                    },
                                    {
                                        name: 'nodeAb', // Second leaf of first tree
                                        value: 6,
                                    },
                                ],
                            },
                            {
                                name: 'nodeB', // Second tree
                                value: 20,
                                children: [
                                    {
                                        name: 'nodeBa', // Son of first tree
                                        value: 20,
                                        children: [
                                            {
                                                name: 'nodeBa1', // Granson of first tree
                                                value: 20,
                                            },
                                        ],
                                    },
                                ],
                            },
                        ],
                    },
                ],
            });

            setTimeout(function () {
                chart.setOption({
                    series: [
                        {
                            type: 'treemap',
                            animation: false,
                            data: [
                                {
                                    name: 'nodeA', // First tree
                                    value: 10,
                                    children: [
                                        {
                                            name: 'nodeAa', // First leaf of first tree
                                            value: 4,
                                        },
                                        {
                                            name: 'nodeAb', // Second leaf of first tree
                                            value: 6,
                                        },
                                    ],
                                },
                            ],
                        },
                    ],
                },
                    true);
            }, 500);
        });
    </script>
</body>

</html>
