You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by gi...@apache.org on 2021/09/15 10:11:16 UTC

[echarts-website] branch asf-site updated: Deploying to asf-site from @ apache/echarts-website@c5dda59b4900a8d4fe8f176ca48cd729a1db2123 🚀

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/echarts-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new bbbf5f4  Deploying to asf-site from @ apache/echarts-website@c5dda59b4900a8d4fe8f176ca48cd729a1db2123 🚀
bbbf5f4 is described below

commit bbbf5f48270afc61b99fb4fbe000277b238ef992
Author: pissang <pi...@users.noreply.github.com>
AuthorDate: Wed Sep 15 10:11:06 2021 +0000

    Deploying to asf-site from @ apache/echarts-website@c5dda59b4900a8d4fe8f176ca48cd729a1db2123 🚀
---
 components/builder.html                            |    2 +-
 components/download.html                           |    2 +-
 en/404.html                                        |    2 +-
 en/api.html                                        |    4 +-
 en/builder.html                                    |    4 +-
 en/builder/echarts.html                            |    2 +-
 en/changelog.html                                  |    4 +-
 en/cheat-sheet.html                                |    4 +-
 en/coding-standard.html                            |    4 +-
 en/committers.html                                 |    4 +-
 en/contributing.html                               |    2 +-
 en/css/main.css                                    |    2 +-
 en/dependencies.html                               |    4 +-
 en/download-extension.html                         |    4 +-
 en/download-map.html                               |    4 +-
 en/download-theme.html                             |    4 +-
 en/download.html                                   |    4 +-
 en/events.html                                     |    4 +-
 en/events/2021-05-13-iscas.html                    |    4 +-
 en/events/2021-07-05-apachecon.html                |    4 +-
 en/faq.html                                        |    4 +-
 en/feature.html                                    |    4 +-
 en/index.html                                      |    6 +-
 en/maillist.html                                   |    4 +-
 en/nav.html                                        |    2 +
 en/option-gl.html                                  |    4 +-
 en/option.html                                     |    4 +-
 en/option3.html                                    |    4 +-
 en/resources.html                                  |    2 +-
 en/security.html                                   |    2 +-
 en/spreadsheet.html                                |    8 +-
 en/theme-builder.html                              |    4 +-
 en/tutorial.html                                   |    4 +-
 examples/data/calendar-charts.js                   |    2 +-
 examples/data/calendar-horizontal.js               |    2 +-
 examples/data/candlestick-brush.js                 |    2 +-
 examples/data/scatter-symbol-morph.js              |   52 +-
 examples/en/editor.html                            |    6 +-
 examples/en/index.html                             |    6 +-
 examples/en/view.html                              |    6 +-
 examples/examples/ts/area-basic.ts                 |   24 +
 examples/examples/ts/area-pieces.ts                |   67 +
 examples/examples/ts/area-rainfall.ts              |  190 +
 examples/examples/ts/area-simple.ts                |   80 +
 examples/examples/ts/area-stack-gradient.ts        |  176 +
 examples/examples/ts/area-stack.ts                 |  105 +
 examples/examples/ts/area-time-axis.ts             |   69 +
 examples/examples/ts/bar-animation-delay.ts        |   70 +
 examples/examples/ts/bar-background.ts             |   26 +
 examples/examples/ts/bar-brush.ts                  |  115 +
 examples/examples/ts/bar-data-color.ts             |   27 +
 examples/examples/ts/bar-drilldown.ts              |  105 +
 examples/examples/ts/bar-gradient.ts               |   94 +
 examples/examples/ts/bar-histogram.ts              |  127 +
 examples/examples/ts/bar-label-rotation.ts         |  166 +
 examples/examples/ts/bar-large.ts                  |   95 +
 examples/examples/ts/bar-negative.ts               |   79 +
 examples/examples/ts/bar-negative2.ts              |   67 +
 examples/examples/ts/bar-polar-label-radial.ts     |   38 +
 examples/examples/ts/bar-polar-label-tangential.ts |   37 +
 examples/examples/ts/bar-polar-real-estate.ts      |  104 +
 examples/examples/ts/bar-polar-stack-radial.ts     |   51 +
 examples/examples/ts/bar-polar-stack.ts            |   52 +
 examples/examples/ts/bar-race-country.ts           |  142 +
 examples/examples/ts/bar-race.ts                   |   71 +
 examples/examples/ts/bar-rich-text.ts              |  153 +
 examples/examples/ts/bar-simple.ts                 |   22 +
 examples/examples/ts/bar-stack.ts                  |  127 +
 examples/examples/ts/bar-tick-align.ts             |   43 +
 examples/examples/ts/bar-waterfall.ts              |   67 +
 examples/examples/ts/bar-waterfall2.ts             |   91 +
 examples/examples/ts/bar-y-category-stack.ts       |   94 +
 examples/examples/ts/bar-y-category.ts             |   50 +
 examples/examples/ts/bar1.ts                       |   76 +
 examples/examples/ts/boxplot-light-velocity.ts     |   86 +
 examples/examples/ts/boxplot-light-velocity2.ts    |   89 +
 examples/examples/ts/boxplot-multi.ts              |  108 +
 examples/examples/ts/bubble-gradient.ts            |  111 +
 .../ts/calendar-charts.ts}                         |   30 +-
 examples/examples/ts/calendar-effectscatter.ts     |  163 +
 examples/examples/ts/calendar-graph.ts             |  126 +
 examples/examples/ts/calendar-heatmap.ts           |   56 +
 .../ts/calendar-horizontal.ts}                     |   14 +-
 examples/examples/ts/calendar-lunar.ts             |  470 +++
 examples/examples/ts/calendar-pie.ts               |  120 +
 examples/examples/ts/calendar-simple.ts            |   39 +
 .../ts/calendar-vertical.ts}                       |   54 +-
 .../ts/candlestick-brush.ts}                       |   36 +-
 examples/examples/ts/candlestick-large.ts          |  213 +
 examples/examples/ts/candlestick-sh-2015.ts        |  137 +
 examples/examples/ts/candlestick-sh.ts             |  324 ++
 examples/examples/ts/candlestick-simple.ts         |   24 +
 examples/examples/ts/candlestick-touch.ts          |  249 ++
 examples/examples/ts/circle-packing-with-d3.ts     |  232 ++
 examples/examples/ts/confidence-band.ts            |  120 +
 examples/examples/ts/custom-bar-trend.ts           |  121 +
 examples/examples/ts/custom-calendar-icon.ts       |  119 +
 examples/examples/ts/data-transform-filter.ts      |   82 +
 .../examples/ts/data-transform-multiple-pie.ts     |   82 +
 examples/examples/ts/data-transform-sort-bar.ts    |   41 +
 examples/examples/ts/dataset-default.ts            |   52 +
 examples/examples/ts/dataset-encode0.ts            |   51 +
 examples/examples/ts/dataset-encode1.ts            |  100 +
 examples/examples/ts/dataset-link.ts               |   76 +
 examples/examples/ts/dataset-series-layout-by.ts   |   44 +
 examples/examples/ts/dataset-simple0.ts            |   31 +
 examples/examples/ts/dataset-simple1.ts            |   31 +
 examples/examples/ts/dynamic-data.ts               |  133 +
 examples/examples/ts/dynamic-data2.ts              |   82 +
 examples/examples/ts/effectScatter-bmap.ts         |  584 +++
 examples/examples/ts/effectScatter-map.ts          |  511 +++
 examples/examples/ts/funnel-align.ts               |  108 +
 examples/examples/ts/funnel-customize.ts           |   89 +
 examples/examples/ts/funnel-mutiple.ts             |  104 +
 examples/examples/ts/funnel.ts                     |   69 +
 examples/examples/ts/gauge-barometer.ts            |  129 +
 examples/examples/ts/gauge-car.ts                  |  515 +++
 examples/examples/ts/gauge-clock.ts                |  221 ++
 examples/examples/ts/gauge-grade.ts                |   91 +
 examples/examples/ts/gauge-multi-title.ts          |   92 +
 examples/examples/ts/gauge-progress.ts             |   95 +
 examples/examples/ts/gauge-ring.ts                 |  112 +
 examples/examples/ts/gauge-simple.ts               |   31 +
 examples/examples/ts/gauge-speed.ts                |   57 +
 examples/examples/ts/gauge-stage.ts                |   66 +
 examples/examples/ts/gauge-temperature.ts          |  135 +
 examples/examples/ts/gauge.ts                      |   25 +
 examples/examples/ts/geo-beef-cuts.ts              |   76 +
 examples/examples/ts/geo-seatmap-flight.ts         |   95 +
 examples/examples/ts/geo-svg-lines.ts              |   86 +
 examples/examples/ts/geo-svg-map.ts                |  200 +
 examples/examples/ts/geo-svg-scatter-simple.ts     |   56 +
 examples/examples/ts/geo-svg-traffic.ts            |  169 +
 examples/examples/ts/graph-circular-layout.ts      |   68 +
 examples/examples/ts/graph-force-dynamic.ts        |   59 +
 examples/examples/ts/graph-force.ts                |   56 +
 examples/examples/ts/graph-force2.ts               |   66 +
 examples/examples/ts/graph-grid.ts                 |   52 +
 examples/examples/ts/graph-label-overlap.ts        |   51 +
 examples/examples/ts/graph-life-expectancy.ts      |  107 +
 examples/examples/ts/graph-npm.ts                  |   70 +
 examples/examples/ts/graph-simple.ts               |   89 +
 examples/examples/ts/graph-webkit-dep.ts           |   45 +
 examples/examples/ts/graph.ts                      |   70 +
 examples/examples/ts/grid-multiple.ts              |  176 +
 examples/examples/ts/heatmap-cartesian.ts          |   66 +
 examples/examples/ts/line-aqi.ts                   |  101 +
 examples/examples/ts/line-draggable.ts             |  142 +
 examples/examples/ts/line-easing.ts                |  235 ++
 examples/examples/ts/line-function.ts              |   75 +
 examples/examples/ts/line-gradient.ts              |   76 +
 examples/examples/ts/line-graphic.ts               |  122 +
 .../ts/line-in-cartesian-coordinate-system.ts      |   17 +
 examples/examples/ts/line-log.ts                   |   59 +
 examples/examples/ts/line-marker.ts                |   89 +
 examples/examples/ts/line-markline.ts              |   81 +
 examples/examples/ts/line-pen.ts                   |   75 +
 examples/examples/ts/line-polar.ts                 |   44 +
 examples/examples/ts/line-polar2.ts                |   49 +
 examples/examples/ts/line-race.ts                  |   90 +
 examples/examples/ts/line-sections.ts              |   89 +
 examples/examples/ts/line-simple.ts                |   22 +
 examples/examples/ts/line-smooth.ts                |   22 +
 examples/examples/ts/line-stack.ts                 |   71 +
 examples/examples/ts/line-step.ts                  |   58 +
 examples/examples/ts/line-style.ts                 |   34 +
 examples/examples/ts/line-tooltip-touch.ts         |  151 +
 examples/examples/ts/line-y-category.ts            |   53 +
 examples/examples/ts/lines-airline.ts              |   66 +
 examples/examples/ts/lines-bmap-bus.ts             |  150 +
 examples/examples/ts/lines-bmap-effect.ts          |  197 +
 examples/examples/ts/lines-bmap.ts                 |  138 +
 examples/examples/ts/lines-ny.ts                   |   91 +
 examples/examples/ts/map-HK.ts                     |   98 +
 examples/examples/ts/map-bar-morph.ts              |  149 +
 examples/examples/ts/map-usa.ts                    |  139 +
 examples/examples/ts/mix-line-bar.ts               |   81 +
 examples/examples/ts/mix-zoom-on-value.ts          |  103 +
 examples/examples/ts/multiple-x-axis.ts            |   97 +
 examples/examples/ts/multiple-y-axis.ts            |  111 +
 examples/examples/ts/parallel-aqi.ts               |  219 +
 examples/examples/ts/parallel-nutrients.ts         |  185 +
 examples/examples/ts/parallel-simple.ts            |   34 +
 .../examples/ts/pictorialBar-bar-transition.ts     |  144 +
 examples/examples/ts/pictorialBar-body-fill.ts     |  147 +
 examples/examples/ts/pictorialBar-dotted.ts        |  113 +
 examples/examples/ts/pictorialBar-forest.ts        |  112 +
 examples/examples/ts/pictorialBar-hill.ts          |  114 +
 examples/examples/ts/pictorialBar-spirit.ts        |  114 +
 examples/examples/ts/pictorialBar-vehicle.ts       |  112 +
 examples/examples/ts/pictorialBar-velocity.ts      |  102 +
 examples/examples/ts/pie-alignTo.ts                |   97 +
 examples/examples/ts/pie-borderRadius.ts           |   52 +
 examples/examples/ts/pie-custom.ts                 |   72 +
 examples/examples/ts/pie-doughnut.ts               |   46 +
 examples/examples/ts/pie-labelLine-adjust.ts       |   97 +
 examples/examples/ts/pie-legend.ts                 |   82 +
 examples/examples/ts/pie-nest.ts                   |   89 +
 examples/examples/ts/pie-parliament-transition.ts  |  150 +
 examples/examples/ts/pie-pattern.ts                |   62 +
 examples/examples/ts/pie-rich-text.ts              |  137 +
 examples/examples/ts/pie-roseType-simple.ts        |   46 +
 examples/examples/ts/pie-roseType.ts               |   84 +
 examples/examples/ts/pie-simple.ts                 |   44 +
 examples/examples/ts/polar-roundCap.ts             |   51 +
 examples/examples/ts/radar-aqi.ts                  |  211 +
 examples/examples/ts/radar-custom.ts               |  133 +
 examples/examples/ts/radar-multiple.ts             |   99 +
 examples/examples/ts/radar.ts                      |   41 +
 examples/examples/ts/radar2.ts                     |   74 +
 examples/examples/ts/sankey-energy.ts              |   37 +
 examples/examples/ts/sankey-itemstyle.ts           | 1283 ++++++
 examples/examples/ts/sankey-levels.ts              |   72 +
 examples/examples/ts/sankey-nodeAlign-left.ts      |   38 +
 examples/examples/ts/sankey-nodeAlign-right.ts     |   40 +
 examples/examples/ts/sankey-simple.ts              |   56 +
 examples/examples/ts/sankey-vertical.ts            |   49 +
 examples/examples/ts/scatter-aggregate-bar.ts      |  189 +
 examples/examples/ts/scatter-anscombe-quartet.ts   |  147 +
 examples/examples/ts/scatter-aqi-color.ts          |  262 ++
 examples/examples/ts/scatter-clustering.ts         |  133 +
 examples/examples/ts/scatter-effect.ts             |   80 +
 .../examples/ts/scatter-exponential-regression.ts  |   86 +
 examples/examples/ts/scatter-label-align-right.ts  |   58 +
 examples/examples/ts/scatter-label-align-top.ts    |   53 +
 examples/examples/ts/scatter-large.ts              |   72 +
 examples/examples/ts/scatter-linear-regression.ts  |  269 ++
 .../examples/ts/scatter-logarithmic-regression.ts  |  135 +
 examples/examples/ts/scatter-map-brush.ts          |  647 +++
 examples/examples/ts/scatter-matrix.ts             |  310 ++
 examples/examples/ts/scatter-nebula.ts             |   78 +
 examples/examples/ts/scatter-nutrients-matrix.ts   |  430 ++
 examples/examples/ts/scatter-nutrients.ts          |  179 +
 examples/examples/ts/scatter-painter-choice.ts     |   63 +
 examples/examples/ts/scatter-polar-punchCard.ts    |   67 +
 .../examples/ts/scatter-polynomial-regression.ts   |   87 +
 examples/examples/ts/scatter-punchCard.ts          |   72 +
 examples/examples/ts/scatter-simple.ts             |   42 +
 examples/examples/ts/scatter-single-axis.ts        |   62 +
 examples/examples/ts/scatter-stream-visual.ts      |   56 +
 examples/examples/ts/scatter-symbol-morph.ts       |  135 +
 examples/examples/ts/scatter-weibo.ts              |  105 +
 examples/examples/ts/scatter-weight.ts             |  267 ++
 examples/examples/ts/sunburst-borderRadius.ts      |   66 +
 examples/examples/ts/sunburst-drink.ts             |  725 ++++
 examples/examples/ts/sunburst-label-rotate.ts      |   98 +
 examples/examples/ts/sunburst-monochrome.ts        |  178 +
 examples/examples/ts/sunburst-simple.ts            |   66 +
 examples/examples/ts/sunburst-visualMap.ts         |   95 +
 examples/examples/ts/themeRiver-basic.ts           |  100 +
 examples/examples/ts/themeRiver-lastfm.ts          |   82 +
 examples/examples/ts/tree-basic.ts                 |   60 +
 examples/examples/ts/tree-legend.ts                |  261 ++
 examples/examples/ts/tree-orient-bottom-top.ts     |   61 +
 examples/examples/ts/tree-orient-right-left.ts     |   64 +
 examples/examples/ts/tree-polyline.ts              |  181 +
 examples/examples/ts/tree-radial.ts                |   43 +
 examples/examples/ts/tree-vertical.ts              |   56 +
 examples/examples/ts/treemap-disk.ts               |   80 +
 examples/examples/ts/treemap-drill-down.ts         |  100 +
 examples/examples/ts/treemap-obama.ts              |  225 ++
 examples/examples/ts/treemap-show-parent.ts        |   94 +
 examples/examples/ts/treemap-simple.ts             |   35 +
 .../examples/ts/treemap-sunburst-transition.ts     |   58 +
 examples/examples/ts/treemap-visual.ts             |  145 +
 examples/examples/ts/watermark.ts                  |  220 +
 examples/examples/ts/wind-barb.ts                  |  269 ++
 examples/examples/tsconfig.json                    |   14 +
 examples/examples/types/example.d.ts               |   29 +
 examples/js/example-bundle.js                      |    2 +-
 examples/js/example-transform-ts-bundle.js         |    2 +-
 examples/types/echarts.d.ts                        | 4191 --------------------
 examples/zh/editor.html                            |    6 +-
 examples/zh/index.html                             |    6 +-
 examples/zh/view.html                              |    6 +-
 handbook/200.html                                  |    7 +-
 handbook/_nuxt/{6146f21.js => 9e600e1.js}          |    2 +-
 handbook/_nuxt/css/{89761e6.css => 79036f1.css}    |    2 +-
 handbook/_nuxt/css/{6d160d4.css => d725484.css}    |    2 +-
 handbook/_nuxt/css/{8cca5bf.css => d80653b.css}    |    2 +-
 handbook/_nuxt/js/08dc424523de06716042.js          |    1 -
 handbook/_nuxt/js/08f2b6a6c1138d018d6f.js          |    1 +
 handbook/_nuxt/js/176331c04836b8b84c4d.js          |    1 +
 handbook/_nuxt/js/236e22a239457041090b.js          |    1 +
 ...7a24a3cb648e6c4e.js => 261e3287b52f9d5288a7.js} |    2 +-
 ...e4015f9b5ef7efa9.js => 4207fd6502bce2fe0e71.js} |    2 +-
 ...fabb3e350003bd5e.js => 487a63005f08ce1c1b9d.js} |    2 +-
 handbook/_nuxt/js/4d99f73482ece951d69c.js          |    1 +
 handbook/_nuxt/js/536829e5c8d97f4ac7c6.js          |    1 -
 handbook/_nuxt/js/65fbbb1766aac308e2d5.js          |    1 -
 ...ae44195ffebaa08a.js => 75b629822f727a79f6b7.js} |    2 +-
 handbook/_nuxt/js/7e6805b6d420a9d924e2.js          |    1 -
 handbook/_nuxt/js/8660aaf641d4ed6acfd9.js          |    1 -
 handbook/_nuxt/js/87176580e664767aac13.js          |    1 +
 handbook/_nuxt/js/87d073533b02b80c9f5a.js          |    1 -
 handbook/_nuxt/js/91589afc8ac42871ff30.js          |    1 -
 handbook/_nuxt/js/921d7bcd80bc1b6261e0.js          |    1 +
 ...253966298a392915.js => b1bb3f86faaa0b0b8e0f.js} |    0
 handbook/_nuxt/js/b66855952f3a4278ff26.js          |    1 +
 ...64b538994fe3b8b7.js => c86858accdc63ea5924c.js} |    2 +-
 handbook/_nuxt/js/eba07e8d9f5c5213982f.js          |    1 +
 handbook/_nuxt/js/ed27abbf85118ce0e31b.js          |    1 -
 handbook/_nuxt/js/f6f0c76ff6360f4dff03.js          |    1 -
 handbook/_nuxt/js/f79944fc11900e6499b3.js          |    1 +
 handbook/en/basics/download/index.html             |    5 +-
 handbook/en/basics/help/index.html                 |    5 +-
 handbook/en/basics/import/index.html               |   42 +-
 handbook/en/basics/inspiration/index.html          |    5 +-
 handbook/en/basics/release-note/5-2-0/index.html   |    9 +-
 .../en/basics/release-note/v5-feature/index.html   |    5 +-
 .../release-note/v5-upgrade-guide/index.html       |   15 +-
 handbook/en/best-practices/aria/index.html         |    7 +-
 .../en/best-practices/canvas-vs-svg/index.html     |    5 +-
 handbook/en/concepts/axis/index.html               |    5 +-
 handbook/en/concepts/chart-size/index.html         |    5 +-
 handbook/en/concepts/data-transform/index.html     |   25 +-
 handbook/en/concepts/dataset/index.html            |    5 +-
 handbook/en/concepts/event/index.html              |    5 +-
 handbook/en/concepts/legend/index.html             |    5 +-
 handbook/en/concepts/style/index.html              |    5 +-
 handbook/en/concepts/visual-map/index.html         |    5 +-
 handbook/en/get-started/index.html                 |    5 +-
 .../en/how-to/chart-types/bar/bar-race/index.html  |    5 +-
 .../en/how-to/chart-types/bar/basic-bar/index.html |    5 +-
 .../how-to/chart-types/bar/stacked-bar/index.html  |    5 +-
 .../en/how-to/chart-types/bar/waterfall/index.html |    5 +-
 .../how-to/chart-types/line/area-line/index.html   |    5 +-
 .../how-to/chart-types/line/basic-line/index.html  |    5 +-
 .../how-to/chart-types/line/smooth-line/index.html |    5 +-
 .../chart-types/line/stacked-line/index.html       |    5 +-
 .../how-to/chart-types/line/step-line/index.html   |    5 +-
 .../en/how-to/chart-types/pie/basic-pie/index.html |    5 +-
 .../en/how-to/chart-types/pie/doughnut/index.html  |    5 +-
 handbook/en/how-to/chart-types/pie/rose/index.html |    5 +-
 .../chart-types/scatter/basic-scatter/index.html   |    5 +-
 .../en/how-to/cross-platform/server/index.html     |    5 +-
 handbook/en/how-to/data/dynamic-data/index.html    |    5 +-
 handbook/en/how-to/interaction/drag/index.html     |    5 +-
 handbook/en/how-to/label/rich-text/index.html      |    5 +-
 handbook/en/index.html                             |    5 +-
 handbook/en/meta/edit-guide/index.html             |    5 +-
 handbook/index.html                                |    5 +-
 handbook/zh/basics/download/index.html             |    5 +-
 handbook/zh/basics/help/index.html                 |    5 +-
 handbook/zh/basics/import/index.html               |   35 +-
 handbook/zh/basics/inspiration/index.html          |    5 +-
 handbook/zh/basics/release-note/5-2-0/index.html   |    9 +-
 .../zh/basics/release-note/v5-feature/index.html   |    5 +-
 .../release-note/v5-upgrade-guide/index.html       |   15 +-
 handbook/zh/best-practices/aria/index.html         |    7 +-
 .../zh/best-practices/canvas-vs-svg/index.html     |    5 +-
 handbook/zh/concepts/axis/index.html               |    5 +-
 handbook/zh/concepts/chart-size/index.html         |    5 +-
 handbook/zh/concepts/data-transform/index.html     |   25 +-
 handbook/zh/concepts/dataset/index.html            |    5 +-
 handbook/zh/concepts/event/index.html              |    5 +-
 handbook/zh/concepts/legend/index.html             |    5 +-
 handbook/zh/concepts/style/index.html              |    9 +-
 handbook/zh/concepts/visual-map/index.html         |    5 +-
 handbook/zh/get-started/index.html                 |    5 +-
 .../zh/how-to/chart-types/bar/bar-race/index.html  |    5 +-
 .../zh/how-to/chart-types/bar/basic-bar/index.html |    5 +-
 .../how-to/chart-types/bar/stacked-bar/index.html  |    5 +-
 .../zh/how-to/chart-types/bar/waterfall/index.html |    5 +-
 .../how-to/chart-types/line/area-line/index.html   |    5 +-
 .../how-to/chart-types/line/basic-line/index.html  |    5 +-
 .../how-to/chart-types/line/smooth-line/index.html |    5 +-
 .../chart-types/line/stacked-line/index.html       |    5 +-
 .../how-to/chart-types/line/step-line/index.html   |    5 +-
 .../zh/how-to/chart-types/pie/basic-pie/index.html |    5 +-
 .../zh/how-to/chart-types/pie/doughnut/index.html  |    5 +-
 handbook/zh/how-to/chart-types/pie/rose/index.html |    5 +-
 .../chart-types/scatter/basic-scatter/index.html   |    5 +-
 .../zh/how-to/cross-platform/baidu-app/index.html  |    5 +-
 .../zh/how-to/cross-platform/server/index.html     |    5 +-
 .../zh/how-to/cross-platform/wechat-app/index.html |    5 +-
 handbook/zh/how-to/data/dynamic-data/index.html    |    5 +-
 handbook/zh/how-to/interaction/drag/index.html     |    5 +-
 handbook/zh/how-to/label/rich-text/index.html      |    5 +-
 handbook/zh/index.html                             |    5 +-
 handbook/zh/meta/edit-guide/index.html             |    5 +-
 layouts/basic.html                                 |    2 +-
 layouts/doc-old.html                               |    2 +-
 layouts/doc.html                                   |    2 +-
 layouts/example-simple.html                        |    6 +-
 layouts/example.html                               |    6 +-
 layouts/tool-spa.html                              |    2 +-
 manually-redirect.html                             |    2 +-
 zh/404.html                                        |    2 +-
 zh/api.html                                        |    2 +-
 zh/builder.html                                    |    2 +-
 zh/builder/echarts.html                            |    2 +-
 zh/builder3.html                                   |    2 +-
 zh/changelog.html                                  |    2 +-
 zh/cheat-sheet.html                                |    2 +-
 zh/coding-standard.html                            |    2 +-
 zh/committers.html                                 |    2 +-
 zh/contributing.html                               |    2 +-
 zh/css/main.css                                    |    2 +-
 zh/css/only_for_cdn_ready_check.css                |    2 +-
 zh/demo.html                                       |    2 +-
 zh/dependencies.html                               |    2 +-
 zh/download-extension.html                         |    2 +-
 zh/download-map.html                               |    2 +-
 zh/download-theme.html                             |    2 +-
 zh/download.html                                   |    2 +-
 zh/download3.html                                  |    2 +-
 zh/events.html                                     |    2 +-
 zh/events/2021-05-13-iscas.html                    |    2 +-
 zh/events/2021-07-05-apachecon.html                |    2 +-
 zh/faq.html                                        |    2 +-
 zh/feature.html                                    |    2 +-
 zh/index.html                                      |    4 +-
 zh/maillist.html                                   |    2 +-
 zh/nav.html                                        |    2 +
 zh/option-gl.html                                  |    2 +-
 zh/option.html                                     |    2 +-
 zh/option3.html                                    |    2 +-
 zh/resources.html                                  |    2 +-
 zh/security.html                                   |    2 +-
 zh/spreadsheet.html                                |    8 +-
 zh/theme-builder.html                              |    2 +-
 zh/tutorial.html                                   |    2 +-
 423 files changed, 27222 insertions(+), 4597 deletions(-)

diff --git a/components/builder.html b/components/builder.html
index 3ce4e63..b8640a3 100644
--- a/components/builder.html
+++ b/components/builder.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/components/download.html b/components/download.html
index f83076b..ef2eab5 100644
--- a/components/download.html
+++ b/components/download.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/en/404.html b/en/404.html
index ab7aba9..fefd340 100644
--- a/en/404.html
+++ b/en/404.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/en/api.html b/en/api.html
index 474e39e..4b5e6bc 100644
--- a/en/api.html
+++ b/en/api.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,7 +10,7 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/en/css/doc-bundle.css?_v_=d2ec90c6e8"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     baseUrl: 'documents/api-parts',
diff --git a/en/builder.html b/en/builder.html
index f184bb9..5467ebf 100644
--- a/en/builder.html
+++ b/en/builder.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>ECharts Online Builder</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 
 fetch('https://data.jsdelivr.com/v1/package/npm/echarts', {
     mode: 'cors'
diff --git a/en/builder/echarts.html b/en/builder/echarts.html
index 5587ab3..f9f1065 100644
--- a/en/builder/echarts.html
+++ b/en/builder/echarts.html
@@ -54,7 +54,7 @@
                 'rollup': 'lib/rollup.browser',
                 'transformDev': 'lib/transform-dev-bundle'
             },
-            urlArgs: 'v=1630499963508'
+            urlArgs: 'v=1631700580897'
         });
 
         require(['build']);
diff --git a/en/changelog.html b/en/changelog.html
index dc5165d..c738127 100644
--- a/en/changelog.html
+++ b/en/changelog.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Changelog - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 <div class="time">2021-09-01</div>
 
 <h4 id="break-changes">Break Changes</h4>
diff --git a/en/cheat-sheet.html b/en/cheat-sheet.html
index 4c76334..5b79d0b 100644
--- a/en/cheat-sheet.html
+++ b/en/cheat-sheet.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Cheat Sheet - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 </script><script src="https://cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js"></script><script src="https://echarts.apache.org/en/js/cheat-sheet-en.js?_v_=f31f64abe3"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
 var hm = document.createElement("script");
diff --git a/en/coding-standard.html b/en/coding-standard.html
index 6613b36..f336b09 100644
--- a/en/coding-standard.html
+++ b/en/coding-standard.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Coding Standard - Apache ECharts</title><link rel="stylesheet" type="text/css" href="https://echarts.apache.org/en/vendors/prettify/prettify.css?_v_=20200710_1"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/code-prettify@0.1.0/src/prettify.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/code-prettify@0.1.0/src/lang-css.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 <h3 id="file">File</h3>
 <p><strong>[MUST]</strong> JavaScript Source files must be encoded in UTF-8 without BOM.</p>
 <h3 id="indentation">Indentation</h3>
