extends ../layouts/basic

block variablesLang
    include ./_variablesLang.jade

block extra_head
    title Apache ECharts
    script(src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.7/dist/scrollreveal.min.js")
    script(src="https://cdn.jsdelivr.net/npm/lottie-web@5.7.6/build/player/lottie.min.js")

block content
    nav(class='navbar navbar-default navbar-fixed-top', role="navigation")
        include ./nav

    .page-main#page-index
        #main-content
            section#home-section
                .home-brand-panel.description.container
                    .home-info
                        .home-brand Apache ECharts
                        .home-subtitle An Open Source JavaScript Visualization Library
                        .home-btn-panel
                            a.btn.btn-main.btn-index-home(href='#{host}/en/tutorial.html#Get%20Started%20with%20ECharts%20in%205%20minutes')
                                include ../components/svg/index-learn
                                span Get Started
                            a.btn.btn-main.btn-index-home(href='#{host}/examples/en/index.html')
                                include ../components/svg/index-example
                                span Demo
                            a.btn.btn-main.btn-index-home.btn-index-github(href='https://github.com/apache/echarts', target='_blank')
                                include ../components/svg/github
                                +svgGithub('#081642')
                    .home-chart
                        img(src="images/index-home-pie.png")
            section#feature-section
                .container
                    .index-features
                        h2.reveal Features
                        hr.reveal
                        a.more.reveal(href='#{host}/feature.html') View More
                    .row
                        .col-md-6
                            .index-feature#index-feature-1
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-1
                                    .index-feature-icon#icon-1
                                .index-feature-right.reveal
                                    h3.reveal Flexible Chart Types
                                    p.reveal-later Apache ECharts provides more than 20 chart types available out of the box, along with a dozen components, and each of them can be arbitrarily combined to use.
                        .col-md-6
                            .index-feature#index-feature-2
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-2
                                    .index-feature-icon#icon-2
                                .index-feature-right
                                    h3.reveal Powerful Rendering Engine
                                    p.reveal-later Easily switch between Canvas and SVG rendering. Progressive rendering and stream loading make it possible to render 10 million data in realtime.
                        .col-md-6
                            .index-feature#index-feature-3
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-3
                                    .index-feature-icon#icon-3
                                .index-feature-right
                                    h3.reveal Professional Data Analysis
                                    p.reveal-later Manage data through datasets, which support data transforms like filtering, clustering, and regression to help analyze multi-dimensional analysis of the same data.
                        .col-md-6
                            .index-feature#index-feature-4
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-4
                                    .index-feature-icon#icon-4
                                .index-feature-right
                                    h3.reveal Elegant Visual Design
                                    p.reveal-later The default design follows visualization principles, supports responsive design. Flexible configurations make it easy to customize.
                        .col-md-6
                            .index-feature#index-feature-5
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-5
                                    .index-feature-icon#icon-5
                                .index-feature-right
                                    h3.reveal A Healthy Community
                                    p.reveal-later The active open source community ensures the healthy development of the project and contributes a wealth of third-party extensions.
                        .col-md-6
                            .index-feature#index-feature-6
                                .index-feature-left.reveal
                                    .index-feature-icon-bg#bg-icon-6
                                    .index-feature-icon#icon-6
                                .index-feature-right
                                    h3.reveal Accessibility-Friendly
                                    p.reveal-later Automatically generated chart descriptions and decal patterns help users with disabilities understand the content and the stories behind the charts.
            section#publication
                .container
                    #start-line
                    .paper
                        .content
                            h2.reveal-latest ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization
                            p.note.reveal-latest You are welcomed to cite the following paper whenever you use ECharts in your R&D projects, products, research papers, technical reports, news reports, books, presentations, teaching, patents, and other related intelligence activities.
                            .single-btn-panel.reveal-latest
                                a(href="http://www.cad.zju.edu.cn/home/vagblog/VAG_Work/echarts.pdf").pdf.reveal-later Visual Informatics, 2018 [PDF]
                        .icon
                            #paper-icon
                    #end-line
            section.normal#about-section.reveal-about
                .container
                    h3 Follow
                    hr
                    p Follow us to get more updates in time.
                    .btn-panel.row
                        .col-lg-3.col-sm-6
                            a#btn-github(href='https://github.com/apache/echarts')
                                .btn-content
                                    .btn-logo
                                        include ../components/svg/github
                                        +svgGithub('#081642')
                                        span GitHub
                                    .icon-v-right

                        .col-lg-3.col-sm-6
                            a#btn-weixin
                                .btn-content.zh
                                    .btn-logo
                                        include ../components/svg/wechart
                                        span Wechat
                                    .weixin-code
                                        img(src="images/ercode.jpg")

                        .col-lg-3.col-sm-6
                            a#btn-weibo(href='https://weibo.com/echarts')
                                .btn-content
                                    .btn-logo
                                        include ../components/svg/weibo
                                        span Weibo
                                    .icon-v-right

                        .col-lg-3.col-sm-6
                            a#btn-twitter(href='https://twitter.com/ApacheECharts')
                                .btn-content
                                    .btn-logo
                                        include ../components/svg/twitter
                                        span Twitter
                                    .icon-v-right
        include ./footer

block extra_js
    script(src='https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js')
    script(src='#{cdnPayRoot}/#{ecWWWLang}/js/index.js?_v_=#{homeVersion}')
    <script async defer src="https://buttons.github.io/buttons.js"></script>