diff --git a/en/committers.html b/en/committers.html
index 981a786..5b50cf4 100644
--- a/en/committers.html
+++ b/en/committers.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Committers - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 (function() {
 var hm = document.createElement("script");
 
diff --git a/en/contributing.html b/en/contributing.html
index 96720df..9fc21c0 100644
--- a/en/contributing.html
+++ b/en/contributing.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/en/css/main.css b/en/css/main.css
index ca718d9..6eaea05 100644
--- a/en/css/main.css
+++ b/en/css/main.css
@@ -1 +1 @@
-@font-face{font-family:'iconfont';src:url("font/iconfont.eot");src:url("font/iconfont.eot?#iefix") format("embedded-opentype"),url("font/iconfont.woff") format("woff"),url("font/iconfont.ttf") format("truetype"),url("font/iconfont.svg#iconfont") format("svg")}.iconfont{font-family:"iconfont" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:'Open Sa [...]
+@font-face{font-family:'iconfont';src:url("font/iconfont.eot");src:url("font/iconfont.eot?#iefix") format("embedded-opentype"),url("font/iconfont.woff") format("woff"),url("font/iconfont.ttf") format("truetype"),url("font/iconfont.svg#iconfont") format("svg")}.iconfont{font-family:"iconfont" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:'Open Sa [...]
diff --git a/en/dependencies.html b/en/dependencies.html
index d9ac423..a76d9c1 100644
--- a/en/dependencies.html
+++ b/en/dependencies.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Dependencies - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 (function() {
 var hm = document.createElement("script");
 
diff --git a/en/download-extension.html b/en/download-extension.html
index 5e06480..99150be 100644
--- a/en/download-extension.html
+++ b/en/download-extension.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Download Extensions - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 (function() {
 var hm = document.createElement("script");
 
diff --git a/en/download-map.html b/en/download-map.html
index 0d78de9..216d8d8 100644
--- a/en/download-map.html
+++ b/en/download-map.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Download Maps - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 </script><footer><div class="container"><div class="row"><div class="col-md-9"><p>Copyright © 2017-2021, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.</p><div class="icon-panel"><a href="mailto:dev@echarts.apache.org?body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20 [...]
 (function() {
 var hm = document.createElement("script");
diff --git a/en/download-theme.html b/en/download-theme.html
index 6b8b07e..abba430 100644
--- a/en/download-theme.html
+++ b/en/download-theme.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Download Themes - Apache ECharts</title><link rel="stylesheet" type="text/css" href="https://echarts.apache.org/en/vendors/prettify/prettify.css?_v_=20200710_1"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 &lt;!-- import vintage theme --&gt;
 &lt;script src="theme/vintage.js"&gt;&lt;/script&gt;
 &lt;script&gt;
diff --git a/en/download.html b/en/download.html
index 40c11e2..2b26225 100644
--- a/en/download.html
+++ b/en/download.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Download - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 #download-main .d-section-version .circle-wrap {
     line-height: 120px;
     font-size: 20px;
diff --git a/en/events.html b/en/events.html
index 8d3ac22..ddaec4e 100644
--- a/en/events.html
+++ b/en/events.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Events - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
+<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
     elements_selector: ".lazy"
 };
 document.getElementById('nav-contribute').className = 'active';</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
diff --git a/en/events/2021-05-13-iscas.html b/en/events/2021-05-13-iscas.html
index 4eb21d5..4037155 100644
--- a/en/events/2021-05-13-iscas.html
+++ b/en/events/2021-05-13-iscas.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Events - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
+<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
     elements_selector: ".lazy"
 };
 document.getElementById('nav-contribute').className = 'active';</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
diff --git a/en/events/2021-07-05-apachecon.html b/en/events/2021-07-05-apachecon.html
index 88a0675..8387fe6 100644
--- a/en/events/2021-07-05-apachecon.html
+++ b/en/events/2021-07-05-apachecon.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Events - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
+<!--[if (gt IE 8)|!(IE)]><body class="Events - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apach [...]
     elements_selector: ".lazy"
 };
 document.getElementById('nav-contribute').className = 'active';</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
diff --git a/en/faq.html b/en/faq.html
index 63f665c..0841da9 100644
--- a/en/faq.html
+++ b/en/faq.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>FAQ - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="FAQ - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.o [...]
+<!--[if (gt IE 8)|!(IE)]><body class="FAQ - Apache ECharts"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.o [...]
    console.log(params);
 });</code></pre><p>Please refer to <a href="https://www.makeapie.com/editor.html?c=xHyqn_rQ6g">this example</a>.</p><h3>How to make my custom map?</h3><p>The ECharts map is <a href="https://github.com/apache/echarts/blob/8eeb7e5abe207d0536c62ce1f4ddecc6adfdf85e/src/util/mapData/rawData/encode.js">additionally encoded</a> from original coordinates. You can use the <a href="https://github.com/giscafer/mapshaper-plus">mapshaper-plus tool</a> to upload a custom geojson file and then generate [...]
 (function() {
diff --git a/en/feature.html b/en/feature.html
index a5df077..d45ec71 100644
--- a/en/feature.html
+++ b/en/feature.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Features - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
     elements_selector: 'iframe'
 };</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><script type="text/javascript">document.getElementById('nav-doc').className = 'active';</script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
diff --git a/en/index.html b/en/index.html
index 0accdc7..9cde938 100644
--- a/en/index.html
+++ b/en/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,9 +7,9 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Apache ECharts</title><script src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.7/dist/scrollreveal.min.js"></script><script src="https://cdn.jsdelivr.net/npm/lottie-web@5.7.6/build/player/lottie.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"> [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
     elements_selector: ".lazy"
-};</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><script src="https://echarts.apache.org/en/js/index.js?_v_=1630499963508"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
+};</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><script src="https://echarts.apache.org/en/js/index.js?_v_=1631700580897"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
 var hm = document.createElement("script");
 
diff --git a/en/maillist.html b/en/maillist.html
index ae61c44..946ace7 100644
--- a/en/maillist.html
+++ b/en/maillist.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Mailing List - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 (function() {
 var hm = document.createElement("script");
 
diff --git a/en/nav.html b/en/nav.html
index f682309..7718b96 100644
--- a/en/nav.html
+++ b/en/nav.html
@@ -1,3 +1,5 @@
 <template>
+<template>
 <nav role="navigation" class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false" class="navbar-toggle collapsed"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="https://echarts.apache.org/en/index.html" class="navbar-brand"><img src="https://e [...]
+</template>
 </template>
\ No newline at end of file
diff --git a/en/option-gl.html b/en/option-gl.html
index 2786c17..920f7ed 100644
--- a/en/option-gl.html
+++ b/en/option-gl.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,7 +10,7 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/en/css/doc-bundle.css?_v_=d2ec90c6e8"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     baseUrl: 'documents/option-gl-parts',
diff --git a/en/option.html b/en/option.html
index b67aa5e..92ec425 100644
--- a/en/option.html
+++ b/en/option.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,7 +10,7 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/en/css/doc-bundle.css?_v_=d2ec90c6e8"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     baseUrl: 'documents/option-parts',
diff --git a/en/option3.html b/en/option3.html
index 2f34a32..89f8dee 100644
--- a/en/option3.html
+++ b/en/option3.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="ECharts Configurations"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache [...]
+<!--[if (gt IE 8)|!(IE)]><body class="ECharts Configurations"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache [...]
 </script><footer><div class="container"><div class="row"><div class="col-md-9"><p>Copyright © 2017-2021, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.</p><div class="icon-panel"><a href="mailto:dev@echarts.apache.org?body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20 [...]
 (function() {
 var hm = document.createElement("script");
diff --git a/en/resources.html b/en/resources.html
index 5ebe77b..f8fedcd 100644
--- a/en/resources.html
+++ b/en/resources.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/en/security.html b/en/security.html
index 9523441..b2b1711 100644
--- a/en/security.html
+++ b/en/security.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/zh/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
diff --git a/en/spreadsheet.html b/en/spreadsheet.html
index 53e0457..73eb4bd 100644
--- a/en/spreadsheet.html
+++ b/en/spreadsheet.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,12 +7,12 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Spreadsheet Tool - Apache ECharts</title><link rel="stylesheet" type="text/css" href="https://echarts.apache.org/en/vendors/handsontable/0.26.1/dist/handsontable.full.min.css?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://echarts.apache.org/en/css/spreadsheet.css?_v_=0fe8afb287"><script src="vendors/esl.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><bod [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 
 var vendorPath = '../vendors';
 
 define('globalArgs', extend({
-    version: '1630499963508',
+    version: '1631700580897',
     basePath: './'
 }, window.globalArgsExtra || {}));
 
@@ -31,7 +31,7 @@ require.config({
         numeral: vendorPath + '/numeral/1.4.7/numeral.min',
         immutable: vendorPath + '/immutable/3.7.4/dist/immutable'
     },
-    urlArgs: '_v_=1630499963508'
+    urlArgs: '_v_=1631700580897'
 });
 
 require(['spreadsheet/spreadsheet'], function (spreadsheet) {
diff --git a/en/theme-builder.html b/en/theme-builder.html
index a72d35d..9314ee5 100644
--- a/en/theme-builder.html
+++ b/en/theme-builder.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Theme Builder - Apache ECharts</title><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/highlightjs@9.16.2/styles/default.css">
 <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/highlightjs@9.16.2/styles/github.css">
 <link rel="stylesheet" href="./theme-builder/main.css">
diff --git a/en/tutorial.html b/en/tutorial.html
index 49f54e4..16dce3d 100644
--- a/en/tutorial.html
+++ b/en/tutorial.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,7 +10,7 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/en/css/doc-bundle.css?_v_=d2ec90c6e8"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     baseUrl: 'documents/tutorial-parts',
diff --git a/examples/data/calendar-charts.js b/examples/data/calendar-charts.js
index 39aaad7..9b0cbd2 100644
--- a/examples/data/calendar-charts.js
+++ b/examples/data/calendar-charts.js
@@ -1,7 +1,7 @@
 /*
 title: Calendar Charts
 category: 'calendar, scatter'
-titleCN: 日力图
+titleCN: 日历图
 shotWidth: 1000
 difficulty: 11
 */
diff --git a/examples/data/calendar-horizontal.js b/examples/data/calendar-horizontal.js
index 9dde1f1..c9d9015 100644
--- a/examples/data/calendar-horizontal.js
+++ b/examples/data/calendar-horizontal.js
@@ -1,7 +1,7 @@
 /*
 title: Calendar Heatmap Horizontal
 category: calendar
-titleCN: 横向日力图
+titleCN: 横向日历图
 shotWidth: 900
 difficulty: 2
 */
diff --git a/examples/data/candlestick-brush.js b/examples/data/candlestick-brush.js
index 9ea6029..36c4da7 100644
--- a/examples/data/candlestick-brush.js
+++ b/examples/data/candlestick-brush.js
@@ -1,7 +1,7 @@
 /*
 title: Candlestick Brush
 category: candlestick
-titleCN: 日力图刷选
+titleCN: 日历图刷选
 */
 
 var upColor = '#00da3c';
diff --git a/examples/data/scatter-symbol-morph.js b/examples/data/scatter-symbol-morph.js
index c3006a5..e17f440 100644
--- a/examples/data/scatter-symbol-morph.js
+++ b/examples/data/scatter-symbol-morph.js
@@ -44,6 +44,7 @@ var options = [{
             type: 'scatter',
             data: data,
             symbol: 'roundRect',
+            symbolKeepAspect: true,
             universalTransition: true,
             symbolSize: 50
         }
@@ -56,36 +57,71 @@ var options = [{
     }]
 },
 
+
 {
+    // heart
     series: [{
-        type: 'scatter',
-        symbol: 'diamond'
+        symbol: 'path://M23.6 2c-3.363 0-6.258 2.736-7.599 5.594-1.342-2.858-4.237-5.594-7.601-5.594-4.637 0-8.4 3.764-8.4 8.401 0 9.433 9.516 11.906 16.001 21.232 6.13-9.268 15.999-12.1 15.999-21.232 0-4.637-3.763-8.401-8.4-8.401z',
     }]
 },
 
 {
+    // happy
     series: [{
-        symbol: 'path://M23.6 2c-3.363 0-6.258 2.736-7.599 5.594-1.342-2.858-4.237-5.594-7.601-5.594-4.637 0-8.4 3.764-8.4 8.401 0 9.433 9.516 11.906 16.001 21.232 6.13-9.268 15.999-12.1 15.999-21.232 0-4.637-3.763-8.401-8.4-8.401z',
+        symbol: 'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM10 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM16 28c-5.215 0-9.544-4.371-10-9.947 2.93 1.691 6.377 2.658 10 2.658s7.070-0.963 10-2.654c-0.455 5.576-4.785 9.942-10 9.942z',
     }]
 },
 
 {
+    // evil
     series: [{
-        symbol: 'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM10 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM16 28c-5.215 0-9.544-4.371-10-9.947 2.93 1.691 6.377 2.658 10 2.658s7.070-0.963 10-2.654c-0.455 5.576-4.785 9.942-10 9.942z',
+        symbol: 'path://M32 2c0-1.422-0.298-2.775-0.833-4-1.049 2.401-3.014 4.31-5.453 5.287-2.694-2.061-6.061-3.287-9.714-3.287s-7.021 1.226-9.714 3.287c-2.439-0.976-4.404-2.886-5.453-5.287-0.535 1.225-0.833 2.578-0.833 4 0 2.299 0.777 4.417 2.081 6.106-1.324 2.329-2.081 5.023-2.081 7.894 0 8.837 7.163 16 16 16s16-7.163 16-16c0-2.871-0.757-5.565-2.081-7.894 1.304-1.689 2.081-3.806 2.081-6.106zM18.003 11.891c0.064-1.483 1.413-2.467 2.55-3.036 1.086-0.543 2.16-0.814 2.205-0.826 0.536-0.13 [...]
     }]
 },
 
 {
+    // hipster
     series: [{
-        symbol: 'path://M32 2c0-1.422-0.298-2.775-0.833-4-1.049 2.401-3.014 4.31-5.453 5.287-2.694-2.061-6.061-3.287-9.714-3.287s-7.021 1.226-9.714 3.287c-2.439-0.976-4.404-2.886-5.453-5.287-0.535 1.225-0.833 2.578-0.833 4 0 2.299 0.777 4.417 2.081 6.106-1.324 2.329-2.081 5.023-2.081 7.894 0 8.837 7.163 16 16 16s16-7.163 16-16c0-2.871-0.757-5.565-2.081-7.894 1.304-1.689 2.081-3.806 2.081-6.106zM18.003 11.891c0.064-1.483 1.413-2.467 2.55-3.036 1.086-0.543 2.16-0.814 2.205-0.826 0.536-0.13 [...]
+        symbol: 'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 0.895 2 2s-0.895 2-2 2-2-0.895-2-2 0.895-2 2-2zM10 8c1.105 0 2 0.895 2 2s-0.895 2-2 2-2-0.895-2-2 0.895-2 2-2zM16.994 21.23c-0.039-0.035-0.078-0.072-0.115-0.109-0.586-0.586-0.878-1.353-0.879-2.121-0 0.768-0.293 1.535-0.879 2.121-0.038 0.038-0.076 0.074-0.115 0.109-2.704 2.453-9.006-0.058-9.006-3.23 1.938 1.25 3.452 0.306 4.879-1.121 1.172-1.172 3.071-1.172 4.243 0 0.586 0.58 [...]
+    }]
+},
+
+{
+    // shocked
+    series: [{
+        symbol: 'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM10 14c-1.105 0-2-1.343-2-3s0.895-3 2-3 2 1.343 2 3-0.895 3-2 3zM16 26c-2.209 0-4-1.791-4-4s1.791-4 4-4c2.209 0 4 1.791 4 4s-1.791 4-4 4zM22 14c-1.105 0-2-1.343-2-3s0.895-3 2-3 2 1.343 2 3-0.895 3-2 3z',
+    }]
+},
+
+{
+    // pie chart
+    series: [{
+        symbol: 'path://M14 18v-14c-7.732 0-14 6.268-14 14s6.268 14 14 14 14-6.268 14-14c0-2.251-0.532-4.378-1.476-6.262l-12.524 6.262zM28.524 7.738c-2.299-4.588-7.043-7.738-12.524-7.738v14l12.524-6.262z'
+    }]
+},
+
+{
+    // users
+    series: [{
+        symbol: 'path://M10.225 24.854c1.728-1.13 3.877-1.989 6.243-2.513-0.47-0.556-0.897-1.176-1.265-1.844-0.95-1.726-1.453-3.627-1.453-5.497 0-2.689 0-5.228 0.956-7.305 0.928-2.016 2.598-3.265 4.976-3.734-0.529-2.39-1.936-3.961-5.682-3.961-6 0-6 4.029-6 9 0 3.096 1.797 6.191 4 7.432v1.649c-6.784 0.555-12 3.888-12 7.918h8.719c0.454-0.403 0.956-0.787 1.506-1.146zM24 24.082v-1.649c2.203-1.241 4-4.337 4-7.432 0-4.971 0-9-6-9s-6 4.029-6 9c0 3.096 1.797 6.191 4 7.432v1.649c-6.784 0.555-12 3 [...]
     }]
 },
 
 {
+    // mug
     series: [{
-        symbol: 'path://M30.148 5.588c-2.934-3.42-7.288-5.588-12.148-5.588-8.837 0-16 7.163-16 16s7.163 16 16 16c4.86 0 9.213-2.167 12.148-5.588l-10.148-10.412 10.148-10.412zM22 3.769c1.232 0 2.231 0.999 2.231 2.231s-0.999 2.231-2.231 2.231-2.231-0.999-2.231-2.231c0-1.232 0.999-2.231 2.231-2.231z',
+        symbol: 'path://M30 10h-6v-3c0-2.761-5.373-5-12-5s-12 2.239-12 5v20c0 2.761 5.373 5 12 5s12-2.239 12-5v-3h6c1.105 0 2-0.895 2-2v-10c0-1.105-0.895-2-2-2zM5.502 8.075c-1.156-0.381-1.857-0.789-2.232-1.075 0.375-0.286 1.075-0.694 2.232-1.075 1.811-0.597 4.118-0.925 6.498-0.925s4.688 0.329 6.498 0.925c1.156 0.381 1.857 0.789 2.232 1.075-0.375 0.286-1.076 0.694-2.232 1.075-1.811 0.597-4.118 0.925-6.498 0.925s-4.688-0.329-6.498-0.925zM28 20h-4v-6h4v6z'
     }]
-}];
+},
+
+{
+    // plane
+    series: [{
+        symbol: 'path://M24 19.999l-5.713-5.713 13.713-10.286-4-4-17.141 6.858-5.397-5.397c-1.556-1.556-3.728-1.928-4.828-0.828s-0.727 3.273 0.828 4.828l5.396 5.396-6.858 17.143 4 4 10.287-13.715 5.713 5.713v7.999h4l2-6 6-2v-4l-7.999 0z'
+    }]
+}
+
+];
 
 
 var optionIndex = 0;
@@ -94,4 +130,4 @@ option = options[optionIndex];
 setInterval(function () {
     optionIndex = (optionIndex + 1) % options.length;
     myChart.setOption(options[optionIndex]);
-}, 1000);
\ No newline at end of file
+}, 700);
\ No newline at end of file
diff --git a/examples/en/editor.html b/examples/en/editor.html
index 817c050..6ee6937 100644
--- a/examples/en/editor.html
+++ b/examples/en/editor.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,12 +10,12 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/examples/css/example-bundle.css?_v_=4e03a5649f"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body>< [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     page: 'editor',
     locale: 'en'
-};</script><script type="text/javascript">window.globalArgsExtra.version = '1630499963508';
+};</script><script type="text/javascript">window.globalArgsExtra.version = '1631700580897';
 window.globalArgsExtra.cdnRoot = EC_WWW_CDN_PAY_ROOT + '/examples';
 echartsExample.init('#ec-example-main', window.globalArgsExtra);</script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
diff --git a/examples/en/index.html b/examples/en/index.html
index 72d1043..36816b2 100644
--- a/examples/en/index.html
+++ b/examples/en/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,12 +10,12 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/examples/css/example-bundle.css?_v_=4e03a5649f"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body>< [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 window.EC_WWW_CDN_PAY_ROOT = 'https://echarts.apache.org';
 </script><script type="text/javascript">window.globalArgsExtra = {
     page: 'explore',
     locale: 'en'
-};</script><script type="text/javascript">window.globalArgsExtra.version = '1630499963508';
+};</script><script type="text/javascript">window.globalArgsExtra.version = '1631700580897';
 window.globalArgsExtra.cdnRoot = EC_WWW_CDN_PAY_ROOT + '/examples';
 echartsExample.init('#ec-example-main', window.globalArgsExtra);</script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {
diff --git a/examples/en/view.html b/examples/en/view.html
index ff38b3c..cd6e4ef 100644
--- a/examples/en/view.html
+++ b/examples/en/view.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
+<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="https://echarts.apache.org/en/images/favicon.png?_v_=20200710_1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/boot [...]
 </script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/pace-progressbar@1.0.2/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
     var el = document.createElement('style');
     el.innerHTML = ''
@@ -10,11 +10,11 @@
     /* position: sticky should not have overflow parents.*/
     overflow-x: hidden;
 }</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css"><link rel="stylesheet" href="https://echarts.apache.org/examples/css/example-bundle.css?_v_=4e03a5649f"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://echarts.apache.org/en/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body>< [...]
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><noscript><div class="no-script"><strong>We're sorry, but Apache ECharts website doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></div></noscript><div id="apache-banner"><div class="txt"><p>Please visit the official Apache ECharts Website at</p><a id="a2" href="https://echarts.apache.org/en/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target= [...]
 </script><script type="text/javascript">window.globalArgsExtra = {
     page: 'view',
     locale: 'en'
-};</script><script type="text/javascript">window.globalArgsExtra.version = '1630499963508';
+};</script><script type="text/javascript">window.globalArgsExtra.version = '1631700580897';
 window.globalArgsExtra.cdnRoot = EC_WWW_CDN_PAY_ROOT + '/examples';
 echartsExample.init('#ec-example-main', window.globalArgsExtra);
 
diff --git a/examples/examples/ts/area-basic.ts b/examples/examples/ts/area-basic.ts
new file mode 100644
index 0000000..13cfbc5
--- /dev/null
+++ b/examples/examples/ts/area-basic.ts
@@ -0,0 +1,24 @@
+/*
+title: Basic area chart
+titleCN: 基础面积图
+category: line
+difficulty: 1
+*/
+
+option = {
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [{
+        data: [820, 932, 901, 934, 1290, 1330, 1320],
+        type: 'line',
+        areaStyle: {}
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-pieces.ts b/examples/examples/ts/area-pieces.ts
new file mode 100644
index 0000000..70f3ea5
--- /dev/null
+++ b/examples/examples/ts/area-pieces.ts
@@ -0,0 +1,67 @@
+/*
+title: Area Pieces
+titleCN: 折线图区域高亮
+category: 'line, visualMap'
+difficulty: 3
+*/
+
+option = {
+    xAxis: {
+        type: 'category',
+        boundaryGap: false
+    },
+    yAxis: {
+        type: 'value',
+        boundaryGap: [0, '30%']
+    },
+    visualMap: {
+        type: 'piecewise',
+        show: false,
+        dimension: 0,
+        seriesIndex: 0,
+        pieces: [{
+            gt: 1,
+            lt: 3,
+            color: 'rgba(0, 0, 180, 0.4)'
+        }, {
+            gt: 5,
+            lt: 7,
+            color: 'rgba(0, 0, 180, 0.4)'
+        }]
+    },
+    series: [
+        {
+            type: 'line',
+            smooth: 0.6,
+            symbol: 'none',
+            lineStyle: {
+                color: '#5470C6',
+                width: 5
+            },
+            markLine: {
+                symbol: ['none', 'none'],
+                label: {show: false},
+                data: [
+                    {xAxis: 1},
+                    {xAxis: 3},
+                    {xAxis: 5},
+                    {xAxis: 7}
+                ]
+            },
+            areaStyle: {},
+            data: [
+                ['2019-10-10', 200],
+                ['2019-10-11', 560],
+                ['2019-10-12', 750],
+                ['2019-10-13', 580],
+                ['2019-10-14', 250],
+                ['2019-10-15', 300],
+                ['2019-10-16', 450],
+                ['2019-10-17', 300],
+                ['2019-10-18', 100]
+            ]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-rainfall.ts b/examples/examples/ts/area-rainfall.ts
new file mode 100644
index 0000000..a8d833b
--- /dev/null
+++ b/examples/examples/ts/area-rainfall.ts
@@ -0,0 +1,190 @@
+/*
+title: Rainfall
+titleCN: 雨量流量关系图
+category: line
+difficulty: 5
+*/
+
+option = {
+    title: {
+        text: 'Rainfall and Flow Relationship',
+        left: 'center',
+        textAlign: 'right'
+    },
+    grid: {
+        bottom: 80
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross',
+            animation: false,
+            label: {
+                backgroundColor: '#505765'
+            }
+        }
+    },
+    legend: {
+        data: ['Flow', 'Rainfall'],
+        left: 10
+    },
+    dataZoom: [
+        {
+            show: true,
+            realtime: true,
+            start: 65,
+            end: 85
+        },
+        {
+            type: 'inside',
+            realtime: true,
+            start: 65,
+            end: 85
+        }
+    ],
+    xAxis: [
+        {
+            type: 'category',
+            boundaryGap: false,
+            axisLine: {onZero: false},
+            data: [
+                '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00',
+                '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00',
+                '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00',
+                '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00',
+                '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00',
+                '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00',
+                '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00',
+                '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00',
+                '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00',
+                '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00',
+                '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00',
+                '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00',
+                '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00',
+                '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00',
+                '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00',
+                '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00',
+                '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00',
+                '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00',
+                '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00',
+                '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00',
+                '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00',
+                '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00',
+                '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00',
+                '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00',
+                '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00',
+                '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00',
+                '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00',
+                '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00',
+                '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00',
+                '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00',
+                '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00',
+                '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00',
+                '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00',
+                '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00',
+                '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00',
+                '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00',
+                '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00',
+                '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00',
+                '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00',
+                '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00',
+                '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00',
+                '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00',
+                '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00',
+                '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00',
+                '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00',
+                '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00',
+                '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00',
+                '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00',
+                '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00',
+                '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00',
+                '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '20 [...]
+                '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '20 [...]
+                '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1 [...]
+            ].map(function (str) {
+                return str.replace(' ', '\n');
+            })
+        }
+    ],
+    yAxis: [
+        {
+            name: 'Flow(m^3/s)',
+            type: 'value',
+            max: 500
+        },
+        {
+            name: 'Rainfall(mm)',
+            nameLocation: 'start',
+            max: 5,
+            type: 'value',
+            inverse: true
+        }
+    ],
+    series: [
+        {
+            name: 'Flow',
+            type: 'line',
+            areaStyle: {},
+            lineStyle: {
+                width: 1
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            markArea: {
+                silent: true,
+                itemStyle: {
+                    opacity: 0.3
+                },
+                data: [[{
+                    xAxis: '2009/9/12\n7:00'
+                }, {
+                    xAxis: '2009/9/22\n7:00'
+                }]]
+            },
+            data: [
+                0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0 [...]
+            ]
+        },
+        {
+            name: 'Rainfall',
+            type: 'line',
+            yAxisIndex: 1,
+            areaStyle: {},
+            lineStyle: {
+                width: 1
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            markArea: {
+                silent: true,
+                itemStyle: {
+                    opacity: 0.3
+                },
+                data: [
+                    [{
+                        xAxis: '2009/9/10\n7:00'
+                    }, {
+                        xAxis: '2009/9/20\n7:00'
+                    }]
+                ]
+            },
+            data: [
+                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.017,0.017,0.017,0.017,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.021,0.026,0.03,0.036,0.036,0.195,0.221,0.019,0.013,0.017,0.03,0.03,0.03,0.046,0.045,0.038,0.084,0.045,0.045,0.037,0.034,0.035,0.036,0.044,0.052,0.048,0.109,0.033,0.029,0.04,0.042,0.042,0.042,0.073,0.076,0.062,0.066,0.066,0.075,0.096,0.128 [...]
+            ]
+        }
+    ]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-simple.ts b/examples/examples/ts/area-simple.ts
new file mode 100644
index 0000000..8ab9c88
--- /dev/null
+++ b/examples/examples/ts/area-simple.ts
@@ -0,0 +1,80 @@
+/*
+title: Large scale area chart
+titleCN: 大数据量面积图
+category: 'line, dataZoom'
+difficulty: 4
+*/
+
+let base = +new Date(1968, 9, 3);
+let oneDay = 24 * 3600 * 1000;
+let date = [];
+
+let data = [Math.random() * 300];
+
+for (let i = 1; i < 20000; i++) {
+    var now = new Date(base += oneDay);
+    date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));
+    data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
+}
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        position: function (pt) {
+            return [pt[0], '10%'];
+        }
+    },
+    title: {
+        left: 'center',
+        text: 'Large Area Chart',
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: date
+    },
+    yAxis: {
+        type: 'value',
+        boundaryGap: [0, '100%']
+    },
+    dataZoom: [{
+        type: 'inside',
+        start: 0,
+        end: 10
+    }, {
+        start: 0,
+        end: 10
+    }],
+    series: [
+        {
+            name: 'Fake Data',
+            type: 'line',
+            symbol: 'none',
+            sampling: 'lttb',
+            itemStyle: {
+                color: 'rgb(255, 70, 131)'
+            },
+            areaStyle: {
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgb(255, 158, 68)'
+                }, {
+                    offset: 1,
+                    color: 'rgb(255, 70, 131)'
+                }])
+            },
+            data: data
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-stack-gradient.ts b/examples/examples/ts/area-stack-gradient.ts
new file mode 100644
index 0000000..8ab69ca
--- /dev/null
+++ b/examples/examples/ts/area-stack-gradient.ts
@@ -0,0 +1,176 @@
+/*
+title: Gradient Stacked Area Chart
+titleCN: 渐变堆叠面积图
+category: line
+difficulty: 2
+*/
+
+option = {
+    color: ['#80FFA5', '#00DDFF', '#37A2FF', '#FF0087', '#FFBF00'],
+    title: {
+        text: 'Gradient Stacked Area Chart'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross',
+            label: {
+                backgroundColor: '#6a7985'
+            }
+        }
+    },
+    legend: {
+        data: ['Line 1', 'Line 2', 'Line 3', 'Line 4', 'Line 5']
+    },
+    toolbox: {
+        feature: {
+            saveAsImage: {}
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'category',
+            boundaryGap: false,
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Line 1',
+            type: 'line',
+            stack: 'Total',
+            smooth: true,
+            lineStyle: {
+                width: 0
+            },
+            showSymbol: false,
+            areaStyle: {
+                opacity: 0.8,
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgba(128, 255, 165)'
+                }, {
+                    offset: 1,
+                    color: 'rgba(1, 191, 236)'
+                }])
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [140, 232, 101, 264, 90, 340, 250]
+        },
+        {
+            name: 'Line 2',
+            type: 'line',
+            stack: 'Total',
+            smooth: true,
+            lineStyle: {
+                width: 0
+            },
+            showSymbol: false,
+            areaStyle: {
+                opacity: 0.8,
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgba(0, 221, 255)'
+                }, {
+                    offset: 1,
+                    color: 'rgba(77, 119, 255)'
+                }])
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [120, 282, 111, 234, 220, 340, 310]
+        },
+        {
+            name: 'Line 3',
+            type: 'line',
+            stack: 'Total',
+            smooth: true,
+            lineStyle: {
+                width: 0
+            },
+            showSymbol: false,
+            areaStyle: {
+                opacity: 0.8,
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgba(55, 162, 255)'
+                }, {
+                    offset: 1,
+                    color: 'rgba(116, 21, 219)'
+                }])
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 132, 201, 334, 190, 130, 220]
+        },
+        {
+            name: 'Line 4',
+            type: 'line',
+            stack: 'Total',
+            smooth: true,
+            lineStyle: {
+                width: 0
+            },
+            showSymbol: false,
+            areaStyle: {
+                opacity: 0.8,
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgba(255, 0, 135)'
+                }, {
+                    offset: 1,
+                    color: 'rgba(135, 0, 157)'
+                }])
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 402, 231, 134, 190, 230, 120]
+        },
+        {
+            name: 'Line 5',
+            type: 'line',
+            stack: 'Total',
+            smooth: true,
+            lineStyle: {
+                width: 0
+            },
+            showSymbol: false,
+            label: {
+                show: true,
+                position: 'top'
+            },
+            areaStyle: {
+                opacity: 0.8,
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                    offset: 0,
+                    color: 'rgba(255, 191, 0)'
+                }, {
+                    offset: 1,
+                    color: 'rgba(224, 62, 76)'
+                }])
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 302, 181, 234, 210, 290, 150]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-stack.ts b/examples/examples/ts/area-stack.ts
new file mode 100644
index 0000000..3b0683c
--- /dev/null
+++ b/examples/examples/ts/area-stack.ts
@@ -0,0 +1,105 @@
+/*
+title: Stacked Area Chart
+titleCN: 堆叠面积图
+category: line
+difficulty: 2
+*/
+
+option = {
+    title: {
+        text: 'Stacked Area Chart'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross',
+            label: {
+                backgroundColor: '#6a7985'
+            }
+        }
+    },
+    legend: {
+        data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
+    },
+    toolbox: {
+        feature: {
+            saveAsImage: {}
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'category',
+            boundaryGap: false,
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Email',
+            type: 'line',
+            stack: 'Total',
+            areaStyle: {},
+            emphasis: {
+                focus: 'series'
+            },
+            data: [120, 132, 101, 134, 90, 230, 210]
+        },
+        {
+            name: 'Union Ads',
+            type: 'line',
+            stack: 'Total',
+            areaStyle: {},
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 182, 191, 234, 290, 330, 310]
+        },
+        {
+            name: 'Video Ads',
+            type: 'line',
+            stack: 'Total',
+            areaStyle: {},
+            emphasis: {
+                focus: 'series'
+            },
+            data: [150, 232, 201, 154, 190, 330, 410]
+        },
+        {
+            name: 'Direct',
+            type: 'line',
+            stack: 'Total',
+            areaStyle: {},
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 332, 301, 334, 390, 330, 320]
+        },
+        {
+            name: 'Search Engine',
+            type: 'line',
+            stack: 'Total',
+            label: {
+                show: true,
+                position: 'top'
+            },
+            areaStyle: {},
+            emphasis: {
+                focus: 'series'
+            },
+            data: [820, 932, 901, 934, 1290, 1330, 1320]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/area-time-axis.ts b/examples/examples/ts/area-time-axis.ts
new file mode 100644
index 0000000..17f2a6e
--- /dev/null
+++ b/examples/examples/ts/area-time-axis.ts
@@ -0,0 +1,69 @@
+/*
+title: Area Chart with Time Axis
+titleCN: 时间轴折线图
+category: line
+difficulty: 5
+*/
+
+let base = +new Date(1988, 9, 3);
+let oneDay = 24 * 3600 * 1000;
+
+let data = [[base, Math.random() * 300]];
+
+for (let i = 1; i < 20000; i++) {
+    let now = new Date(base += oneDay);
+    data.push([
+        +now,
+        Math.round((Math.random() - 0.5) * 20 + data[i - 1][1])
+    ]);
+}
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        position: function (pt) {
+            return [pt[0], '10%'];
+        }
+    },
+    title: {
+        left: 'center',
+        text: 'Large Ara Chart',
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    xAxis: {
+        type: 'time',
+        boundaryGap: false
+    },
+    yAxis: {
+        type: 'value',
+        boundaryGap: [0, '100%']
+    },
+    dataZoom: [{
+        type: 'inside',
+        start: 0,
+        end: 20
+    }, {
+        start: 0,
+        end: 20
+    }],
+    series: [
+        {
+            name: 'Fake Data',
+            type: 'line',
+            smooth: true,
+            symbol: 'none',
+            areaStyle: {},
+            data: data
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-animation-delay.ts b/examples/examples/ts/bar-animation-delay.ts
new file mode 100644
index 0000000..3002c03
--- /dev/null
+++ b/examples/examples/ts/bar-animation-delay.ts
@@ -0,0 +1,70 @@
+/*
+title: Animation Delay
+titleCN: 柱状图动画延迟
+category: bar
+difficulty: 5
+*/
+
+var xAxisData = [];
+var data1 = [];
+var data2 = [];
+for (var i = 0; i < 100; i++) {
+    xAxisData.push('类目' + i);
+    data1.push((Math.sin(i / 5) * (i / 5 -10) + i / 6) * 5);
+    data2.push((Math.cos(i / 5) * (i / 5 -10) + i / 6) * 5);
+}
+
+option = {
+    title: {
+        text: 'Bar Animation Delay'
+    },
+    legend: {
+        data: ['bar', 'bar2']
+    },
+    toolbox: {
+        // y: 'bottom',
+        feature: {
+            magicType: {
+                type: ['stack']
+            },
+            dataView: {},
+            saveAsImage: {
+                pixelRatio: 2
+            }
+        }
+    },
+    tooltip: {},
+    xAxis: {
+        data: xAxisData,
+        splitLine: {
+            show: false
+        }
+    },
+    yAxis: {
+    },
+    series: [{
+        name: 'bar',
+        type: 'bar',
+        data: data1,
+        emphasis: {
+            focus: 'series'
+        },
+        animationDelay: function (idx) {
+            return idx * 10;
+        }
+    }, {
+        name: 'bar2',
+        type: 'bar',
+        data: data2,
+        emphasis: {
+            focus: 'series'
+        },
+        animationDelay: function (idx) {
+            return idx * 10 + 100;
+        }
+    }],
+    animationEasing: 'elasticOut',
+    animationDelayUpdate: function (idx) {
+        return idx * 5;
+    }
+};
\ No newline at end of file
diff --git a/examples/examples/ts/bar-background.ts b/examples/examples/ts/bar-background.ts
new file mode 100644
index 0000000..3c89094
--- /dev/null
+++ b/examples/examples/ts/bar-background.ts
@@ -0,0 +1,26 @@
+/*
+title: Bar with Background
+category: bar
+titleCN: 带背景色的柱状图
+difficulty: 0
+*/
+
+option = {
+    xAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [{
+        data: [120, 200, 150, 80, 70, 110, 130],
+        type: 'bar',
+        showBackground: true,
+        backgroundStyle: {
+            color: 'rgba(180, 180, 180, 0.2)'
+        }
+    }]
+};
+
+export {}
diff --git a/examples/examples/ts/bar-brush.ts b/examples/examples/ts/bar-brush.ts
new file mode 100644
index 0000000..abb4cbd
--- /dev/null
+++ b/examples/examples/ts/bar-brush.ts
@@ -0,0 +1,115 @@
+/*
+title: Brush Select on Column Chart
+titleCN: 柱状图框选
+category: bar
+difficulty: 4
+*/
+
+let xAxisData: string[] = [];
+let data1: number[] = [];
+let data2: number[] = [];
+let data3: number[] = [];
+let data4: number[] = [];
+
+for (let i = 0; i < 10; i++) {
+    xAxisData.push('Class' + i);
+    data1.push(+(Math.random() * 2).toFixed(2));
+    data2.push(+(Math.random() * 5).toFixed(2));
+    data3.push(+(Math.random() + 0.3).toFixed(2));
+    data4.push(+Math.random().toFixed(2));
+}
+
+var emphasisStyle = {
+    itemStyle: {
+        shadowBlur: 10,
+        shadowColor: 'rgba(0,0,0,0.3)'
+    }
+};
+
+option = {
+    legend: {
+        data: ['bar', 'bar2', 'bar3', 'bar4'],
+        left: '10%'
+    },
+    brush: {
+        toolbox: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],
+        xAxisIndex: 0
+    },
+    toolbox: {
+        feature: {
+            magicType: {
+                type: ['stack']
+            },
+            dataView: {}
+        }
+    },
+    tooltip: {},
+    xAxis: {
+        data: xAxisData,
+        name: 'X Axis',
+        axisLine: {onZero: true},
+        splitLine: {show: false},
+        splitArea: {show: false}
+    },
+    yAxis: {},
+    grid: {
+        bottom: 100
+    },
+    series: [
+        {
+            name: 'bar',
+            type: 'bar',
+            stack: 'one',
+            emphasis: emphasisStyle,
+            data: data1
+        },
+        {
+            name: 'bar2',
+            type: 'bar',
+            stack: 'one',
+            emphasis: emphasisStyle,
+            data: data2
+        },
+        {
+            name: 'bar3',
+            type: 'bar',
+            stack: 'two',
+            emphasis: emphasisStyle,
+            data: data3
+        },
+        {
+            name: 'bar4',
+            type: 'bar',
+            stack: 'two',
+            emphasis: emphasisStyle,
+            data: data4
+        }
+    ]
+};
+
+myChart.on('brushSelected', function (params: any) {
+    var brushed = [];
+    var brushComponent = params.batch[0];
+
+    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
+        var rawIndices = brushComponent.selected[sIdx].dataIndex;
+        brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
+    }
+
+    myChart.setOption<echarts.EChartsOption>({
+        title: {
+            backgroundColor: '#333',
+            text: 'SELECTED DATA INDICES: \n' + brushed.join('\n'),
+            bottom: 0,
+            right:'10%',
+            width: 100,
+            textStyle: {
+                fontSize: 12,
+                color: '#fff'
+            }
+        }
+    });
+});
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-data-color.ts b/examples/examples/ts/bar-data-color.ts
new file mode 100644
index 0000000..b5eccae
--- /dev/null
+++ b/examples/examples/ts/bar-data-color.ts
@@ -0,0 +1,27 @@
+/*
+title: Set Style of Single Bar.
+category: bar
+titleCN: 自定义单个柱子颜色
+difficulty: 1
+*/
+
+option = {
+    xAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [{
+        data: [120, {
+            value: 200,
+            itemStyle: {
+                color: '#a90000'
+            }
+        }, 150, 80, 70, 110, 130],
+        type: 'bar'
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-drilldown.ts b/examples/examples/ts/bar-drilldown.ts
new file mode 100644
index 0000000..864766c
--- /dev/null
+++ b/examples/examples/ts/bar-drilldown.ts
@@ -0,0 +1,105 @@
+/*
+title: Bar Chart Drilldown Animation.
+category: bar
+titleCN: 柱状图下钻动画
+difficulty: 5
+*/
+
+
+interface DataItem {
+    value: number
+    groupId: string
+}
+option = {
+    xAxis: {
+        data: ['Animals', 'Fruits', 'Cars']
+    },
+    yAxis: {},
+    dataGroupId: '',
+    animationDurationUpdate: 500,
+    series: {
+        type: 'bar',
+        id: 'sales',
+        data: [{
+            value: 5,
+            groupId: 'animals'
+        }, {
+            value: 2,
+            groupId: 'fruits'
+        }, {
+            value: 4,
+            groupId: 'cars'
+        }] as DataItem[],
+        universalTransition: {
+            enabled: true,
+            divideShape: 'clone'
+        }
+    }
+};
+
+const drilldownData = [{
+    dataGroupId: 'animals',
+    data: [
+        ['Cats', 4],
+        ['Dogs', 2],
+        ['Cows', 1],
+        ['Sheep', 2],
+        ['Pigs', 1]
+    ]
+}, {
+    dataGroupId: 'fruits',
+    data: [
+        ['Apples', 4],
+        ['Oranges', 2]
+    ]
+}, {
+    dataGroupId: 'cars',
+    data: [
+        ['Toyota', 4],
+        ['Opel', 2],
+        ['Volkswagen', 2]
+    ]
+}];
+
+myChart.on('click', function (event) {
+    if (event.data) {
+        var subData = drilldownData.find(function (data) {
+            return data.dataGroupId === (event.data as DataItem).groupId;
+        });
+        if (!subData) {
+            return;
+        }
+        myChart.setOption<echarts.EChartsOption>({
+            xAxis: {
+                data: subData.data.map(function (item) {
+                    return item[0];
+                })
+            },
+            series: {
+                type: 'bar',
+                id: 'sales',
+                dataGroupId: subData.dataGroupId,
+                data: subData.data.map(function (item) {
+                    return item[1];
+                }),
+                universalTransition: {
+                    enabled: true,
+                    divideShape: 'clone'
+                }
+            },
+            graphic: [{
+                type: 'text',
+                left: 50,
+                top: 20,
+                style: {
+                    text: 'Back',
+                    fontSize: 18
+                },
+                onclick: function () {
+                    myChart.setOption<echarts.EChartsOption>(option);
+                }
+            }]
+        });
+    }
+});
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-gradient.ts b/examples/examples/ts/bar-gradient.ts
new file mode 100644
index 0000000..a22168d
--- /dev/null
+++ b/examples/examples/ts/bar-gradient.ts
@@ -0,0 +1,94 @@
+/*
+title: Clickable Column Chart with Gradient
+titleCN: 特性示例:渐变色 阴影 点击缩放
+category: bar
+difficulty: 3
+*/
+
+var dataAxis = ['点', '击', '柱', '子', '或', '者', '两', '指', '在', '触', '屏', '上', '滑', '动', '能', '够', '自', '动', '缩', '放'];
+var data = [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220];
+var yMax = 500;
+var dataShadow = [];
+
+for (var i = 0; i < data.length; i++) {
+    dataShadow.push(yMax);
+}
+
+option = {
+    title: {
+        text: '特性示例:渐变色 阴影 点击缩放',
+        subtext: 'Feature Sample: Gradient Color, Shadow, Click Zoom'
+    },
+    xAxis: {
+        data: dataAxis,
+        axisLabel: {
+            inside: true,
+            color: '#fff'
+        },
+        axisTick: {
+            show: false
+        },
+        axisLine: {
+            show: false
+        },
+        z: 10
+    },
+    yAxis: {
+        axisLine: {
+            show: false
+        },
+        axisTick: {
+            show: false
+        },
+        axisLabel: {
+            color: '#999'
+        }
+    },
+    dataZoom: [
+        {
+            type: 'inside'
+        }
+    ],
+    series: [
+        {
+            type: 'bar',
+            showBackground: true,
+            itemStyle: {
+                color: new echarts.graphic.LinearGradient(
+                    0, 0, 0, 1,
+                    [
+                        {offset: 0, color: '#83bff6'},
+                        {offset: 0.5, color: '#188df0'},
+                        {offset: 1, color: '#188df0'}
+                    ]
+                )
+            },
+            emphasis: {
+                itemStyle: {
+                    color: new echarts.graphic.LinearGradient(
+                        0, 0, 0, 1,
+                        [
+                            {offset: 0, color: '#2378f7'},
+                            {offset: 0.7, color: '#2378f7'},
+                            {offset: 1, color: '#83bff6'}
+                        ]
+                    )
+                }
+            },
+            data: data
+        }
+    ]
+};
+
+// Enable data zoom when user click bar.
+var zoomSize = 6;
+myChart.on('click', function (params) {
+    console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
+    myChart.dispatchAction({
+        type: 'dataZoom',
+        startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
+        endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
+    });
+});
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-histogram.ts b/examples/examples/ts/bar-histogram.ts
new file mode 100644
index 0000000..424db37
--- /dev/null
+++ b/examples/examples/ts/bar-histogram.ts
@@ -0,0 +1,127 @@
+/*
+title: Histogram with Custom Series
+category: custom
+titleCN: 直方图(自定义系列)
+difficulty: 0
+*/
+
+// See https://github.com/ecomfe/echarts-stat
+echarts.registerTransform(ecStat.transform.histogram);
+
+option = {
+    dataset: [{
+        source: [
+            [8.3, 143],
+            [8.6, 214],
+            [8.8, 251],
+            [10.5, 26],
+            [10.7, 86],
+            [10.8, 93],
+            [11.0, 176],
+            [11.0, 39],
+            [11.1, 221],
+            [11.2, 188],
+            [11.3, 57],
+            [11.4, 91],
+            [11.4, 191],
+            [11.7, 8],
+            [12.0, 196],
+            [12.9, 177],
+            [12.9, 153],
+            [13.3, 201],
+            [13.7, 199],
+            [13.8, 47],
+            [14.0, 81],
+            [14.2, 98],
+            [14.5, 121],
+            [16.0, 37],
+            [16.3, 12],
+            [17.3, 105],
+            [17.5, 168],
+            [17.9, 84],
+            [18.0, 197],
+            [18.0, 155],
+            [20.6, 125]
+        ]
+    }, {
+        transform: {
+            type: 'ecStat:histogram',
+            config: {}
+        }
+    }, {
+        transform: {
+            type: 'ecStat:histogram',
+            // print: true,
+            config: { dimensions: [1] }
+        }
+    }],
+    tooltip: {
+    },
+    grid: [{
+        top: '50%',
+        right: '50%'
+    }, {
+        bottom: '52%',
+        right: '50%',
+    }, {
+        top: '50%',
+        left: '52%'
+    }],
+    xAxis: [{
+        scale: true,
+        gridIndex: 0
+    }, {
+        type: 'category',
+        scale: true,
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        axisLine: { show: false },
+        gridIndex: 1
+    }, {
+        scale: true,
+        gridIndex: 2
+    }],
+    yAxis: [{
+        gridIndex: 0
+    }, {
+        gridIndex: 1
+    }, {
+        type: 'category',
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        axisLine: { show: false },
+        gridIndex: 2
+    }],
+    series: [{
+        name: 'origianl scatter',
+        type: 'scatter',
+        xAxisIndex: 0,
+        yAxisIndex: 0,
+        encode: { tooltip: [0, 1] },
+        datasetIndex: 0
+    }, {
+        name: 'histogram',
+        type: 'bar',
+        xAxisIndex: 1,
+        yAxisIndex: 1,
+        barWidth: '99.3%',
+        label: {
+            show: true,
+            position: 'top'
+        },
+        encode: { x: 0, y: 1, itemName: 4 },
+        datasetIndex: 1
+    }, {
+        name: 'histogram',
+        type: 'bar',
+        xAxisIndex: 2,
+        yAxisIndex: 2,
+        barWidth: '99.3%',
+        label: {
+            show: true,
+            position: 'right'
+        },
+        encode: { x: 1, y: 0, itemName: 4 },
+        datasetIndex: 2
+    }]
+};
diff --git a/examples/examples/ts/bar-label-rotation.ts b/examples/examples/ts/bar-label-rotation.ts
new file mode 100644
index 0000000..9218f49
--- /dev/null
+++ b/examples/examples/ts/bar-label-rotation.ts
@@ -0,0 +1,166 @@
+/*
+title: Bar Label Rotation
+titleCN: 柱状图标签旋转
+category: bar
+difficulty: 3
+*/
+
+const posList = [
+    'left', 'right', 'top', 'bottom',
+    'inside',
+    'insideTop', 'insideLeft', 'insideRight', 'insideBottom',
+    'insideTopLeft', 'insideTopRight', 'insideBottomLeft', 'insideBottomRight'
+] as const;
+
+app.configParameters = {
+    rotate: {
+        min: -90,
+        max: 90
+    },
+    align: {
+        options: {
+            left: 'left',
+            center: 'center',
+            right: 'right'
+        }
+    },
+    verticalAlign: {
+        options: {
+            top: 'top',
+            middle: 'middle',
+            bottom: 'bottom'
+        }
+    },
+    position: {
+        options: posList.reduce(function (map, pos) {
+            map[pos] = pos;
+            return map;
+        }, {} as Record<string, string>)
+    },
+    distance: {
+        min: 0,
+        max: 100
+    }
+};
+
+app.config = {
+    rotate: 90,
+    align: 'left',
+    verticalAlign: 'middle',
+    position: 'insideBottom',
+    distance: 15,
+    onChange: function () {
+        var labelOption = {
+            normal: {
+                rotate: app.config.rotate,
+                align: app.config.align,
+                verticalAlign: app.config.verticalAlign,
+                position: app.config.position,
+                distance: app.config.distance
+            }
+        };
+        myChart.setOption<echarts.EChartsOption>({
+            series: [{
+                label: labelOption
+            }, {
+                label: labelOption
+            }, {
+                label: labelOption
+            }, {
+                label: labelOption
+            }]
+        });
+    }
+};
+
+type BarLabelOption = NonNullable<echarts.BarSeriesOption['label']>
+
+const labelOption = {
+    show: true,
+    position: app.config.position as BarLabelOption['position'],
+    distance: app.config.distance as BarLabelOption['distance'],
+    align: app.config.align as BarLabelOption['align'],
+    verticalAlign: app.config.verticalAlign as BarLabelOption['verticalAlign'],
+    rotate: app.config.rotate as BarLabelOption['rotate'],
+    formatter: '{c}  {name|{a}}',
+    fontSize: 16,
+    rich: {
+        name: {}
+    }
+};
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    legend: {
+        data: ['Forest', 'Steppe', 'Desert', 'Wetland']
+    },
+    toolbox: {
+        show: true,
+        orient: 'vertical',
+        left: 'right',
+        top: 'center',
+        feature: {
+            mark: {show: true},
+            dataView: {show: true, readOnly: false},
+            magicType: {show: true, type: ['line', 'bar', 'stack']},
+            restore: {show: true},
+            saveAsImage: {show: true}
+        }
+    },
+    xAxis: [
+        {
+            type: 'category',
+            axisTick: {show: false},
+            data: ['2012', '2013', '2014', '2015', '2016']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Forest',
+            type: 'bar',
+            barGap: 0,
+            label: labelOption,
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 332, 301, 334, 390]
+        },
+        {
+            name: 'Steppe',
+            type: 'bar',
+            label: labelOption,
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 182, 191, 234, 290]
+        },
+        {
+            name: 'Desert',
+            type: 'bar',
+            label: labelOption,
+            emphasis: {
+                focus: 'series'
+            },
+            data: [150, 232, 201, 154, 190]
+        },
+        {
+            name: 'Wetland',
+            type: 'bar',
+            label: labelOption,
+            emphasis: {
+                focus: 'series'
+            },
+            data: [98, 77, 101, 99, 40]
+        }
+    ]
+};
\ No newline at end of file
diff --git a/examples/examples/ts/bar-large.ts b/examples/examples/ts/bar-large.ts
new file mode 100644
index 0000000..03be19a
--- /dev/null
+++ b/examples/examples/ts/bar-large.ts
@@ -0,0 +1,95 @@
+/*
+title: Large Scale Bar Chart
+category: bar
+titleCN: 大数据量柱图
+difficulty: 5
+*/
+
+
+const dataCount = 5e5;
+const data = generateData(dataCount);
+
+option = {
+    title: {
+        text: echarts.format.addCommas(dataCount) + ' Data',
+        left: 10
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: false
+            },
+            saveAsImage: {
+                pixelRatio: 2
+            }
+        }
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        bottom: 90
+    },
+    dataZoom: [{
+        type: 'inside'
+    }, {
+        type: 'slider'
+    }],
+    xAxis: {
+        data: data.categoryData,
+        silent: false,
+        splitLine: {
+            show: false
+        },
+        splitArea: {
+            show: false
+        }
+    },
+    yAxis: {
+        splitArea: {
+            show: false
+        }
+    },
+    series: [{
+        type: 'bar',
+        data: data.valueData,
+        // Set `large` for large data amount
+        large: true
+    }]
+};
+
+function generateData(count: number) {
+    let baseValue = Math.random() * 1000;
+    let time = +new Date(2011, 0, 1);
+    let smallBaseValue: number;
+
+    function next(idx: number) {
+        smallBaseValue = idx % 30 === 0
+            ? Math.random() * 700
+            : (smallBaseValue + Math.random() * 500 - 250);
+        baseValue += Math.random() * 20 - 10;
+        return Math.max(
+            0,
+            Math.round(baseValue + smallBaseValue) + 3000
+        );
+    }
+
+    const categoryData = [];
+    const valueData = [];
+
+    for (let i = 0; i < count; i++) {
+        categoryData.push(echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', time, false));
+        valueData.push(next(i).toFixed(2));
+        time += 1000;
+    }
+
+    return {
+        categoryData: categoryData,
+        valueData: valueData
+    };
+}
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-negative.ts b/examples/examples/ts/bar-negative.ts
new file mode 100644
index 0000000..a1c5aa2
--- /dev/null
+++ b/examples/examples/ts/bar-negative.ts
@@ -0,0 +1,79 @@
+/*
+title: Bar Chart with Negative Value
+titleCN: 正负条形图
+category: bar
+difficulty: 4
+*/
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+        }
+    },
+    legend: {
+        data: ['利润', '支出', '收入']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    yAxis: [
+        {
+            type: 'category',
+            axisTick: {
+                show: false
+            },
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        }
+    ],
+    series: [
+        {
+            name: '利润',
+            type: 'bar',
+            label: {
+                show: true,
+                position: 'inside'
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [200, 170, 240, 244, 200, 220, 210]
+        },
+        {
+            name: '收入',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 302, 341, 374, 390, 450, 420]
+        },
+        {
+            name: '支出',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true,
+                position: 'left'
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [-120, -132, -101, -134, -190, -230, -210]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-negative2.ts b/examples/examples/ts/bar-negative2.ts
new file mode 100644
index 0000000..2d4884d
--- /dev/null
+++ b/examples/examples/ts/bar-negative2.ts
@@ -0,0 +1,67 @@
+/*
+title: Bar Chart with Negative Value
+titleCN: 交错正负轴标签
+category: bar
+difficulty: 2
+*/
+
+const labelRight = {
+    position: 'right'
+} as const;
+
+option = {
+    title: {
+        text: 'Bar Chart with Negative Value'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        top: 80,
+        bottom: 30
+    },
+    xAxis: {
+        type: 'value',
+        position: 'top',
+        splitLine: {
+            lineStyle: {
+                type: 'dashed'
+            }
+        }
+    },
+    yAxis: {
+        type: 'category',
+        axisLine: {show: false},
+        axisLabel: {show: false},
+        axisTick: {show: false},
+        splitLine: {show: false},
+        data: ['ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'one']
+    },
+    series: [
+        {
+            name: 'Cost',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true,
+                formatter: '{b}'
+            },
+            data: [
+                {value: -0.07, label: labelRight},
+                {value: -0.09, label: labelRight},
+                0.2, 0.44,
+                {value: -0.23, label: labelRight},
+                0.08,
+                {value: -0.17, label: labelRight},
+                0.47,
+                {value: -0.36, label: labelRight},
+                0.18
+            ]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-polar-label-radial.ts b/examples/examples/ts/bar-polar-label-radial.ts
new file mode 100644
index 0000000..9ab4b01
--- /dev/null
+++ b/examples/examples/ts/bar-polar-label-radial.ts
@@ -0,0 +1,38 @@
+/*
+title: Radial Polar Bar Label Position
+titleCN: 极坐标柱状图标签
+category: bar
+difficulty: 2
+*/
+
+option = {
+    title: [{
+        text: 'Radial Polar Bar Label Position (middle)'
+    }],
+    polar: {
+        radius: [30, '80%']
+    },
+    radiusAxis: {
+        max: 4
+    },
+    angleAxis: {
+        type: 'category',
+        data: ['a', 'b', 'c', 'd'],
+        startAngle: 75
+    },
+    tooltip: {},
+    series: {
+        type: 'bar',
+        data: [2, 1.2, 2.4, 3.6],
+        coordinateSystem: 'polar',
+        label: {
+            show: true,
+            position: 'middle', // or 'start', 'insideStart', 'end', 'insideEnd'
+            formatter: '{b}: {c}',
+        }
+    },
+    backgroundColor: '#fff',
+    animation: false
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-polar-label-tangential.ts b/examples/examples/ts/bar-polar-label-tangential.ts
new file mode 100644
index 0000000..9fcd728
--- /dev/null
+++ b/examples/examples/ts/bar-polar-label-tangential.ts
@@ -0,0 +1,37 @@
+/*
+title: Tangential Polar Bar Label Position
+titleCN: 极坐标柱状图标签
+category: bar
+difficulty: 2
+*/
+option = {
+    title: [{
+        text: 'Tangential Polar Bar Label Position (middle)'
+    }],
+    polar: {
+        radius: [30, '80%']
+    },
+    angleAxis: {
+        max: 4,
+        startAngle: 75
+    },
+    radiusAxis: {
+        type: 'category',
+        data: ['a', 'b', 'c', 'd']
+    },
+    tooltip: {},
+    series: {
+        type: 'bar',
+        data: [2, 1.2, 2.4, 3.6],
+        coordinateSystem: 'polar',
+        label: {
+            show: true,
+            position: 'middle', // or 'start', 'insideStart', 'end', 'insideEnd'
+            formatter: '{b}: {c}',
+        }
+    },
+    backgroundColor: '#fff',
+    animation: false
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-polar-real-estate.ts b/examples/examples/ts/bar-polar-real-estate.ts
new file mode 100644
index 0000000..42d60b2
--- /dev/null
+++ b/examples/examples/ts/bar-polar-real-estate.ts
@@ -0,0 +1,104 @@
+/*
+title: Bar Chart on Polar
+category: bar
+difficulty: 7
+shotWidth: 800
+*/
+
+const data = [
+    [5000, 10000, 6785.71],
+    [4000, 10000, 6825],
+    [3000, 6500, 4463.33],
+    [2500, 5600, 3793.83],
+    [2000, 4000, 3060],
+    [2000, 4000, 3222.33],
+    [2500, 4000, 3133.33],
+    [1800, 4000, 3100],
+    [2000, 3500, 2750],
+    [2000, 3000, 2500],
+    [1800, 3000, 2433.33],
+    [2000, 2700, 2375],
+    [1500, 2800, 2150],
+    [1500, 2300, 2100],
+    [1600, 3500, 2057.14],
+    [1500, 2600, 2037.5],
+    [1500, 2417.54, 1905.85],
+    [1500, 2000, 1775],
+    [1500, 1800, 1650]
+];
+const cities = ['北京', '上海', '深圳', '广州', '苏州', '杭州', '南京', '福州', '青岛', '济南', '长春', '大连', '温州', '郑州', '武汉', '成都', '东莞', '沈阳', '烟台'];
+const barHeight = 50;
+
+option = {
+    title: {
+        text: 'How expensive is it to rent an apartment in China?',
+        subtext: 'Data from https://www.numbeo.com'
+    },
+    legend: {
+        show: true,
+        top: 'bottom',
+        data: ['Range', 'Average']
+    },
+    grid: {
+        top: 100
+    },
+    angleAxis: {
+        type: 'category',
+        data: cities
+    },
+    tooltip: {
+        show: true,
+        formatter: function (params: any) {
+            const id = params.dataIndex;
+            return cities[id] + '<br>Lowest:' + data[id][0] + '<br>Highest:' + data[id][1] + '<br>Average:' + data[id][2];
+        }
+    },
+    radiusAxis: {
+    },
+    polar: {
+    },
+    series: [{
+        type: 'bar',
+        itemStyle: {
+            color: 'transparent'
+        },
+        data: data.map(function (d) {
+            return d[0];
+        }),
+        coordinateSystem: 'polar',
+        stack: 'Min Max',
+        silent: true
+    }, {
+        type: 'bar',
+        data: data.map(function (d) {
+            return d[1] - d[0];
+        }),
+        coordinateSystem: 'polar',
+        name: 'Range',
+        stack: 'Min Max'
+    }, {
+        type: 'bar',
+        itemStyle: {
+            color: 'transparent'
+        },
+        data: data.map(function (d) {
+            return d[2] - barHeight;
+        }),
+        coordinateSystem: 'polar',
+        stack: 'Average',
+        silent: true,
+        z: 10
+    }, {
+        type: 'bar',
+        data: data.map(function (d) {
+            return barHeight * 2;
+        }),
+        coordinateSystem: 'polar',
+        name: 'Average',
+        stack: 'Average',
+        barGap: '-100%',
+        z: 10
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-polar-stack-radial.ts b/examples/examples/ts/bar-polar-stack-radial.ts
new file mode 100644
index 0000000..34a01e4
--- /dev/null
+++ b/examples/examples/ts/bar-polar-stack-radial.ts
@@ -0,0 +1,51 @@
+/*
+title: Stacked Bar Chart on Polar(Radial)
+titleCN: 极坐标系下的堆叠柱状图
+category: bar
+difficulty: 7
+*/
+
+option = {
+    angleAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    radiusAxis: {
+    },
+    polar: {
+    },
+    series: [{
+        type: 'bar',
+        data: [1, 2, 3, 4, 3, 5, 1],
+        coordinateSystem: 'polar',
+        name: 'A',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }, {
+        type: 'bar',
+        data: [2, 4, 6, 1, 3, 2, 1],
+        coordinateSystem: 'polar',
+        name: 'B',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }, {
+        type: 'bar',
+        data: [1, 2, 3, 4, 1, 2, 5],
+        coordinateSystem: 'polar',
+        name: 'C',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }],
+    legend: {
+        show: true,
+        data: ['A', 'B', 'C']
+    }
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-polar-stack.ts b/examples/examples/ts/bar-polar-stack.ts
new file mode 100644
index 0000000..b81466b
--- /dev/null
+++ b/examples/examples/ts/bar-polar-stack.ts
@@ -0,0 +1,52 @@
+/*
+title: Stacked Bar Chart on Polar
+titleCN: 极坐标系下的堆叠柱状图
+category: bar
+difficulty: 7
+*/
+
+option = {
+    angleAxis: {
+    },
+    radiusAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu'],
+        z: 10
+    },
+    polar: {
+    },
+    series: [{
+        type: 'bar',
+        data: [1, 2, 3, 4],
+        coordinateSystem: 'polar',
+        name: 'A',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }, {
+        type: 'bar',
+        data: [2, 4, 6, 8],
+        coordinateSystem: 'polar',
+        name: 'B',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }, {
+        type: 'bar',
+        data: [1, 2, 3, 4],
+        coordinateSystem: 'polar',
+        name: 'C',
+        stack: 'a',
+        emphasis: {
+            focus: 'series'
+        }
+    }],
+    legend: {
+        show: true,
+        data: ['A', 'B', 'C']
+    }
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-race-country.ts b/examples/examples/ts/bar-race-country.ts
new file mode 100644
index 0000000..ee402de
--- /dev/null
+++ b/examples/examples/ts/bar-race-country.ts
@@ -0,0 +1,142 @@
+/*
+title: Bar Race
+titleCN: 动态排序柱状图 - 人均收入
+category: bar
+difficulty: 6
+videoStart: 1000
+videoEnd: 6000
+*/
+
+
+const updateFrequency = 2000;
+const dimension = 0;
+
+const countryColors: Record<string, string> = {"Australia":"#00008b","Canada":"#f00","China":"#ffde00","Cuba":"#002a8f","Finland":"#003580","France":"#ed2939","Germany":"#000","Iceland":"#003897","India":"#f93","Japan":"#bc002d","North Korea":"#024fa2","South Korea":"#000","New Zealand":"#00247d","Norway":"#ef2b2d","Poland":"#dc143c","Russia":"#d52b1e","Turkey":"#e30a17","United Kingdom":"#00247d","United States":"#b22234"};
+
+$.when(
+    $.getJSON('https://cdn.jsdelivr.net/npm/emoji-flags@1.3.0/data.json'),
+    $.getJSON(ROOT_PATH + '/data/asset/data/life-expectancy-table.json')
+).done(function (res0, res1) {
+    const flags = res0[0];
+    const data = res1[0];
+    const years: string[] = [];
+    for (var i = 0; i < data.length; ++i) {
+        if (years.length === 0 || years[years.length - 1] !== data[i][4]) {
+            years.push(data[i][4]);
+        }
+    }
+
+    function getFlag(countryName: string) {
+        if (!countryName) {
+            return '';
+        }
+        return (flags.find(function (item) {
+            return item.name === countryName;
+        }) || {}).emoji;
+    }
+    var startIndex = 10;
+    var startYear = years[startIndex];
+
+    option = {
+        grid: {
+            top: 10,
+            bottom: 30,
+            left: 150,
+            right: 80
+        },
+        xAxis: {
+            max: 'dataMax',
+            axisLabel: {
+                formatter: function (n: number) {
+                    return Math.round(n) + '';
+                }
+            }
+        },
+        dataset: {
+            source: data.slice(1).filter(function (d) {
+                return d[4] === startYear;
+            })
+        },
+        yAxis: {
+            type: 'category',
+            inverse: true,
+            max: 10,
+            axisLabel: {
+                show: true,
+                fontSize: 14,
+                formatter: function (value: string) {
+                    return value + '{flag|' + getFlag(value) + '}';
+                },
+                rich: {
+                    flag: {
+                        fontSize: 25,
+                        padding: 5
+                    }
+                }
+            },
+            animationDuration: 300,
+            animationDurationUpdate: 300
+        },
+        series: [{
+            realtimeSort: true,
+            seriesLayoutBy: 'column',
+            type: 'bar',
+            itemStyle: {
+                color: function (param: any) {
+                    return countryColors[param.value[3]] || '#5470c6';
+                }
+            },
+            encode: {
+                x: dimension,
+                y: 3
+            },
+            label: {
+                show: true,
+                precision: 1,
+                position: 'right',
+                valueAnimation: true,
+                fontFamily: 'monospace'
+            }
+        }],
+        // Disable init animation.
+        animationDuration: 0,
+        animationDurationUpdate: updateFrequency,
+        animationEasing: 'linear',
+        animationEasingUpdate: 'linear',
+        graphic: {
+            elements: [{
+                type: 'text',
+                right: 160,
+                bottom: 60,
+                style: {
+                    text: startYear,
+                    font: 'bolder 80px monospace',
+                    fill: 'rgba(100, 100, 100, 0.25)'
+                },
+                z: 100
+            }]
+        }
+    };
+
+    // console.log(option);
+    myChart.setOption<echarts.EChartsOption>(option);
+
+    for (var i = startIndex; i < years.length - 1; ++i) {
+        (function (i) {
+            setTimeout(function () {
+                updateYear(years[i + 1]);
+            }, (i - startIndex) * updateFrequency);
+        })(i);
+    }
+
+    function updateYear(year: string) {
+        var source = data.slice(1).filter(function (d) {
+            return d[4] === year;
+        });
+        option.series[0].data = source;
+        option.graphic.elements[0].style.text = year;
+        myChart.setOption<echarts.EChartsOption>(option);
+    }
+})
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-race.ts b/examples/examples/ts/bar-race.ts
new file mode 100644
index 0000000..bc4de3d
--- /dev/null
+++ b/examples/examples/ts/bar-race.ts
@@ -0,0 +1,71 @@
+/*
+title: Bar Race
+titleCN: 动态排序柱状图
+category: bar
+difficulty: 5
+videoStart: 1000
+videoEnd: 6000
+*/
+
+const data: number[] = [];
+for (let i = 0; i < 5; ++i) {
+    data.push(Math.round(Math.random() * 200));
+}
+
+option = {
+    xAxis: {
+        max: 'dataMax',
+    },
+    yAxis: {
+        type: 'category',
+        data: ['A', 'B', 'C', 'D', 'E'],
+        inverse: true,
+        animationDuration: 300,
+        animationDurationUpdate: 300,
+        max: 2 // only the largest 3 bars will be displayed
+    },
+    series: [{
+        realtimeSort: true,
+        name: 'X',
+        type: 'bar',
+        data: data,
+        label: {
+            show: true,
+            position: 'right',
+            valueAnimation: true
+        }
+    }],
+    legend: {
+        show: true
+    },
+    animationDuration: 0,
+    animationDurationUpdate: 3000,
+    animationEasing: 'linear',
+    animationEasingUpdate: 'linear'
+};
+
+function run () {
+    for (var i = 0; i < data.length; ++i) {
+        if (Math.random() > 0.9) {
+            data[i] += Math.round(Math.random() * 2000);
+        }
+        else {
+            data[i] += Math.round(Math.random() * 200);
+        }
+    }
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            type: 'bar',
+            data
+        }]
+    });
+}
+
+setTimeout(function() {
+    run();
+}, 0);
+setInterval(function () {
+    run();
+}, 3000);
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-rich-text.ts b/examples/examples/ts/bar-rich-text.ts
new file mode 100644
index 0000000..a4545d3
--- /dev/null
+++ b/examples/examples/ts/bar-rich-text.ts
@@ -0,0 +1,153 @@
+/*
+title: Wheater Statistics
+category: 'bar, rich'
+titleCN: 天气统计(富文本)
+difficulty: 6
+*/
+
+
+const weatherIcons = {
+    'Sunny': ROOT_PATH + '/data/asset/img/weather/sunny_128.png',
+    'Cloudy': ROOT_PATH + '/data/asset/img/weather/cloudy_128.png',
+    'Showers': ROOT_PATH + '/data/asset/img/weather/showers_128.png'
+} as const;
+
+const seriesLabel = {
+    show: true
+} as const;
+
+option = {
+    title: {
+        text: 'Weather Statistics'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    legend: {
+        data: ['City Alpha', 'City Beta', 'City Gamma']
+    },
+    grid: {
+        left: 100
+    },
+    toolbox: {
+        show: true,
+        feature: {
+            saveAsImage: {}
+        }
+    },
+    xAxis: {
+        type: 'value',
+        name: 'Days',
+        axisLabel: {
+            formatter: '{value}'
+        }
+    },
+    yAxis: {
+        type: 'category',
+        inverse: true,
+        data: ['Sunny', 'Cloudy', 'Showers'],
+        axisLabel: {
+            formatter: function (value) {
+                return '{' + value + '| }\n{value|' + value + '}';
+            },
+            margin: 20,
+            rich: {
+                value: {
+                    lineHeight: 30,
+                    align: 'center'
+                },
+                Sunny: {
+                    height: 40,
+                    align: 'center',
+                    backgroundColor: {
+                        image: weatherIcons.Sunny
+                    }
+                },
+                Cloudy: {
+                    height: 40,
+                    align: 'center',
+                    backgroundColor: {
+                        image: weatherIcons.Cloudy
+                    }
+                },
+                Showers: {
+                    height: 40,
+                    align: 'center',
+                    backgroundColor: {
+                        image: weatherIcons.Showers
+                    }
+                }
+            }
+        }
+    },
+    series: [
+        {
+            name: 'City Alpha',
+            type: 'bar',
+            data: [165, 170, 30],
+            label: seriesLabel,
+            markPoint: {
+                symbolSize: 1,
+                symbolOffset: [0, '50%'],
+                label: {
+                    formatter: '{a|{a}\n}{b|{b} }{c|{c}}',
+                    backgroundColor: 'rgb(242,242,242)',
+                    borderColor: '#aaa',
+                    borderWidth: 1,
+                    borderRadius: 4,
+                    padding: [4, 10],
+                    lineHeight: 26,
+                    // shadowBlur: 5,
+                    // shadowColor: '#000',
+                    // shadowOffsetX: 0,
+                    // shadowOffsetY: 1,
+                    position: 'right',
+                    distance: 20,
+                    rich: {
+                        a: {
+                            align: 'center',
+                            color: '#fff',
+                            fontSize: 18,
+                            textShadowBlur: 2,
+                            textShadowColor: '#000',
+                            textShadowOffsetX: 0,
+                            textShadowOffsetY: 1,
+                            textBorderColor: '#333',
+                            textBorderWidth: 2
+                        },
+                        b: {
+                            color: '#333'
+                        },
+                        c: {
+                            color: '#ff8811',
+                            textBorderColor: '#000',
+                            textBorderWidth: 1,
+                            fontSize: 22
+                        }
+                    }
+                },
+                data: [
+                    {type: 'max', name: 'max days: '},
+                    {type: 'min', name: 'min days: '}
+                ]
+            }
+        },
+        {
+            name: 'City Beta',
+            type: 'bar',
+            label: seriesLabel,
+            data: [150, 105, 110]
+        },
+        {
+            name: 'City Gamma',
+            type: 'bar',
+            label: seriesLabel,
+            data: [220, 82, 63]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-simple.ts b/examples/examples/ts/bar-simple.ts
new file mode 100644
index 0000000..f1221bb
--- /dev/null
+++ b/examples/examples/ts/bar-simple.ts
@@ -0,0 +1,22 @@
+/*
+title: Basic Bar
+category: bar
+titleCN: 基础柱状图
+difficulty: 0
+*/
+
+option = {
+    xAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [{
+        data: [120, 200, 150, 80, 70, 110, 130],
+        type: 'bar'
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-stack.ts b/examples/examples/ts/bar-stack.ts
new file mode 100644
index 0000000..eeb8721
--- /dev/null
+++ b/examples/examples/ts/bar-stack.ts
@@ -0,0 +1,127 @@
+/*
+title: Stacked Column Chart
+titleCN: 堆叠柱状图
+category: bar
+difficulty: 3
+*/
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    legend: {
+        data: ['Direct', 'Email', 'Union Ads', 'Video Ads', 'Search Engine', '百度', '谷歌', '必应', '其他']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'category',
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Direct',
+            type: 'bar',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 332, 301, 334, 390, 330, 320]
+        },
+        {
+            name: 'Email',
+            type: 'bar',
+            stack: 'Ad',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [120, 132, 101, 134, 90, 230, 210]
+        },
+        {
+            name: 'Union Ads',
+            type: 'bar',
+            stack: 'Ad',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 182, 191, 234, 290, 330, 310]
+        },
+        {
+            name: 'Video Ads',
+            type: 'bar',
+            stack: 'Ad',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [150, 232, 201, 154, 190, 330, 410]
+        },
+        {
+            name: 'Search Engine',
+            type: 'bar',
+            data: [862, 1018, 964, 1026, 1679, 1600, 1570],
+            emphasis: {
+                focus: 'series'
+            },
+            markLine: {
+                lineStyle: {
+                    type: 'dashed'
+                },
+                data: [
+                    [{type: 'min'}, {type: 'max'}]
+                ]
+            }
+        },
+        {
+            name: 'Baidu',
+            type: 'bar',
+            barWidth: 5,
+            stack: 'Search Engine',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [620, 732, 701, 734, 1090, 1130, 1120]
+        },
+        {
+            name: 'Google',
+            type: 'bar',
+            stack: 'Search Engine',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [120, 132, 101, 134, 290, 230, 220]
+        },
+        {
+            name: 'Bing',
+            type: 'bar',
+            stack: 'Search Engine',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [60, 72, 71, 74, 190, 130, 110]
+        },
+        {
+            name: 'Others',
+            type: 'bar',
+            stack: 'Search Engine',
+            emphasis: {
+                focus: 'series'
+            },
+            data: [62, 82, 91, 84, 109, 110, 120]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-tick-align.ts b/examples/examples/ts/bar-tick-align.ts
new file mode 100644
index 0000000..2c96c16
--- /dev/null
+++ b/examples/examples/ts/bar-tick-align.ts
@@ -0,0 +1,43 @@
+/*
+title: Axis Align with Tick
+titleCN: 坐标轴刻度与标签对齐
+category: bar
+difficulty: 0
+*/
+
+option = {
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: [
+        {
+            type: 'category',
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+            axisTick: {
+                alignWithLabel: true
+            }
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Direct',
+            type: 'bar',
+            barWidth: '60%',
+            data: [10, 52, 200, 334, 390, 330, 220]
+        }
+    ]
+};
diff --git a/examples/examples/ts/bar-waterfall.ts b/examples/examples/ts/bar-waterfall.ts
new file mode 100644
index 0000000..ba0daef
--- /dev/null
+++ b/examples/examples/ts/bar-waterfall.ts
@@ -0,0 +1,67 @@
+/*
+title: Waterfall Chart
+titleCN: 瀑布图(柱状图模拟)
+category: bar
+difficulty: 1
+*/
+
+option = {
+    title: {
+        text: 'Waterfall Chart',
+        subtext: 'Living Expenses in Shenzhen'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        },
+        formatter: function (params) {
+            var tar = params[1];
+            return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'category',
+        splitLine: {show: false},
+        data: ['Total', 'Rent', 'Utilities', 'Transportation', 'Meals', 'Other']
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [
+        {
+            name: 'Placeholder',
+            type: 'bar',
+            stack: 'Total',
+            itemStyle: {
+                borderColor: 'transparent',
+                color: 'transparent'
+            },
+            emphasis: {
+                itemStyle: {
+                    borderColor: 'transparent',
+                    color: 'transparent'
+                }
+            },
+            data: [0, 1700, 1400, 1200, 300, 0]
+        },
+        {
+            name: 'Life Cost',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true,
+                position: 'inside'
+            },
+            data: [2900, 1200, 300, 200, 900, 300]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-waterfall2.ts b/examples/examples/ts/bar-waterfall2.ts
new file mode 100644
index 0000000..ea1465e
--- /dev/null
+++ b/examples/examples/ts/bar-waterfall2.ts
@@ -0,0 +1,91 @@
+/*
+title: Waterfall Chart
+titleCN: 阶梯瀑布图(柱状图模拟)
+category: bar
+difficulty: 3
+*/
+
+option = {
+    title: {
+        text: 'Accumulated Waterfall Chart'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        },
+        formatter: function (params) {
+            let tar;
+            if (params[1].value !== '-') {
+                tar = params[1];
+            }
+            else {
+                tar = params[0];
+            }
+            return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
+        }
+    },
+    legend: {
+        data: ['支出', '收入']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'category',
+        splitLine: {show: false},
+        data: function () {
+            var list = [];
+            for (var i = 1; i <= 11; i++) {
+                list.push('11月' + i + '日');
+            }
+            return list;
+        }()
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [
+        {
+            name: '辅助',
+            type: 'bar',
+            stack: 'Total',
+            itemStyle: {
+                borderColor: 'transparent',
+                color: 'transparent'
+            },
+            emphasis: {
+                itemStyle: {
+                    borderColor: 'transparent',
+                    color: 'transparent'
+                }
+            },
+            data: [0, 900, 1245, 1530, 1376, 1376, 1511, 1689, 1856, 1495, 1292]
+        },
+        {
+            name: '收入',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true,
+                position: 'top'
+            },
+            data: [900, 345, 393, '-', '-', 135, 178, 286, '-', '-', '-']
+        },
+        {
+            name: '支出',
+            type: 'bar',
+            stack: 'Total',
+            label: {
+                show: true,
+                position: 'bottom'
+            },
+            data: ['-', '-', '-', 108, 154, '-', '-', '-', 119, 361, 203]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar-y-category-stack.ts b/examples/examples/ts/bar-y-category-stack.ts
new file mode 100644
index 0000000..fa2c1b3
--- /dev/null
+++ b/examples/examples/ts/bar-y-category-stack.ts
@@ -0,0 +1,94 @@
+/*
+title: Stacked Horizontal Bar
+titleCN: 堆叠条形图
+category: bar
+difficulty: 3
+*/
+option = {
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {            // Use axis to trigger tooltip
+            type: 'shadow'        // 'shadow' as default; can also be 'line' or 'shadow'
+        }
+    },
+    legend: {
+        data: ['Direct', 'Mail Ad', 'Affiliate Ad', 'Video Ad', 'Search Engine']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'value'
+    },
+    yAxis: {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    series: [
+        {
+            name: 'Direct',
+            type: 'bar',
+            stack: 'total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [320, 302, 301, 334, 390, 330, 320]
+        },
+        {
+            name: 'Mail Ad',
+            type: 'bar',
+            stack: 'total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [120, 132, 101, 134, 90, 230, 210]
+        },
+        {
+            name: 'Affiliate Ad',
+            type: 'bar',
+            stack: 'total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [220, 182, 191, 234, 290, 330, 310]
+        },
+        {
+            name: 'Video Ad',
+            type: 'bar',
+            stack: 'total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [150, 212, 201, 154, 190, 330, 410]
+        },
+        {
+            name: 'Search Engine',
+            type: 'bar',
+            stack: 'total',
+            label: {
+                show: true
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            data: [820, 832, 901, 934, 1290, 1330, 1320]
+        }
+    ]
+};
+
+export {};
\ No newline at end of file
diff --git a/examples/examples/ts/bar-y-category.ts b/examples/examples/ts/bar-y-category.ts
new file mode 100644
index 0000000..36d8272
--- /dev/null
+++ b/examples/examples/ts/bar-y-category.ts
@@ -0,0 +1,50 @@
+/*
+title: World Population
+category: bar
+titleCN: 世界人口总量 - 条形图
+difficulty: 2
+*/
+
+option = {
+    title: {
+        text: 'World Population'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    legend: {
+        data: ['2011', '2012']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'value',
+        boundaryGap: [0, 0.01]
+    },
+    yAxis: {
+        type: 'category',
+        data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World']
+    },
+    series: [
+        {
+            name: '2011',
+            type: 'bar',
+            data: [18203, 23489, 29034, 104970, 131744, 630230]
+        },
+        {
+            name: '2012',
+            type: 'bar',
+            data: [19325, 23438, 31000, 121594, 134141, 681807]
+        }
+    ]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bar1.ts b/examples/examples/ts/bar1.ts
new file mode 100644
index 0000000..e37585b
--- /dev/null
+++ b/examples/examples/ts/bar1.ts
@@ -0,0 +1,76 @@
+/*
+title: Rainfall and Evaporation
+category: bar
+titleCN: 某地区蒸发量和降水量
+difficulty: 4
+*/
+
+option = {
+    title: {
+        text: 'Rainfall and Evaporation',
+        subtext: 'Fake Data'
+    },
+    tooltip: {
+        trigger: 'axis'
+    },
+    legend: {
+        data: ['Rainfall', 'Evaporation']
+    },
+    toolbox: {
+        show: true,
+        feature: {
+            dataView: {show: true, readOnly: false},
+            magicType: {show: true, type: ['line', 'bar']},
+            restore: {show: true},
+            saveAsImage: {show: true}
+        }
+    },
+    calculable: true,
+    xAxis: [
+        {
+            type: 'category',
+            data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value'
+        }
+    ],
+    series: [
+        {
+            name: 'Rainfall',
+            type: 'bar',
+            data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
+            markPoint: {
+                data: [
+                    {type: 'max', name: 'Max'},
+                    {type: 'min', name: 'Min'}
+                ]
+            },
+            markLine: {
+                data: [
+                    {type: 'average', name: 'Avg'}
+                ]
+            }
+        },
+        {
+            name: 'Evaporation',
+            type: 'bar',
+            data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
+            markPoint: {
+                data: [
+                    {name: '年最高', value: 182.2, xAxis: 7, yAxis: 183},
+                    {name: '年最低', value: 2.3, xAxis: 11, yAxis: 3}
+                ]
+            },
+            markLine: {
+                data: [
+                    {type: 'average', name: 'Avg'}
+                ]
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/boxplot-light-velocity.ts b/examples/examples/ts/boxplot-light-velocity.ts
new file mode 100644
index 0000000..5e6f8b9
--- /dev/null
+++ b/examples/examples/ts/boxplot-light-velocity.ts
@@ -0,0 +1,86 @@
+/*
+title: Boxplot Light Velocity
+category: boxplot
+titleCN: 基础盒须图
+*/
+
+option = {
+    title: [
+        {
+            text: 'Michelson-Morley Experiment',
+            left: 'center'
+        },
+        {
+            text: 'upper: Q3 + 1.5 * IQR \nlower: Q1 - 1.5 * IQR',
+            borderColor: '#999',
+            borderWidth: 1,
+            textStyle: {
+                fontWeight: 'normal',
+                fontSize: 14,
+                lineHeight: 20
+            },
+            left: '10%',
+            top: '90%'
+        }
+    ],
+    dataset: [{
+        source: [
+            [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
+            [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
+            [880, 880, 880, 860, 720, 720, 620, 860, 970, 950, 880, 910, 850, 870, 840, 840, 850, 840, 840, 840],
+            [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
+            [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870, 810, 740, 810, 940, 950, 800, 810, 870]
+        ]
+    }, {
+        transform: {
+            type: 'boxplot',
+            config: { itemNameFormatter: 'expr {value}' }
+        }
+    }, {
+        fromDatasetIndex: 1,
+        fromTransformResult: 1
+    }],
+    tooltip: {
+        trigger: 'item',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        left: '10%',
+        right: '10%',
+        bottom: '15%'
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: true,
+        nameGap: 30,
+        splitArea: {
+            show: false
+        },
+        splitLine: {
+            show: false
+        }
+    },
+    yAxis: {
+        type: 'value',
+        name: 'km/s minus 299,000',
+        splitArea: {
+            show: true
+        }
+    },
+    series: [
+        {
+            name: 'boxplot',
+            type: 'boxplot',
+            datasetIndex: 1
+        },
+        {
+            name: 'outlier',
+            type: 'scatter',
+            datasetIndex: 2
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/boxplot-light-velocity2.ts b/examples/examples/ts/boxplot-light-velocity2.ts
new file mode 100644
index 0000000..14452ec
--- /dev/null
+++ b/examples/examples/ts/boxplot-light-velocity2.ts
@@ -0,0 +1,89 @@
+/*
+title: Boxplot Light Velocity2
+category: boxplot
+titleCN: 垂直方向盒须图
+*/
+
+option = {
+    title: [
+        {
+            text: 'Michelson-Morley Experiment',
+            left: 'center'
+        },
+        {
+            text: 'upper: Q3 + 1.5 * IRQ \nlower: Q1 - 1.5 * IRQ',
+            borderColor: '#999',
+            borderWidth: 1,
+            textStyle: {
+                fontSize: 14
+            },
+            left: '10%',
+            top: '90%'
+        }
+    ],
+    dataset: [{
+        source: [
+            [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
+            [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
+            [880, 880, 880, 860, 720, 720, 620, 860, 970, 950, 880, 910, 850, 870, 840, 840, 850, 840, 840, 840],
+            [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
+            [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870, 810, 740, 810, 940, 950, 800, 810, 870]
+        ]
+    }, {
+        transform: {
+            type: 'boxplot',
+            config: {
+                itemNameFormatter: function (params: any) {
+                    return 'expr ' + params.value;
+                }
+            }
+        }
+    }, {
+        fromDatasetIndex: 1,
+        fromTransformResult: 1
+    }],
+    tooltip: {
+        trigger: 'item',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        left: '10%',
+        right: '10%',
+        bottom: '15%'
+    },
+    yAxis: {
+        type: 'category',
+        boundaryGap: true,
+        nameGap: 30,
+        splitArea: {
+            show: false
+        },
+        splitLine: {
+            show: false
+        }
+    },
+    xAxis: {
+        type: 'value',
+        name: 'km/s minus 299,000',
+        splitArea: {
+            show: true
+        }
+    },
+    series: [
+        {
+            name: 'boxplot',
+            type: 'boxplot',
+            datasetIndex: 1
+        },
+        {
+            name: 'outlier',
+            type: 'scatter',
+            encode: { x: 1, y: 0 },
+            datasetIndex: 2
+        }
+    ]
+};
+
+export {};
\ No newline at end of file
diff --git a/examples/examples/ts/boxplot-multi.ts b/examples/examples/ts/boxplot-multi.ts
new file mode 100644
index 0000000..f877282
--- /dev/null
+++ b/examples/examples/ts/boxplot-multi.ts
@@ -0,0 +1,108 @@
+/*
+title: Multiple Categories
+category: boxplot
+titleCN: 多系列盒须图
+*/
+
+
+// Generate data.
+function makeData() {
+    let data = [];
+    for (let i = 0; i < 18; i++) {
+        let cate = [];
+        for (let j = 0; j < 100; j++) {
+            cate.push(Math.random() * 200);
+        }
+        data.push(cate);
+    }
+    return data;
+}
+const data0 = makeData();
+const data1 = makeData();
+const data2 = makeData();
+
+
+option = {
+    title: {
+        text: 'Multiple Categories',
+        left: 'center'
+    },
+    dataset: [{
+        source: data0
+    }, {
+        source: data1
+    }, {
+        source: data2
+    }, {
+        fromDatasetIndex: 0,
+        transform: { type: 'boxplot' }
+    }, {
+        fromDatasetIndex: 1,
+        transform: { type: 'boxplot' }
+    }, {
+        fromDatasetIndex: 2,
+        transform: { type: 'boxplot' }
+    }],
+    legend: {
+        top: '10%'
+    },
+    tooltip: {
+        trigger: 'item',
+        axisPointer: {
+            type: 'shadow'
+        }
+    },
+    grid: {
+        left: '10%',
+        top: '20%',
+        right: '10%',
+        bottom: '15%'
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: true,
+        nameGap: 30,
+        splitArea: {
+            show: true
+        },
+        splitLine: {
+            show: false
+        }
+    },
+    yAxis: {
+        type: 'value',
+        name: 'Value',
+        min: -400,
+        max: 600,
+        splitArea: {
+            show: false
+        }
+    },
+    dataZoom: [{
+        type: 'inside',
+        start: 0,
+        end: 20
+    }, {
+        show: true,
+        type: 'slider',
+        top: '90%',
+        xAxisIndex: [0],
+        start: 0,
+        end: 20
+    }],
+    series: [{
+        name: 'category0',
+        type: 'boxplot',
+        datasetIndex: 3
+    }, {
+        name: 'category1',
+        type: 'boxplot',
+        datasetIndex: 4
+    }, {
+        name: 'category2',
+        type: 'boxplot',
+        datasetIndex: 5
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/bubble-gradient.ts b/examples/examples/ts/bubble-gradient.ts
new file mode 100644
index 0000000..42ec11d
--- /dev/null
+++ b/examples/examples/ts/bubble-gradient.ts
@@ -0,0 +1,111 @@
+/*
+title: Bubble Chart
+category: scatter
+titleCN: 气泡图
+difficulty: 6
+*/
+
+const data = [
+    [[28604,77,17096869,'Australia',1990],[31163,77.4,27662440,'Canada',1990],[1516,68,1154605773,'China',1990],[13670,74.7,10582082,'Cuba',1990],[28599,75,4986705,'Finland',1990],[29476,77.1,56943299,'France',1990],[31476,75.4,78958237,'Germany',1990],[28666,78.1,254830,'Iceland',1990],[1777,57.7,870601776,'India',1990],[29550,79.1,122249285,'Japan',1990],[2076,67.9,20194354,'North Korea',1990],[12087,72,42972254,'South Korea',1990],[24021,75.4,3397534,'New Zealand',1990],[43296,76.8,42 [...]
+    [[44056,81.8,23968973,'Australia',2015],[43294,81.7,35939927,'Canada',2015],[13334,76.9,1376048943,'China',2015],[21291,78.5,11389562,'Cuba',2015],[38923,80.8,5503457,'Finland',2015],[37599,81.9,64395345,'France',2015],[44053,81.1,80688545,'Germany',2015],[42182,82.8,329425,'Iceland',2015],[5903,66.8,1311050527,'India',2015],[36162,83.5,126573481,'Japan',2015],[1390,71.4,25155317,'North Korea',2015],[34644,80.7,50293439,'South Korea',2015],[34186,80.6,4528526,'New Zealand',2015],[643 [...]
+];
+
+option = {
+    backgroundColor: new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [{
+        offset: 0,
+        color: '#f7f8fa'
+    }, {
+        offset: 1,
+        color: '#cdd0d5'
+    }]),
+    title: {
+        text: 'Life Expectancy and GDP by Country' ,
+        left: '5%',
+        top: '3%'
+    },
+    legend: {
+        right: '10%',
+        top: '3%',
+        data: ['1990', '2015']
+    },
+    grid: {
+        left: '8%',
+        top: '10%'
+    },
+    xAxis: {
+        splitLine: {
+            lineStyle: {
+                type: 'dashed'
+            }
+        }
+    },
+    yAxis: {
+        splitLine: {
+            lineStyle: {
+                type: 'dashed'
+            }
+        },
+        scale: true
+    },
+    series: [{
+        name: '1990',
+        data: data[0],
+        type: 'scatter',
+        symbolSize: function (data) {
+            return Math.sqrt(data[2]) / 5e2;
+        },
+        emphasis: {
+            focus: 'series',
+            label: {
+                show: true,
+                formatter: function (param) {
+                    return param.data[3];
+                },
+                position: 'top'
+            }
+        },
+        itemStyle: {
+            shadowBlur: 10,
+            shadowColor: 'rgba(120, 36, 50, 0.5)',
+            shadowOffsetY: 5,
+            color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
+                offset: 0,
+                color: 'rgb(251, 118, 123)'
+            }, {
+                offset: 1,
+                color: 'rgb(204, 46, 72)'
+            }])
+        }
+    }, {
+        name: '2015',
+        data: data[1],
+        type: 'scatter',
+        symbolSize: function (data) {
+            return Math.sqrt(data[2]) / 5e2;
+        },
+        emphasis: {
+            focus: 'series',
+            label: {
+                show: true,
+                formatter: function (param) {
+                    return param.data[3];
+                },
+                position: 'top'
+            }
+        },
+        itemStyle: {
+            shadowBlur: 10,
+            shadowColor: 'rgba(25, 100, 150, 0.5)',
+            shadowOffsetY: 5,
+            color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
+                offset: 0,
+                color: 'rgb(129, 227, 238)'
+            }, {
+                offset: 1,
+                color: 'rgb(25, 183, 207)'
+            }])
+        }
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/data/calendar-charts.js b/examples/examples/ts/calendar-charts.ts
similarity index 84%
copy from examples/data/calendar-charts.js
copy to examples/examples/ts/calendar-charts.ts
index 39aaad7..5418331 100644
--- a/examples/data/calendar-charts.js
+++ b/examples/examples/ts/calendar-charts.ts
@@ -1,18 +1,18 @@
 /*
 title: Calendar Charts
 category: 'calendar, scatter'
-titleCN: 日力图
+titleCN: 日历图
 shotWidth: 1000
 difficulty: 11
 */
 
-function getVirtulData(year) {
+function getVirtulData(year: string) {
     year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
+    let date = +echarts.number.parseDate(year + '-01-01');
+    let end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    let dayTime = 3600 * 24 * 1000;
+    let data = [];
+    for (let time = date; time < end; time += dayTime) {
         data.push([
             echarts.format.formatTime('yyyy-MM-dd', time),
             Math.floor(Math.random() * 1000)
@@ -24,7 +24,7 @@ function getVirtulData(year) {
 
 
 
-var graphData = [
+const graphData = [
     [
        '2017-02-01',
         260
@@ -55,7 +55,7 @@ var graphData = [
     ]
 ];
 
-var links = graphData.map(function (item, idx) {
+const links = graphData.map(function (item, idx) {
     return {
         source: idx,
         target: idx + 1
@@ -144,7 +144,7 @@ option = {
         },
         dayLabel: {
             firstDay: 1,
-            nameMap: ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
+            nameMap: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
         },
         monthLabel: {
             nameMap: 'cn',
@@ -167,7 +167,7 @@ option = {
     }, {
         type: 'heatmap',
         coordinateSystem: 'calendar',
-        data: getVirtulData(2017)
+        data: getVirtulData('2017')
     }, {
         type: 'effectScatter',
         coordinateSystem: 'calendar',
@@ -175,7 +175,7 @@ option = {
         symbolSize: function (val) {
             return val[1] / 40;
         },
-        data: getVirtulData(2017)
+        data: getVirtulData('2017')
     }, {
         type: 'scatter',
         coordinateSystem: 'calendar',
@@ -183,11 +183,13 @@ option = {
         symbolSize: function (val) {
             return val[1] / 60;
         },
-        data: getVirtulData(2017)
+        data: getVirtulData('2017')
     }, {
         type: 'heatmap',
         coordinateSystem: 'calendar',
         calendarIndex: 3,
-        data: getVirtulData(2017)
+        data: getVirtulData('2017')
     }]
 };
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/calendar-effectscatter.ts b/examples/examples/ts/calendar-effectscatter.ts
new file mode 100644
index 0000000..131d57c
--- /dev/null
+++ b/examples/examples/ts/calendar-effectscatter.ts
@@ -0,0 +1,163 @@
+/*
+title: Calendar Effectscatter
+category: calendar
+titleCN: 热力特效散点图
+difficulty:3
+*/
+
+function getVirtulData(year: string) {
+    year = year || '2017';
+    let date = +echarts.number.parseDate(year + '-01-01');
+    let end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    let dayTime = 3600 * 24 * 1000;
+    let data: [string, number][] = [];
+    for (let time = date; time < end; time += dayTime) {
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            Math.floor(Math.random() * 10000)
+        ]);
+    }
+    return data;
+}
+
+const data = getVirtulData('2016');
+
+option = {
+    backgroundColor: '#404a59',
+
+    title: {
+        top: 30,
+        text: 'Daily Step Count in 2016',
+        subtext: 'Fake Data',
+        left: 'center',
+        textStyle: {
+            color: '#fff'
+        }
+    },
+    tooltip: {
+        trigger: 'item'
+    },
+    legend: {
+        top: '30',
+        left: '100',
+        data: ['Steps', 'Top 12'],
+        textStyle: {
+            color: '#fff'
+        }
+    },
+    calendar: [{
+        top: 100,
+        left: 'center',
+        range: ['2016-01-01', '2016-06-30'],
+        splitLine: {
+            show: true,
+            lineStyle: {
+                color: '#000',
+                width: 4,
+                type: 'solid'
+            }
+        },
+        yearLabel: {
+            formatter: '{start}  1st',
+            color: '#fff'
+        },
+        itemStyle: {
+            color: '#323c48',
+            borderWidth: 1,
+            borderColor: '#111'
+        }
+    }, {
+        top: 340,
+        left: 'center',
+        range: ['2016-07-01', '2016-12-31'],
+        splitLine: {
+            show: true,
+            lineStyle: {
+                color: '#000',
+                width: 4,
+                type: 'solid'
+            }
+        },
+        yearLabel: {
+            formatter: '{start}  2nd',
+            color: '#fff'
+        },
+        itemStyle: {
+            color: '#323c48',
+            borderWidth: 1,
+            borderColor: '#111'
+        }
+    }],
+    series: [
+        {
+            name: 'Steps',
+            type: 'scatter',
+            coordinateSystem: 'calendar',
+            data: data,
+            symbolSize: function (val) {
+                return val[1] / 500;
+            },
+            itemStyle: {
+                color: '#ddb926'
+            }
+        },
+        {
+            name: 'Steps',
+            type: 'scatter',
+            coordinateSystem: 'calendar',
+            calendarIndex: 1,
+            data: data,
+            symbolSize: function (val) {
+                return val[1] / 500;
+            },
+            itemStyle: {
+                color: '#ddb926'
+            }
+        },
+        {
+            name: 'Top 12',
+            type: 'effectScatter',
+            coordinateSystem: 'calendar',
+            calendarIndex: 1,
+            data: data.sort(function (a, b) {
+                return b[1] - a[1];
+            }).slice(0, 12),
+            symbolSize: function (val) {
+                return val[1] / 500;
+            },
+            showEffectOn: 'render',
+            rippleEffect: {
+                brushType: 'stroke'
+            },
+            itemStyle: {
+                color: '#f4e925',
+                shadowBlur: 10,
+                shadowColor: '#333'
+            },
+            zlevel: 1
+        },
+        {
+            name: 'Top 12',
+            type: 'effectScatter',
+            coordinateSystem: 'calendar',
+            data: data.sort(function (a, b) {
+                return b[1] - a[1];
+            }).slice(0, 12),
+            symbolSize: function (val) {
+                return val[1] / 500;
+            },
+            showEffectOn: 'render',
+            rippleEffect: {
+                brushType: 'stroke'
+            },
+            itemStyle: {
+                color: '#f4e925',
+                shadowBlur: 10,
+                shadowColor: '#333'
+            },
+            zlevel: 1
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/calendar-graph.ts b/examples/examples/ts/calendar-graph.ts
new file mode 100644
index 0000000..63c6251
--- /dev/null
+++ b/examples/examples/ts/calendar-graph.ts
@@ -0,0 +1,126 @@
+/*
+title: Calendar Graph
+category: 'calendar, graph'
+titleCN: 日历关系图
+difficulty: 4
+*/
+
+const graphData: [string, number][] = [
+    [
+       '2017-02-01',
+        260
+    ],
+    [
+        '2017-02-04',
+        200
+    ],
+    [
+        '2017-02-09',
+        279
+    ],
+    [
+        '2017-02-13',
+        847
+    ],
+    [
+        '2017-02-18',
+        241
+    ],
+    [
+        '2017-02-23',
+        411
+    ],
+    [
+        '2017-03-14',
+        985
+    ]
+];
+
+const links = graphData.map(function (item, idx) {
+    return {
+        source: idx,
+        target: idx + 1
+    };
+});
+links.pop();
+
+function getVirtulData(year: string) {
+    year = year || '2017';
+    var date = +echarts.number.parseDate(year + '-01-01');
+    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    var dayTime = 3600 * 24 * 1000;
+    var data = [];
+    for (var time = date; time < end; time += dayTime) {
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            Math.floor(Math.random() * 1000)
+        ]);
+    }
+    return data;
+}
+
+
+option = {
+    tooltip: {},
+    calendar: {
+        top: 'middle',
+        left: 'center',
+        orient: 'vertical',
+        cellSize: 40,
+        yearLabel: {
+            margin: 50,
+            fontSize: 30
+        },
+        dayLabel: {
+            firstDay: 1,
+            nameMap: 'cn'
+        },
+        monthLabel: {
+            nameMap: 'cn',
+            margin: 15,
+            fontSize: 20,
+            color: '#999'
+        },
+        range: ['2017-02', '2017-03-31']
+    },
+    visualMap: {
+        min: 0,
+        max: 1000,
+        type: 'piecewise',
+        left: 'center',
+        bottom: 20,
+        inRange: {
+            color: ['#5291FF', '#C7DBFF']
+        },
+        seriesIndex: [1],
+        orient: 'horizontal'
+    },
+    series: [{
+        type: 'graph',
+        edgeSymbol: ['none', 'arrow'],
+        coordinateSystem: 'calendar',
+        links: links,
+        symbolSize: 15,
+        calendarIndex: 0,
+        itemStyle: {
+            color: 'yellow',
+            shadowBlur: 9,
+            shadowOffsetX: 1.5,
+            shadowOffsetY: 3,
+            shadowColor: '#555'
+        },
+        lineStyle: {
+            color: '#D10E00',
+            width: 1,
+            opacity: 1
+        },
+        data: graphData,
+        z: 20
+    }, {
+        type: 'heatmap',
+        coordinateSystem: 'calendar',
+        data: getVirtulData('2017')
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/calendar-heatmap.ts b/examples/examples/ts/calendar-heatmap.ts
new file mode 100644
index 0000000..389c667
--- /dev/null
+++ b/examples/examples/ts/calendar-heatmap.ts
@@ -0,0 +1,56 @@
+/*
+title: Calendar Heatmap
+category: 'calendar, heatmap'
+titleCN: 日历热力图
+difficulty: 1
+*/
+
+function getVirtulData(year: string) {
+    year = year || '2017';
+    var date = +echarts.number.parseDate(year + '-01-01');
+    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    var dayTime = 3600 * 24 * 1000;
+    var data: [string, number][] = [];
+    for (var time = date; time < end; time += dayTime) {
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            Math.floor(Math.random() * 10000)
+        ]);
+    }
+    return data;
+}
+
+option = {
+    title: {
+        top: 30,
+        left: 'center',
+        text: 'Daily Step Count'
+    },
+    tooltip: {},
+    visualMap: {
+        min: 0,
+        max: 10000,
+        type: 'piecewise',
+        orient: 'horizontal',
+        left: 'center',
+        top: 65
+    },
+    calendar: {
+        top: 120,
+        left: 30,
+        right: 30,
+        cellSize: ['auto', 13],
+        range: '2016',
+        itemStyle: {
+            borderWidth: 0.5
+        },
+        yearLabel: {show: false}
+    },
+    series: {
+        type: 'heatmap',
+        coordinateSystem: 'calendar',
+        data: getVirtulData('2016')
+    }
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/data/calendar-horizontal.js b/examples/examples/ts/calendar-horizontal.ts
similarity index 78%
copy from examples/data/calendar-horizontal.js
copy to examples/examples/ts/calendar-horizontal.ts
index 9dde1f1..c764b97 100644
--- a/examples/data/calendar-horizontal.js
+++ b/examples/examples/ts/calendar-horizontal.ts
@@ -1,18 +1,18 @@
 /*
 title: Calendar Heatmap Horizontal
 category: calendar
-titleCN: 横向日力图
+titleCN: 横向日历图
 shotWidth: 900
 difficulty: 2
 */
 
-function getVirtulData(year) {
+function getVirtulData(year: string) {
     year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
+    let date = +echarts.number.parseDate(year + '-01-01');
+    let end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    let dayTime = 3600 * 24 * 1000;
+    let data: [string, number][] = [];
+    for (let time = date; time < end; time += dayTime) {
         data.push([
             echarts.format.formatTime('yyyy-MM-dd', time),
             Math.floor(Math.random() * 1000)
diff --git a/examples/examples/ts/calendar-lunar.ts b/examples/examples/ts/calendar-lunar.ts
new file mode 100644
index 0000000..ea41f54
--- /dev/null
+++ b/examples/examples/ts/calendar-lunar.ts
@@ -0,0 +1,470 @@
+/*
+title: Calendar Lunar
+category: calendar
+titleCN: 农历日历图
+difficulty: 4
+*/
+
+const dateList = [
+    ['2017-1-1', '初四'],
+    ['2017-1-2', '初五'],
+    ['2017-1-3', '初六'],
+    ['2017-1-4', '初七'],
+    ['2017-1-5', '初八', '小寒'],
+    ['2017-1-6', '初九'],
+    ['2017-1-7', '初十'],
+    ['2017-1-8', '十一'],
+    ['2017-1-9', '十二'],
+    ['2017-1-10', '十三'],
+    ['2017-1-11', '十四'],
+    ['2017-1-12', '十五'],
+    ['2017-1-13', '十六'],
+    ['2017-1-14', '十七'],
+    ['2017-1-15', '十八'],
+    ['2017-1-16', '十九'],
+    ['2017-1-17', '二十'],
+    ['2017-1-18', '廿一'],
+    ['2017-1-19', '廿二'],
+    ['2017-1-20', '廿三', '大寒'],
+    ['2017-1-21', '廿四'],
+    ['2017-1-22', '廿五'],
+    ['2017-1-23', '廿六'],
+    ['2017-1-24', '廿七'],
+    ['2017-1-25', '廿八'],
+    ['2017-1-26', '廿九'],
+    ['2017-1-27', '三十'],
+    ['2017-1-28', '正月'],
+    ['2017-1-29', '初二'],
+    ['2017-1-30', '初三'],
+    ['2017-1-31', '初四'],
+    ['2017-2-1', '初五'],
+    ['2017-2-2', '初六'],
+    ['2017-2-3', '初七', '立春'],
+    ['2017-2-4', '初八'],
+    ['2017-2-5', '初九'],
+    ['2017-2-6', '初十'],
+    ['2017-2-7', '十一'],
+    ['2017-2-8', '十二'],
+    ['2017-2-9', '十三'],
+    ['2017-2-10', '十四'],
+    ['2017-2-11', '十五'],
+    ['2017-2-12', '十六'],
+    ['2017-2-13', '十七'],
+    ['2017-2-14', '十八'],
+    ['2017-2-15', '十九'],
+    ['2017-2-16', '二十'],
+    ['2017-2-17', '廿一'],
+    ['2017-2-18', '廿二', '雨水'],
+    ['2017-2-19', '廿三'],
+    ['2017-2-20', '廿四'],
+    ['2017-2-21', '廿五'],
+    ['2017-2-22', '廿六'],
+    ['2017-2-23', '廿七'],
+    ['2017-2-24', '廿八'],
+    ['2017-2-25', '廿九'],
+    ['2017-2-26', '二月'],
+    ['2017-2-27', '初二'],
+    ['2017-2-28', '初三'],
+    ['2017-3-1', '初四'],
+    ['2017-3-2', '初五'],
+    ['2017-3-3', '初六'],
+    ['2017-3-4', '初七'],
+    ['2017-3-5', '初八', '驚蟄'],
+    ['2017-3-6', '初九'],
+    ['2017-3-7', '初十'],
+    ['2017-3-8', '十一'],
+    ['2017-3-9', '十二'],
+    ['2017-3-10', '十三'],
+    ['2017-3-11', '十四'],
+    ['2017-3-12', '十五'],
+    ['2017-3-13', '十六'],
+    ['2017-3-14', '十七'],
+    ['2017-3-15', '十八'],
+    ['2017-3-16', '十九'],
+    ['2017-3-17', '二十'],
+    ['2017-3-18', '廿一'],
+    ['2017-3-19', '廿二'],
+    ['2017-3-20', '廿三', '春分'],
+    ['2017-3-21', '廿四'],
+    ['2017-3-22', '廿五'],
+    ['2017-3-23', '廿六'],
+    ['2017-3-24', '廿七'],
+    ['2017-3-25', '廿八'],
+    ['2017-3-26', '廿九'],
+    ['2017-3-27', '三十'],
+    ['2017-3-28', '三月'],
+    ['2017-3-29', '初二'],
+    ['2017-3-30', '初三'],
+    ['2017-3-31', '初四'],
+    ['2017-4-1', '初五'],
+    ['2017-4-2', '初六'],
+    ['2017-4-3', '初七'],
+    ['2017-4-4', '初八', '清明'],
+    ['2017-4-5', '初九'],
+    ['2017-4-6', '初十'],
+    ['2017-4-7', '十一'],
+    ['2017-4-8', '十二'],
+    ['2017-4-9', '十三'],
+    ['2017-4-10', '十四'],
+    ['2017-4-11', '十五'],
+    ['2017-4-12', '十六'],
+    ['2017-4-13', '十七'],
+    ['2017-4-14', '十八'],
+    ['2017-4-15', '十九'],
+    ['2017-4-16', '二十'],
+    ['2017-4-17', '廿一'],
+    ['2017-4-18', '廿二'],
+    ['2017-4-19', '廿三'],
+    ['2017-4-20', '廿四', '穀雨'],
+    ['2017-4-21', '廿五'],
+    ['2017-4-22', '廿六'],
+    ['2017-4-23', '廿七'],
+    ['2017-4-24', '廿八'],
+    ['2017-4-25', '廿九'],
+    ['2017-4-26', '四月'],
+    ['2017-4-27', '初二'],
+    ['2017-4-28', '初三'],
+    ['2017-4-29', '初四'],
+    ['2017-4-30', '初五'],
+    ['2017-5-1', '初六'],
+    ['2017-5-2', '初七'],
+    ['2017-5-3', '初八'],
+    ['2017-5-4', '初九'],
+    ['2017-5-5', '初十', '立夏'],
+    ['2017-5-6', '十一'],
+    ['2017-5-7', '十二'],
+    ['2017-5-8', '十三'],
+    ['2017-5-9', '十四'],
+    ['2017-5-10', '十五'],
+    ['2017-5-11', '十六'],
+    ['2017-5-12', '十七'],
+    ['2017-5-13', '十八'],
+    ['2017-5-14', '十九'],
+    ['2017-5-15', '二十'],
+    ['2017-5-16', '廿一'],
+    ['2017-5-17', '廿二'],
+    ['2017-5-18', '廿三'],
+    ['2017-5-19', '廿四'],
+    ['2017-5-20', '廿五'],
+    ['2017-5-21', '廿六', '小滿'],
+    ['2017-5-22', '廿七'],
+    ['2017-5-23', '廿八'],
+    ['2017-5-24', '廿九'],
+    ['2017-5-25', '三十'],
+    ['2017-5-26', '五月'],
+    ['2017-5-27', '初二'],
+    ['2017-5-28', '初三'],
+    ['2017-5-29', '初四'],
+    ['2017-5-30', '初五'],
+    ['2017-5-31', '初六'],
+    ['2017-6-1', '初七'],
+    ['2017-6-2', '初八'],
+    ['2017-6-3', '初九'],
+    ['2017-6-4', '初十'],
+    ['2017-6-5', '十一', '芒種'],
+    ['2017-6-6', '十二'],
+    ['2017-6-7', '十三'],
+    ['2017-6-8', '十四'],
+    ['2017-6-9', '十五'],
+    ['2017-6-10', '十六'],
+    ['2017-6-11', '十七'],
+    ['2017-6-12', '十八'],
+    ['2017-6-13', '十九'],
+    ['2017-6-14', '二十'],
+    ['2017-6-15', '廿一'],
+    ['2017-6-16', '廿二'],
+    ['2017-6-17', '廿三'],
+    ['2017-6-18', '廿四'],
+    ['2017-6-19', '廿五'],
+    ['2017-6-20', '廿六'],
+    ['2017-6-21', '廿七', '夏至'],
+    ['2017-6-22', '廿八'],
+    ['2017-6-23', '廿九'],
+    ['2017-6-24', '六月'],
+    ['2017-6-25', '初二'],
+    ['2017-6-26', '初三'],
+    ['2017-6-27', '初四'],
+    ['2017-6-28', '初五'],
+    ['2017-6-29', '初六'],
+    ['2017-6-30', '初七'],
+    ['2017-7-1', '初八'],
+    ['2017-7-2', '初九'],
+    ['2017-7-3', '初十'],
+    ['2017-7-4', '十一'],
+    ['2017-7-5', '十二'],
+    ['2017-7-6', '十三'],
+    ['2017-7-7', '十四', '小暑'],
+    ['2017-7-8', '十五'],
+    ['2017-7-9', '十六'],
+    ['2017-7-10', '十七'],
+    ['2017-7-11', '十八'],
+    ['2017-7-12', '十九'],
+    ['2017-7-13', '二十'],
+    ['2017-7-14', '廿一'],
+    ['2017-7-15', '廿二'],
+    ['2017-7-16', '廿三'],
+    ['2017-7-17', '廿四'],
+    ['2017-7-18', '廿五'],
+    ['2017-7-19', '廿六'],
+    ['2017-7-20', '廿七'],
+    ['2017-7-21', '廿八'],
+    ['2017-7-22', '廿九', '大暑'],
+    ['2017-7-23', '閏六',],
+    ['2017-7-24', '初二'],
+    ['2017-7-25', '初三'],
+    ['2017-7-26', '初四'],
+    ['2017-7-27', '初五'],
+    ['2017-7-28', '初六'],
+    ['2017-7-29', '初七'],
+    ['2017-7-30', '初八'],
+    ['2017-7-31', '初九'],
+    ['2017-8-1', '初十'],
+    ['2017-8-2', '十一'],
+    ['2017-8-3', '十二'],
+    ['2017-8-4', '十三'],
+    ['2017-8-5', '十四'],
+    ['2017-8-6', '十五'],
+    ['2017-8-7', '十六', '立秋'],
+    ['2017-8-8', '十七'],
+    ['2017-8-9', '十八'],
+    ['2017-8-10', '十九'],
+    ['2017-8-11', '二十'],
+    ['2017-8-12', '廿一'],
+    ['2017-8-13', '廿二'],
+    ['2017-8-14', '廿三'],
+    ['2017-8-15', '廿四'],
+    ['2017-8-16', '廿五'],
+    ['2017-8-17', '廿六'],
+    ['2017-8-18', '廿七'],
+    ['2017-8-19', '廿八'],
+    ['2017-8-20', '廿九'],
+    ['2017-8-21', '三十'],
+    ['2017-8-22', '七月'],
+    ['2017-8-23', '初二', '處暑'],
+    ['2017-8-24', '初三'],
+    ['2017-8-25', '初四'],
+    ['2017-8-26', '初五'],
+    ['2017-8-27', '初六'],
+    ['2017-8-28', '初七'],
+    ['2017-8-29', '初八'],
+    ['2017-8-30', '初九'],
+    ['2017-8-31', '初十'],
+    ['2017-9-1', '十一'],
+    ['2017-9-2', '十二'],
+    ['2017-9-3', '十三'],
+    ['2017-9-4', '十四'],
+    ['2017-9-5', '十五'],
+    ['2017-9-6', '十六'],
+    ['2017-9-7', '十七', '白露'],
+    ['2017-9-8', '十八'],
+    ['2017-9-9', '十九'],
+    ['2017-9-10', '二十'],
+    ['2017-9-11', '廿一'],
+    ['2017-9-12', '廿二'],
+    ['2017-9-13', '廿三'],
+    ['2017-9-14', '廿四'],
+    ['2017-9-15', '廿五'],
+    ['2017-9-16', '廿六'],
+    ['2017-9-17', '廿七'],
+    ['2017-9-18', '廿八'],
+    ['2017-9-19', '廿九'],
+    ['2017-9-20', '八月'],
+    ['2017-9-21', '初二'],
+    ['2017-9-22', '初三'],
+    ['2017-9-23', '初四', '秋分'],
+    ['2017-9-24', '初五'],
+    ['2017-9-25', '初六'],
+    ['2017-9-26', '初七'],
+    ['2017-9-27', '初八'],
+    ['2017-9-28', '初九'],
+    ['2017-9-29', '初十'],
+    ['2017-9-30', '十一'],
+    ['2017-10-1', '十二'],
+    ['2017-10-2', '十三'],
+    ['2017-10-3', '十四'],
+    ['2017-10-4', '十五'],
+    ['2017-10-5', '十六'],
+    ['2017-10-6', '十七'],
+    ['2017-10-7', '十八'],
+    ['2017-10-8', '十九', '寒露'],
+    ['2017-10-9', '二十'],
+    ['2017-10-10', '廿一'],
+    ['2017-10-11', '廿二'],
+    ['2017-10-12', '廿三'],
+    ['2017-10-13', '廿四'],
+    ['2017-10-14', '廿五'],
+    ['2017-10-15', '廿六'],
+    ['2017-10-16', '廿七'],
+    ['2017-10-17', '廿八'],
+    ['2017-10-18', '廿九'],
+    ['2017-10-19', '三十'],
+    ['2017-10-20', '九月'],
+    ['2017-10-21', '初二'],
+    ['2017-10-22', '初三'],
+    ['2017-10-23', '初四', '霜降'],
+    ['2017-10-24', '初五'],
+    ['2017-10-25', '初六'],
+    ['2017-10-26', '初七'],
+    ['2017-10-27', '初八'],
+    ['2017-10-28', '初九'],
+    ['2017-10-29', '初十'],
+    ['2017-10-30', '十一'],
+    ['2017-10-31', '十二'],
+    ['2017-11-1', '十三'],
+    ['2017-11-2', '十四'],
+    ['2017-11-3', '十五'],
+    ['2017-11-4', '十六'],
+    ['2017-11-5', '十七'],
+    ['2017-11-6', '十八'],
+    ['2017-11-7', '十九', '立冬'],
+    ['2017-11-8', '二十'],
+    ['2017-11-9', '廿一'],
+    ['2017-11-10', '廿二'],
+    ['2017-11-11', '廿三'],
+    ['2017-11-12', '廿四'],
+    ['2017-11-13', '廿五'],
+    ['2017-11-14', '廿六'],
+    ['2017-11-15', '廿七'],
+    ['2017-11-16', '廿八'],
+    ['2017-11-17', '廿九'],
+    ['2017-11-18', '十月'],
+    ['2017-11-19', '初二'],
+    ['2017-11-20', '初三'],
+    ['2017-11-21', '初四'],
+    ['2017-11-22', '初五', '小雪'],
+    ['2017-11-23', '初六'],
+    ['2017-11-24', '初七'],
+    ['2017-11-25', '初八'],
+    ['2017-11-26', '初九'],
+    ['2017-11-27', '初十'],
+    ['2017-11-28', '十一'],
+    ['2017-11-29', '十二'],
+    ['2017-11-30', '十三'],
+    ['2017-12-1', '十四'],
+    ['2017-12-2', '十五'],
+    ['2017-12-3', '十六'],
+    ['2017-12-4', '十七'],
+    ['2017-12-5', '十八'],
+    ['2017-12-6', '十九'],
+    ['2017-12-7', '二十', '大雪'],
+    ['2017-12-8', '廿一'],
+    ['2017-12-9', '廿二'],
+    ['2017-12-10', '廿三'],
+    ['2017-12-11', '廿四'],
+    ['2017-12-12', '廿五'],
+    ['2017-12-13', '廿六'],
+    ['2017-12-14', '廿七'],
+    ['2017-12-15', '廿八'],
+    ['2017-12-16', '廿九'],
+    ['2017-12-17', '三十'],
+    ['2017-12-18', '十一月'],
+    ['2017-12-19', '初二'],
+    ['2017-12-20', '初三'],
+    ['2017-12-21', '初四'],
+    ['2017-12-22', '初五', '冬至'],
+    ['2017-12-23', '初六'],
+    ['2017-12-24', '初七'],
+    ['2017-12-25', '初八'],
+    ['2017-12-26', '初九'],
+    ['2017-12-27', '初十'],
+    ['2017-12-28', '十一'],
+    ['2017-12-29', '十二'],
+    ['2017-12-30', '十三'],
+    ['2017-12-31', '十四']
+];
+
+let heatmapData = [];
+let lunarData = [];
+for (let i = 0; i < dateList.length; i++) {
+    heatmapData.push([
+        dateList[i][0],
+        Math.random() * 300
+    ]);
+    lunarData.push([
+        dateList[i][0],
+        1,
+        dateList[i][1],
+        dateList[i][2]
+    ]);
+}
+
+
+option = {
+    tooltip: {
+        formatter: function (params) {
+            return '降雨量: ' + params.value[1].toFixed(2);
+        }
+    },
+
+    visualMap: {
+        show: false,
+        min: 0,
+        max: 300,
+        calculable: true,
+        seriesIndex: [2],
+        orient: 'horizontal',
+        left: 'center',
+        bottom: 20,
+        inRange: {
+            color: ['#e0ffff', '#006edd'],
+            opacity: 0.3
+        },
+        controller: {
+            inRange: {
+                opacity: 0.5
+            }
+        }
+    },
+
+    calendar: [{
+        left: 'center',
+        top: 'middle',
+        cellSize: [70, 70],
+        yearLabel: {show: false},
+        orient: 'vertical',
+        dayLabel: {
+            firstDay: 1,
+            nameMap: 'cn'
+        },
+        monthLabel: {
+            show: false
+        },
+        range: '2017-03'
+    }],
+
+    series: [{
+        type: 'scatter',
+        coordinateSystem: 'calendar',
+        symbolSize: 1,
+        label: {
+            show: true,
+            formatter: function (params) {
+                var d = echarts.number.parseDate(params.value[0]);
+                return d.getDate() + '\n\n' + params.value[2] + '\n\n';
+            },
+            color: '#000'
+        },
+        data: lunarData
+    }, {
+        type: 'scatter',
+        coordinateSystem: 'calendar',
+        symbolSize: 1,
+        label: {
+            show: true,
+            formatter: function (params) {
+                return '\n\n\n' + (params.value[3] || '');
+            },
+            fontSize: 14,
+            fontWeight: 700,
+            color: '#a00'
+        },
+        data: lunarData
+    }, {
+        name: '降雨量',
+        type: 'heatmap',
+        coordinateSystem: 'calendar',
+        data: heatmapData
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/calendar-pie.ts b/examples/examples/ts/calendar-pie.ts
new file mode 100644
index 0000000..fef76b3
--- /dev/null
+++ b/examples/examples/ts/calendar-pie.ts
@@ -0,0 +1,120 @@
+/*
+title: Calendar Pie
+category: 'calendar, pie'
+titleCN: 日历饼图
+difficulty: 6
+*/
+
+const cellSize = [80, 80];
+const pieRadius = 30;
+
+type DataItem = [string, number];
+
+function getVirtulData() {
+    let date = +echarts.number.parseDate('2017-02-01');
+    let end = +echarts.number.parseDate('2017-03-01');
+    let dayTime = 3600 * 24 * 1000;
+    let data: DataItem[] = [];
+    for (let time = date; time < end; time += dayTime) {
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            Math.floor(Math.random() * 10000)
+        ]);
+    }
+    return data;
+}
+
+function getPieSeries(scatterData: DataItem[], chart: echarts.ECharts) {
+    return scatterData.map(function (item, index) {
+        var center = chart.convertToPixel('calendar', item);
+        return {
+            id: index + 'pie',
+            type: 'pie',
+            center: center,
+            label: {
+                normal: {
+                    formatter: '{c}',
+                    position: 'inside'
+                }
+            },
+            radius: pieRadius,
+            data: [
+                {name: '工作', value: Math.round(Math.random() * 24)},
+                {name: '娱乐', value: Math.round(Math.random() * 24)},
+                {name: '睡觉', value: Math.round(Math.random() * 24)}
+            ]
+        };
+    });
+}
+
+function getPieSeriesUpdate(scatterData: DataItem[], chart: echarts.ECharts) {
+    return scatterData.map(function (item, index) {
+        var center = chart.convertToPixel('calendar', item);
+        return {
+            id: index + 'pie',
+            center: center
+        };
+    });
+}
+
+var scatterData = getVirtulData();
+
+option = {
+    tooltip : {},
+    legend: {
+        data: ['Work', 'Entertainment', 'Sleep'],
+        bottom: 20
+    },
+    calendar: {
+        top: 'middle',
+        left: 'center',
+        orient: 'vertical',
+        cellSize: cellSize,
+        yearLabel: {
+            show: false,
+            fontSize: 30
+        },
+        dayLabel: {
+            margin: 20,
+            firstDay: 1,
+            nameMap: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        },
+        monthLabel: {
+            show: false
+        },
+        range: ['2017-02']
+    },
+    series: [{
+        id: 'label',
+        type: 'scatter',
+        coordinateSystem: 'calendar',
+        symbolSize: 1,
+        label: {
+            show: true,
+            formatter: function (params) {
+                return echarts.format.formatTime('dd', params.value[0]);
+            },
+            offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
+            fontSize: 14
+        },
+        data: scatterData
+    }]
+};
+
+let pieInitialized: boolean;
+setTimeout(function () {
+    pieInitialized = true;
+    myChart.setOption<echarts.EChartsOption>({
+        series: getPieSeries(scatterData, myChart)
+    });
+}, 10);
+
+app.onresize = function () {
+    if (pieInitialized) {
+        myChart.setOption<echarts.EChartsOption>({
+            series: getPieSeriesUpdate(scatterData, myChart)
+        });
+    }
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/calendar-simple.ts b/examples/examples/ts/calendar-simple.ts
new file mode 100644
index 0000000..607da8c
--- /dev/null
+++ b/examples/examples/ts/calendar-simple.ts
@@ -0,0 +1,39 @@
+/*
+title: Simple Calendar
+titleCN: 基础日历图
+category: calendar
+difficulty: 0
+*/
+
+function getVirtulData(year: string) {
+    year = year || '2017';
+    var date = +echarts.number.parseDate(year + '-01-01');
+    var end = +echarts.number.parseDate(year + '-12-31');
+    var dayTime = 3600 * 24 * 1000;
+    var data = [];
+    for (var time = date; time <= end; time += dayTime) {
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            Math.floor(Math.random() * 10000)
+        ]);
+    }
+    return data;
+}
+
+option = {
+    visualMap: {
+        show: false,
+        min: 0,
+        max: 10000
+    },
+    calendar: {
+        range: '2017'
+    },
+    series: {
+        type: 'heatmap',
+        coordinateSystem: 'calendar',
+        data: getVirtulData('2017')
+    }
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/data/calendar-horizontal.js b/examples/examples/ts/calendar-vertical.ts
similarity index 54%
copy from examples/data/calendar-horizontal.js
copy to examples/examples/ts/calendar-vertical.ts
index 9dde1f1..212c3d0 100644
--- a/examples/data/calendar-horizontal.js
+++ b/examples/examples/ts/calendar-vertical.ts
@@ -1,12 +1,12 @@
 /*
-title: Calendar Heatmap Horizontal
-category: calendar
-titleCN: 横向日力图
+title: Calendar Heatmap Vertical
+category: 'calendar, heatmap'
+titleCN: 纵向日历图
 shotWidth: 900
-difficulty: 2
+difficulty: 1
 */
 
-function getVirtulData(year) {
+function getVirtulData(year: string) {
     year = year || '2017';
     var date = +echarts.number.parseDate(year + '-01-01');
     var end = +echarts.number.parseDate((+year + 1) + '-01-01');
@@ -22,51 +22,59 @@ function getVirtulData(year) {
 }
 
 
-
 option = {
     tooltip: {
-        position: 'top'
+        position: 'top',
+        formatter: function (p) {
+            var format = echarts.format.formatTime('yyyy-MM-dd', p.data[0]);
+            return format + ': ' + p.data[1];
+        }
     },
     visualMap: {
         min: 0,
         max: 1000,
         calculable: true,
-        orient: 'horizontal',
-        left: 'center',
-        top: 'top'
+        orient: 'vertical',
+        left: '670',
+        top: 'center'
     },
 
     calendar: [{
-        range: '2017',
-        cellSize: ['auto', 20]
+        orient: 'vertical',
+        range: '2015'
     },
     {
-        top: 260,
-        range: '2016',
-        cellSize: ['auto', 20]
+        left: 300,
+        orient: 'vertical',
+        range: '2016'
     },
     {
-        top: 450,
-        range: '2015',
-        cellSize: ['auto', 20],
-        right: 5
+        left: 520,
+        cellSize: [20, 'auto'],
+        bottom: 10,
+        orient: 'vertical',
+        range: '2017',
+        dayLabel: {
+            margin: 5
+        }
     }],
 
     series: [{
         type: 'heatmap',
         coordinateSystem: 'calendar',
         calendarIndex: 0,
-        data: getVirtulData(2017)
+        data: getVirtulData('2015')
     }, {
         type: 'heatmap',
         coordinateSystem: 'calendar',
         calendarIndex: 1,
-        data: getVirtulData(2016)
+        data: getVirtulData('2016')
     }, {
         type: 'heatmap',
         coordinateSystem: 'calendar',
         calendarIndex: 2,
-        data: getVirtulData(2015)
+        data: getVirtulData('2017')
     }]
-
 };
+
+export {}
\ No newline at end of file
diff --git a/examples/data/candlestick-brush.js b/examples/examples/ts/candlestick-brush.ts
similarity index 91%
copy from examples/data/candlestick-brush.js
copy to examples/examples/ts/candlestick-brush.ts
index 9ea6029..d5ce863 100644
--- a/examples/data/candlestick-brush.js
+++ b/examples/examples/ts/candlestick-brush.ts
@@ -1,18 +1,18 @@
 /*
 title: Candlestick Brush
 category: candlestick
-titleCN: 日力图刷选
+titleCN: K 线图刷选
 */
 
-var upColor = '#00da3c';
-var downColor = '#ec0000';
+const upColor = '#00da3c';
+const downColor = '#ec0000';
 
 
-function splitData(rawData) {
-    var categoryData = [];
-    var values = [];
-    var volumes = [];
-    for (var i = 0; i < rawData.length; i++) {
+function splitData(rawData: number[][]) {
+    let categoryData = [];
+    let values = [];
+    let volumes = [];
+    for (let i = 0; i < rawData.length; i++) {
         categoryData.push(rawData[i].splice(0, 1)[0]);
         values.push(rawData[i]);
         volumes.push([i, rawData[i][4], rawData[i][0] > rawData[i][1] ? 1 : -1]);
@@ -25,7 +25,7 @@ function splitData(rawData) {
     };
 }
 
-function calculateMA(dayCount, data) {
+function calculateMA(dayCount: number, data: { values: number[][]}) {
     var result = [];
     for (var i = 0, len = data.values.length; i < len; i++) {
         if (i < dayCount) {
@@ -45,7 +45,7 @@ $.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
 
     var data = splitData(rawData);
 
-    myChart.setOption(option = {
+    myChart.setOption<echarts.EChartsOption>(option = {
         animation: false,
         legend: {
             bottom: 10,
@@ -64,14 +64,18 @@ $.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
                 color: '#000'
             },
             position: function (pos, params, el, elRect, size) {
-                var obj = {top: 10};
+                const obj: Record<string, number> = {
+                    top: 10
+                };
                 obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
                 return obj;
             }
             // extraCssText: 'width: 170px'
         },
         axisPointer: {
-            link: {xAxisIndex: 'all'},
+            link: [{
+                xAxisIndex: 'all'
+            }],
             label: {
                 backgroundColor: '#777'
             }
@@ -189,8 +193,8 @@ $.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
                 itemStyle: {
                     color: upColor,
                     color0: downColor,
-                    borderColor: null,
-                    borderColor0: null
+                    borderColor: undefined,
+                    borderColor0: undefined
                 },
                 tooltip: {
                     formatter: function (param) {
@@ -261,4 +265,6 @@ $.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
             }
         ]
     });
-});
\ No newline at end of file
+});
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/candlestick-large.ts b/examples/examples/ts/candlestick-large.ts
new file mode 100644
index 0000000..b86038e
--- /dev/null
+++ b/examples/examples/ts/candlestick-large.ts
@@ -0,0 +1,213 @@
+/*
+title: Large Scale Candlestick
+category: candlestick
+titleCN: 大数据量K线图
+difficulty: 3
+*/
+
+const upColor = '#ec0000';
+const upBorderColor = '#8A0000';
+const downColor = '#00da3c';
+const downBorderColor = '#008F28';
+
+const dataCount = 2e5;
+const data = generateOHLC(dataCount);
+
+option = {
+    dataset: {
+        source: data
+    },
+    title: {
+        text: 'Data Amount: ' + echarts.format.addCommas(dataCount)
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'line'
+        }
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: false
+            },
+        }
+    },
+    grid: [
+        {
+            left: '10%',
+            right: '10%',
+            bottom: 200
+        },
+        {
+            left: '10%',
+            right: '10%',
+            height: 80,
+            bottom: 80
+        }
+    ],
+    xAxis: [
+        {
+            type: 'category',
+            scale: true,
+            boundaryGap: false,
+            // inverse: true,
+            axisLine: {onZero: false},
+            splitLine: {show: false},
+            splitNumber: 20,
+            min: 'dataMin',
+            max: 'dataMax'
+        },
+        {
+            type: 'category',
+            gridIndex: 1,
+            scale: true,
+            boundaryGap: false,
+            axisLine: {onZero: false},
+            axisTick: {show: false},
+            splitLine: {show: false},
+            axisLabel: {show: false},
+            splitNumber: 20,
+            min: 'dataMin',
+            max: 'dataMax'
+        }
+    ],
+    yAxis: [
+        {
+            scale: true,
+            splitArea: {
+                show: true
+            }
+        },
+        {
+            scale: true,
+            gridIndex: 1,
+            splitNumber: 2,
+            axisLabel: {show: false},
+            axisLine: {show: false},
+            axisTick: {show: false},
+            splitLine: {show: false}
+        }
+    ],
+    dataZoom: [
+        {
+            type: 'inside',
+            xAxisIndex: [0, 1],
+            start: 10,
+            end: 100
+        },
+        {
+            show: true,
+            xAxisIndex: [0, 1],
+            type: 'slider',
+            bottom: 10,
+            start: 10,
+            end: 100
+        }
+    ],
+    visualMap: {
+        show: false,
+        seriesIndex: 1,
+        dimension: 6,
+        pieces: [{
+            value: 1,
+            color: upColor
+        }, {
+            value: -1,
+            color: downColor
+        }]
+    },
+    series: [
+        {
+            type: 'candlestick',
+            itemStyle: {
+                color: upColor,
+                color0: downColor,
+                borderColor: upBorderColor,
+                borderColor0: downBorderColor
+            },
+            encode: {
+                x: 0,
+                y: [1, 4, 3, 2]
+            }
+        },
+        {
+            name: 'Volumn',
+            type: 'bar',
+            xAxisIndex: 1,
+            yAxisIndex: 1,
+            itemStyle: {
+                color: '#7fbe9e'
+            },
+            large: true,
+            encode: {
+                x: 0,
+                y: 5
+            }
+        }
+    ]
+};
+
+type DataItem = [string, number, number, number, number, number, number];
+
+function generateOHLC(count: number) {
+    let data: DataItem[]= [];
+
+    let xValue = +new Date(2011, 0, 1);
+    let minute = 60 * 1000;
+    let baseValue = Math.random() * 12000;
+    let boxVals = new Array(4);
+    let dayRange = 12;
+
+    for (let i = 0; i < count; i++) {
+        baseValue = baseValue + Math.random() * 20 - 10;
+
+        for (let j = 0; j < 4; j++) {
+            boxVals[j] = (Math.random() - 0.5) * dayRange + baseValue;
+        }
+        boxVals.sort();
+
+        let openIdx = Math.round(Math.random() * 3);
+        let closeIdx = Math.round(Math.random() * 2);
+        if (closeIdx === openIdx) {
+            closeIdx++;
+        }
+        let volumn = boxVals[3] * (1000 + Math.random() * 500);
+
+        // ['open', 'close', 'lowest', 'highest', 'volumn']
+        // [1, 4, 3, 2]
+        data[i] = [
+            echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', xValue += minute),
+            +boxVals[openIdx].toFixed(2), // open
+            +boxVals[3].toFixed(2), // highest
+            +boxVals[0].toFixed(2), // lowest
+            +boxVals[closeIdx].toFixed(2),  // close
+            +volumn.toFixed(0),
+            getSign(data, i, +boxVals[openIdx], +boxVals[closeIdx], 4) // sign
+        ];
+    }
+
+    return data;
+
+    function getSign(data: DataItem[], dataIndex: number, openVal: number, closeVal: number, closeDimIdx: number) {
+        var sign;
+        if (openVal > closeVal) {
+            sign = -1;
+        }
+        else if (openVal < closeVal) {
+            sign = 1;
+        }
+        else {
+            sign = dataIndex > 0
+                // If close === open, compare with close of last record
+                ? (data[dataIndex - 1][closeDimIdx] <= closeVal ? 1 : -1)
+                // No record of previous, set to be positive
+                : 1;
+        }
+
+        return sign;
+    }
+}
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/candlestick-sh-2015.ts b/examples/examples/ts/candlestick-sh-2015.ts
new file mode 100644
index 0000000..7d24525
--- /dev/null
+++ b/examples/examples/ts/candlestick-sh-2015.ts
@@ -0,0 +1,137 @@
+/*
+title: 'ShangHai Index, 2015'
+category: candlestick
+titleCN: 2015 年上证指数
+*/
+
+type DataItem = (number | string)[]
+const rawData = [['2015/12/31','3570.47','3539.18','-33.69','-0.94%','3538.35','3580.6','176963664','25403106','-'],['2015/12/30','3566.73','3572.88','9.14','0.26%','3538.11','3573.68','187889600','26778766','-'],['2015/12/29','3528.4','3563.74','29.96','0.85%','3515.52','3564.17','182551920','25093890','-'],['2015/12/28','3635.77','3533.78','-94.13','-2.59%','3533.78','3641.59','269983264','36904280','-'],['2015/12/25','3614.05','3627.91','15.43','0.43%','3601.74','3635.26','198451120', [...]
+
+function calculateMA(dayCount: number, data: DataItem[]) {
+    var result = [];
+    for (var i = 0, len = data.length; i < len; i++) {
+        if (i < dayCount) {
+            result.push('-');
+            continue;
+        }
+        var sum = 0;
+        for (var j = 0; j < dayCount; j++) {
+            sum += +data[i - j][1];
+        }
+        result.push(sum / dayCount);
+    }
+    return result;
+}
+
+
+const dates = rawData.map(function (item) {
+    return item[0];
+});
+
+const data = rawData.map(function (item) {
+    return [+item[1], +item[2], +item[5], +item[6]];
+});
+option = {
+    legend: {
+        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30'],
+        inactiveColor: '#777',
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            animation: false,
+            type: 'cross',
+            lineStyle: {
+                color: '#376df4',
+                width: 2,
+                opacity: 1
+            }
+        }
+    },
+    xAxis: {
+        type: 'category',
+        data: dates,
+        axisLine: { lineStyle: { color: '#8392A5' } }
+    },
+    yAxis: {
+        scale: true,
+        axisLine: { lineStyle: { color: '#8392A5' } },
+        splitLine: { show: false }
+    },
+    grid: {
+        bottom: 80
+    },
+    dataZoom: [{
+        textStyle: {
+            color: '#8392A5'
+        },
+        handleIcon: 'path://M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+        dataBackground: {
+            areaStyle: {
+                color: '#8392A5'
+            },
+            lineStyle: {
+                opacity: 0.8,
+                color: '#8392A5'
+            }
+        },
+        brushSelect: true
+    }, {
+        type: 'inside'
+    }],
+    series: [
+        {
+            type: 'candlestick',
+            name: 'Day',
+            data: data,
+            itemStyle: {
+                color: '#FD1050',
+                color0: '#0CF49B',
+                borderColor: '#FD1050',
+                borderColor0: '#0CF49B'
+            }
+        },
+        {
+            name: 'MA5',
+            type: 'line',
+            data: calculateMA(5, data),
+            smooth: true,
+            showSymbol: false,
+            lineStyle: {
+                width: 1
+            }
+        },
+        {
+            name: 'MA10',
+            type: 'line',
+            data: calculateMA(10, data),
+            smooth: true,
+            showSymbol: false,
+            lineStyle: {
+                width: 1
+            }
+        },
+        {
+            name: 'MA20',
+            type: 'line',
+            data: calculateMA(20, data),
+            smooth: true,
+            showSymbol: false,
+            lineStyle: {
+                width: 1
+            }
+        },
+        {
+            name: 'MA30',
+            type: 'line',
+            data: calculateMA(30, data),
+            smooth: true,
+            showSymbol: false,
+            lineStyle: {
+                width: 1
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/candlestick-sh.ts b/examples/examples/ts/candlestick-sh.ts
new file mode 100644
index 0000000..f25b802
--- /dev/null
+++ b/examples/examples/ts/candlestick-sh.ts
@@ -0,0 +1,324 @@
+/*
+title: ShangHai Index
+category: candlestick
+titleCN: 上证指数
+difficulty: 2
+*/
+
+const upColor = '#ec0000';
+const upBorderColor = '#8A0000';
+const downColor = '#00da3c';
+const downBorderColor = '#008F28';
+
+
+// Each item: open,close,lowest,highest
+const data0 = splitData([
+    ['2013/1/24', 2320.26,2320.26,2287.3,2362.94],
+    ['2013/1/25', 2300,2291.3,2288.26,2308.38],
+    ['2013/1/28', 2295.35,2346.5,2295.35,2346.92],
+    ['2013/1/29', 2347.22,2358.98,2337.35,2363.8],
+    ['2013/1/30', 2360.75,2382.48,2347.89,2383.76],
+    ['2013/1/31', 2383.43,2385.42,2371.23,2391.82],
+    ['2013/2/1', 2377.41,2419.02,2369.57,2421.15],
+    ['2013/2/4', 2425.92,2428.15,2417.58,2440.38],
+    ['2013/2/5', 2411,2433.13,2403.3,2437.42],
+    ['2013/2/6', 2432.68,2434.48,2427.7,2441.73],
+    ['2013/2/7', 2430.69,2418.53,2394.22,2433.89],
+    ['2013/2/8', 2416.62,2432.4,2414.4,2443.03],
+    ['2013/2/18', 2441.91,2421.56,2415.43,2444.8],
+    ['2013/2/19', 2420.26,2382.91,2373.53,2427.07],
+    ['2013/2/20', 2383.49,2397.18,2370.61,2397.94],
+    ['2013/2/21', 2378.82,2325.95,2309.17,2378.82],
+    ['2013/2/22', 2322.94,2314.16,2308.76,2330.88],
+    ['2013/2/25', 2320.62,2325.82,2315.01,2338.78],
+    ['2013/2/26', 2313.74,2293.34,2289.89,2340.71],
+    ['2013/2/27', 2297.77,2313.22,2292.03,2324.63],
+    ['2013/2/28', 2322.32,2365.59,2308.92,2366.16],
+    ['2013/3/1', 2364.54,2359.51,2330.86,2369.65],
+    ['2013/3/4', 2332.08,2273.4,2259.25,2333.54],
+    ['2013/3/5', 2274.81,2326.31,2270.1,2328.14],
+    ['2013/3/6', 2333.61,2347.18,2321.6,2351.44],
+    ['2013/3/7', 2340.44,2324.29,2304.27,2352.02],
+    ['2013/3/8', 2326.42,2318.61,2314.59,2333.67],
+    ['2013/3/11', 2314.68,2310.59,2296.58,2320.96],
+    ['2013/3/12', 2309.16,2286.6,2264.83,2333.29],
+    ['2013/3/13', 2282.17,2263.97,2253.25,2286.33],
+    ['2013/3/14', 2255.77,2270.28,2253.31,2276.22],
+    ['2013/3/15', 2269.31,2278.4,2250,2312.08],
+    ['2013/3/18', 2267.29,2240.02,2239.21,2276.05],
+    ['2013/3/19', 2244.26,2257.43,2232.02,2261.31],
+    ['2013/3/20', 2257.74,2317.37,2257.42,2317.86],
+    ['2013/3/21', 2318.21,2324.24,2311.6,2330.81],
+    ['2013/3/22', 2321.4,2328.28,2314.97,2332],
+    ['2013/3/25', 2334.74,2326.72,2319.91,2344.89],
+    ['2013/3/26', 2318.58,2297.67,2281.12,2319.99],
+    ['2013/3/27', 2299.38,2301.26,2289,2323.48],
+    ['2013/3/28', 2273.55,2236.3,2232.91,2273.55],
+    ['2013/3/29', 2238.49,2236.62,2228.81,2246.87],
+    ['2013/4/1', 2229.46,2234.4,2227.31,2243.95],
+    ['2013/4/2', 2234.9,2227.74,2220.44,2253.42],
+    ['2013/4/3', 2232.69,2225.29,2217.25,2241.34],
+    ['2013/4/8', 2196.24,2211.59,2180.67,2212.59],
+    ['2013/4/9', 2215.47,2225.77,2215.47,2234.73],
+    ['2013/4/10', 2224.93,2226.13,2212.56,2233.04],
+    ['2013/4/11', 2236.98,2219.55,2217.26,2242.48],
+    ['2013/4/12', 2218.09,2206.78,2204.44,2226.26],
+    ['2013/4/15', 2199.91,2181.94,2177.39,2204.99],
+    ['2013/4/16', 2169.63,2194.85,2165.78,2196.43],
+    ['2013/4/17', 2195.03,2193.8,2178.47,2197.51],
+    ['2013/4/18', 2181.82,2197.6,2175.44,2206.03],
+    ['2013/4/19', 2201.12,2244.64,2200.58,2250.11],
+    ['2013/4/22', 2236.4,2242.17,2232.26,2245.12],
+    ['2013/4/23', 2242.62,2184.54,2182.81,2242.62],
+    ['2013/4/24', 2187.35,2218.32,2184.11,2226.12],
+    ['2013/4/25', 2213.19,2199.31,2191.85,2224.63],
+    ['2013/4/26', 2203.89,2177.91,2173.86,2210.58],
+    ['2013/5/2', 2170.78,2174.12,2161.14,2179.65],
+    ['2013/5/3', 2179.05,2205.5,2179.05,2222.81],
+    ['2013/5/6', 2212.5,2231.17,2212.5,2236.07],
+    ['2013/5/7', 2227.86,2235.57,2219.44,2240.26],
+    ['2013/5/8', 2242.39,2246.3,2235.42,2255.21],
+    ['2013/5/9', 2246.96,2232.97,2221.38,2247.86],
+    ['2013/5/10', 2228.82,2246.83,2225.81,2247.67],
+    ['2013/5/13', 2247.68,2241.92,2231.36,2250.85],
+    ['2013/5/14', 2238.9,2217.01,2205.87,2239.93],
+    ['2013/5/15', 2217.09,2224.8,2213.58,2225.19],
+    ['2013/5/16', 2221.34,2251.81,2210.77,2252.87],
+    ['2013/5/17', 2249.81,2282.87,2248.41,2288.09],
+    ['2013/5/20', 2286.33,2299.99,2281.9,2309.39],
+    ['2013/5/21', 2297.11,2305.11,2290.12,2305.3],
+    ['2013/5/22', 2303.75,2302.4,2292.43,2314.18],
+    ['2013/5/23', 2293.81,2275.67,2274.1,2304.95],
+    ['2013/5/24', 2281.45,2288.53,2270.25,2292.59],
+    ['2013/5/27', 2286.66,2293.08,2283.94,2301.7],
+    ['2013/5/28', 2293.4,2321.32,2281.47,2322.1],
+    ['2013/5/29', 2323.54,2324.02,2321.17,2334.33],
+    ['2013/5/30', 2316.25,2317.75,2310.49,2325.72],
+    ['2013/5/31', 2320.74,2300.59,2299.37,2325.53],
+    ['2013/6/3', 2300.21,2299.25,2294.11,2313.43],
+    ['2013/6/4', 2297.1,2272.42,2264.76,2297.1],
+    ['2013/6/5', 2270.71,2270.93,2260.87,2276.86],
+    ['2013/6/6', 2264.43,2242.11,2240.07,2266.69],
+    ['2013/6/7', 2242.26,2210.9,2205.07,2250.63],
+    ['2013/6/13', 2190.1,2148.35,2126.22,2190.1]
+]);
+
+
+function splitData(rawData: (number | string)[][]) {
+    const categoryData = [];
+    const values = []
+    for (var i = 0; i < rawData.length; i++) {
+        categoryData.push(rawData[i].splice(0, 1)[0]);
+        values.push(rawData[i])
+    }
+    return {
+        categoryData: categoryData,
+        values: values
+    };
+}
+
+function calculateMA(dayCount: number) {
+    var result = [];
+    for (var i = 0, len = data0.values.length; i < len; i++) {
+        if (i < dayCount) {
+            result.push('-');
+            continue;
+        }
+        var sum = 0;
+        for (var j = 0; j < dayCount; j++) {
+            sum += +data0.values[i - j][1];
+        }
+        result.push(sum / dayCount);
+    }
+    return result;
+}
+
+
+
+option = {
+    title: {
+        text: '上证指数',
+        left: 0
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross'
+        }
+    },
+    legend: {
+        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
+    },
+    grid: {
+        left: '10%',
+        right: '10%',
+        bottom: '15%'
+    },
+    xAxis: {
+        type: 'category',
+        data: data0.categoryData,
+        scale: true,
+        boundaryGap: false,
+        axisLine: {onZero: false},
+        splitLine: {show: false},
+        splitNumber: 20,
+        min: 'dataMin',
+        max: 'dataMax'
+    },
+    yAxis: {
+        scale: true,
+        splitArea: {
+            show: true
+        }
+    },
+    dataZoom: [
+        {
+            type: 'inside',
+            start: 50,
+            end: 100
+        },
+        {
+            show: true,
+            type: 'slider',
+            top: '90%',
+            start: 50,
+            end: 100
+        }
+    ],
+    series: [
+        {
+            name: '日K',
+            type: 'candlestick',
+            data: data0.values,
+            itemStyle: {
+                color: upColor,
+                color0: downColor,
+                borderColor: upBorderColor,
+                borderColor0: downBorderColor
+            },
+            markPoint: {
+                label: {
+                    formatter: function (param) {
+                        return param != null ? Math.round(param.value) : '';
+                    }
+                },
+                data: [
+                    {
+                        name: 'Mark',
+                        coord: ['2013/5/31', 2300],
+                        value: 2300,
+                        itemStyle: {
+                            color: 'rgb(41,60,85)'
+                        }
+                    },
+                    {
+                        name: 'highest value',
+                        type: 'max',
+                        valueDim: 'highest'
+                    },
+                    {
+                        name: 'lowest value',
+                        type: 'min',
+                        valueDim: 'lowest'
+                    },
+                    {
+                        name: 'average value on close',
+                        type: 'average',
+                        valueDim: 'close'
+                    }
+                ],
+                tooltip: {
+                    formatter: function (param) {
+                        return param.name + '<br>' + (param.data.coord || '');
+                    }
+                }
+            },
+            markLine: {
+                symbol: ['none', 'none'],
+                data: [
+                    [
+                        {
+                            name: 'from lowest to highest',
+                            type: 'min',
+                            valueDim: 'lowest',
+                            symbol: 'circle',
+                            symbolSize: 10,
+                            label: {
+                                show: false
+                            },
+                            emphasis: {
+                                label: {
+                                    show: false
+                                }
+                            }
+                        },
+                        {
+                            type: 'max',
+                            valueDim: 'highest',
+                            symbol: 'circle',
+                            symbolSize: 10,
+                            label: {
+                                show: false
+                            },
+                            emphasis: {
+                                label: {
+                                    show: false
+                                }
+                            }
+                        }
+                    ],
+                    {
+                        name: 'min line on close',
+                        type: 'min',
+                        valueDim: 'close'
+                    },
+                    {
+                        name: 'max line on close',
+                        type: 'max',
+                        valueDim: 'close'
+                    }
+                ]
+            }
+        },
+        {
+            name: 'MA5',
+            type: 'line',
+            data: calculateMA(5),
+            smooth: true,
+            lineStyle: {
+                opacity: 0.5
+            }
+        },
+        {
+            name: 'MA10',
+            type: 'line',
+            data: calculateMA(10),
+            smooth: true,
+            lineStyle: {
+                opacity: 0.5
+            }
+        },
+        {
+            name: 'MA20',
+            type: 'line',
+            data: calculateMA(20),
+            smooth: true,
+            lineStyle: {
+                opacity: 0.5
+            }
+        },
+        {
+            name: 'MA30',
+            type: 'line',
+            data: calculateMA(30),
+            smooth: true,
+            lineStyle: {
+                opacity: 0.5
+            }
+        },
+
+    ]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/candlestick-simple.ts b/examples/examples/ts/candlestick-simple.ts
new file mode 100644
index 0000000..498e5d0
--- /dev/null
+++ b/examples/examples/ts/candlestick-simple.ts
@@ -0,0 +1,24 @@
+/*
+title: Basic Candlestick
+category: candlestick
+titleCN: 基础 K 线图
+difficulty: 0
+*/
+
+option = {
+    xAxis: {
+        data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27']
+    },
+    yAxis: {},
+    series: [{
+        type: 'candlestick',
+        data: [
+            [20, 34, 10,38],
+            [40, 35, 30, 50],
+            [31, 38, 33, 44],
+            [38, 15, 5, 42]
+        ]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/candlestick-touch.ts b/examples/examples/ts/candlestick-touch.ts
new file mode 100644
index 0000000..9057461
--- /dev/null
+++ b/examples/examples/ts/candlestick-touch.ts
@@ -0,0 +1,249 @@
+/*
+title: Axis Pointer Link and Touch
+category: candlestick
+titleCN: 触屏上的坐标轴指示器
+difficulty: 4
+*/
+
+type DataItem = (string | number)[]
+
+const rawData: DataItem[] = [["2015/1/5","3258.63","3350.52","115.84","3.58%","3253.88","3369.28","531352384","54976008","-"],["2015/1/6","3330.8","3351.45","0.93","0.03%","3303.18","3394.22","501661696","53239848","-"],["2015/1/7","3326.65","3373.95","22.51","0.67%","3312.21","3374.9","391918880","43641672","-"],["2015/1/8","3371.96","3293.46","-80.5","-2.39%","3285.09","3381.57","371131200","39923032","-"],["2015/1/9","3276.97","3285.41","-8.04","-0.24%","3267.51","3404.83","410240864" [...]
+const colorList = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83',  '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'];
+const labelFont = 'bold 12px Sans-serif';
+
+function calculateMA(dayCount: number, data: DataItem[]) {
+    let result = [];
+    for (let i = 0, len = data.length; i < len; i++) {
+        if (i < dayCount) {
+            result.push('-');
+            continue;
+        }
+        let sum = 0;
+        for (let j = 0; j < dayCount; j++) {
+            sum += +data[i - j][1];
+        }
+        result.push((sum / dayCount).toFixed(2));
+    }
+    return result;
+}
+
+
+const dates = ["2016-03-29", "2016-03-30", "2016-03-31", "2016-04-01", "2016-04-04", "2016-04-05", "2016-04-06", "2016-04-07", "2016-04-08", "2016-04-11", "2016-04-12", "2016-04-13", "2016-04-14", "2016-04-15", "2016-04-18", "2016-04-19", "2016-04-20", "2016-04-21", "2016-04-22", "2016-04-25", "2016-04-26", "2016-04-27", "2016-04-28", "2016-04-29", "2016-05-02", "2016-05-03", "2016-05-04", "2016-05-05", "2016-05-06", "2016-05-09", "2016-05-10", "2016-05-11", "2016-05-12", "2016-05-13", " [...]
+const data = [[17512.58,17633.11,17434.27,17642.81,86160000],[17652.36,17716.66,17652.36,17790.11,79330000],[17716.05,17685.09,17669.72,17755.7,102600000],[17661.74,17792.75,17568.02,17811.48,104890000],[17799.39,17737,17710.67,17806.38,85230000],[17718.03,17603.32,17579.56,17718.03,115230000],[17605.45,17716.05,17542.54,17723.55,99410000],[17687.28,17541.96,17484.23,17687.28,90120000],[17555.39,17576.96,17528.16,17694.51,79990000],[17586.48,17556.41,17555.9,17731.63,107100000],[17571.34 [...]
+const volumes = [86160000,79330000,102600000,104890000,85230000,115230000,99410000,90120000,79990000,107100000,81020000,91710000,84510000,118160000,89390000,89820000,100210000,102720000,134120000,83770000,92570000,109090000,100920000,136670000,80100000,97060000,95020000,81530000,80020000,85590000,75790000,87390000,88560000,86640000,88440000,103260000,79120000,95530000,111990000,87790000,86480000,79180000,68940000,73190000,147390000,78530000,75560000,82270000,71870000,78750000,71260000,69 [...]
+
+const dataMA5 = calculateMA(5, data);
+const dataMA10 = calculateMA(10, data);
+const dataMA20 = calculateMA(20, data);
+
+
+option = {
+    animation: false,
+    color: colorList,
+    title: {
+        left: 'center',
+        text: 'Candlestick on Mobile'
+    },
+    legend: {
+        top: 30,
+        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
+    },
+    tooltip: {
+        triggerOn: 'none',
+        transitionDuration: 0,
+        confine: true,
+        borderRadius: 4,
+        borderWidth: 1,
+        borderColor: '#333',
+        backgroundColor: 'rgba(255,255,255,0.9)',
+        textStyle: {
+            fontSize: 12,
+            color: '#333'
+        },
+        position: function (pos, params, el, elRect, size) {
+            const obj: Record<string, number> = {
+                top: 60
+            };
+            obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 5;
+            return obj;
+        }
+    },
+    axisPointer: {
+        link: [{
+            xAxisIndex: [0, 1]
+        }]
+    },
+    dataZoom: [{
+        type: 'slider',
+        xAxisIndex: [0, 1],
+        realtime: false,
+        start: 20,
+        end: 70,
+        top: 65,
+        height: 20,
+        handleIcon: 'path://M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+        handleSize: '120%'
+    }, {
+        type: 'inside',
+        xAxisIndex: [0, 1],
+        start: 40,
+        end: 70,
+        top: 30,
+        height: 20
+    }],
+    xAxis: [{
+        type: 'category',
+        data: dates,
+        boundaryGap : false,
+        axisLine: { lineStyle: { color: '#777' } },
+        axisLabel: {
+            formatter: function (value) {
+                return echarts.format.formatTime('MM-dd', value);
+            }
+        },
+        min: 'dataMin',
+        max: 'dataMax',
+        axisPointer: {
+            show: true
+        }
+    }, {
+        type: 'category',
+        gridIndex: 1,
+        data: dates,
+        scale: true,
+        boundaryGap : false,
+        splitLine: {show: false},
+        axisLabel: {show: false},
+        axisTick: {show: false},
+        axisLine: { lineStyle: { color: '#777' } },
+        splitNumber: 20,
+        min: 'dataMin',
+        max: 'dataMax',
+        axisPointer: {
+            type: 'shadow',
+            label: {show: false},
+            triggerTooltip: true,
+            handle: {
+                show: true,
+                margin: 30,
+                color: '#B80C00'
+            }
+        }
+    }],
+    yAxis: [{
+        scale: true,
+        splitNumber: 2,
+        axisLine: { lineStyle: { color: '#777' } },
+        splitLine: { show: true },
+        axisTick: { show: false },
+        axisLabel: {
+            inside: true,
+            formatter: '{value}\n'
+        }
+    }, {
+        scale: true,
+        gridIndex: 1,
+        splitNumber: 2,
+        axisLabel: {show: false},
+        axisLine: {show: false},
+        axisTick: {show: false},
+        splitLine: {show: false}
+    }],
+    grid: [{
+        left: 20,
+        right: 20,
+        top: 110,
+        height: 120
+    }, {
+        left: 20,
+        right: 20,
+        height: 40,
+        top: 260
+    }],
+    graphic: [{
+        type: 'group',
+        left: 'center',
+        top: 70,
+        width: 300,
+        bounding: 'raw',
+        children: [{
+            id: 'MA5',
+            type: 'text',
+            style: {fill: colorList[1], font: labelFont},
+            left: 0
+        }, {
+            id: 'MA10',
+            type: 'text',
+            style: {fill: colorList[2], font: labelFont},
+            left: 'center'
+        }, {
+            id: 'MA20',
+            type: 'text',
+            style: {fill: colorList[3], font: labelFont},
+            right: 0
+        }]
+    }],
+    series: [{
+        name: 'Volume',
+        type: 'bar',
+        xAxisIndex: 1,
+        yAxisIndex: 1,
+        itemStyle: {
+            color: '#7fbe9e'
+        },
+        emphasis: {
+            itemStyle: {
+                color: '#140'
+            }
+        },
+        data: volumes
+    }, {
+        type: 'candlestick',
+        name: '日K',
+        data: data,
+        itemStyle: {
+            color: '#ef232a',
+            color0: '#14b143',
+            borderColor: '#ef232a',
+            borderColor0: '#14b143'
+        },
+        emphasis: {
+            itemStyle: {
+                color: 'black',
+                color0: '#444',
+                borderColor: 'black',
+                borderColor0: '#444'
+            }
+        }
+    }, {
+        name: 'MA5',
+        type: 'line',
+        data: dataMA5,
+        smooth: true,
+        showSymbol: false,
+        lineStyle: {
+            width: 1
+        }
+    }, {
+        name: 'MA10',
+        type: 'line',
+        data: dataMA10,
+        smooth: true,
+        showSymbol: false,
+        lineStyle: {
+            width: 1
+        }
+    }, {
+        name: 'MA20',
+        type: 'line',
+        data: dataMA20,
+        smooth: true,
+        showSymbol: false,
+        lineStyle: {
+            width: 1
+        }
+    }]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/circle-packing-with-d3.ts b/examples/examples/ts/circle-packing-with-d3.ts
new file mode 100644
index 0000000..50d8b09
--- /dev/null
+++ b/examples/examples/ts/circle-packing-with-d3.ts
@@ -0,0 +1,232 @@
+/*
+title: Circle Packing with d3
+category: custom
+titleCN: Circle Packing with d3
+difficulty: 11
+*/
+
+$.when(
+    $.get(ROOT_PATH + '/data/asset/data/option-view.json'),
+    $.getScript('https://cdn.jsdelivr.net/npm/d3-hierarchy@2.0.0/dist/d3-hierarchy.min.js')
+).done(function (res) {
+    run(res[0]);
+});
+
+function run(rawData: RawDataNode) {
+    const dataWrap = prepareData(rawData);
+    initChart(dataWrap.seriesData, dataWrap.maxDepth);
+}
+
+interface DataItem {
+    id: string
+    value: number
+    depth: number
+    index: number
+}
+
+type RawDataNode = {
+    [key: string]: RawDataNode
+} & {
+    $count: number
+}
+
+function prepareData(rawData: RawDataNode) {
+    const seriesData: DataItem[] = [];
+    let maxDepth = 0;
+
+    function convert(source: RawDataNode, basePath: string, depth: number) {
+        if (source == null) {
+            return;
+        }
+        if (maxDepth > 5) {
+            return;
+        }
+        maxDepth = Math.max(depth, maxDepth);
+
+        seriesData.push({
+            id: basePath,
+            value: source.$count,
+            depth: depth,
+            index: seriesData.length
+        });
+
+        for (var key in source) {
+            if (source.hasOwnProperty(key) && !key.match(/^\$/)) {
+                var path = basePath + '.' + key;
+                convert(source[key], path, depth + 1);
+            }
+        }
+    }
+
+    convert(rawData, 'option', 0);
+
+    return {
+        seriesData: seriesData,
+        maxDepth: maxDepth
+    };
+}
+
+function initChart(seriesData: DataItem[], maxDepth: number) {
+    var displayRoot = stratify();
+
+    function stratify() {
+        return d3.stratify()
+            .parentId(function (d) {
+                return d.id.substring(0, d.id.lastIndexOf('.'));
+            })(
+                seriesData
+            )
+            .sum(function (d) {
+                return d.value || 0;
+            })
+            .sort(function (a, b) {
+                return b.value - a.value;
+            });
+    }
+
+    function overallLayout(params, api) {
+        var context = params.context;
+        d3.pack()
+            .size([api.getWidth() - 2, api.getHeight() - 2])
+            .padding(3)(displayRoot);
+
+        context.nodes = {};
+        displayRoot.descendants().forEach(function (node, index) {
+            context.nodes[node.id] = node;
+        });
+    }
+
+    const renderItem: echarts.CustomSeriesOption['renderItem'] = function (params, api) {
+        var context = params.context;
+
+        // Only do that layout once in each time `setOption` called.
+        if (!context.layout) {
+            context.layout = true;
+            overallLayout(params, api);
+        }
+
+        var nodePath = api.value('id');
+        var node = context.nodes[nodePath];
+
+        if (!node) {
+            // Reder nothing.
+            return;
+        }
+
+        var isLeaf = !node.children || !node.children.length;
+
+        var focus = new Uint32Array(node.descendants().map(function (node) {
+            return node.data.index;
+        }));
+
+        var nodeName = isLeaf
+            ? nodePath.slice(nodePath.lastIndexOf('.') + 1).split(/(?=[A-Z][^A-Z])/g).join('\n')
+            : '';
+
+        var z2 = api.value('depth') * 2;
+
+        return {
+            type: 'circle',
+            focus: focus,
+            shape: {
+                cx: node.x,
+                cy: node.y,
+                r: node.r
+            },
+            transition: ['shape'],
+            z2: z2,
+            textContent: {
+                type: 'text',
+                style: {
+                    // transition: isLeaf ? 'fontSize' : null,
+                    text: nodeName,
+                    fontFamily: 'Arial',
+                    width: node.r * 1.3,
+                    overflow: 'truncate',
+                    fontSize: node.r / 3
+                },
+                emphasis: {
+                    style: {
+                        overflow: null,
+                        fontSize: Math.max(node.r / 3, 12)
+                    }
+                }
+            },
+            textConfig: {
+                position: 'inside'
+            },
+            style: {
+                fill: api.visual('color')
+            },
+            emphasis: {
+                style: {
+                    fontFamily: 'Arial',
+                    fontSize: 12,
+                    shadowBlur: 20,
+                    shadowOffsetX: 3,
+                    shadowOffsetY: 5,
+                    shadowColor: 'rgba(0,0,0,0.3)'
+                }
+            }
+        };
+    }
+
+    option = {
+        dataset: {
+            source: seriesData
+        },
+        tooltip: {},
+        visualMap: [{
+            show: false,
+            min: 0,
+            max: maxDepth,
+            dimension: 'depth',
+            inRange: {
+                color: ['#006edd', '#e0ffff']
+            }
+        }],
+        hoverLayerThreshold: Infinity,
+        series: {
+            type: 'custom',
+            renderItem: renderItem,
+            progressive: 0,
+            coordinateSystem: 'none',
+            encode: {
+                tooltip: 'value',
+                itemName: 'id'
+            }
+        }
+    };
+
+    myChart.setOption<echarts.EChartsOption>(option);
+
+    myChart.on('click', { seriesIndex: 0 }, function (params) {
+        drillDown(params.data.id);
+    });
+
+    function drillDown(targetNodeId?: string) {
+        displayRoot = stratify();
+        if (targetNodeId != null) {
+            displayRoot = displayRoot.descendants().find(function (node) {
+                return node.data.id === targetNodeId;
+            });
+        }
+        // A trick to prevent d3-hierarchy from visiting parents in this algorithm.
+        displayRoot.parent = null;
+
+        myChart.setOption<echarts.EChartsOption>({
+            dataset: {
+                source: seriesData
+            }
+        });
+    }
+
+    // Reset: click on the blank area.
+    myChart.getZr().on('click', function (event) {
+        if (!event.target) {
+            drillDown();
+        }
+    });
+}
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/confidence-band.ts b/examples/examples/ts/confidence-band.ts
new file mode 100644
index 0000000..c4edba0
--- /dev/null
+++ b/examples/examples/ts/confidence-band.ts
@@ -0,0 +1,120 @@
+/*
+title: Confidence Band
+category: line
+titleCN: Confidence Band
+difficulty: 4
+*/
+
+myChart.showLoading();
+
+interface DataItem {
+    l: number
+    u: number
+    date: string
+    value: number
+}
+$.get(ROOT_PATH + '/data/asset/data/confidence-band.json', function (data: DataItem[]) {
+    myChart.hideLoading();
+
+    var base = -data.reduce(function (min, val) {
+        return Math.floor(Math.min(min, val.l));
+    }, Infinity);
+    myChart.setOption<echarts.EChartsOption>(option = {
+        title: {
+            text: 'Confidence Band',
+            subtext: 'Example in MetricsGraphics.js',
+            left: 'center'
+        },
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                type: 'cross',
+                animation: false,
+                label: {
+                    backgroundColor: '#ccc',
+                    borderColor: '#aaa',
+                    borderWidth: 1,
+                    shadowBlur: 0,
+                    shadowOffsetX: 0,
+                    shadowOffsetY: 0,
+
+                    color: '#222'
+                }
+            },
+            formatter: function (params) {
+                return params[2].name + '<br />' + ((params[2].value - base) * 100).toFixed(1) + '%';
+            }
+        },
+        grid: {
+            left: '3%',
+            right: '4%',
+            bottom: '3%',
+            containLabel: true
+        },
+        xAxis: {
+            type: 'category',
+            data: data.map(function (item) {
+                return item.date;
+            }),
+            axisLabel: {
+                formatter: function (value, idx) {
+                    var date = new Date(value);
+                    return idx === 0 ? value : [date.getMonth() + 1, date.getDate()].join('-');
+                }
+            },
+            boundaryGap: false
+        },
+        yAxis: {
+            axisLabel: {
+                formatter: function (val: number) {
+                    return (val - base) * 100 + '%';
+                }
+            },
+            axisPointer: {
+                label: {
+                    formatter: function (params) {
+                        return ((params.value - base) * 100).toFixed(1) + '%';
+                    }
+                }
+            },
+            splitNumber: 3
+        },
+        series: [{
+            name: 'L',
+            type: 'line',
+            data: data.map(function (item) {
+                return item.l + base;
+            }),
+            lineStyle: {
+                opacity: 0
+            },
+            stack: 'confidence-band',
+            symbol: 'none'
+        }, {
+            name: 'U',
+            type: 'line',
+            data: data.map(function (item) {
+                return item.u - item.l;
+            }),
+            lineStyle: {
+                opacity: 0
+            },
+            areaStyle: {
+                color: '#ccc'
+            },
+            stack: 'confidence-band',
+            symbol: 'none'
+        }, {
+            type: 'line',
+            data: data.map(function (item) {
+                return item.value + base;
+            }),
+            itemStyle: {
+                color: '#333'
+            },
+            showSymbol: false
+        }]
+    });
+});
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/custom-bar-trend.ts b/examples/examples/ts/custom-bar-trend.ts
new file mode 100644
index 0000000..07bf06e
--- /dev/null
+++ b/examples/examples/ts/custom-bar-trend.ts
@@ -0,0 +1,121 @@
+/*
+title: Custom Bar Trend
+category: custom
+titleCN: 使用自定义系列添加柱状图趋势
+difficulty: 3
+*/
+
+const yearCount = 7;
+const categoryCount = 30;
+
+const xAxisData: string[] = [];
+const customData: number[][] = [];
+const legendData: string[] = [];
+const dataList: number[][] = [];
+
+legendData.push('trend');
+const encodeY = [];
+for (var i = 0; i < yearCount; i++) {
+    legendData.push((2010 + i) + '');
+    dataList.push([]);
+    encodeY.push(1 + i);
+}
+
+for (var i = 0; i < categoryCount; i++) {
+    var val = Math.random() * 1000;
+    xAxisData.push('category' + i);
+    var customVal = [i];
+    customData.push(customVal);
+
+    for (var j = 0; j < dataList.length; j++) {
+        var value = j === 0
+            ? echarts.number.round(val, 2)
+            : echarts.number.round(Math.max(0, dataList[j - 1][i] + (Math.random() - 0.5) * 200), 2);
+        dataList[j].push(value);
+        customVal.push(value);
+    }
+}
+
+
+
+option = {
+    tooltip: {
+        trigger: 'axis'
+    },
+    legend: {
+        data: legendData
+    },
+    dataZoom: [{
+        type: 'slider',
+        start: 50,
+        end: 70
+    }, {
+        type: 'inside',
+        start: 50,
+        end: 70
+    }],
+    xAxis: {
+        data: xAxisData
+    },
+    yAxis: {},
+    series: [
+        {
+            type: 'custom',
+            name: 'trend',
+            renderItem: function(params, api) {
+                var xValue = api.value(0);
+                var currentSeriesIndices = api.currentSeriesIndices();
+                var barLayout = api.barLayout({
+                    barGap: '30%',
+                    barCategoryGap: '20%',
+                    count: currentSeriesIndices.length - 1
+                });
+
+                var points = [];
+                for (var i = 0; i < currentSeriesIndices.length; i++) {
+                    var seriesIndex = currentSeriesIndices[i];
+                    if (seriesIndex !== params.seriesIndex) {
+                        var point = api.coord([xValue, api.value(seriesIndex)]);
+                        point[0] += barLayout[i - 1].offsetCenter;
+                        point[1] -= 20;
+                        points.push(point);
+                    }
+                }
+                var style = api.style({
+                    stroke: api.visual('color') as string,
+                    fill: 'none'
+                });
+
+                return {
+                    type: 'polyline',
+                    shape: {
+                        points: points
+                    },
+                    style: style
+                };
+            },
+            itemStyle: {
+                borderWidth: 2
+            },
+            encode: {
+                x: 0,
+                y: encodeY
+            },
+            data: customData,
+            z: 100
+        },
+        ...dataList.map(function (data, index) {
+            return {
+                type: 'bar',
+                animation: false,
+                name: legendData[index + 1],
+                itemStyle: {
+                    opacity: 0.5
+                },
+                data: data
+            } as echarts.BarSeriesOption;
+        })
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/custom-calendar-icon.ts b/examples/examples/ts/custom-calendar-icon.ts
new file mode 100644
index 0000000..fc80cad
--- /dev/null
+++ b/examples/examples/ts/custom-calendar-icon.ts
@@ -0,0 +1,119 @@
+/*
+title: Custom Calendar Icon
+category: 'custom, calendar'
+titleCN: 日历图自定义图标
+difficulty: 7
+*/
+
+
+const layouts = [
+    [[0, 0]],
+    [[-0.25, 0], [0.25, 0]],
+    [[0, -0.2], [-0.2, 0.2], [0.2, 0.2]],
+    [[-0.25, -0.25], [-0.25, 0.25], [0.25, -0.25], [0.25, 0.25]]
+];
+const pathes = [
+    'M936.857805 523.431322c0 0-42.065715-68.89513-88.786739-68.89513-46.68416 0-95.732122 71.223091-95.732122 71.223091s-44.28544-72.503296-93.440922-71.152538c-35.565466 0.977306-62.89705 30.882406-79.124275 64.06615L579.773747 790.800797c-3.253248 37.391565-5.677568 50.904371-12.002816 69.63497-6.651802 19.698688-19.544883 35.227341-31.650099 45.909606-14.30231 12.621414-29.59831 22.066586-45.854208 27.424563-16.28969 5.362074-30.098739 6.496973-51.536794 6.496973-19.498906 0-36.95104 [...]
+    'M533.504 268.288q33.792-41.984 71.68-75.776 32.768-27.648 74.24-50.176t86.528-19.456q63.488 5.12 105.984 30.208t67.584 63.488 34.304 87.04 6.144 99.84-17.92 97.792-36.864 87.04-48.64 74.752-53.248 61.952q-40.96 41.984-85.504 78.336t-84.992 62.464-73.728 41.472-51.712 15.36q-20.48 1.024-52.224-14.336t-69.632-41.472-79.872-61.952-82.944-75.776q-26.624-25.6-57.344-59.392t-57.856-74.24-46.592-87.552-21.504-100.352 11.264-99.84 39.936-83.456 65.536-61.952 88.064-35.328q24.576-5.12 49.152 [...]
+    'M741.06368 733.310464c8.075264-29.262438 20.615373-40.632422 14.64105-162.810061C966.089728 361.789952 967.93897 72.37847 967.855002 54.693683c0.279347-0.279347 0.418509-0.419533 0.418509-0.419533s-0.17705-0.00512-0.428749-0.00512c0-0.251699 0-0.428749 0-0.428749s-0.139162 0.14633-0.418509 0.425677c-17.695744-0.083866-307.10784 1.760051-515.833958 212.142592-122.181632-5.984256-133.55305 6.563533-162.815693 14.644531C235.35063 295.798886 103.552614 436.975309 90.630758 486.076621c-1 [...]
+    'M848.794624 939.156685 571.780416 939.156685 571.780416 653.17123l341.897539 0 0 221.100654C913.677926 909.960704 884.482867 939.156685 848.794624 939.156685zM571.780403 318.743552c-11.861606-3.210138-31.443354-8.36864-39.829709-16.176435-0.596582-0.561766-1.016218-1.246413-1.613824-1.841971-0.560845 0.596582-1.016218 1.280205-1.613824 1.841971-8.386355 7.807795-15.96631 12.965274-27.827917 16.176435l0 263.544325L141.030675 582.287877 141.030675 355.202884c0-35.687834 29.195059-64.8 [...]
+];
+const colors = [
+    '#c4332b', '#16B644', '#6862FD', '#FDC763'
+];
+
+function getVirtulData(year: string) {
+    year = year || '2017';
+    let date = +echarts.number.parseDate(year + '-01-01');
+    let end = +echarts.number.parseDate((+year + 1) + '-01-01');
+    let dayTime = 3600 * 24 * 1000;
+    let data: [string, string][] = [];
+    for (let time = date; time < end; time += dayTime) {
+        let items = [];
+        let eventCount = Math.round(Math.random() * pathes.length);
+        for (let i = 0; i < eventCount; i++) {
+            items.push(Math.round(Math.random() * (pathes.length - 1)));
+        }
+        data.push([
+            echarts.format.formatTime('yyyy-MM-dd', time),
+            items.join('|')
+        ]);
+    }
+    return data;
+}
+
+option = {
+    tooltip: {
+    },
+    calendar: [{
+        left: 'center',
+        top: 'middle',
+        cellSize: [70, 70],
+        yearLabel: {show: false},
+        orient: 'vertical',
+        dayLabel: {
+            firstDay: 1,
+            nameMap: 'cn'
+        },
+        monthLabel: {
+            show: false
+        },
+        range: '2017-03'
+    }],
+    series: [{
+        type: 'custom',
+        coordinateSystem: 'calendar',
+        renderItem: function (params, api) {
+            const cellPoint = api.coord(api.value(0));
+            const cellWidth = params.coordSys.cellWidth;
+            const cellHeight = params.coordSys.cellHeight;
+
+            const value = api.value(1) as string;
+            const events = value && value.split('|');
+
+            if (isNaN(cellPoint[0]) || isNaN(cellPoint[1])) {
+                return;
+            }
+
+            const group = {
+                type: 'group',
+                children: (layouts[events.length - 1] || []).map(function (itemLayout, index) {
+                    return {
+                        type: 'path',
+                        shape: {
+                            pathData: pathes[events[index]],
+                            x: -8,
+                            y: -8,
+                            width: 16,
+                            height: 16
+                        },
+                        position: [
+                            cellPoint[0] + echarts.number.linearMap(itemLayout[0], [-0.5, 0.5], [-cellWidth / 2, cellWidth / 2]),
+                            cellPoint[1] + echarts.number.linearMap(itemLayout[1], [-0.5, 0.5], [-cellHeight / 2 + 20, cellHeight / 2])
+                        ],
+                        style: api.style({
+                            fill: colors[events[index]]
+                        })
+                    };
+                }) || []
+            };
+
+            group.children.push({
+                type: 'text',
+                style: {
+                    x: cellPoint[0],
+                    y: cellPoint[1] - cellHeight / 2 + 15,
+                    text: echarts.format.formatTime('dd', api.value(0)),
+                    fill: '#777',
+                    textFont: api.font({fontSize: 14})
+                }
+            });
+
+            return group;
+        },
+        dimensions: [null, {type: 'ordinal'}],
+        data: getVirtulData('2017')
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/data-transform-filter.ts b/examples/examples/ts/data-transform-filter.ts
new file mode 100644
index 0000000..48fe5c9
--- /dev/null
+++ b/examples/examples/ts/data-transform-filter.ts
@@ -0,0 +1,82 @@
+/*
+title: Data Transform Fitler
+category: line
+titleCN: 数据过滤
+difficulty: 3
+*/
+
+$.get(ROOT_PATH + '/data/asset/data/life-expectancy-table.json', function (_rawData) {
+    run(_rawData);
+});
+
+function run(_rawData: any) {
+
+    option = {
+        dataset: [{
+            id: 'dataset_raw',
+            source: _rawData
+        }, {
+            id: 'dataset_since_1950_of_germany',
+            fromDatasetId: 'dataset_raw',
+            transform: {
+                type: 'filter',
+                config: {
+                    and: [
+                        { dimension: 'Year', gte: 1950 },
+                        { dimension: 'Country', '=': 'Germany' }
+                    ]
+                }
+            }
+        }, {
+            id: 'dataset_since_1950_of_france',
+            fromDatasetId: 'dataset_raw',
+            transform: {
+                type: 'filter',
+                config: {
+                    and: [
+                        { dimension: 'Year', gte: 1950 },
+                        { dimension: 'Country', '=': 'France' }
+                    ]
+                }
+            }
+        }],
+        title: {
+            text: 'Income of Germany and France since 1950'
+        },
+        tooltip: {
+            trigger: 'axis'
+        },
+        xAxis: {
+            type: 'category',
+            nameLocation: 'middle'
+        },
+        yAxis: {
+            name: 'Income'
+        },
+        series: [{
+            type: 'line',
+            datasetId: 'dataset_since_1950_of_germany',
+            showSymbol: false,
+            encode: {
+                x: 'Year',
+                y: 'Income',
+                itemName: 'Year',
+                tooltip: ['Income']
+            }
+        }, {
+            type: 'line',
+            datasetId: 'dataset_since_1950_of_france',
+            showSymbol: false,
+            encode: {
+                x: 'Year',
+                y: 'Income',
+                itemName: 'Year',
+                tooltip: ['Income']
+            }
+        }]
+    };
+
+    myChart.setOption<echarts.EChartsOption>(option);
+}
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/data-transform-multiple-pie.ts b/examples/examples/ts/data-transform-multiple-pie.ts
new file mode 100644
index 0000000..7832cb2
--- /dev/null
+++ b/examples/examples/ts/data-transform-multiple-pie.ts
@@ -0,0 +1,82 @@
+/*
+title: Partition Data to Pies
+category: dataset, pie, transform
+titleCN: 分割数据到数个饼图
+difficulty: 3
+*/
+
+option = {
+    dataset: [{
+        source: [
+            ['Product', 'Sales', 'Price', 'Year'],
+            ['Cake', 123, 32, 2011],
+            ['Cereal', 231, 14, 2011],
+            ['Tofu', 235, 5, 2011],
+            ['Dumpling', 341, 25, 2011],
+            ['Biscuit', 122, 29, 2011],
+            ['Cake', 143, 30, 2012],
+            ['Cereal', 201, 19, 2012],
+            ['Tofu', 255, 7, 2012],
+            ['Dumpling', 241, 27, 2012],
+            ['Biscuit', 102, 34, 2012],
+            ['Cake', 153, 28, 2013],
+            ['Cereal', 181, 21, 2013],
+            ['Tofu', 395, 4, 2013],
+            ['Dumpling', 281, 31, 2013],
+            ['Biscuit', 92, 39, 2013],
+            ['Cake', 223, 29, 2014],
+            ['Cereal', 211, 17, 2014],
+            ['Tofu', 345, 3, 2014],
+            ['Dumpling', 211, 35, 2014],
+            ['Biscuit', 72, 24, 2014],
+        ],
+    }, {
+        transform: {
+            type: 'filter',
+            config: { dimension: 'Year', value: 2011 }
+        },
+    }, {
+        transform: {
+            type: 'filter',
+            config: { dimension: 'Year', value: 2012 }
+        }
+    }, {
+        transform: {
+            type: 'filter',
+            config: { dimension: 'Year', value: 2013 }
+        }
+    }],
+    series: [{
+        type: 'pie', radius: 50, center: ['50%', '25%'],
+        datasetIndex: 1
+    }, {
+        type: 'pie', radius: 50, center: ['50%', '50%'],
+        datasetIndex: 2
+    }, {
+        type: 'pie', radius: 50, center: ['50%', '75%'],
+        datasetIndex: 3
+    }],
+
+
+    // Optional. Only for responsive layout:
+    media: [{
+        query: { minAspectRatio: 1 },
+        option: {
+            series: [
+                { center: ['25%', '50%'] },
+                { center: ['50%', '50%'] },
+                { center: ['75%', '50%'] }
+            ]
+        }
+    }, {
+        option: {
+            series: [
+                { center: ['50%', '25%'] },
+                { center: ['50%', '50%'] },
+                { center: ['50%', '75%'] }
+            ]
+        }
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/data-transform-sort-bar.ts b/examples/examples/ts/data-transform-sort-bar.ts
new file mode 100644
index 0000000..b26f013
--- /dev/null
+++ b/examples/examples/ts/data-transform-sort-bar.ts
@@ -0,0 +1,41 @@
+/*
+title: Sort Data in Bar Chart
+category: dataset, bar, transform
+titleCN: 柱状图排序
+difficulty: 0
+*/
+
+option = {
+    dataset: [{
+        dimensions: ['name', 'age', 'profession', 'score', 'date'],
+        source: [
+            ['Hannah Krause', 41, 'Engineer', 314, '2011-02-12'],
+            ['Zhao Qian', 20, 'Teacher', 351, '2011-03-01'],
+            ['Jasmin Krause ', 52, 'Musician', 287, '2011-02-14'],
+            ['Li Lei', 37, 'Teacher', 219, '2011-02-18'],
+            ['Karle Neumann', 25, 'Engineer', 253, '2011-04-02'],
+            ['Adrian Groß', 19, 'Teacher', '-', '2011-01-16'],
+            ['Mia Neumann', 71, 'Engineer', 165, '2011-03-19'],
+            ['Böhm Fuchs', 36, 'Musician', 318, '2011-02-24'],
+            ['Han Meimei', 67, 'Engineer', 366, '2011-03-12'],
+        ]
+    }, {
+        transform: {
+            type: 'sort',
+            config: { dimension: 'score', order: 'desc' }
+        }
+    }],
+    xAxis: {
+        type: 'category',
+        axisLabel: { interval: 0, rotate: 30 },
+    },
+    yAxis: {},
+    series: {
+        type: 'bar',
+        encode: { x: 'name', y: 'score' },
+        datasetIndex: 1
+    }
+};
+
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-default.ts b/examples/examples/ts/dataset-default.ts
new file mode 100644
index 0000000..382316c
--- /dev/null
+++ b/examples/examples/ts/dataset-default.ts
@@ -0,0 +1,52 @@
+/*
+title: Default arrangement
+category: 'dataset, pie'
+titleCN: 默认 encode 设置
+difficulty: 3
+*/
+
+option = {
+    legend: {},
+    tooltip: {},
+    dataset: {
+        source: [
+            ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
+            ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
+            ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
+            ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
+            ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
+        ]
+    },
+    series: [{
+        type: 'pie',
+        radius: '20%',
+        center: ['25%', '30%']
+        // No encode specified, by default, it is '2012'.
+    }, {
+        type: 'pie',
+        radius: '20%',
+        center: ['75%', '30%'],
+        encode: {
+            itemName: 'product',
+            value: '2013'
+        }
+    }, {
+        type: 'pie',
+        radius: '20%',
+        center: ['25%', '75%'],
+        encode: {
+            itemName: 'product',
+            value: '2014'
+        }
+    }, {
+        type: 'pie',
+        radius: '20%',
+        center: ['75%', '75%'],
+        encode: {
+            itemName: 'product',
+            value: '2015'
+        }
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-encode0.ts b/examples/examples/ts/dataset-encode0.ts
new file mode 100644
index 0000000..153bc4b
--- /dev/null
+++ b/examples/examples/ts/dataset-encode0.ts
@@ -0,0 +1,51 @@
+/*
+title: Simple Encode
+category: 'dataset, bar'
+titleCN: 指定数据到坐标轴的映射
+difficulty: 1
+*/
+
+option = {
+    dataset: {
+        source: [
+            ['score', 'amount', 'product'],
+            [89.3, 58212, 'Matcha Latte'],
+            [57.1, 78254, 'Milk Tea'],
+            [74.4, 41032, 'Cheese Cocoa'],
+            [50.1, 12755, 'Cheese Brownie'],
+            [89.7, 20145, 'Matcha Cocoa'],
+            [68.1, 79146, 'Tea'],
+            [19.6, 91852, 'Orange Juice'],
+            [10.6, 101852, 'Lemon Juice'],
+            [32.7, 20112, 'Walnut Brownie']
+        ]
+    },
+    grid: {containLabel: true},
+    xAxis: {name: 'amount'},
+    yAxis: {type: 'category'},
+    visualMap: {
+        orient: 'horizontal',
+        left: 'center',
+        min: 10,
+        max: 100,
+        text: ['High Score', 'Low Score'],
+        // Map the score column to color
+        dimension: 0,
+        inRange: {
+            color: ['#65B581', '#FFCE34', '#FD665F']
+        }
+    },
+    series: [
+        {
+            type: 'bar',
+            encode: {
+                // Map the "amount" column to X axis.
+                x: 'amount',
+                // Map the "product" column to Y axis
+                y: 'product'
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-encode1.ts b/examples/examples/ts/dataset-encode1.ts
new file mode 100644
index 0000000..cfd4f5a
--- /dev/null
+++ b/examples/examples/ts/dataset-encode1.ts
@@ -0,0 +1,100 @@
+/*
+title: Encode and Matrix
+category: dataset
+titleCN: 指定数据到坐标轴的映射
+difficulty: 3
+*/
+
+$.get(ROOT_PATH + '/data/asset/data/life-expectancy-table.json', function (data) {
+
+    var sizeValue = '57%';
+    var symbolSize = 2.5;
+    option = {
+        legend: {},
+        tooltip: {},
+        toolbox: {
+            left: 'center',
+            feature: {
+                dataZoom: {}
+            }
+        },
+        grid: [
+            {right: sizeValue, bottom: sizeValue},
+            {left: sizeValue, bottom: sizeValue},
+            {right: sizeValue, top: sizeValue},
+            {left: sizeValue, top: sizeValue}
+        ],
+        xAxis: [
+            {type: 'value', gridIndex: 0, name: 'Income', axisLabel: {rotate: 50, interval: 0}},
+            {type: 'category', gridIndex: 1, name: 'Country', boundaryGap: false, axisLabel: {rotate: 50, interval: 0}},
+            {type: 'value', gridIndex: 2, name: 'Income', axisLabel: {rotate: 50, interval: 0}},
+            {type: 'value', gridIndex: 3, name: 'Life Expectancy', axisLabel: {rotate: 50, interval: 0}}
+        ],
+        yAxis: [
+            {type: 'value', gridIndex: 0, name: 'Life Expectancy'},
+            {type: 'value', gridIndex: 1, name: 'Income'},
+            {type: 'value', gridIndex: 2, name: 'Population'},
+            {type: 'value', gridIndex: 3, name: 'Population'}
+        ],
+        dataset: {
+            dimensions: [
+                'Income',
+                'Life Expectancy',
+                'Population',
+                'Country',
+                {name: 'Year', type: 'ordinal'}
+            ],
+            source: data
+        },
+        series: [
+            {
+                type: 'scatter',
+                symbolSize: symbolSize,
+                xAxisIndex: 0,
+                yAxisIndex: 0,
+                encode: {
+                    x: 'Income',
+                    y: 'Life Expectancy',
+                    tooltip: [0, 1, 2, 3, 4]
+                }
+            },
+            {
+                type: 'scatter',
+                symbolSize: symbolSize,
+                xAxisIndex: 1,
+                yAxisIndex: 1,
+                encode: {
+                    x: 'Country',
+                    y: 'Income',
+                    tooltip: [0, 1, 2, 3, 4]
+                }
+            },
+            {
+                type: 'scatter',
+                symbolSize: symbolSize,
+                xAxisIndex: 2,
+                yAxisIndex: 2,
+                encode: {
+                    x: 'Income',
+                    y: 'Population',
+                    tooltip: [0, 1, 2, 3, 4]
+                }
+            },
+            {
+                type: 'scatter',
+                symbolSize: symbolSize,
+                xAxisIndex: 3,
+                yAxisIndex: 3,
+                encode: {
+                    x: 'Life Expectancy',
+                    y: 'Population',
+                    tooltip: [0, 1, 2, 3, 4]
+                }
+            }
+        ]
+    };
+
+    myChart.setOption<echarts.EChartsOption>(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-link.ts b/examples/examples/ts/dataset-link.ts
new file mode 100644
index 0000000..598a177
--- /dev/null
+++ b/examples/examples/ts/dataset-link.ts
@@ -0,0 +1,76 @@
+/*
+title: Share Dataset
+category: 'dataset, line, pie'
+titleCN: 联动和共享数据集
+difficulty: 5
+*/
+
+
+setTimeout(function () {
+
+    option = {
+        legend: {},
+        tooltip: {
+            trigger: 'axis',
+            showContent: false
+        },
+        dataset: {
+            source: [
+                ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
+                ['Milk Tea', 56.5, 82.1, 88.7, 70.1, 53.4, 85.1],
+                ['Matcha Latte', 51.1, 51.4, 55.1, 53.3, 73.8, 68.7],
+                ['Cheese Cocoa', 40.1, 62.2, 69.5, 36.4, 45.2, 32.5],
+                ['Walnut Brownie', 25.2, 37.1, 41.2, 18, 33.9, 49.1]
+            ]
+        },
+        xAxis: {type: 'category'},
+        yAxis: {gridIndex: 0},
+        grid: {top: '55%'},
+        series: [
+            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
+            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
+            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
+            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
+            {
+                type: 'pie',
+                id: 'pie',
+                radius: '30%',
+                center: ['50%', '25%'],
+                emphasis: {
+                    focus: 'self'
+                },
+                label: {
+                    formatter: '{b}: {@2012} ({d}%)'
+                },
+                encode: {
+                    itemName: 'product',
+                    value: '2012',
+                    tooltip: '2012'
+                }
+            }
+        ]
+    };
+
+    myChart.on('updateAxisPointer', function (event: any) {
+        const xAxisInfo = event.axesInfo[0];
+        if (xAxisInfo) {
+            const dimension = xAxisInfo.value + 1;
+            myChart.setOption<echarts.EChartsOption>({
+                series: {
+                    id: 'pie',
+                    label: {
+                        formatter: '{b}: {@[' + dimension + ']} ({d}%)'
+                    },
+                    encode: {
+                        value: dimension,
+                        tooltip: dimension
+                    }
+                }
+            });
+        }
+    });
+
+    myChart.setOption<echarts.EChartsOption>(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-series-layout-by.ts b/examples/examples/ts/dataset-series-layout-by.ts
new file mode 100644
index 0000000..ac85cd4
--- /dev/null
+++ b/examples/examples/ts/dataset-series-layout-by.ts
@@ -0,0 +1,44 @@
+/*
+title: Series Layout By Column or Row
+category: 'dataset, bar'
+titleCN: 系列按行和按列排布
+difficulty: 5
+*/
+
+option = {
+    legend: {},
+    tooltip: {},
+    dataset: {
+        source: [
+            ['product', '2012', '2013', '2014', '2015'],
+            ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
+            ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
+            ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
+        ]
+    },
+    xAxis: [
+        {type: 'category', gridIndex: 0},
+        {type: 'category', gridIndex: 1}
+    ],
+    yAxis: [
+        {gridIndex: 0},
+        {gridIndex: 1}
+    ],
+    grid: [
+        {bottom: '55%'},
+        {top: '55%'}
+    ],
+    series: [
+        // These series are in the first grid.
+        {type: 'bar', seriesLayoutBy: 'row'},
+        {type: 'bar', seriesLayoutBy: 'row'},
+        {type: 'bar', seriesLayoutBy: 'row'},
+        // These series are in the second grid.
+        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
+        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
+        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
+        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-simple0.ts b/examples/examples/ts/dataset-simple0.ts
new file mode 100644
index 0000000..335a862
--- /dev/null
+++ b/examples/examples/ts/dataset-simple0.ts
@@ -0,0 +1,31 @@
+/*
+title: Simple Example of Dataset
+category: 'dataset, bar'
+titleCN: 最简单的数据集(dataset)
+difficulty: 5
+*/
+
+option = {
+    legend: {},
+    tooltip: {},
+    dataset: {
+        source: [
+            ['product', '2015', '2016', '2017'],
+            ['Matcha Latte', 43.3, 85.8, 93.7],
+            ['Milk Tea', 83.1, 73.4, 55.1],
+            ['Cheese Cocoa', 86.4, 65.2, 82.5],
+            ['Walnut Brownie', 72.4, 53.9, 39.1]
+        ]
+    },
+    xAxis: {type: 'category'},
+    yAxis: {},
+    // Declare several bar series, each will be mapped
+    // to a column of dataset.source by default.
+    series: [
+        {type: 'bar'},
+        {type: 'bar'},
+        {type: 'bar'}
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dataset-simple1.ts b/examples/examples/ts/dataset-simple1.ts
new file mode 100644
index 0000000..9103dfe
--- /dev/null
+++ b/examples/examples/ts/dataset-simple1.ts
@@ -0,0 +1,31 @@
+/*
+title: Dataset in Object Array
+category: 'dataset, bar'
+titleCN: 对象数组的输入格式
+difficulty: 5
+*/
+
+option = {
+    legend: {},
+    tooltip: {},
+    dataset: {
+        dimensions: ['product', '2015', '2016', '2017'],
+        source: [
+            {product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7},
+            {product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1},
+            {product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5},
+            {product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1}
+        ]
+    },
+    xAxis: {type: 'category'},
+    yAxis: {},
+    // Declare several bar series, each will be mapped
+    // to a column of dataset.source by default.
+    series: [
+        {type: 'bar'},
+        {type: 'bar'},
+        {type: 'bar'}
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dynamic-data.ts b/examples/examples/ts/dynamic-data.ts
new file mode 100644
index 0000000..c227b1a
--- /dev/null
+++ b/examples/examples/ts/dynamic-data.ts
@@ -0,0 +1,133 @@
+/*
+title: Dynamic Data
+category: bar
+titleCN: 动态数据
+difficulty: 6
+*/
+
+option = {
+    title: {
+        text: 'Dynamic Data'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross',
+            label: {
+                backgroundColor: '#283b56'
+            }
+        }
+    },
+    legend: {
+        data:['最新成交价', '预购队列']
+    },
+    toolbox: {
+        show: true,
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    dataZoom: {
+        show: false,
+        start: 0,
+        end: 100
+    },
+    xAxis: [
+        {
+            type: 'category',
+            boundaryGap: true,
+            data: (function (){
+                var now = new Date();
+                var res = [];
+                var len = 10;
+                while (len--) {
+                    res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
+                    now = new Date(now - 2000);
+                }
+                return res;
+            })()
+        },
+        {
+            type: 'category',
+            boundaryGap: true,
+            data: (function (){
+                var res = [];
+                var len = 10;
+                while (len--) {
+                    res.push(10 - len - 1);
+                }
+                return res;
+            })()
+        }
+    ],
+    yAxis: [
+        {
+            type: 'value',
+            scale: true,
+            name: '价格',
+            max: 30,
+            min: 0,
+            boundaryGap: [0.2, 0.2]
+        },
+        {
+            type: 'value',
+            scale: true,
+            name: '预购量',
+            max: 1200,
+            min: 0,
+            boundaryGap: [0.2, 0.2]
+        }
+    ],
+    series: [
+        {
+            name: '预购队列',
+            type: 'bar',
+            xAxisIndex: 1,
+            yAxisIndex: 1,
+            data: (function (){
+                var res = [];
+                var len = 10;
+                while (len--) {
+                    res.push(Math.round(Math.random() * 1000));
+                }
+                return res;
+            })()
+        },
+        {
+            name: '最新成交价',
+            type: 'line',
+            data: (function (){
+                var res = [];
+                var len = 0;
+                while (len < 10) {
+                    res.push((Math.random()*10 + 5).toFixed(1) - 0);
+                    len++;
+                }
+                return res;
+            })()
+        }
+    ]
+};
+
+app.count = 11;
+setInterval(function (){
+    var axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, '');
+
+    var data0 = option.series[0].data;
+    var data1 = option.series[1].data;
+    data0.shift();
+    data0.push(Math.round(Math.random() * 1000));
+    data1.shift();
+    data1.push((Math.random() * 10 + 5).toFixed(1) - 0);
+
+    option.xAxis[0].data.shift();
+    option.xAxis[0].data.push(axisData);
+    option.xAxis[1].data.shift();
+    option.xAxis[1].data.push(app.count++);
+
+    myChart.setOption<echarts.EChartsOption>(option);
+}, 2100);
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/dynamic-data2.ts b/examples/examples/ts/dynamic-data2.ts
new file mode 100644
index 0000000..ef2e928
--- /dev/null
+++ b/examples/examples/ts/dynamic-data2.ts
@@ -0,0 +1,82 @@
+/*
+title: Dynamic Data + Time Axis
+category: line
+titleCN: 动态数据 + 时间坐标轴
+difficulty: 5
+*/
+
+interface DataItem {
+    name: string
+    value: [string, number]
+}
+
+function randomData(): DataItem {
+    now = new Date(+now + oneDay);
+    value = value + Math.random() * 21 - 10;
+    return {
+        name: now.toString(),
+        value: [
+            [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'),
+            Math.round(value)
+        ]
+    };
+}
+
+let data: DataItem[] = [];
+let now = new Date(1997, 9, 3);
+let oneDay = 24 * 3600 * 1000;
+let value = Math.random() * 1000;
+for (var i = 0; i < 1000; i++) {
+    data.push(randomData());
+}
+
+option = {
+    title: {
+        text: 'Dynamic Data & Time Axis'
+    },
+    tooltip: {
+        trigger: 'axis',
+        formatter: function (params) {
+            params = params[0];
+            var date = new Date(params.name);
+            return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];
+        },
+        axisPointer: {
+            animation: false
+        }
+    },
+    xAxis: {
+        type: 'time',
+        splitLine: {
+            show: false
+        }
+    },
+    yAxis: {
+        type: 'value',
+        boundaryGap: [0, '100%'],
+        splitLine: {
+            show: false
+        }
+    },
+    series: [{
+        name: '模拟数据',
+        type: 'line',
+        showSymbol: false,
+        data: data
+    }]
+};
+
+setInterval(function () {
+    for (var i = 0; i < 5; i++) {
+        data.shift();
+        data.push(randomData());
+    }
+
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            data: data
+        }]
+    });
+}, 1000);
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/effectScatter-bmap.ts b/examples/examples/ts/effectScatter-bmap.ts
new file mode 100644
index 0000000..e9ee0ae
--- /dev/null
+++ b/examples/examples/ts/effectScatter-bmap.ts
@@ -0,0 +1,584 @@
+/*
+title: Air Quality - Baidu Map
+category: 'scatter, map'
+tags: bmap
+titleCN: 全国主要城市空气质量 - 百度地图
+difficulty: 10
+*/
+
+interface DataItem {
+    name: string
+    value: number
+}
+
+const data: DataItem[] = [
+     {name: '海门', value: 9},
+     {name: '鄂尔多斯', value: 12},
+     {name: '招远', value: 12},
+     {name: '舟山', value: 12},
+     {name: '齐齐哈尔', value: 14},
+     {name: '盐城', value: 15},
+     {name: '赤峰', value: 16},
+     {name: '青岛', value: 18},
+     {name: '乳山', value: 18},
+     {name: '金昌', value: 19},
+     {name: '泉州', value: 21},
+     {name: '莱西', value: 21},
+     {name: '日照', value: 21},
+     {name: '胶南', value: 22},
+     {name: '南通', value: 23},
+     {name: '拉萨', value: 24},
+     {name: '云浮', value: 24},
+     {name: '梅州', value: 25},
+     {name: '文登', value: 25},
+     {name: '上海', value: 25},
+     {name: '攀枝花', value: 25},
+     {name: '威海', value: 25},
+     {name: '承德', value: 25},
+     {name: '厦门', value: 26},
+     {name: '汕尾', value: 26},
+     {name: '潮州', value: 26},
+     {name: '丹东', value: 27},
+     {name: '太仓', value: 27},
+     {name: '曲靖', value: 27},
+     {name: '烟台', value: 28},
+     {name: '福州', value: 29},
+     {name: '瓦房店', value: 30},
+     {name: '即墨', value: 30},
+     {name: '抚顺', value: 31},
+     {name: '玉溪', value: 31},
+     {name: '张家口', value: 31},
+     {name: '阳泉', value: 31},
+     {name: '莱州', value: 32},
+     {name: '湖州', value: 32},
+     {name: '汕头', value: 32},
+     {name: '昆山', value: 33},
+     {name: '宁波', value: 33},
+     {name: '湛江', value: 33},
+     {name: '揭阳', value: 34},
+     {name: '荣成', value: 34},
+     {name: '连云港', value: 35},
+     {name: '葫芦岛', value: 35},
+     {name: '常熟', value: 36},
+     {name: '东莞', value: 36},
+     {name: '河源', value: 36},
+     {name: '淮安', value: 36},
+     {name: '泰州', value: 36},
+     {name: '南宁', value: 37},
+     {name: '营口', value: 37},
+     {name: '惠州', value: 37},
+     {name: '江阴', value: 37},
+     {name: '蓬莱', value: 37},
+     {name: '韶关', value: 38},
+     {name: '嘉峪关', value: 38},
+     {name: '广州', value: 38},
+     {name: '延安', value: 38},
+     {name: '太原', value: 39},
+     {name: '清远', value: 39},
+     {name: '中山', value: 39},
+     {name: '昆明', value: 39},
+     {name: '寿光', value: 40},
+     {name: '盘锦', value: 40},
+     {name: '长治', value: 41},
+     {name: '深圳', value: 41},
+     {name: '珠海', value: 42},
+     {name: '宿迁', value: 43},
+     {name: '咸阳', value: 43},
+     {name: '铜川', value: 44},
+     {name: '平度', value: 44},
+     {name: '佛山', value: 44},
+     {name: '海口', value: 44},
+     {name: '江门', value: 45},
+     {name: '章丘', value: 45},
+     {name: '肇庆', value: 46},
+     {name: '大连', value: 47},
+     {name: '临汾', value: 47},
+     {name: '吴江', value: 47},
+     {name: '石嘴山', value: 49},
+     {name: '沈阳', value: 50},
+     {name: '苏州', value: 50},
+     {name: '茂名', value: 50},
+     {name: '嘉兴', value: 51},
+     {name: '长春', value: 51},
+     {name: '胶州', value: 52},
+     {name: '银川', value: 52},
+     {name: '张家港', value: 52},
+     {name: '三门峡', value: 53},
+     {name: '锦州', value: 54},
+     {name: '南昌', value: 54},
+     {name: '柳州', value: 54},
+     {name: '三亚', value: 54},
+     {name: '自贡', value: 56},
+     {name: '吉林', value: 56},
+     {name: '阳江', value: 57},
+     {name: '泸州', value: 57},
+     {name: '西宁', value: 57},
+     {name: '宜宾', value: 58},
+     {name: '呼和浩特', value: 58},
+     {name: '成都', value: 58},
+     {name: '大同', value: 58},
+     {name: '镇江', value: 59},
+     {name: '桂林', value: 59},
+     {name: '张家界', value: 59},
+     {name: '宜兴', value: 59},
+     {name: '北海', value: 60},
+     {name: '西安', value: 61},
+     {name: '金坛', value: 62},
+     {name: '东营', value: 62},
+     {name: '牡丹江', value: 63},
+     {name: '遵义', value: 63},
+     {name: '绍兴', value: 63},
+     {name: '扬州', value: 64},
+     {name: '常州', value: 64},
+     {name: '潍坊', value: 65},
+     {name: '重庆', value: 66},
+     {name: '台州', value: 67},
+     {name: '南京', value: 67},
+     {name: '滨州', value: 70},
+     {name: '贵阳', value: 71},
+     {name: '无锡', value: 71},
+     {name: '本溪', value: 71},
+     {name: '克拉玛依', value: 72},
+     {name: '渭南', value: 72},
+     {name: '马鞍山', value: 72},
+     {name: '宝鸡', value: 72},
+     {name: '焦作', value: 75},
+     {name: '句容', value: 75},
+     {name: '北京', value: 79},
+     {name: '徐州', value: 79},
+     {name: '衡水', value: 80},
+     {name: '包头', value: 80},
+     {name: '绵阳', value: 80},
+     {name: '乌鲁木齐', value: 84},
+     {name: '枣庄', value: 84},
+     {name: '杭州', value: 84},
+     {name: '淄博', value: 85},
+     {name: '鞍山', value: 86},
+     {name: '溧阳', value: 86},
+     {name: '库尔勒', value: 86},
+     {name: '安阳', value: 90},
+     {name: '开封', value: 90},
+     {name: '济南', value: 92},
+     {name: '德阳', value: 93},
+     {name: '温州', value: 95},
+     {name: '九江', value: 96},
+     {name: '邯郸', value: 98},
+     {name: '临安', value: 99},
+     {name: '兰州', value: 99},
+     {name: '沧州', value: 100},
+     {name: '临沂', value: 103},
+     {name: '南充', value: 104},
+     {name: '天津', value: 105},
+     {name: '富阳', value: 106},
+     {name: '泰安', value: 112},
+     {name: '诸暨', value: 112},
+     {name: '郑州', value: 113},
+     {name: '哈尔滨', value: 114},
+     {name: '聊城', value: 116},
+     {name: '芜湖', value: 117},
+     {name: '唐山', value: 119},
+     {name: '平顶山', value: 119},
+     {name: '邢台', value: 119},
+     {name: '德州', value: 120},
+     {name: '济宁', value: 120},
+     {name: '荆州', value: 127},
+     {name: '宜昌', value: 130},
+     {name: '义乌', value: 132},
+     {name: '丽水', value: 133},
+     {name: '洛阳', value: 134},
+     {name: '秦皇岛', value: 136},
+     {name: '株洲', value: 143},
+     {name: '石家庄', value: 147},
+     {name: '莱芜', value: 148},
+     {name: '常德', value: 152},
+     {name: '保定', value: 153},
+     {name: '湘潭', value: 154},
+     {name: '金华', value: 157},
+     {name: '岳阳', value: 169},
+     {name: '长沙', value: 175},
+     {name: '衢州', value: 177},
+     {name: '廊坊', value: 193},
+     {name: '菏泽', value: 194},
+     {name: '合肥', value: 229},
+     {name: '武汉', value: 273},
+     {name: '大庆', value: 279}
+];
+const geoCoordMap: Record<string, number[]> = {
+    '海门':[121.15,31.89],
+    '鄂尔多斯':[109.781327,39.608266],
+    '招远':[120.38,37.35],
+    '舟山':[122.207216,29.985295],
+    '齐齐哈尔':[123.97,47.33],
+    '盐城':[120.13,33.38],
+    '赤峰':[118.87,42.28],
+    '青岛':[120.33,36.07],
+    '乳山':[121.52,36.89],
+    '金昌':[102.188043,38.520089],
+    '泉州':[118.58,24.93],
+    '莱西':[120.53,36.86],
+    '日照':[119.46,35.42],
+    '胶南':[119.97,35.88],
+    '南通':[121.05,32.08],
+    '拉萨':[91.11,29.97],
+    '云浮':[112.02,22.93],
+    '梅州':[116.1,24.55],
+    '文登':[122.05,37.2],
+    '上海':[121.48,31.22],
+    '攀枝花':[101.718637,26.582347],
+    '威海':[122.1,37.5],
+    '承德':[117.93,40.97],
+    '厦门':[118.1,24.46],
+    '汕尾':[115.375279,22.786211],
+    '潮州':[116.63,23.68],
+    '丹东':[124.37,40.13],
+    '太仓':[121.1,31.45],
+    '曲靖':[103.79,25.51],
+    '烟台':[121.39,37.52],
+    '福州':[119.3,26.08],
+    '瓦房店':[121.979603,39.627114],
+    '即墨':[120.45,36.38],
+    '抚顺':[123.97,41.97],
+    '玉溪':[102.52,24.35],
+    '张家口':[114.87,40.82],
+    '阳泉':[113.57,37.85],
+    '莱州':[119.942327,37.177017],
+    '湖州':[120.1,30.86],
+    '汕头':[116.69,23.39],
+    '昆山':[120.95,31.39],
+    '宁波':[121.56,29.86],
+    '湛江':[110.359377,21.270708],
+    '揭阳':[116.35,23.55],
+    '荣成':[122.41,37.16],
+    '连云港':[119.16,34.59],
+    '葫芦岛':[120.836932,40.711052],
+    '常熟':[120.74,31.64],
+    '东莞':[113.75,23.04],
+    '河源':[114.68,23.73],
+    '淮安':[119.15,33.5],
+    '泰州':[119.9,32.49],
+    '南宁':[108.33,22.84],
+    '营口':[122.18,40.65],
+    '惠州':[114.4,23.09],
+    '江阴':[120.26,31.91],
+    '蓬莱':[120.75,37.8],
+    '韶关':[113.62,24.84],
+    '嘉峪关':[98.289152,39.77313],
+    '广州':[113.23,23.16],
+    '延安':[109.47,36.6],
+    '太原':[112.53,37.87],
+    '清远':[113.01,23.7],
+    '中山':[113.38,22.52],
+    '昆明':[102.73,25.04],
+    '寿光':[118.73,36.86],
+    '盘锦':[122.070714,41.119997],
+    '长治':[113.08,36.18],
+    '深圳':[114.07,22.62],
+    '珠海':[113.52,22.3],
+    '宿迁':[118.3,33.96],
+    '咸阳':[108.72,34.36],
+    '铜川':[109.11,35.09],
+    '平度':[119.97,36.77],
+    '佛山':[113.11,23.05],
+    '海口':[110.35,20.02],
+    '江门':[113.06,22.61],
+    '章丘':[117.53,36.72],
+    '肇庆':[112.44,23.05],
+    '大连':[121.62,38.92],
+    '临汾':[111.5,36.08],
+    '吴江':[120.63,31.16],
+    '石嘴山':[106.39,39.04],
+    '沈阳':[123.38,41.8],
+    '苏州':[120.62,31.32],
+    '茂名':[110.88,21.68],
+    '嘉兴':[120.76,30.77],
+    '长春':[125.35,43.88],
+    '胶州':[120.03336,36.264622],
+    '银川':[106.27,38.47],
+    '张家港':[120.555821,31.875428],
+    '三门峡':[111.19,34.76],
+    '锦州':[121.15,41.13],
+    '南昌':[115.89,28.68],
+    '柳州':[109.4,24.33],
+    '三亚':[109.511909,18.252847],
+    '自贡':[104.778442,29.33903],
+    '吉林':[126.57,43.87],
+    '阳江':[111.95,21.85],
+    '泸州':[105.39,28.91],
+    '西宁':[101.74,36.56],
+    '宜宾':[104.56,29.77],
+    '呼和浩特':[111.65,40.82],
+    '成都':[104.06,30.67],
+    '大同':[113.3,40.12],
+    '镇江':[119.44,32.2],
+    '桂林':[110.28,25.29],
+    '张家界':[110.479191,29.117096],
+    '宜兴':[119.82,31.36],
+    '北海':[109.12,21.49],
+    '西安':[108.95,34.27],
+    '金坛':[119.56,31.74],
+    '东营':[118.49,37.46],
+    '牡丹江':[129.58,44.6],
+    '遵义':[106.9,27.7],
+    '绍兴':[120.58,30.01],
+    '扬州':[119.42,32.39],
+    '常州':[119.95,31.79],
+    '潍坊':[119.1,36.62],
+    '重庆':[106.54,29.59],
+    '台州':[121.420757,28.656386],
+    '南京':[118.78,32.04],
+    '滨州':[118.03,37.36],
+    '贵阳':[106.71,26.57],
+    '无锡':[120.29,31.59],
+    '本溪':[123.73,41.3],
+    '克拉玛依':[84.77,45.59],
+    '渭南':[109.5,34.52],
+    '马鞍山':[118.48,31.56],
+    '宝鸡':[107.15,34.38],
+    '焦作':[113.21,35.24],
+    '句容':[119.16,31.95],
+    '北京':[116.46,39.92],
+    '徐州':[117.2,34.26],
+    '衡水':[115.72,37.72],
+    '包头':[110,40.58],
+    '绵阳':[104.73,31.48],
+    '乌鲁木齐':[87.68,43.77],
+    '枣庄':[117.57,34.86],
+    '杭州':[120.19,30.26],
+    '淄博':[118.05,36.78],
+    '鞍山':[122.85,41.12],
+    '溧阳':[119.48,31.43],
+    '库尔勒':[86.06,41.68],
+    '安阳':[114.35,36.1],
+    '开封':[114.35,34.79],
+    '济南':[117,36.65],
+    '德阳':[104.37,31.13],
+    '温州':[120.65,28.01],
+    '九江':[115.97,29.71],
+    '邯郸':[114.47,36.6],
+    '临安':[119.72,30.23],
+    '兰州':[103.73,36.03],
+    '沧州':[116.83,38.33],
+    '临沂':[118.35,35.05],
+    '南充':[106.110698,30.837793],
+    '天津':[117.2,39.13],
+    '富阳':[119.95,30.07],
+    '泰安':[117.13,36.18],
+    '诸暨':[120.23,29.71],
+    '郑州':[113.65,34.76],
+    '哈尔滨':[126.63,45.75],
+    '聊城':[115.97,36.45],
+    '芜湖':[118.38,31.33],
+    '唐山':[118.02,39.63],
+    '平顶山':[113.29,33.75],
+    '邢台':[114.48,37.05],
+    '德州':[116.29,37.45],
+    '济宁':[116.59,35.38],
+    '荆州':[112.239741,30.335165],
+    '宜昌':[111.3,30.7],
+    '义乌':[120.06,29.32],
+    '丽水':[119.92,28.45],
+    '洛阳':[112.44,34.7],
+    '秦皇岛':[119.57,39.95],
+    '株洲':[113.16,27.83],
+    '石家庄':[114.48,38.03],
+    '莱芜':[117.67,36.19],
+    '常德':[111.69,29.05],
+    '保定':[115.48,38.85],
+    '湘潭':[112.91,27.87],
+    '金华':[119.64,29.12],
+    '岳阳':[113.09,29.37],
+    '长沙':[113,28.21],
+    '衢州':[118.88,28.97],
+    '廊坊':[116.7,39.53],
+    '菏泽':[115.480656,35.23375],
+    '合肥':[117.27,31.86],
+    '武汉':[114.31,30.52],
+    '大庆':[125.03,46.58]
+};
+
+const convertData = function (data: DataItem[]) {
+    var res = [];
+    for (var i = 0; i < data.length; i++) {
+        var geoCoord = geoCoordMap[data[i].name];
+        if (geoCoord) {
+            res.push({
+                name: data[i].name,
+                value: geoCoord.concat(data[i].value)
+            });
+        }
+    }
+    return res;
+};
+
+option = {
+    title: {
+        text: '全国主要城市空气质量 - 百度地图',
+        subtext: 'data from PM25.in',
+        sublink: 'http://www.pm25.in',
+        left: 'center'
+    },
+    tooltip : {
+        trigger: 'item'
+    },
+    bmap: {
+        center: [104.114129, 37.550339],
+        zoom: 5,
+        roam: true,
+        mapStyle: {
+            styleJson: [{
+                'featureType': 'water',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#d1d1d1'
+                }
+            }, {
+                'featureType': 'land',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#f3f3f3'
+                }
+            }, {
+                'featureType': 'railway',
+                'elementType': 'all',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'highway',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#fdfdfd'
+                }
+            }, {
+                'featureType': 'highway',
+                'elementType': 'labels',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'arterial',
+                'elementType': 'geometry',
+                'stylers': {
+                    'color': '#fefefe'
+                }
+            }, {
+                'featureType': 'arterial',
+                'elementType': 'geometry.fill',
+                'stylers': {
+                    'color': '#fefefe'
+                }
+            }, {
+                'featureType': 'poi',
+                'elementType': 'all',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'green',
+                'elementType': 'all',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'subway',
+                'elementType': 'all',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'manmade',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#d1d1d1'
+                }
+            }, {
+                'featureType': 'local',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#d1d1d1'
+                }
+            }, {
+                'featureType': 'arterial',
+                'elementType': 'labels',
+                'stylers': {
+                    'visibility': 'off'
+                }
+            }, {
+                'featureType': 'boundary',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#fefefe'
+                }
+            }, {
+                'featureType': 'building',
+                'elementType': 'all',
+                'stylers': {
+                    'color': '#d1d1d1'
+                }
+            }, {
+                'featureType': 'label',
+                'elementType': 'labels.text.fill',
+                'stylers': {
+                    'color': '#999999'
+                }
+            }]
+        }
+    },
+    series : [
+        {
+            name: 'pm2.5',
+            type: 'scatter',
+            coordinateSystem: 'bmap',
+            data: convertData(data),
+            symbolSize: function (val) {
+                return val[2] / 10;
+            },
+            encode: {
+                value: 2
+            },
+            label: {
+                formatter: '{b}',
+                position: 'right',
+                show: false
+            },
+            emphasis: {
+                label: {
+                    show: true
+                }
+            }
+        },
+        {
+            name: 'Top 5',
+            type: 'effectScatter',
+            coordinateSystem: 'bmap',
+            data: convertData(data.sort(function (a, b) {
+                return b.value - a.value;
+            }).slice(0, 6)),
+            symbolSize: function (val) {
+                return val[2] / 10;
+            },
+            encode: {
+                value: 2
+            },
+            showEffectOn: 'render',
+            rippleEffect: {
+                brushType: 'stroke'
+            },
+            label: {
+                formatter: '{b}',
+                position: 'right',
+                show: true
+            },
+            itemStyle: {
+                shadowBlur: 10,
+                shadowColor: '#333'
+            },
+            emphasis: {
+                scale: true
+            },
+            zlevel: 1
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/effectScatter-map.ts b/examples/examples/ts/effectScatter-map.ts
new file mode 100644
index 0000000..1f6429e
--- /dev/null
+++ b/examples/examples/ts/effectScatter-map.ts
@@ -0,0 +1,511 @@
+/*
+title: Air Quality
+category: scatter
+titleCN: 全国主要城市空气质量
+difficulty: 2
+*/
+
+interface DataItem {
+    name: string
+    value: number
+}
+const data: DataItem[] = [
+     {name: '海门', value: 9},
+     {name: '鄂尔多斯', value: 12},
+     {name: '招远', value: 12},
+     {name: '舟山', value: 12},
+     {name: '齐齐哈尔', value: 14},
+     {name: '盐城', value: 15},
+     {name: '赤峰', value: 16},
+     {name: '青岛', value: 18},
+     {name: '乳山', value: 18},
+     {name: '金昌', value: 19},
+     {name: '泉州', value: 21},
+     {name: '莱西', value: 21},
+     {name: '日照', value: 21},
+     {name: '胶南', value: 22},
+     {name: '南通', value: 23},
+     {name: '拉萨', value: 24},
+     {name: '云浮', value: 24},
+     {name: '梅州', value: 25},
+     {name: '文登', value: 25},
+     {name: '上海', value: 25},
+     {name: '攀枝花', value: 25},
+     {name: '威海', value: 25},
+     {name: '承德', value: 25},
+     {name: '厦门', value: 26},
+     {name: '汕尾', value: 26},
+     {name: '潮州', value: 26},
+     {name: '丹东', value: 27},
+     {name: '太仓', value: 27},
+     {name: '曲靖', value: 27},
+     {name: '烟台', value: 28},
+     {name: '福州', value: 29},
+     {name: '瓦房店', value: 30},
+     {name: '即墨', value: 30},
+     {name: '抚顺', value: 31},
+     {name: '玉溪', value: 31},
+     {name: '张家口', value: 31},
+     {name: '阳泉', value: 31},
+     {name: '莱州', value: 32},
+     {name: '湖州', value: 32},
+     {name: '汕头', value: 32},
+     {name: '昆山', value: 33},
+     {name: '宁波', value: 33},
+     {name: '湛江', value: 33},
+     {name: '揭阳', value: 34},
+     {name: '荣成', value: 34},
+     {name: '连云港', value: 35},
+     {name: '葫芦岛', value: 35},
+     {name: '常熟', value: 36},
+     {name: '东莞', value: 36},
+     {name: '河源', value: 36},
+     {name: '淮安', value: 36},
+     {name: '泰州', value: 36},
+     {name: '南宁', value: 37},
+     {name: '营口', value: 37},
+     {name: '惠州', value: 37},
+     {name: '江阴', value: 37},
+     {name: '蓬莱', value: 37},
+     {name: '韶关', value: 38},
+     {name: '嘉峪关', value: 38},
+     {name: '广州', value: 38},
+     {name: '延安', value: 38},
+     {name: '太原', value: 39},
+     {name: '清远', value: 39},
+     {name: '中山', value: 39},
+     {name: '昆明', value: 39},
+     {name: '寿光', value: 40},
+     {name: '盘锦', value: 40},
+     {name: '长治', value: 41},
+     {name: '深圳', value: 41},
+     {name: '珠海', value: 42},
+     {name: '宿迁', value: 43},
+     {name: '咸阳', value: 43},
+     {name: '铜川', value: 44},
+     {name: '平度', value: 44},
+     {name: '佛山', value: 44},
+     {name: '海口', value: 44},
+     {name: '江门', value: 45},
+     {name: '章丘', value: 45},
+     {name: '肇庆', value: 46},
+     {name: '大连', value: 47},
+     {name: '临汾', value: 47},
+     {name: '吴江', value: 47},
+     {name: '石嘴山', value: 49},
+     {name: '沈阳', value: 50},
+     {name: '苏州', value: 50},
+     {name: '茂名', value: 50},
+     {name: '嘉兴', value: 51},
+     {name: '长春', value: 51},
+     {name: '胶州', value: 52},
+     {name: '银川', value: 52},
+     {name: '张家港', value: 52},
+     {name: '三门峡', value: 53},
+     {name: '锦州', value: 54},
+     {name: '南昌', value: 54},
+     {name: '柳州', value: 54},
+     {name: '三亚', value: 54},
+     {name: '自贡', value: 56},
+     {name: '吉林', value: 56},
+     {name: '阳江', value: 57},
+     {name: '泸州', value: 57},
+     {name: '西宁', value: 57},
+     {name: '宜宾', value: 58},
+     {name: '呼和浩特', value: 58},
+     {name: '成都', value: 58},
+     {name: '大同', value: 58},
+     {name: '镇江', value: 59},
+     {name: '桂林', value: 59},
+     {name: '张家界', value: 59},
+     {name: '宜兴', value: 59},
+     {name: '北海', value: 60},
+     {name: '西安', value: 61},
+     {name: '金坛', value: 62},
+     {name: '东营', value: 62},
+     {name: '牡丹江', value: 63},
+     {name: '遵义', value: 63},
+     {name: '绍兴', value: 63},
+     {name: '扬州', value: 64},
+     {name: '常州', value: 64},
+     {name: '潍坊', value: 65},
+     {name: '重庆', value: 66},
+     {name: '台州', value: 67},
+     {name: '南京', value: 67},
+     {name: '滨州', value: 70},
+     {name: '贵阳', value: 71},
+     {name: '无锡', value: 71},
+     {name: '本溪', value: 71},
+     {name: '克拉玛依', value: 72},
+     {name: '渭南', value: 72},
+     {name: '马鞍山', value: 72},
+     {name: '宝鸡', value: 72},
+     {name: '焦作', value: 75},
+     {name: '句容', value: 75},
+     {name: '北京', value: 79},
+     {name: '徐州', value: 79},
+     {name: '衡水', value: 80},
+     {name: '包头', value: 80},
+     {name: '绵阳', value: 80},
+     {name: '乌鲁木齐', value: 84},
+     {name: '枣庄', value: 84},
+     {name: '杭州', value: 84},
+     {name: '淄博', value: 85},
+     {name: '鞍山', value: 86},
+     {name: '溧阳', value: 86},
+     {name: '库尔勒', value: 86},
+     {name: '安阳', value: 90},
+     {name: '开封', value: 90},
+     {name: '济南', value: 92},
+     {name: '德阳', value: 93},
+     {name: '温州', value: 95},
+     {name: '九江', value: 96},
+     {name: '邯郸', value: 98},
+     {name: '临安', value: 99},
+     {name: '兰州', value: 99},
+     {name: '沧州', value: 100},
+     {name: '临沂', value: 103},
+     {name: '南充', value: 104},
+     {name: '天津', value: 105},
+     {name: '富阳', value: 106},
+     {name: '泰安', value: 112},
+     {name: '诸暨', value: 112},
+     {name: '郑州', value: 113},
+     {name: '哈尔滨', value: 114},
+     {name: '聊城', value: 116},
+     {name: '芜湖', value: 117},
+     {name: '唐山', value: 119},
+     {name: '平顶山', value: 119},
+     {name: '邢台', value: 119},
+     {name: '德州', value: 120},
+     {name: '济宁', value: 120},
+     {name: '荆州', value: 127},
+     {name: '宜昌', value: 130},
+     {name: '义乌', value: 132},
+     {name: '丽水', value: 133},
+     {name: '洛阳', value: 134},
+     {name: '秦皇岛', value: 136},
+     {name: '株洲', value: 143},
+     {name: '石家庄', value: 147},
+     {name: '莱芜', value: 148},
+     {name: '常德', value: 152},
+     {name: '保定', value: 153},
+     {name: '湘潭', value: 154},
+     {name: '金华', value: 157},
+     {name: '岳阳', value: 169},
+     {name: '长沙', value: 175},
+     {name: '衢州', value: 177},
+     {name: '廊坊', value: 193},
+     {name: '菏泽', value: 194},
+     {name: '合肥', value: 229},
+     {name: '武汉', value: 273},
+     {name: '大庆', value: 279}
+];
+const geoCoordMap: Record<string, number[]> = {
+    '海门':[121.15,31.89],
+    '鄂尔多斯':[109.781327,39.608266],
+    '招远':[120.38,37.35],
+    '舟山':[122.207216,29.985295],
+    '齐齐哈尔':[123.97,47.33],
+    '盐城':[120.13,33.38],
+    '赤峰':[118.87,42.28],
+    '青岛':[120.33,36.07],
+    '乳山':[121.52,36.89],
+    '金昌':[102.188043,38.520089],
+    '泉州':[118.58,24.93],
+    '莱西':[120.53,36.86],
+    '日照':[119.46,35.42],
+    '胶南':[119.97,35.88],
+    '南通':[121.05,32.08],
+    '拉萨':[91.11,29.97],
+    '云浮':[112.02,22.93],
+    '梅州':[116.1,24.55],
+    '文登':[122.05,37.2],
+    '上海':[121.48,31.22],
+    '攀枝花':[101.718637,26.582347],
+    '威海':[122.1,37.5],
+    '承德':[117.93,40.97],
+    '厦门':[118.1,24.46],
+    '汕尾':[115.375279,22.786211],
+    '潮州':[116.63,23.68],
+    '丹东':[124.37,40.13],
+    '太仓':[121.1,31.45],
+    '曲靖':[103.79,25.51],
+    '烟台':[121.39,37.52],
+    '福州':[119.3,26.08],
+    '瓦房店':[121.979603,39.627114],
+    '即墨':[120.45,36.38],
+    '抚顺':[123.97,41.97],
+    '玉溪':[102.52,24.35],
+    '张家口':[114.87,40.82],
+    '阳泉':[113.57,37.85],
+    '莱州':[119.942327,37.177017],
+    '湖州':[120.1,30.86],
+    '汕头':[116.69,23.39],
+    '昆山':[120.95,31.39],
+    '宁波':[121.56,29.86],
+    '湛江':[110.359377,21.270708],
+    '揭阳':[116.35,23.55],
+    '荣成':[122.41,37.16],
+    '连云港':[119.16,34.59],
+    '葫芦岛':[120.836932,40.711052],
+    '常熟':[120.74,31.64],
+    '东莞':[113.75,23.04],
+    '河源':[114.68,23.73],
+    '淮安':[119.15,33.5],
+    '泰州':[119.9,32.49],
+    '南宁':[108.33,22.84],
+    '营口':[122.18,40.65],
+    '惠州':[114.4,23.09],
+    '江阴':[120.26,31.91],
+    '蓬莱':[120.75,37.8],
+    '韶关':[113.62,24.84],
+    '嘉峪关':[98.289152,39.77313],
+    '广州':[113.23,23.16],
+    '延安':[109.47,36.6],
+    '太原':[112.53,37.87],
+    '清远':[113.01,23.7],
+    '中山':[113.38,22.52],
+    '昆明':[102.73,25.04],
+    '寿光':[118.73,36.86],
+    '盘锦':[122.070714,41.119997],
+    '长治':[113.08,36.18],
+    '深圳':[114.07,22.62],
+    '珠海':[113.52,22.3],
+    '宿迁':[118.3,33.96],
+    '咸阳':[108.72,34.36],
+    '铜川':[109.11,35.09],
+    '平度':[119.97,36.77],
+    '佛山':[113.11,23.05],
+    '海口':[110.35,20.02],
+    '江门':[113.06,22.61],
+    '章丘':[117.53,36.72],
+    '肇庆':[112.44,23.05],
+    '大连':[121.62,38.92],
+    '临汾':[111.5,36.08],
+    '吴江':[120.63,31.16],
+    '石嘴山':[106.39,39.04],
+    '沈阳':[123.38,41.8],
+    '苏州':[120.62,31.32],
+    '茂名':[110.88,21.68],
+    '嘉兴':[120.76,30.77],
+    '长春':[125.35,43.88],
+    '胶州':[120.03336,36.264622],
+    '银川':[106.27,38.47],
+    '张家港':[120.555821,31.875428],
+    '三门峡':[111.19,34.76],
+    '锦州':[121.15,41.13],
+    '南昌':[115.89,28.68],
+    '柳州':[109.4,24.33],
+    '三亚':[109.511909,18.252847],
+    '自贡':[104.778442,29.33903],
+    '吉林':[126.57,43.87],
+    '阳江':[111.95,21.85],
+    '泸州':[105.39,28.91],
+    '西宁':[101.74,36.56],
+    '宜宾':[104.56,29.77],
+    '呼和浩特':[111.65,40.82],
+    '成都':[104.06,30.67],
+    '大同':[113.3,40.12],
+    '镇江':[119.44,32.2],
+    '桂林':[110.28,25.29],
+    '张家界':[110.479191,29.117096],
+    '宜兴':[119.82,31.36],
+    '北海':[109.12,21.49],
+    '西安':[108.95,34.27],
+    '金坛':[119.56,31.74],
+    '东营':[118.49,37.46],
+    '牡丹江':[129.58,44.6],
+    '遵义':[106.9,27.7],
+    '绍兴':[120.58,30.01],
+    '扬州':[119.42,32.39],
+    '常州':[119.95,31.79],
+    '潍坊':[119.1,36.62],
+    '重庆':[106.54,29.59],
+    '台州':[121.420757,28.656386],
+    '南京':[118.78,32.04],
+    '滨州':[118.03,37.36],
+    '贵阳':[106.71,26.57],
+    '无锡':[120.29,31.59],
+    '本溪':[123.73,41.3],
+    '克拉玛依':[84.77,45.59],
+    '渭南':[109.5,34.52],
+    '马鞍山':[118.48,31.56],
+    '宝鸡':[107.15,34.38],
+    '焦作':[113.21,35.24],
+    '句容':[119.16,31.95],
+    '北京':[116.46,39.92],
+    '徐州':[117.2,34.26],
+    '衡水':[115.72,37.72],
+    '包头':[110,40.58],
+    '绵阳':[104.73,31.48],
+    '乌鲁木齐':[87.68,43.77],
+    '枣庄':[117.57,34.86],
+    '杭州':[120.19,30.26],
+    '淄博':[118.05,36.78],
+    '鞍山':[122.85,41.12],
+    '溧阳':[119.48,31.43],
+    '库尔勒':[86.06,41.68],
+    '安阳':[114.35,36.1],
+    '开封':[114.35,34.79],
+    '济南':[117,36.65],
+    '德阳':[104.37,31.13],
+    '温州':[120.65,28.01],
+    '九江':[115.97,29.71],
+    '邯郸':[114.47,36.6],
+    '临安':[119.72,30.23],
+    '兰州':[103.73,36.03],
+    '沧州':[116.83,38.33],
+    '临沂':[118.35,35.05],
+    '南充':[106.110698,30.837793],
+    '天津':[117.2,39.13],
+    '富阳':[119.95,30.07],
+    '泰安':[117.13,36.18],
+    '诸暨':[120.23,29.71],
+    '郑州':[113.65,34.76],
+    '哈尔滨':[126.63,45.75],
+    '聊城':[115.97,36.45],
+    '芜湖':[118.38,31.33],
+    '唐山':[118.02,39.63],
+    '平顶山':[113.29,33.75],
+    '邢台':[114.48,37.05],
+    '德州':[116.29,37.45],
+    '济宁':[116.59,35.38],
+    '荆州':[112.239741,30.335165],
+    '宜昌':[111.3,30.7],
+    '义乌':[120.06,29.32],
+    '丽水':[119.92,28.45],
+    '洛阳':[112.44,34.7],
+    '秦皇岛':[119.57,39.95],
+    '株洲':[113.16,27.83],
+    '石家庄':[114.48,38.03],
+    '莱芜':[117.67,36.19],
+    '常德':[111.69,29.05],
+    '保定':[115.48,38.85],
+    '湘潭':[112.91,27.87],
+    '金华':[119.64,29.12],
+    '岳阳':[113.09,29.37],
+    '长沙':[113,28.21],
+    '衢州':[118.88,28.97],
+    '廊坊':[116.7,39.53],
+    '菏泽':[115.480656,35.23375],
+    '合肥':[117.27,31.86],
+    '武汉':[114.31,30.52],
+    '大庆':[125.03,46.58]
+};
+
+var convertData = function (data: DataItem[]) {
+    var res = [];
+    for (var i = 0; i < data.length; i++) {
+        var geoCoord = geoCoordMap[data[i].name];
+        if (geoCoord) {
+            res.push({
+                name: data[i].name,
+                value: geoCoord.concat(data[i].value)
+            });
+        }
+    }
+    return res;
+};
+
+option = {
+    backgroundColor: '#404a59',
+    title: {
+        text: '全国主要城市空气质量',
+        subtext: 'data from PM25.in',
+        sublink: 'http://www.pm25.in',
+        left: 'center',
+        textStyle: {
+            color: '#fff'
+        }
+    },
+    tooltip : {
+        trigger: 'item'
+    },
+    legend: {
+        orient: 'vertical',
+        top: 'bottom',
+        left: 'right',
+        data:['pm2.5'],
+        textStyle: {
+            color: '#fff'
+        }
+    },
+    geo: {
+        map: 'china',
+        roam: true,
+        label: {
+            show: false
+        },
+        itemStyle: {
+            areaColor: '#323c48',
+            borderColor: '#111'
+        },
+        emphasis: {
+            itemStyle: {
+                areaColor: '#2a333d'
+            }
+        }
+    },
+    series : [
+        {
+            name: 'pm2.5',
+            type: 'scatter',
+            coordinateSystem: 'geo',
+            data: convertData(data),
+            encode: {
+                value: 2
+            },
+            symbolSize: function (val) {
+                return val[2] / 10;
+            },
+            label: {
+                formatter: '{b}',
+                position: 'right',
+                show: false
+            },
+            itemStyle: {
+                color: '#ddb926'
+            },
+            emphasis: {
+                label: {
+                    show: true
+                }
+            }
+        },
+        {
+            name: 'Top 5',
+            type: 'effectScatter',
+            coordinateSystem: 'geo',
+            data: convertData(data.sort(function (a, b) {
+                return b.value - a.value;
+            }).slice(0, 6)),
+            encode: {
+                value: 2
+            },
+            symbolSize: function (val) {
+                return val[2] / 10;
+            },
+            showEffectOn: 'render',
+            rippleEffect: {
+                brushType: 'stroke'
+            },
+            emphasis: {
+                scale: true
+            },
+            label: {
+                formatter: '{b}',
+                position: 'right',
+                show: true
+            },
+            itemStyle: {
+                color: '#f4e925',
+                shadowBlur: 10,
+                shadowColor: '#333'
+            },
+            zlevel: 1
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/funnel-align.ts b/examples/examples/ts/funnel-align.ts
new file mode 100644
index 0000000..1bca3f8
--- /dev/null
+++ b/examples/examples/ts/funnel-align.ts
@@ -0,0 +1,108 @@
+/*
+title: Funnel Compare
+category: funnel
+titleCN: 漏斗图(对比)
+*/
+
+option = {
+    title: {
+        text: 'Funnel Compare',
+        subtext: 'Fake Data',
+        left: 'left',
+        top: 'bottom'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    toolbox: {
+        show: true,
+        orient: 'vertical',
+        top: 'center',
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        orient: 'vertical',
+        left: 'left',
+        data: ['Prod A', 'Prod B', 'Prod C', 'Prod D', 'Prod E']
+    },
+
+    series: [
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '50%',
+            funnelAlign: 'right',
+
+            data: [
+                {value: 60, name: 'Prod C'},
+                {value: 30, name: 'Prod D'},
+                {value: 10, name: 'Prod E'},
+                {value: 80, name: 'Prod B'},
+                {value: 100, name: 'Prod A'}
+            ]
+        },
+        {
+            name: 'Pyramid',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '5%',
+            sort: 'ascending',
+            funnelAlign: 'right',
+
+            data: [
+                {value: 60, name: 'Prod C'},
+                {value: 30, name: 'Prod D'},
+                {value: 10, name: 'Prod E'},
+                {value: 80, name: 'Prod B'},
+                {value: 100, name: 'Prod A'}
+            ]
+        },
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '55%',
+            top: '5%',
+            funnelAlign: 'left',
+
+            data: [
+                {value: 60, name: 'Prod C'},
+                {value: 30, name: 'Prod D'},
+                {value: 10, name: 'Prod E'},
+                {value: 80, name: 'Prod B'},
+                {value: 100, name: 'Prod A'}
+            ]
+        },
+        {
+            name: 'Pyramid',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '55%',
+            top: '50%',
+            sort: 'ascending',
+            funnelAlign: 'left',
+
+            data: [
+                {value: 60, name: 'Prod C'},
+                {value: 30, name: 'Prod D'},
+                {value: 10, name: 'Prod E'},
+                {value: 80, name: 'Prod B'},
+                {value: 100, name: 'Prod A'}
+            ]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/funnel-customize.ts b/examples/examples/ts/funnel-customize.ts
new file mode 100644
index 0000000..229ae83
--- /dev/null
+++ b/examples/examples/ts/funnel-customize.ts
@@ -0,0 +1,89 @@
+/*
+title: Customized Funnel
+category: funnel
+titleCN: 漏斗图
+*/
+
+option = {
+    title: {
+        text: 'Funnel'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: "{a} <br/>{b} : {c}%"
+    },
+    toolbox: {
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        data: ['Show','Click','Visit','Inquiry','Order']
+    },
+    series: [
+        {
+            name: 'Expected',
+            type: 'funnel',
+            left: '10%',
+            width: '80%',
+            label: {
+                formatter: '{b}Expected'
+            },
+            labelLine: {
+                show: false
+            },
+            itemStyle: {
+                opacity: 0.7
+            },
+            emphasis: {
+                label: {
+                    position: 'inside',
+                    formatter: '{b}Expected: {c}%'
+                }
+            },
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 40, name: 'Inquiry'},
+                {value: 20, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Actual',
+            type: 'funnel',
+            left: '10%',
+            width: '80%',
+            maxSize: '80%',
+            label: {
+                position: 'inside',
+                formatter: '{c}%',
+                color: '#fff'
+            },
+            itemStyle: {
+                opacity: 0.5,
+                borderColor: '#fff',
+                borderWidth: 2
+            },
+            emphasis: {
+                label: {
+                    position: 'inside',
+                    formatter: '{b}Actual: {c}%'
+                }
+            },
+            data: [
+                {value: 30, name: 'Visit'},
+                {value: 10, name: 'Inquiry'},
+                {value: 5, name: 'Order'},
+                {value: 50, name: 'Click'},
+                {value: 80, name: 'Show'}
+            ],
+            // Ensure outer shape will not be over inner shape when hover.
+            z: 100
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/examples/examples/ts/funnel-mutiple.ts b/examples/examples/ts/funnel-mutiple.ts
new file mode 100644
index 0000000..6b5b9f6
--- /dev/null
+++ b/examples/examples/ts/funnel-mutiple.ts
@@ -0,0 +1,104 @@
+/*
+title: Multiple Funnels
+category: funnel
+titleCN: Funnel
+*/
+
+option = {
+    title: {
+        text: 'Funnel',
+        left: 'left',
+        top: 'bottom'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    toolbox: {
+        orient: 'vertical',
+        top: 'center',
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        orient: 'vertical',
+        left: 'left',
+        data: ['Show', 'Click', 'Visit', 'Inquiry', 'Order']
+    },
+
+    series: [
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '50%',
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Pyramid',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '5%',
+            sort: 'ascending',
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '55%',
+            top: '5%',
+            label: {
+                position: 'left'
... 27018 lines suppressed ...

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org