diff --git a/examples/typescript-vue/README.md b/examples/typescript-vue/README.md
new file mode 100644
index 0000000000..3c9afcc08e
--- /dev/null
+++ b/examples/typescript-vue/README.md
@@ -0,0 +1,57 @@
+# Vue.js + Typescript + Vuex • [TodoMVC](http://todomvc.com)
+
+> The Progressive JavaScript Framework
+
+> Javascript that scales
+
+
+## Resources
+
+To work with Typescript those npm package were really usefull:
+
+- [Vue-class-component](https://github.com/vuejs/vue-class-component)
+- [Vue-property-decorator](https://github.com/kaorun343/vue-property-decorator)
+- [Vuex-class](https://github.com/ktsn/vuex-class)
+
+
+*Let us [know](https://github.com/tastejs/todomvc/issues) if you discover anything worth sharing.*
+
+
+## Implementation
+
+TodoMVC written in Vue 2.5, Webpack 3, Typescript 2.6 and Vuex.
+
+The app was written from the TodoMVC Vue.js app by Evan You.
+I splited the app between components and put all the logic inside the Vuex store management!
+
+## To discover more
+
+* [Components](https://github.com/victorgarciaesgi/Vue-Typescript-TodoMvc/tree/master/src/components)
+* [Webpack config](https://github.com/victorgarciaesgi/Vue-Typescript-TodoMvc/tree/master/config)
+* [Vuex module](https://github.com/victorgarciaesgi/Vue-Typescript-TodoMvc/blob/master/src/store/TodoStore.ts)
+
+## Credit
+
+Created by [Victor Garcia](http://garciavictor.fr)
+
+# Installation
+
+```bash
+$ npm install
+```
+
+```
+$ yarn
+```
+
+## Development
+
+```bash
+npm run dev
+```
+
+## Production build
+
+```bash
+npm run prod
+```
\ No newline at end of file
diff --git a/examples/typescript-vue/Server.js b/examples/typescript-vue/Server.js
new file mode 100644
index 0000000000..c17b7f294c
--- /dev/null
+++ b/examples/typescript-vue/Server.js
@@ -0,0 +1,33 @@
+const express = require('express');
+const morgan = require('morgan');
+const path = require('path');
+const fs = require('fs')
+
+const app = express();
+const PORT = process.env.PORT || 7000;
+
+
+app.use(morgan('tiny'));
+app.get('*.js', function (req, res, next) {
+ if (process.env.NODE_ENV === 'production'){
+
+ var url = req.url + '.gz';
+ if (fs.existsSync(`./dist${url}`)){
+ req.url = url;
+ res.set('Content-Encoding', 'gzip');
+ }
+
+ //Renvoie le fichier js zippé en production
+ }
+ next();
+});
+
+app.use(express.static(path.resolve(__dirname ,'dist')));
+
+app.get('/*', (req, res) => {
+ res.sendFile(path.resolve(__dirname, './dist/index.html'));
+});
+
+app.listen(PORT, () => {
+ console.log(`App listening on port ${PORT}`);
+});
diff --git a/examples/typescript-vue/config/helpers.js b/examples/typescript-vue/config/helpers.js
new file mode 100644
index 0000000000..0e93a5ae37
--- /dev/null
+++ b/examples/typescript-vue/config/helpers.js
@@ -0,0 +1,10 @@
+const path = require('path');
+
+const ROOT = path.resolve(__dirname, '..');
+
+function root(args) {
+ args = Array.prototype.slice.call(arguments, 0);
+ return path.join.apply(path, [ROOT].concat(args));
+}
+
+exports.root = root;
\ No newline at end of file
diff --git a/examples/typescript-vue/config/webpack.config.base.js b/examples/typescript-vue/config/webpack.config.base.js
new file mode 100644
index 0000000000..f74b760a8f
--- /dev/null
+++ b/examples/typescript-vue/config/webpack.config.base.js
@@ -0,0 +1,86 @@
+const path = require('path');
+const helpers = require('./helpers');
+const FaviconsWebpackPlugin = require('favicons-webpack-plugin');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+
+const baseConfig = {
+ entry: {
+ 'bundle': helpers.root('/src/main.ts')
+ },
+ output: {
+ filename: '[name].js',
+ publicPath: '/',
+ path: helpers.root('dist')
+ },
+ resolve: {
+ extensions: [
+ '.ts', '.js', '.vue',
+ ],
+ alias: {
+ '@components': helpers.root('src/components/index.ts'),
+ '@src': helpers.root('src'),
+ '@icons': helpers.root('src/assets/icons'),
+ '@images': helpers.root('src/assets/images'),
+ '@fonts': helpers.root('src/assets/fonts'),
+ '@views': helpers.root('src/components/views/index.ts'),
+ '@validators': helpers.root('src/utils/validators.ts'),
+ '@methods': helpers.root('src/utils/methods.ts'),
+ '@filters': helpers.root('src/utils/filters.ts'),
+ '@types': helpers.root('src/typings/index.ts'),
+ '@store': helpers.root('src/store/index.ts'),
+ }
+ },
+ module: {
+ rules: [{
+ test: /\.vue$/,
+ use: {
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ scss: ['vue-style-loader', 'css-loader', 'postcss-loader', 'sass-loader', {
+ loader: 'sass-resources-loader',
+ options: {
+ resources: helpers.root('src/styles/variables.scss'),
+ esModule: true
+ }
+ }],
+ ts: 'ts-loader',
+ }
+ }
+ }
+ }, {
+ test: /\.ts$/,
+ exclude: /node_modules/,
+ loader: 'ts-loader',
+ options: {
+ appendTsSuffixTo: [/\.vue$/],
+ }
+ }]
+ },
+ plugins: [
+ new FaviconsWebpackPlugin({
+ logo: helpers.root('src/assets/images/logo.png'),
+ prefix: 'icons-[hash]/',
+ persistentCache: true,
+ inject: true,
+ background: '#fff',
+ icons: {
+ android: false,
+ appleIcon: false,
+ appleStartup: false,
+ coast: false,
+ favicons: true,
+ firefox: false,
+ opengraph: false,
+ twitter: false,
+ yandex: false,
+ windows: false
+ }
+ }),
+ new CopyWebpackPlugin([{
+ from: helpers.root('src/assets')
+ }])
+ ],
+};
+
+module.exports = baseConfig;
\ No newline at end of file
diff --git a/examples/typescript-vue/config/webpack.config.dev.js b/examples/typescript-vue/config/webpack.config.dev.js
new file mode 100644
index 0000000000..5058800970
--- /dev/null
+++ b/examples/typescript-vue/config/webpack.config.dev.js
@@ -0,0 +1,73 @@
+const webpackBaseConfig = require('./webpack.config.base');
+const env = require('../environment/dev.env');
+const webpack = require('webpack')
+const path = require('path');
+const helpers = require('./helpers');
+const merge = require('webpack-merge')
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
+const DefinePlugin = require('webpack/lib/DefinePlugin');
+const autoprefixer = require('autoprefixer');
+
+const webpackDevConfig = {
+ module: {
+ rules: [{
+ test: /\.s?css$/,
+ use: [{
+ loader: 'style-loader'
+ }, {
+ loader: 'css-loader',
+ options: {
+ minimize: false,
+ sourceMap: true,
+ importLoaders: 2
+ }
+ }, {
+ loader: 'postcss-loader',
+ options: {
+ plugins: () => [autoprefixer],
+ sourceMap: true
+ }
+ }, {
+ loader: 'sass-loader',
+ options: {
+ outputStyle: 'expanded',
+ sourceMap: true,
+ sourceMapContents: true
+ }
+ }
+ ],
+ }, {
+ test: /\.(jpe?g|png|ttf|eot|svg|ico|woff(2)?)(\?[a-z0-9=&.]+)?$/,
+ use: 'base64-inline-loader?limit=1000&name=[name].[ext]'
+ }]
+ },
+ plugins: [
+ new HtmlWebpackPlugin({
+ inject: true,
+ template: helpers.root('/src/index.html'),
+ filename: 'index.html'
+ }),
+ new DefinePlugin({
+ 'process.env': env
+ }),
+ new FriendlyErrorsPlugin(),
+ new webpack.HotModuleReplacementPlugin(),
+ new webpack.NamedModulesPlugin(),
+ new webpack.NoEmitOnErrorsPlugin()
+ ],
+ devServer: {
+ contentBase: path.join(__dirname, "dist"),
+ port: 7000,
+ historyApiFallback: true,
+ hot: true,
+ quiet: true,
+ open: true,
+ inline: true
+ },
+ devtool: 'cheap-module-eval-source-map'
+}
+
+const devExport = merge(webpackBaseConfig, webpackDevConfig);
+
+module.exports = devExport;
\ No newline at end of file
diff --git a/examples/typescript-vue/config/webpack.config.prod.js b/examples/typescript-vue/config/webpack.config.prod.js
new file mode 100644
index 0000000000..f11a474d6e
--- /dev/null
+++ b/examples/typescript-vue/config/webpack.config.prod.js
@@ -0,0 +1,126 @@
+const path = require('path');
+const webpack = require('webpack');
+const merge = require('webpack-merge');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const CompressionPlugin = require('compression-webpack-plugin');
+const ExtractTextPlugin = require('extract-text-webpack-plugin');
+const autoprefixer = require('autoprefixer');
+const webpackConfig = require('./webpack.config.base');
+const helpers = require('./helpers');
+const DefinePlugin = require('webpack/lib/DefinePlugin');
+const env = require('../environment/prod.env');
+
+const extractSass = new ExtractTextPlugin({
+ filename: 'css/[name].[contenthash].css',
+ disable: process.env.NODE_ENV === 'development'
+});
+
+
+
+const configProd = {
+ output: {
+ filename: "[name].[hash].js",
+ chunkFilename: "[id].[hash].js"
+ },
+ module: {
+ rules: [
+ {
+ test: /\.s?css$/,
+ use: extractSass.extract({
+ use: [{
+ loader: 'css-loader',
+ options: {
+ minimize: true,
+ importLoaders: 2
+ }
+ },
+ {
+ loader: 'postcss-loader',
+ options: {
+ plugins: () => [autoprefixer]
+ }
+ },
+ {
+ loader: 'sass-loader',
+ options: {
+ outputStyle: 'compressed',
+ sourceMap: false,
+ sourceMapContents: false
+ }
+ }
+ ],
+ fallback: 'style-loader'
+ })
+ }, {
+ test: /\.(jpe?g|png|ttf|eot|svg|woff(2)?)(\?[a-z0-9=&.]+)?$/,
+ use: 'base64-inline-loader?limit=1000&name=[name].[ext]'
+ }
+ ]
+ },
+ plugins: [
+ new DefinePlugin({
+ 'process.env': env
+ }),
+ new webpack.optimize.UglifyJsPlugin({
+ include: /\.js$/,
+ mangle: { keep_fnames: false, screw_ie8: true },
+ compress: { keep_fnames: false, screw_ie8: true, warnings: false },
+ sourceMap: false,
+ removeComments: true,
+ beautify: false
+ }),
+ extractSass,
+ new HtmlWebpackPlugin({
+ inject: true,
+ template: helpers.root('/src/index.html'),
+ minify: {
+ removeComments: true,
+ collapseWhitespace: true,
+ removeRedundantAttributes: true,
+ useShortDoctype: true,
+ removeEmptyAttributes: true,
+ removeStyleLinkTypeAttributes: true,
+ keepClosingSlash: true,
+ minifyJS: true,
+ minifyCSS: true,
+ minifyURLs: true
+ },
+ chunksSortMode: 'dependency',
+ }),
+
+ new webpack.HashedModuleIdsPlugin(),
+ new webpack.optimize.ModuleConcatenationPlugin(),
+ new webpack.optimize.CommonsChunkPlugin({
+ name: 'vendor',
+ minChunks (module) {
+ // any required modules inside node_modules are extracted to vendor
+ return (
+ module.resource &&
+ /\.js$/.test(module.resource) &&
+ module.resource.indexOf(
+ path.join(__dirname, '../node_modules')
+ ) === 0
+ )
+ }
+ }),
+ new webpack.optimize.CommonsChunkPlugin({
+ name: 'manifest',
+ minChunks: Infinity
+ }),
+ new webpack.optimize.CommonsChunkPlugin({
+ name: 'app',
+ async: 'vendor-async',
+ children: true,
+ minChunks: 3
+ }),
+ new CompressionPlugin({
+ asset: "[path].gz[query]",
+ algorithm: "gzip",
+ test: /\.js$/,
+ threshold: 10240,
+ minRatio: 0.8
+ }),
+ ]
+}
+
+ module.exports = merge(webpackConfig, configProd);
\ No newline at end of file
diff --git a/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js b/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js
new file mode 100644
index 0000000000..4af6d6aa8b
--- /dev/null
+++ b/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js
@@ -0,0 +1 @@
+webpackJsonp([1],{asJK:function(t,e){},x35b:function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=o("/5sW"),i=o("c+8m"),r=o.n(i),c=o("NYxO"),a={todos:[],visibility:"all",count:0},s={all:function(t){return t.todos},active:function(t){return t.todos.filter(function(t){return!t.completed})},completed:function(t){return t.todos.filter(function(t){return t.completed})},remaining:function(t,e){return e.active.length},filteredTodos:function(t,e){return e[t.visibility]}},l={addTodo:function(t,e){t.todos.push(e),t.count++},setVisibility:function(t,e){t.visibility=e},removeCompleted:function(t,e){e.getters;t.todos=t.todos.filter(function(t){return!t.completed})},setAll:function(t,e){t.todos.map(function(t){t.completed=e})},removeTodo:function(t,e){t.todos.splice(t.todos.indexOf(e),1)},editTodoMutation:function(t,e){e=t.todos.find(function(t){return e.id==t.id}),e.title=e.title.trim()}},d={addTodoAction:function(t,e){var o=t.state;(0,t.commit)("addTodo",{completed:!1,id:o.count,title:e})},editTodoAction:function(t,e){var o=(t.state,t.commit);o("editTodoMutation",e),e.title||o("removeTodo",e)},changeVisibility:function(t,e){var o=(t.state,t.commit);t.getters[e]?o("setVisibility",e):(window.location.hash="",o("setVisibility","all"))}},u={state:a,getters:s,mutations:l,actions:d,namespaced:!0};n.default.use(c.a);var p=new c.a.Store({modules:{TodoModule:u}}),f=o("ipus"),v=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])};return function(e,o){function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}(),h=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c},_=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},y=Object(f.e)("TodoModule",f.a),m=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.newTodo="",e}return v(e,t),e.prototype.add=function(){this.newTodo.length&&(this.addTodoAction(this.newTodo.trim()),this.newTodo="")},h([y,_("design:type",Object)],e.prototype,"addTodoAction",void 0),e=h([r()({})],e)}(n.default),b=m,g=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("header",{staticClass:"header"},[o("h1",[t._v("todos")]),t._v(" "),o("input",{directives:[{name:"model",rawName:"v-model",value:t.newTodo,expression:"newTodo"}],staticClass:"new-todo",attrs:{autofocus:"",autocomplete:"off",placeholder:"What needs to be done?"},domProps:{value:t.newTodo},on:{keyup:function(e){if(!("button"in e)&&t._k(e.keyCode,"enter",13,e.key))return null;t.add(e)},input:function(e){e.target.composing||(t.newTodo=e.target.value)}}})])},O=[];g._withStripped=!0;var T={render:g,staticRenderFns:O},j=T,w=o("VU/8"),R=w(b,j,!1,null,null,null);R.options.__file="src/components/Header.vue";var C=R.exports,P=o("EOM2"),k=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])};return function(e,o){function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}(),x=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c},A=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},S=Object(f.e)("TodoModule",f.c),D=Object(f.e)("TodoModule",f.a),E=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.beforeEdit="",e.editedTodo=null,e}return k(e,t),e.prototype.editTodo=function(t){this.beforeEdit=t.title,this.editedTodo=t},e.prototype.doneEdit=function(t){this.editedTodo&&(this.editedTodo=null,this.editTodoAction(t))},e.prototype.cancelEdit=function(t){this.todo.title=this.beforeEdit},x([Object(P.Prop)({required:!0}),A("design:type",Object)],e.prototype,"todo",void 0),x([S,A("design:type",Object)],e.prototype,"removeTodo",void 0),x([D,A("design:type",Object)],e.prototype,"editTodoAction",void 0),e=x([r()({components:{},directives:{"todo-focus":function(t,e){e.value&&t.focus()}}})],e)}(n.default),M=E,V=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("li",{staticClass:"todo",class:{completed:t.todo.completed,editing:t.todo==t.editedTodo}},[o("div",{staticClass:"view"},[o("input",{directives:[{name:"model",rawName:"v-model",value:t.todo.completed,expression:"todo.completed"}],staticClass:"toggle",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.todo.completed)?t._i(t.todo.completed,null)>-1:t.todo.completed},on:{change:function(e){var o=t.todo.completed,n=e.target,i=!!n.checked;if(Array.isArray(o)){var r=t._i(o,null);n.checked?r<0&&(t.todo.completed=o.concat([null])):r>-1&&(t.todo.completed=o.slice(0,r).concat(o.slice(r+1)))}else t.$set(t.todo,"completed",i)}}}),t._v(" "),o("label",{on:{dblclick:function(e){t.editTodo(t.todo)}}},[t._v(t._s(t.todo.title))]),t._v(" "),o("button",{staticClass:"destroy",on:{click:function(e){t.removeTodo(t.todo)}}})]),t._v(" "),o("input",{directives:[{name:"model",rawName:"v-model",value:t.todo.title,expression:"todo.title"},{name:"todo-focus",rawName:"v-todo-focus",value:t.todo==t.editedTodo,expression:"todo == editedTodo"}],staticClass:"edit",attrs:{type:"text"},domProps:{value:t.todo.title},on:{blur:function(e){t.doneEdit(t.todo)},keyup:[function(e){if(!("button"in e)&&t._k(e.keyCode,"enter",13,e.key))return null;t.doneEdit(t.todo)},function(e){if(!("button"in e)&&t._k(e.keyCode,"esc",27,e.key))return null;t.cancelEdit(t.todo)}],input:function(e){e.target.composing||t.$set(t.todo,"title",e.target.value)}}})])},N=[];V._withStripped=!0;var $={render:V,staticRenderFns:N},F=$,H=o("VU/8"),U=H(M,F,!1,null,null,null);U.options.__file="src/components/TodoItem.vue";var L=U.exports,I=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])};return function(e,o){function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}(),J=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c},W=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},z=Object(f.e)("TodoModule",f.b),K=Object(f.e)("TodoModule",f.c),q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return I(e,t),Object.defineProperty(e.prototype,"allDone",{get:function(){return 0===this.remaining},set:function(t){this.setAll(t)},enumerable:!0,configurable:!0}),J([Object(f.d)("TodoModule"),W("design:type",Object)],e.prototype,"TodoState",void 0),J([z,W("design:type",Object)],e.prototype,"filteredTodos",void 0),J([z,W("design:type",Object)],e.prototype,"remaining",void 0),J([K,W("design:type",Object)],e.prototype,"setAll",void 0),e=J([r()({components:{TodoItem:L}})],e)}(n.default),G=q,Y=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("section",{directives:[{name:"show",rawName:"v-show",value:t.TodoState.todos.length,expression:"TodoState.todos.length"}],staticClass:"main"},[o("input",{directives:[{name:"model",rawName:"v-model",value:t.allDone,expression:"allDone"}],staticClass:"toggle-all",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.allDone)?t._i(t.allDone,null)>-1:t.allDone},on:{change:function(e){var o=t.allDone,n=e.target,i=!!n.checked;if(Array.isArray(o)){var r=t._i(o,null);n.checked?r<0&&(t.allDone=o.concat([null])):r>-1&&(t.allDone=o.slice(0,r).concat(o.slice(r+1)))}else t.allDone=i}}}),t._v(" "),o("ul",{staticClass:"todo-list"},t._l(t.filteredTodos,function(t){return o("TodoItem",{key:t.id,attrs:{todo:t}})}))])},B=[];Y._withStripped=!0;var Q={render:Y,staticRenderFns:B},X=Q,Z=o("VU/8"),tt=Z(G,X,!1,null,null,null);tt.options.__file="src/components/TodoList.vue";var et=tt.exports,ot=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])};return function(e,o){function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}(),nt=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c},it=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},rt=Object(f.e)("TodoModule",f.b),ct=Object(f.e)("TodoModule",f.c),at=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return ot(e,t),nt([Object(f.d)("TodoModule"),it("design:type",Object)],e.prototype,"TodoState",void 0),nt([rt,it("design:type",Object)],e.prototype,"remaining",void 0),nt([ct,it("design:type",Object)],e.prototype,"removeCompleted",void 0),e=nt([r()({filters:{pluralize:function(t){return 1===t?"item":"items"}}})],e)}(n.default),st=at,lt=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("footer",{directives:[{name:"show",rawName:"v-show",value:t.TodoState.todos.length,expression:"TodoState.todos.length"}],staticClass:"footer"},[o("span",{staticClass:"todo-count"},[o("strong",[t._v(t._s(t.remaining))]),t._v(" "+t._s(t._f("pluralize")(t.remaining))+" left\n ")]),t._v(" "),o("ul",{staticClass:"filters"},[o("li",[o("a",{class:{selected:"all"==t.TodoState.visibility},attrs:{href:"#/all"}},[t._v("All")])]),t._v(" "),o("li",[o("a",{class:{selected:"active"==t.TodoState.visibility},attrs:{href:"#/active"}},[t._v("Active")])]),t._v(" "),o("li",[o("a",{class:{selected:"completed"==t.TodoState.visibility},attrs:{href:"#/completed"}},[t._v("Completed")])])]),t._v(" "),o("button",{directives:[{name:"show",rawName:"v-show",value:t.TodoState.todos.length>t.remaining,expression:"TodoState.todos.length > remaining"}],staticClass:"clear-completed",on:{click:t.removeCompleted}},[t._v("\n Clear completed\n ")])])},dt=[];lt._withStripped=!0;var ut={render:lt,staticRenderFns:dt},pt=ut,ft=o("VU/8"),vt=ft(st,pt,!1,null,null,null);vt.options.__file="src/components/Footer.vue";var ht=vt.exports,_t=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])};return function(e,o){function n(){this.constructor=e}t(e,o),e.prototype=null===o?Object.create(o):(n.prototype=o.prototype,new n)}}(),yt=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c},mt=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},bt=Object(f.e)("TodoModule",f.a),gt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return _t(e,t),e.prototype.mounted=function(){window.addEventListener("hashchange",this.onHashChange),this.onHashChange()},e.prototype.onHashChange=function(){var t=window.location.hash.replace(/#\/?/,"");this.changeVisibility(t)},yt([bt,mt("design:type",Object)],e.prototype,"changeVisibility",void 0),e=yt([r()({components:{Header:C,TodoList:et,Footer:ht},store:p})],e)}(n.default),Ot=gt,Tt=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",{attrs:{id:"app"}},[o("section",{staticClass:"todoapp"},[o("Header"),t._v(" "),o("TodoList"),t._v(" "),o("Footer")],1),t._v(" "),t._m(0)])},jt=[function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("footer",{staticClass:"info"},[o("p",[t._v("Double-click to edit a todo")]),t._v(" "),o("p",[t._v("Written by "),o("a",{attrs:{href:"https://github.com/victorgarciaesgi"}},[t._v("Victor Garcia")])]),t._v(" "),o("p",[t._v("Part of "),o("a",{attrs:{href:"http://todomvc.com"}},[t._v("TodoMVC")])])])}];Tt._withStripped=!0;var wt={render:Tt,staticRenderFns:jt},Rt=wt,Ct=o("VU/8"),Pt=Ct(Ot,Rt,!1,null,null,null);Pt.options.__file="src/App.vue";var kt=Pt.exports;o("asJK"),(new kt).$mount("#app")}},["x35b"]);
\ No newline at end of file
diff --git a/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js.gz b/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js.gz
new file mode 100644
index 0000000000..550ee99ffd
Binary files /dev/null and b/examples/typescript-vue/dist/bundle.e4572c9934168f6fa43c.js.gz differ
diff --git a/examples/typescript-vue/dist/css/bundle.53ad82fb360e9e454ca4dd2c27c2f8cc.css b/examples/typescript-vue/dist/css/bundle.53ad82fb360e9e454ca4dd2c27c2f8cc.css
new file mode 100644
index 0000000000..9232890678
--- /dev/null
+++ b/examples/typescript-vue/dist/css/bundle.53ad82fb360e9e454ca4dd2c27c2f8cc.css
@@ -0,0 +1 @@
+body,button,html{margin:0;padding:0}button{border:0;background:none;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-font-smoothing:antialiased}body,button{-moz-osx-font-smoothing:grayscale}body{font:14px Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.4em;background:#f5f5f5;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;-webkit-font-smoothing:antialiased;font-weight:300}:focus{outline:0}.hidden{display:none}.todoapp{background:#fff;margin:130px 0 40px;position:relative;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.todoapp input::-webkit-input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::-moz-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp h1{position:absolute;top:-155px;width:100%;font-size:100px;font-weight:100;text-align:center;color:rgba(175,47,47,.15);-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}.edit,.new-todo{position:relative;margin:0;width:100%;font-size:24px;font-family:inherit;font-weight:inherit;line-height:1.4em;border:0;color:inherit;padding:6px;border:1px solid #999;-webkit-box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.new-todo{padding:16px 16px 16px 60px;border:none;background:rgba(0,0,0,.003);-webkit-box-shadow:inset 0 -2px 1px rgba(0,0,0,.03);box-shadow:inset 0 -2px 1px rgba(0,0,0,.03)}.main{position:relative;z-index:2;border-top:1px solid #e6e6e6}label[for=toggle-all]{display:none}.toggle-all{position:absolute;top:-55px;left:-12px;width:60px;height:34px;text-align:center;border:none}.toggle-all:before{content:"\276F";font-size:22px;color:#e6e6e6;padding:10px 27px}.toggle-all:checked:before{color:#737373}.todo-list{margin:0;padding:0;list-style:none}.todo-list li{position:relative;font-size:24px;border-bottom:1px solid #ededed}.todo-list li:last-child{border-bottom:none}.todo-list li.editing{border-bottom:none;padding:0}.todo-list li.editing .edit{display:block;width:506px;padding:12px 16px;margin:0 0 0 43px}.todo-list li.editing .view{display:none}.todo-list li .toggle{text-align:center;width:40px;height:auto;position:absolute;top:0;bottom:0;margin:auto 0;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.todo-list li .toggle:after{content:url('data:image/svg+xml;utf8,')}.todo-list li .toggle:checked:after{content:url('data:image/svg+xml;utf8,')}.todo-list li label{word-break:break-all;padding:15px 60px 15px 15px;margin-left:45px;display:block;line-height:1.2;-webkit-transition:color .4s;transition:color .4s}.todo-list li.completed label{color:#d9d9d9;text-decoration:line-through}.todo-list li .destroy{display:none;position:absolute;top:0;right:10px;bottom:0;width:40px;height:40px;margin:auto 0;font-size:30px;color:#cc9a9a;margin-bottom:11px;-webkit-transition:color .2s ease-out;transition:color .2s ease-out}.todo-list li .destroy:hover{color:#af5b5e}.todo-list li .destroy:after{content:"\D7"}.todo-list li:hover .destroy{display:block}.todo-list li .edit{display:none}.todo-list li.editing:last-child{margin-bottom:-1px}.footer{color:#777;padding:10px 15px;height:20px;text-align:center;border-top:1px solid #e6e6e6}.footer:before{content:"";position:absolute;right:0;bottom:0;left:0;height:50px;overflow:hidden;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2)}.todo-count{float:left;text-align:left}.todo-count strong{font-weight:300}.filters{margin:0;padding:0;list-style:none;position:absolute;right:0;left:0}.filters li{display:inline}.filters li a{color:inherit;margin:3px;padding:3px 7px;text-decoration:none;border:1px solid transparent;border-radius:3px}.filters li a:hover{border-color:rgba(175,47,47,.1)}.filters li a.selected{border-color:rgba(175,47,47,.2)}.clear-completed,html .clear-completed:active{float:right;position:relative;line-height:20px;text-decoration:none;cursor:pointer}.clear-completed:hover{text-decoration:underline}.info{margin:65px auto 0;color:#bfbfbf;font-size:10px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);text-align:center}.info p{line-height:1}.info a{color:inherit;text-decoration:none;font-weight:400}.info a:hover{text-decoration:underline}@media screen and (-webkit-min-device-pixel-ratio:0){.todo-list li .toggle,.toggle-all{background:none}.todo-list li .toggle{height:40px}.toggle-all{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-appearance:none;-moz-appearance:none;appearance:none}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}
\ No newline at end of file
diff --git a/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/.cache b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/.cache
new file mode 100644
index 0000000000..db0434e76a
--- /dev/null
+++ b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/.cache
@@ -0,0 +1 @@
+{"hash":"82b9c7a5a3f405032b1db71a25f67021","version":"0.0.7","optionHash":"d088566a4222118ec0d6fd8e04862c78","result":{"outputFilePrefix":"icons-82b9c7a5a3f405032b1db71a25f67021/","html":["","",""],"files":["icons-82b9c7a5a3f405032b1db71a25f67021/favicon-16x16.png","icons-82b9c7a5a3f405032b1db71a25f67021/favicon-32x32.png","icons-82b9c7a5a3f405032b1db71a25f67021/favicon.ico"]}}
\ No newline at end of file
diff --git a/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-16x16.png b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-16x16.png
new file mode 100644
index 0000000000..d2922595e5
Binary files /dev/null and b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-16x16.png differ
diff --git a/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-32x32.png b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-32x32.png
new file mode 100644
index 0000000000..40addb2fcb
Binary files /dev/null and b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon-32x32.png differ
diff --git a/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon.ico b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon.ico
new file mode 100644
index 0000000000..7094187ffa
Binary files /dev/null and b/examples/typescript-vue/dist/icons-82b9c7a5a3f405032b1db71a25f67021/favicon.ico differ
diff --git a/examples/typescript-vue/dist/images/logo.png b/examples/typescript-vue/dist/images/logo.png
new file mode 100644
index 0000000000..f3d2503fc2
Binary files /dev/null and b/examples/typescript-vue/dist/images/logo.png differ
diff --git a/examples/typescript-vue/dist/index.html b/examples/typescript-vue/dist/index.html
new file mode 100644
index 0000000000..a5091dbe97
--- /dev/null
+++ b/examples/typescript-vue/dist/index.html
@@ -0,0 +1 @@
+
Vue.js + Typescript TodoMVCLoading...
\ No newline at end of file
diff --git a/examples/typescript-vue/dist/manifest.e4572c9934168f6fa43c.js b/examples/typescript-vue/dist/manifest.e4572c9934168f6fa43c.js
new file mode 100644
index 0000000000..9018787d7e
--- /dev/null
+++ b/examples/typescript-vue/dist/manifest.e4572c9934168f6fa43c.js
@@ -0,0 +1 @@
+!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,u){for(var a,i,f,l=0,s=[];l=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}function y(t,e){return vr.call(t,e)}function m(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function _(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function g(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function b(t,e){for(var n in e)t[n]=e[n];return t}function w(t){for(var e={},n=0;n0&&(a=mt(a,(e||"")+"_"+n),yt(a[0])&&yt(u)&&(f[c]=M(u.text+a[0].text),a.shift()),f.push.apply(f,a)):s(a)?yt(u)?f[c]=M(u.text+a):""!==a&&f.push(M(a)):yt(a)&&yt(u)?f[c]=M(u.text+a.text):(i(t._isVList)&&o(a.tag)&&r(a.key)&&o(e)&&(a.key="__vlist"+e+"_"+n+"__"),f.push(a)));return f}function _t(t,e){return(t.__esModule||zr&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function gt(t,e,n,r,o){var i=Zr();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}function bt(t,e,n){if(i(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;if(i(t.loading)&&o(t.loadingComp))return t.loadingComp;if(!o(t.contexts)){var a=t.contexts=[n],s=!0,u=function(){for(var t=0,e=a.length;tAo&&go[n].id>t.id;)n--;go.splice(n+1,0,t)}else go.push(t);Oo||(Oo=!0,at(Ut))}}function Bt(t,e,n){ko.get=function(){return this[e][n]},ko.set=function(t){this[e][n]=t},Object.defineProperty(t,n,ko)}function Ht(t){t._watchers=[];var e=t.$options;e.props&&zt(t,e.props),e.methods&&Yt(t,e.methods),e.data?Wt(t):N(t._data={},!0),e.computed&&Kt(t,e.computed),e.watch&&e.watch!==Ur&&Zt(t,e.watch)}function zt(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;no.shouldConvert=i;for(var a in e)!function(i){o.push(i);var a=Y(i,e,n,t);U(r,i,a),i in t||Bt(t,"_props",i)}(a);no.shouldConvert=!0}function Wt(t){var e=t.$options.data;e=t._data="function"==typeof e?Gt(e,t):e||{},u(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);o--;){var i=n[o];r&&y(r,i)||$(i)||Bt(t,"_data",i)}N(e,!0)}function Gt(t,e){try{return t.call(e,e)}catch(t){return et(t,e,"data()"),{}}}function Kt(t,e){var n=t._computedWatchers=Object.create(null),r=Br();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;r||(n[o]=new $o(t,a||O,O,Eo)),o in t||qt(t,o,i)}}function qt(t,e,n){var r=!Br();"function"==typeof n?(ko.get=r?Jt(e):n,ko.set=O):(ko.get=n.get?r&&!1!==n.cache?Jt(e):n.get:O,ko.set=n.set?n.set:O),Object.defineProperty(t,e,ko)}function Jt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),Kr.target&&e.depend(),e.value}}function Yt(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?O:_(e[n],t)}function Zt(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o=0||n.indexOf(t[o])<0)&&r.push(t[o]);return r}return t}function Te(t){this._init(t)}function Se(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=g(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function Me(t){t.mixin=function(t){return this.options=q(this.options,t),this}}function Ie(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=q(n.options,t),a.super=n,a.options.props&&Pe(a),a.options.computed&&Le(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Ar.forEach(function(t){a[t]=n[t]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=b({},a.options),o[r]=a,a}}function Pe(t){var e=t.options.props;for(var n in e)Bt(t.prototype,"_props",n)}function Le(t){var e=t.options.computed;for(var n in e)qt(t.prototype,n,e[n])}function De(t){Ar.forEach(function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}})}function Ne(t){return t&&(t.Ctor.options.name||t.tag)}function Ue(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Re(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=Ne(a.componentOptions);s&&!e(s)&&Xe(n,i,r,o)}}}function Xe(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,v(n,e)}function Fe(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=Ve(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=Ve(e,n.data));return Be(e.staticClass,e.class)}function Ve(t,e){return{staticClass:He(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Be(t,e){return o(t)||o(e)?He(t,ze(e)):""}function He(t,e){return t?e?t+" "+e:t:e||""}function ze(t){return Array.isArray(t)?We(t):c(t)?Ge(t):"string"==typeof t?t:""}function We(t){for(var e,n="",r=0,i=t.length;r-1?Zo[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Zo[t]=/HTMLUnknownElement/.test(e.toString())}function Je(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function Ye(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Ze(t,e){return document.createElementNS(Ko[t],e)}function Qe(t){return document.createTextNode(t)}function tn(t){return document.createComment(t)}function en(t,e,n){t.insertBefore(e,n)}function nn(t,e){t.removeChild(e)}function rn(t,e){t.appendChild(e)}function on(t){return t.parentNode}function an(t){return t.nextSibling}function sn(t){return t.tagName}function cn(t,e){t.textContent=e}function un(t,e,n){t.setAttribute(e,n)}function fn(t,e){var n=t.data.ref;if(n){var r=t.context,o=t.componentInstance||t.elm,i=r.$refs;e?Array.isArray(i[n])?v(i[n],o):i[n]===o&&(i[n]=void 0):t.data.refInFor?Array.isArray(i[n])?i[n].indexOf(o)<0&&i[n].push(o):i[n]=[o]:i[n]=o}}function ln(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&pn(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function pn(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||Qo(r)&&Qo(i)}function dn(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function hn(t,e){(t.data.directives||e.data.directives)&&vn(t,e)}function vn(t,e){var n,r,o,i=t===ni,a=e===ni,s=yn(t.data.directives,t.context),c=yn(e.data.directives,e.context),u=[],f=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,_n(o,"update",e,t),o.def&&o.def.componentUpdated&&f.push(o)):(_n(o,"bind",e,t),o.def&&o.def.inserted&&u.push(o));if(u.length){var l=function(){for(var n=0;n-1?e.split(/\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Dn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Nn(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&b(e,bi(t.name||"v")),b(e,t),e}return"string"==typeof t?bi(t):void 0}}function Un(t){Ei(function(){Ei(t)})}function Rn(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Ln(t,e))}function Xn(t,e){t._transitionClasses&&v(t._transitionClasses,e),Dn(t,e)}function Fn(t,e,n){var r=Vn(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Oi?xi:ki,c=0,u=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++c>=a&&u()};setTimeout(function(){c0&&(n=Oi,f=a,l=i.length):e===Ci?u>0&&(n=Ci,f=u,l=c.length):(f=Math.max(a,u),n=f>0?a>u?Oi:Ci:null,l=n?n===Oi?i.length:c.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===Oi&&ji.test(r[Ai+"Property"])}}function Bn(t,e){for(;t.length1}function qn(t,e){!0!==e.data.show&&zn(e)}function Jn(t,e,n){Yn(t,e,n),(Ir||Lr)&&setTimeout(function(){Yn(t,e,n)},0)}function Yn(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s-1,a.selected!==i&&(a.selected=i);else if(C(Qn(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Zn(t,e){return e.every(function(e){return!C(e,t)})}function Qn(t){return"_value"in t?t._value:t.value}function tr(t){t.target.composing=!0}function er(t){t.target.composing&&(t.target.composing=!1,nr(t.target,"input"))}function nr(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function rr(t){return!t.componentInstance||t.data&&t.data.transition?t:rr(t.componentInstance._vnode)}function or(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?or(Ot(e.children)):t}function ir(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[mr(i)]=o[i];return e}function ar(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function sr(t){for(;t=t.parent;)if(t.data.transition)return!0}function cr(t,e){return e.key===t.key&&e.tag===t.tag}function ur(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function fr(t){t.data.newPos=t.elm.getBoundingClientRect()}function lr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}/*!
+ * Vue.js v2.5.13
+ * (c) 2014-2017 Evan You
+ * Released under the MIT License.
+ */
+var pr=Object.freeze({}),dr=Object.prototype.toString,hr=(h("slot,component",!0),h("key,ref,slot,slot-scope,is")),vr=Object.prototype.hasOwnProperty,yr=/-(\w)/g,mr=m(function(t){return t.replace(yr,function(t,e){return e?e.toUpperCase():""})}),_r=m(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),gr=/\B([A-Z])/g,br=m(function(t){return t.replace(gr,"-$1").toLowerCase()}),wr=function(t,e,n){return!1},Or=function(t){return t},Cr="data-server-rendered",Ar=["component","directive","filter"],xr=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured"],$r={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:wr,isReservedAttr:wr,isUnknownElement:wr,getTagNamespace:O,parsePlatformTagName:Or,mustUseProp:wr,_lifecycleHooks:xr},kr=/[^\w.$]/,Er="__proto__"in{},jr="undefined"!=typeof window,Tr="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Sr=Tr&&WXEnvironment.platform.toLowerCase(),Mr=jr&&window.navigator.userAgent.toLowerCase(),Ir=Mr&&/msie|trident/.test(Mr),Pr=Mr&&Mr.indexOf("msie 9.0")>0,Lr=Mr&&Mr.indexOf("edge/")>0,Dr=Mr&&Mr.indexOf("android")>0||"android"===Sr,Nr=Mr&&/iphone|ipad|ipod|ios/.test(Mr)||"ios"===Sr,Ur=(Mr&&/chrome\/\d+/.test(Mr),{}.watch),Rr=!1;if(jr)try{var Xr={};Object.defineProperty(Xr,"passive",{get:function(){Rr=!0}}),window.addEventListener("test-passive",null,Xr)}catch(t){}var Fr,Vr,Br=function(){return void 0===Fr&&(Fr=!jr&&void 0!==t&&"server"===t.process.env.VUE_ENV),Fr},Hr=jr&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,zr="undefined"!=typeof Symbol&&j(Symbol)&&"undefined"!=typeof Reflect&&j(Reflect.ownKeys);Vr="undefined"!=typeof Set&&j(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var Wr=O,Gr=0,Kr=function(){this.id=Gr++,this.subs=[]};Kr.prototype.addSub=function(t){this.subs.push(t)},Kr.prototype.removeSub=function(t){v(this.subs,t)},Kr.prototype.depend=function(){Kr.target&&Kr.target.addDep(this)},Kr.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e1?g(n):n;for(var r=g(arguments,1),o=0,i=n.length;oparseInt(this.max)&&Xe(c,u[0],u,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Do={KeepAlive:Lo};!function(t){var e={};e.get=function(){return $r},Object.defineProperty(t,"config",e),t.util={warn:Wr,extend:b,mergeOptions:q,defineReactive:U},t.set=R,t.delete=X,t.nextTick=at,t.options=Object.create(null),Ar.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,b(t.options.components,Do),Se(t),Me(t),Ie(t),De(t)}(Te),Object.defineProperty(Te.prototype,"$isServer",{get:Br}),Object.defineProperty(Te.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Te.version="2.5.13";var No,Uo,Ro=h("style,class"),Xo=h("input,textarea,option,select,progress"),Fo=function(t,e,n){return"value"===n&&Xo(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Vo=h("contenteditable,draggable,spellcheck"),Bo=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Ho="http://www.w3.org/1999/xlink",zo=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Wo=function(t){return zo(t)?t.slice(6,t.length):""},Go=function(t){return null==t||!1===t},Ko={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},qo=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Jo=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Yo=function(t){return qo(t)||Jo(t)},Zo=Object.create(null),Qo=h("text,number,password,search,email,tel,url"),ti=Object.freeze({createElement:Ye,createElementNS:Ze,createTextNode:Qe,createComment:tn,insertBefore:en,removeChild:nn,appendChild:rn,parentNode:on,nextSibling:an,tagName:sn,setTextContent:cn,setAttribute:un}),ei={create:function(t,e){fn(e)},update:function(t,e){t.data.ref!==e.data.ref&&(fn(t,!0),fn(e))},destroy:function(t){fn(t,!0)}},ni=new Jr("",{},[]),ri=["create","activate","update","remove","destroy"],oi={create:hn,update:hn,destroy:function(t){hn(t,ni)}},ii=Object.create(null),ai=[ei,oi],si={create:gn,update:gn},ci={create:wn,update:wn},ui="__r",fi="__c",li={create:$n,update:$n},pi={create:kn,update:kn},di=m(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),hi=/^--/,vi=/\s*!important$/,yi=function(t,e,n){if(hi.test(e))t.style.setProperty(e,n);else if(vi.test(n))t.style.setProperty(e,n.replace(vi,""),"important");else{var r=_i(e);if(Array.isArray(n))for(var o=0,i=n.length;oh?(l=r(n[m+1])?null:n[m+1].elm,_(t,l,n,d,m,i)):d>m&&b(t,e,p,h)}function C(t,e,n,r){for(var i=n;i=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n("mypn"),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(e,n("DuR2"))},DuR2:function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},EOM2:function(t,e,n){!function(t,r){r(e,n("/5sW"),n("c+8m"),n("I8yv"))}(0,function(t,e,n){"use strict";function r(t){return n.createDecorator(function(e,n){void 0===e.inject&&(e.inject={}),Array.isArray(e.inject)||(e.inject[n]=t||n)})}function o(t){return n.createDecorator(function(e,n){var r=e.provide;if("function"!=typeof r||!r.managed){var o=e.provide;r=e.provide=function(){var t=Object.create(("function"==typeof o?o.call(this):o)||null);for(var e in r.managed)t[r.managed[e]]=this[e];return t},r.managed={}}r.managed[n]=t||n})}function i(t,e){return void 0===e&&(e={}),function(r,o){Array.isArray(e)||void 0!==e.type||(e.type=Reflect.getMetadata("design:type",r,o)),n.createDecorator(function(n,r){(n.props||(n.props={}))[r]=e,n.model={prop:r,event:t||r}})(r,o)}}function a(t){return void 0===t&&(t={}),function(e,r){Array.isArray(t)||void 0!==t.type||(t.type=Reflect.getMetadata("design:type",e,r)),n.createDecorator(function(e,n){(e.props||(e.props={}))[n]=t})(e,r)}}function s(t,e){void 0===e&&(e={});var r=e.deep,o=void 0!==r&&r,i=e.immediate,a=void 0!==i&&i;return n.createDecorator(function(e,n){"object"!=typeof e.watch&&(e.watch=Object.create(null)),e.watch[t]={handler:n,deep:o,immediate:a}})}function c(t){return function(e,n,r){n=l(n);var o=r.value;r.value=function(){for(var e=[],r=0;r0)return!0;var o=nt.get(e);return o.delete(n),o.size>0||(nt.delete(e),!0)}function p(t,e){for(var n=t.length-1;n>=0;--n){var r=t[n],o=r(e);if(!C(o)&&!A(o)){if(!P(o))throw new TypeError;e=o}}return e}function d(t,e,n,r){for(var o=t.length-1;o>=0;--o){var i=t[o],a=i(e,n,r);if(!C(a)&&!A(a)){if(!$(a))throw new TypeError;r=a}}return r}function h(t,e,n){var r=nt.get(t);if(C(r)){if(!n)return;r=new Q,nt.set(t,r)}var o=r.get(e);if(C(o)){if(!n)return;o=new Q,r.set(e,o)}return o}function v(t,e,n){if(y(t,e,n))return!0;var r=F(e);return!A(r)&&v(t,r,n)}function y(t,e,n){var r=h(e,n,!1);return!C(r)&&j(r.has(t))}function m(t,e,n){if(y(t,e,n))return _(t,e,n);var r=F(e);return A(r)?void 0:m(t,r,n)}function _(t,e,n){var r=h(e,n,!1);if(!C(r))return r.get(t)}function g(t,e,n,r){h(n,r,!0).set(t,e)}function b(t,e){var n=w(t,e),r=F(t);if(null===r)return n;var o=b(r,e);if(o.length<=0)return n;if(n.length<=0)return o;for(var i=new tt,a=[],s=0,c=n;s=0&&t=this._keys.length?(this._index=-1,this._keys=o,this._values=o):this._index++,{value:e,done:!1}}return{value:void 0,done:!0}},t.prototype.throw=function(t){throw this._index>=0&&(this._index=-1,this._keys=o,this._values=o),t},t.prototype.return=function(t){return this._index>=0&&(this._index=-1,this._keys=o,this._values=o),{value:t,done:!0}},t}();return function(){function o(){this._keys=[],this._values=[],this._cacheKey=r,this._cacheIndex=-2}return Object.defineProperty(o.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),o.prototype.has=function(t){return this._find(t,!1)>=0},o.prototype.get=function(t){var e=this._find(t,!1);return e>=0?this._values[e]:void 0},o.prototype.set=function(t,e){var n=this._find(t,!0);return this._values[n]=e,this},o.prototype.delete=function(t){var e=this._find(t,!1);if(e>=0){for(var n=this._keys.length,o=e+1;o=0&&g.splice(e,1)}function s(t){var e=document.createElement("style");return t.attrs.type="text/css",u(e,t.attrs),i(t,e),e}function c(t){var e=document.createElement("link");return t.attrs.type="text/css",t.attrs.rel="stylesheet",u(e,t.attrs),i(t,e),e}function u(t,e){Object.keys(e).forEach(function(n){t.setAttribute(n,e[n])})}function f(t,e){var n,r,o,i;if(e.transform&&t.css){if(!(i=e.transform(t.css)))return function(){};t.css=i}if(e.singleton){var u=_++;n=m||(m=s(e)),r=l.bind(null,n,u,!1),o=l.bind(null,n,u,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=c(e),r=d.bind(null,n,e),o=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),r=p.bind(null,n),o=function(){a(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function l(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=w(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function p(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute("media",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function d(t,e,n){var r=n.css,o=n.sourceMap,i=void 0===e.convertToAbsoluteUrls&&o;(e.convertToAbsoluteUrls||i)&&(r=b(r)),o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var h={},v=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}(function(){return window&&document&&document.all&&!window.atob}),y=function(t){var e={};return function(n){return void 0===e[n]&&(e[n]=t.call(this,n)),e[n]}}(function(t){return document.querySelector(t)}),m=null,_=0,g=[],b=n("mJPh");t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");e=e||{},e.attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||(e.singleton=v()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=o(t,e);return r(n,e),function(t){for(var i=[],a=0;a-1&&e.splice(n,1)}}function u(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;l(t,n,[],t._modules.root,!0),f(t,n,e)}function f(t,e,n){var r=t._vm;t.getters={};var i=t._wrappedGetters,a={};o(i,function(e,n){a[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var s=j.config.silent;j.config.silent=!0,t._vm=new j({data:{$$state:e},computed:a}),j.config.silent=s,t.strict&&m(t),r&&(n&&t._withCommit(function(){r._data.$$state=null}),j.nextTick(function(){return r.$destroy()}))}function l(t,e,n,r,o){var i=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!i&&!o){var s=_(e,n.slice(0,-1)),c=n[n.length-1];t._withCommit(function(){j.set(s,c,r.state)})}var u=r.context=p(t,a,n);r.forEachMutation(function(e,n){h(t,a+n,e,u)}),r.forEachAction(function(e,n){var r=e.root?n:a+n,o=e.handler||e;v(t,r,o,u)}),r.forEachGetter(function(e,n){y(t,a+n,e,u)}),r.forEachChild(function(r,i){l(t,e,n.concat(i),r,o)})}function p(t,e,n){var r=""===e,o={dispatch:r?t.dispatch:function(n,r,o){var i=g(n,r,o),a=i.payload,s=i.options,c=i.type;return s&&s.root||(c=e+c),t.dispatch(c,a)},commit:r?t.commit:function(n,r,o){var i=g(n,r,o),a=i.payload,s=i.options,c=i.type;s&&s.root||(c=e+c),t.commit(c,a,s)}};return Object.defineProperties(o,{getters:{get:r?function(){return t.getters}:function(){return d(t,e)}},state:{get:function(){return _(t.state,n)}}}),o}function d(t,e){var n={},r=e.length;return Object.keys(t.getters).forEach(function(o){if(o.slice(0,r)===e){var i=o.slice(r);Object.defineProperty(n,i,{get:function(){return t.getters[o]},enumerable:!0})}}),n}function h(t,e,n,r){(t._mutations[e]||(t._mutations[e]=[])).push(function(e){n.call(t,r.state,e)})}function v(t,e,n,r){(t._actions[e]||(t._actions[e]=[])).push(function(e,o){var i=n.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e,o);return a(i)||(i=Promise.resolve(i)),t._devtoolHook?i.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):i})}function y(t,e,n,r){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)})}function m(t){t._vm.$watch(function(){return this._data.$$state},function(){},{deep:!0,sync:!0})}function _(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function g(t,e,n){return i(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function b(t){j&&t===j||(j=t,A(j))}function w(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function O(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function C(t,e,n){return t._modulesNamespaceMap[n]}n.d(e,"e",function(){return M}),n.d(e,"d",function(){return I}),n.d(e,"c",function(){return P}),n.d(e,"b",function(){return L});/**
+ * vuex v3.0.1
+ * (c) 2017 Evan You
+ * @license MIT
+ */
+var A=function(t){function e(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:e});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,n.call(this,t)}}},x="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,$=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},k={namespaced:{configurable:!0}};k.namespaced.get=function(){return!!this._rawModule.namespaced},$.prototype.addChild=function(t,e){this._children[t]=e},$.prototype.removeChild=function(t){delete this._children[t]},$.prototype.getChild=function(t){return this._children[t]},$.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},$.prototype.forEachChild=function(t){o(this._children,t)},$.prototype.forEachGetter=function(t){this._rawModule.getters&&o(this._rawModule.getters,t)},$.prototype.forEachAction=function(t){this._rawModule.actions&&o(this._rawModule.actions,t)},$.prototype.forEachMutation=function(t){this._rawModule.mutations&&o(this._rawModule.mutations,t)},Object.defineProperties($.prototype,k);var E=function(t){this.register([],t,!1)};E.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},E.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")},"")},E.prototype.update=function(t){s([],this.root,t)},E.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=new $(e,n);if(0===t.length)this.root=i;else{this.get(t.slice(0,-1)).addChild(t[t.length-1],i)}e.modules&&o(e.modules,function(e,o){r.register(t.concat(o),e,n)})},E.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var j,T=function(t){var e=this;void 0===t&&(t={}),!j&&"undefined"!=typeof window&&window.Vue&&b(window.Vue);var n=t.plugins;void 0===n&&(n=[]);var o=t.strict;void 0===o&&(o=!1);var i=t.state;void 0===i&&(i={}),"function"==typeof i&&(i=i()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new E(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new j;var a=this,s=this,c=s.dispatch,u=s.commit;this.dispatch=function(t,e){return c.call(a,t,e)},this.commit=function(t,e,n){return u.call(a,t,e,n)},this.strict=o,l(this,i,[],this._modules.root),f(this,i),n.forEach(function(t){return t(e)}),j.config.devtools&&r(this)},S={state:{configurable:!0}};S.state.get=function(){return this._vm._data.$$state},S.state.set=function(t){},T.prototype.commit=function(t,e,n){var r=this,o=g(t,e,n),i=o.type,a=o.payload,s=(o.options,{type:i,payload:a}),c=this._mutations[i];c&&(this._withCommit(function(){c.forEach(function(t){t(a)})}),this._subscribers.forEach(function(t){return t(s,r.state)}))},T.prototype.dispatch=function(t,e){var n=this,r=g(t,e),o=r.type,i=r.payload,a={type:o,payload:i},s=this._actions[o];if(s)return this._actionSubscribers.forEach(function(t){return t(a,n.state)}),s.length>1?Promise.all(s.map(function(t){return t(i)})):s[0](i)},T.prototype.subscribe=function(t){return c(t,this._subscribers)},T.prototype.subscribeAction=function(t){return c(t,this._actionSubscribers)},T.prototype.watch=function(t,e,n){var r=this;return this._watcherVM.$watch(function(){return t(r.state,r.getters)},e,n)},T.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},T.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"==typeof t&&(t=[t]),this._modules.register(t,e),l(this,this.state,t,this._modules.get(t),n.preserveState),f(this,this.state)},T.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(function(){var n=_(e.state,t.slice(0,-1));j.delete(n,t[t.length-1])}),u(this)},T.prototype.hotUpdate=function(t){this._modules.update(t),u(this,!0)},T.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(T.prototype,S);var M=O(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=C(this.$store,"mapState",t);if(!r)return;e=r.context.state,n=r.context.getters}return"function"==typeof o?o.call(this,e,n):e[o]},n[r].vuex=!0}),n}),I=O(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.commit;if(t){var i=C(this.$store,"mapMutations",t);if(!i)return;r=i.context.commit}return"function"==typeof o?o.apply(this,[r].concat(e)):r.apply(this.$store,[o].concat(e))}}),n}),P=O(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;o=t+o,n[r]=function(){if(!t||C(this.$store,"mapGetters",t))return this.$store.getters[o]},n[r].vuex=!0}),n}),L=O(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.dispatch;if(t){var i=C(this.$store,"mapActions",t);if(!i)return;r=i.context.dispatch}return"function"==typeof o?o.apply(this,[r].concat(e)):r.apply(this.$store,[o].concat(e))}}),n}),D=function(t){return{mapState:M.bind(null,t),mapGetters:P.bind(null,t),mapMutations:I.bind(null,t),mapActions:L.bind(null,t)}},N={Store:T,install:b,version:"3.0.1",mapState:M,mapMutations:I,mapGetters:P,mapActions:L,createNamespacedHelpers:D};e.a=N},"VU/8":function(t,e){t.exports=function(t,e,n,r,o,i){var a,s=t=t||{},c=typeof t.default;"object"!==c&&"function"!==c||(a=t,s=t.default);var u="function"==typeof s?s.options:s;e&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId=o);var f;if(i?(f=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(i)},u._ssrRegister=f):r&&(f=r),f){var l=u.functional,p=l?u.render:u.beforeCreate;l?(u._injectStyles=f,u.render=function(t,e){return f.call(e),p(t,e)}):u.beforeCreate=p?[].concat(p,f):[f]}return{esModule:a,exports:s,options:u}}},W2nU:function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(f===setTimeout)return setTimeout(t,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(t,0);try{return f(t,0)}catch(e){try{return f.call(null,t,0)}catch(e){return f.call(this,t,0)}}}function i(t){if(l===clearTimeout)return clearTimeout(t);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(e){try{return l.call(null,t)}catch(e){return l.call(this,t)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):y=-1,h.length&&s())}function s(){if(!v){var t=o(a);v=!0;for(var e=h.length;e;){for(d=h,h=[];++y1)for(var n=1;n-1)return void(e[t]=n[t]);var r=Object.getOwnPropertyDescriptor(n,t);"function"==typeof r.value?(e.methods||(e.methods={}))[t]=r.value:(r.get||r.set)&&((e.computed||(e.computed={}))[t]={get:r.get,set:r.set})}}),(e.mixins||(e.mixins=[])).push({data:function(){return i(this,t)}});var r=t.__decorators__;r&&(r.forEach(function(t){return t(e)}),delete t.__decorators__);var o=Object.getPrototypeOf(t.prototype),a=o instanceof u?o.constructor:u,c=a.extend(e);return s(c,t,a),c}function s(t,e,n){Object.getOwnPropertyNames(e).forEach(function(r){if("prototype"!==r){var i=Object.getOwnPropertyDescriptor(t,r);if(!i||i.configurable){var a=Object.getOwnPropertyDescriptor(e,r);if(!f){if("cid"===r)return;var s=Object.getOwnPropertyDescriptor(n,r);if(!o(a.value)&&s&&s.value===a.value)return}Object.defineProperty(t,r,a)}}})}function c(t){return"function"==typeof t?a(t):function(e){return a(e,t)}}/**
+ * vue-class-component v6.1.2
+ * (c) 2015-2017 Evan You
+ * @license MIT
+ */
+Object.defineProperty(e,"__esModule",{value:!0});var u=function(t){return t&&"object"==typeof t&&"default"in t?t.default:t}(n("/5sW")),f={__proto__:[]}instanceof Array,l=["data","beforeCreate","created","beforeMount","mounted","beforeDestroy","destroyed","beforeUpdate","updated","activated","deactivated","render","errorCaptured"];!function(t){function e(t){l.push.apply(l,t)}t.registerHooks=e}(c||(c={}));var p=c;e.default=p,e.createDecorator=r},ipus:function(t,e,n){"use strict";function r(t,e){function n(n,r){if("string"==typeof r){var o=r,i=n;return e(o,{namespace:t})(i,o)}var s=n,c=a(r||{},{namespace:t});return e(s,c)}return n}function o(t,e){function n(n,r){return Object(s.createDecorator)(function(o,i){o[t]||(o[t]={});var a=(s={},s[i]=n,s);o[t][i]=void 0!==r?e(r,a)[i]:e(a)[i];var s})}function r(t,e){if("string"==typeof e){var r=e,o=t;return n(r,void 0)(o,r)}return n(t,i(e))}return r}function i(t){var e=t&&t.namespace;if("string"==typeof e)return"/"!==e[e.length-1]?e+"/":e}function a(t,e){var n={};return[t,e].forEach(function(t){Object.keys(t).forEach(function(e){n[e]=t[e]})}),n}var s=n("c+8m"),c=n("NYxO"),u=o("computed",c.e),f=o("computed",c.c),l=o("methods",c.b),p=o("methods",c.d);n.d(e,"d",function(){return u}),n.d(e,"b",function(){return f}),n.d(e,"a",function(){return l}),n.d(e,"c",function(){return p}),n.d(e,"e",function(){return r})},mJPh:function(t,e){t.exports=function(t){var e="undefined"!=typeof window&&window.location;if(!e)throw new Error("fixUrls requires window.location");if(!t||"string"!=typeof t)return t;var n=e.protocol+"//"+e.host,r=n+e.pathname.replace(/\/[^\/]*$/,"/");return t.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(t,e){var o=e.trim().replace(/^"(.*)"$/,function(t,e){return e}).replace(/^'(.*)'$/,function(t,e){return e});if(/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(o))return t;var i;return i=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:r+o.replace(/^\.\//,""),"url("+JSON.stringify(i)+")"})}},mypn:function(t,e,n){(function(t,e){!function(t,n){"use strict";function r(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n",
+ "scripts": {
+ "dev": "webpack-dev-server --inline --progress",
+ "server:prod": "cross-env NODE_ENV=production nodemon Server.js",
+ "prod": "npm run clean && npm run build:prod && npm run server:prod",
+ "clean": "rimraf dist",
+ "build:prod": "webpack --display-entrypoints --config config/webpack.config.prod.js --progress"
+ },
+ "dependencies": {
+ "todomvc-app-css": "^2.1.0",
+ "vue": "2.5.13",
+ "vue-class-component": "6.1.2",
+ "vue-property-decorator": "6.0.0",
+ "vuex": "3.0.1",
+ "vuex-class": "0.3.0",
+ "webpack-merge": "^4.1.1"
+ },
+ "devDependencies": {
+ "@types/lodash": "^4.14.76",
+ "@types/node": "^8.0.30",
+ "@types/vue": "^2.0.0",
+ "autoprefixer": "^7.1.5",
+ "base64-inline-loader": "^1.1.0",
+ "compression-webpack-plugin": "^1.0.1",
+ "concurrently": "^3.5.0",
+ "copy-webpack-plugin": "^4.2.0",
+ "cross-env": "^5.1.0",
+ "css-loader": "^0.28.7",
+ "express": "^4.16.2",
+ "extract-text-webpack-plugin": "^3.0.1",
+ "favicons-webpack-plugin": "^0.0.7",
+ "file-loader": "^0.11.2",
+ "friendly-errors-webpack-plugin": "^1.6.1",
+ "fs": "^0.0.1-security",
+ "glob": "^7.1.2",
+ "html-webpack-plugin": "^2.30.1",
+ "image-webpack-loader": "^3.4.2",
+ "morgan": "^1.9.0",
+ "node-sass": "^4.7.2",
+ "path": "^0.12.7",
+ "postcss-loader": "^2.0.6",
+ "prerender-spa-plugin": "^2.1.0",
+ "purify-css": "^1.2.5",
+ "purifycss-webpack": "^0.7.0",
+ "rimraf": "^2.6.2",
+ "sass-lint": "^1.12.1",
+ "sass-loader": "^6.0.6",
+ "sass-resources-loader": "^1.3.1",
+ "source-map-loader": "^0.2.2",
+ "style-loader": "^0.18.2",
+ "svg-url-loader": "^2.2.0",
+ "ts-loader": "^2.3.7",
+ "typescript": "2.6.2",
+ "url": "^0.11.0",
+ "url-loader": "^0.6.2",
+ "vue-loader": "^13.3.0",
+ "vue-style-loader": "^3.0.3",
+ "vue-template-compiler": "^2.5.13",
+ "vue-ts-loader": "0.0.3",
+ "vuex-typescript": "^3.0.2",
+ "webpack": "3.8.1",
+ "webpack-dashboard": "^1.0.0",
+ "webpack-dev-server": "^2.9.7"
+ }
+}
diff --git a/examples/typescript-vue/postcss.config.js b/examples/typescript-vue/postcss.config.js
new file mode 100644
index 0000000000..a099545376
--- /dev/null
+++ b/examples/typescript-vue/postcss.config.js
@@ -0,0 +1 @@
+module.exports = {};
\ No newline at end of file
diff --git a/examples/typescript-vue/src/App.vue b/examples/typescript-vue/src/App.vue
new file mode 100644
index 0000000000..a393a59e09
--- /dev/null
+++ b/examples/typescript-vue/src/App.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
diff --git a/examples/typescript-vue/src/assets/images/logo.png b/examples/typescript-vue/src/assets/images/logo.png
new file mode 100644
index 0000000000..f3d2503fc2
Binary files /dev/null and b/examples/typescript-vue/src/assets/images/logo.png differ
diff --git a/examples/typescript-vue/src/components/Footer.vue b/examples/typescript-vue/src/components/Footer.vue
new file mode 100644
index 0000000000..1c2e79f1c3
--- /dev/null
+++ b/examples/typescript-vue/src/components/Footer.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/typescript-vue/src/components/Header.vue b/examples/typescript-vue/src/components/Header.vue
new file mode 100644
index 0000000000..1bad2d3d5b
--- /dev/null
+++ b/examples/typescript-vue/src/components/Header.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/examples/typescript-vue/src/components/TodoItem.vue b/examples/typescript-vue/src/components/TodoItem.vue
new file mode 100644
index 0000000000..9e0a0cdf11
--- /dev/null
+++ b/examples/typescript-vue/src/components/TodoItem.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/typescript-vue/src/components/TodoList.vue b/examples/typescript-vue/src/components/TodoList.vue
new file mode 100644
index 0000000000..b658d72811
--- /dev/null
+++ b/examples/typescript-vue/src/components/TodoList.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
diff --git a/examples/typescript-vue/src/components/index.ts b/examples/typescript-vue/src/components/index.ts
new file mode 100644
index 0000000000..442a49441d
--- /dev/null
+++ b/examples/typescript-vue/src/components/index.ts
@@ -0,0 +1,4 @@
+export {default as Header} from './Header.vue';
+export {default as TodoItem} from './TodoItem.vue';
+export {default as TodoList} from './TodoList.vue';
+export {default as Footer} from './Footer.vue';
\ No newline at end of file
diff --git a/examples/typescript-vue/src/index.html b/examples/typescript-vue/src/index.html
new file mode 100644
index 0000000000..d9e859fa20
--- /dev/null
+++ b/examples/typescript-vue/src/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Vue.js + Typescript TodoMVC
+
+
+
+ Loading...
+
+
\ No newline at end of file
diff --git a/examples/typescript-vue/src/main.ts b/examples/typescript-vue/src/main.ts
new file mode 100644
index 0000000000..24a0793d8b
--- /dev/null
+++ b/examples/typescript-vue/src/main.ts
@@ -0,0 +1,7 @@
+import Vue from 'vue';
+import App from './App.vue';
+import { store } from '@store';
+
+require('@src/styles/main.css');
+
+new App().$mount('#app');
\ No newline at end of file
diff --git a/examples/typescript-vue/src/store/TodoStore.ts b/examples/typescript-vue/src/store/TodoStore.ts
new file mode 100644
index 0000000000..d82f9a7d84
--- /dev/null
+++ b/examples/typescript-vue/src/store/TodoStore.ts
@@ -0,0 +1,84 @@
+import { Store, GetterTree, MutationTree, ActionTree, Module } from 'vuex';
+import { ITodosState, ITodo } from '@types';
+import { RootState } from './index';
+
+export const state: ITodosState = {
+ todos: [],
+ visibility: 'all',
+ count: 0
+}
+
+export const getters: GetterTree = {
+ all(state) {
+ return state.todos;
+ },
+ active(state) {
+ return state.todos.filter(todo => !todo.completed);
+ },
+ completed(state) {
+ return state.todos.filter(todo => todo.completed);
+ },
+ remaining(state, getters) {
+ return getters.active.length;
+ },
+ filteredTodos(state, getters) {
+ return getters[state.visibility];
+ },
+}
+
+export const mutations: MutationTree = {
+ addTodo(state, todo: ITodo) {
+ state.todos.push(todo);
+ state.count++;
+ },
+ setVisibility(state, payload: ITodosState["visibility"]) {
+ state.visibility = payload;
+ },
+ removeCompleted(state, { getters }) {
+ state.todos = state.todos.filter(todo => !todo.completed);
+ },
+ setAll(state, payload: boolean) {
+ state.todos.map(item => {
+ item.completed = payload;
+ });
+ },
+ removeTodo(state, todo: ITodo) {
+ state.todos.splice(state.todos.indexOf(todo), 1)
+ },
+ editTodoMutation(state, todo: ITodo) {
+ todo = state.todos.find(item => todo.id == item.id);
+ todo.title = todo.title.trim();
+ }
+}
+
+export const actions: ActionTree = {
+ addTodoAction({ state, commit }, todoTitle: string) {
+ let todo: ITodo = {
+ completed: false,
+ id: state.count,
+ title: todoTitle
+ };
+ commit('addTodo', todo);
+ },
+
+ editTodoAction({ state, commit }, todo: ITodo) {
+ commit('editTodoMutation', todo);
+ if (!todo.title) {
+ commit('removeTodo', todo);
+ }
+ },
+ changeVisibility({state, commit, getters}, payload: ITodosState["visibility"]) {
+ if (getters[payload]) {
+ commit('setVisibility', payload);
+ } else {
+ window.location.hash = ''
+ commit('setVisibility', 'all');
+ }
+ }
+}
+
+export const TodoModule: Module = {
+ state, getters, mutations, actions, namespaced: true
+}
+
+
diff --git a/examples/typescript-vue/src/store/index.ts b/examples/typescript-vue/src/store/index.ts
new file mode 100644
index 0000000000..38ebc36df9
--- /dev/null
+++ b/examples/typescript-vue/src/store/index.ts
@@ -0,0 +1,17 @@
+import Vuex from 'vuex';
+import Vue from 'vue';
+
+import { ITodosState } from '@types';
+import { TodoModule } from './TodoStore';
+
+Vue.use(Vuex);
+
+export interface RootState {
+ LoginModule: ITodosState,
+}
+
+export const store = new Vuex.Store({
+ modules: {
+ TodoModule
+ }
+})
\ No newline at end of file
diff --git a/examples/typescript-vue/src/styles/main.css b/examples/typescript-vue/src/styles/main.css
new file mode 100644
index 0000000000..1e8ed52cbc
--- /dev/null
+++ b/examples/typescript-vue/src/styles/main.css
@@ -0,0 +1,371 @@
+
+html,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: none;
+ font-size: 100%;
+ vertical-align: baseline;
+ font-family: inherit;
+ font-weight: inherit;
+ color: inherit;
+ -webkit-appearance: none;
+ appearance: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+ font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ line-height: 1.4em;
+ background: #f5f5f5;
+ color: #4d4d4d;
+ min-width: 230px;
+ max-width: 550px;
+ margin: 0 auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-weight: 300;
+}
+
+:focus {
+ outline: 0;
+}
+
+.hidden {
+ display: none;
+}
+
+.todoapp {
+ background: #fff;
+ margin: 130px 0 40px 0;
+ position: relative;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
+ 0 25px 50px 0 rgba(0, 0, 0, 0.1);
+}
+
+.todoapp input::-webkit-input-placeholder {
+ font-style: italic;
+ font-weight: 300;
+ color: #e6e6e6;
+}
+
+.todoapp input::-moz-placeholder {
+ font-style: italic;
+ font-weight: 300;
+ color: #e6e6e6;
+}
+
+.todoapp input::input-placeholder {
+ font-style: italic;
+ font-weight: 300;
+ color: #e6e6e6;
+}
+
+.todoapp h1 {
+ position: absolute;
+ top: -155px;
+ width: 100%;
+ font-size: 100px;
+ font-weight: 100;
+ text-align: center;
+ color: rgba(175, 47, 47, 0.15);
+ -webkit-text-rendering: optimizeLegibility;
+ -moz-text-rendering: optimizeLegibility;
+ text-rendering: optimizeLegibility;
+}
+
+.new-todo,
+.edit {
+ position: relative;
+ margin: 0;
+ width: 100%;
+ font-size: 24px;
+ font-family: inherit;
+ font-weight: inherit;
+ line-height: 1.4em;
+ border: 0;
+ color: inherit;
+ padding: 6px;
+ border: 1px solid #999;
+ box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.new-todo {
+ padding: 16px 16px 16px 60px;
+ border: none;
+ background: rgba(0, 0, 0, 0.003);
+ box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
+}
+
+.main {
+ position: relative;
+ z-index: 2;
+ border-top: 1px solid #e6e6e6;
+}
+
+label[for='toggle-all'] {
+ display: none;
+}
+
+.toggle-all {
+ position: absolute;
+ top: -55px;
+ left: -12px;
+ width: 60px;
+ height: 34px;
+ text-align: center;
+ border: none; /* Mobile Safari */
+}
+
+.toggle-all:before {
+ content: '❯';
+ font-size: 22px;
+ color: #e6e6e6;
+ padding: 10px 27px 10px 27px;
+}
+
+.toggle-all:checked:before {
+ color: #737373;
+}
+
+.todo-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.todo-list li {
+ position: relative;
+ font-size: 24px;
+ border-bottom: 1px solid #ededed;
+}
+
+.todo-list li:last-child {
+ border-bottom: none;
+}
+
+.todo-list li.editing {
+ border-bottom: none;
+ padding: 0;
+}
+
+.todo-list li.editing .edit {
+ display: block;
+ width: 506px;
+ padding: 12px 16px;
+ margin: 0 0 0 43px;
+}
+
+.todo-list li.editing .view {
+ display: none;
+}
+
+.todo-list li .toggle {
+ text-align: center;
+ width: 40px;
+ /* auto, since non-WebKit browsers doesn't support input styling */
+ height: auto;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto 0;
+ border: none; /* Mobile Safari */
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.todo-list li .toggle:after {
+ content: url('data:image/svg+xml;utf8,');
+}
+
+.todo-list li .toggle:checked:after {
+ content: url('data:image/svg+xml;utf8,');
+}
+
+.todo-list li label {
+ word-break: break-all;
+ padding: 15px 60px 15px 15px;
+ margin-left: 45px;
+ display: block;
+ line-height: 1.2;
+ transition: color 0.4s;
+}
+
+.todo-list li.completed label {
+ color: #d9d9d9;
+ text-decoration: line-through;
+}
+
+.todo-list li .destroy {
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 10px;
+ bottom: 0;
+ width: 40px;
+ height: 40px;
+ margin: auto 0;
+ font-size: 30px;
+ color: #cc9a9a;
+ margin-bottom: 11px;
+ transition: color 0.2s ease-out;
+}
+
+.todo-list li .destroy:hover {
+ color: #af5b5e;
+}
+
+.todo-list li .destroy:after {
+ content: '×';
+}
+
+.todo-list li:hover .destroy {
+ display: block;
+}
+
+.todo-list li .edit {
+ display: none;
+}
+
+.todo-list li.editing:last-child {
+ margin-bottom: -1px;
+}
+
+.footer {
+ color: #777;
+ padding: 10px 15px;
+ height: 20px;
+ text-align: center;
+ border-top: 1px solid #e6e6e6;
+}
+
+.footer:before {
+ content: '';
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 50px;
+ overflow: hidden;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
+ 0 8px 0 -3px #f6f6f6,
+ 0 9px 1px -3px rgba(0, 0, 0, 0.2),
+ 0 16px 0 -6px #f6f6f6,
+ 0 17px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+.todo-count {
+ float: left;
+ text-align: left;
+}
+
+.todo-count strong {
+ font-weight: 300;
+}
+
+.filters {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ position: absolute;
+ right: 0;
+ left: 0;
+}
+
+.filters li {
+ display: inline;
+}
+
+.filters li a {
+ color: inherit;
+ margin: 3px;
+ padding: 3px 7px;
+ text-decoration: none;
+ border: 1px solid transparent;
+ border-radius: 3px;
+}
+
+.filters li a:hover {
+ border-color: rgba(175, 47, 47, 0.1);
+}
+
+.filters li a.selected {
+ border-color: rgba(175, 47, 47, 0.2);
+}
+
+.clear-completed,
+html .clear-completed:active {
+ float: right;
+ position: relative;
+ line-height: 20px;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.clear-completed:hover {
+ text-decoration: underline;
+}
+
+.info {
+ margin: 65px auto 0;
+ color: #bfbfbf;
+ font-size: 10px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-align: center;
+}
+
+.info p {
+ line-height: 1;
+}
+
+.info a {
+ color: inherit;
+ text-decoration: none;
+ font-weight: 400;
+}
+
+.info a:hover {
+ text-decoration: underline;
+}
+
+/*
+ Hack to remove background from Mobile Safari.
+ Can't use it globally since it destroys checkboxes in Firefox
+*/
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .toggle-all,
+ .todo-list li .toggle {
+ background: none;
+ }
+
+ .todo-list li .toggle {
+ height: 40px;
+ }
+
+ .toggle-all {
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ -webkit-appearance: none;
+ appearance: none;
+ }
+}
+
+@media (max-width: 430px) {
+ .footer {
+ height: 50px;
+ }
+
+ .filters {
+ bottom: 10px;
+ }
+}
diff --git a/examples/typescript-vue/src/typings/Todo.d.ts b/examples/typescript-vue/src/typings/Todo.d.ts
new file mode 100644
index 0000000000..923674d001
--- /dev/null
+++ b/examples/typescript-vue/src/typings/Todo.d.ts
@@ -0,0 +1,12 @@
+export interface ITodosState {
+ todos: ITodo[],
+ visibility: 'all'|'completed'|'active',
+ count: number
+}
+
+
+export interface ITodo {
+ title: string,
+ id: number,
+ completed: boolean
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/src/typings/index.ts b/examples/typescript-vue/src/typings/index.ts
new file mode 100644
index 0000000000..caaed92d91
--- /dev/null
+++ b/examples/typescript-vue/src/typings/index.ts
@@ -0,0 +1 @@
+export * from './Todo.d';
\ No newline at end of file
diff --git a/examples/typescript-vue/src/typings/libs/vue.typescript.d.ts b/examples/typescript-vue/src/typings/libs/vue.typescript.d.ts
new file mode 100644
index 0000000000..8f6f410263
--- /dev/null
+++ b/examples/typescript-vue/src/typings/libs/vue.typescript.d.ts
@@ -0,0 +1,4 @@
+declare module '*.vue' {
+ import Vue from 'vue';
+ export default Vue;
+}
diff --git a/examples/typescript-vue/src/typings/libs/vuelidate.d.ts b/examples/typescript-vue/src/typings/libs/vuelidate.d.ts
new file mode 100644
index 0000000000..e99712fdce
--- /dev/null
+++ b/examples/typescript-vue/src/typings/libs/vuelidate.d.ts
@@ -0,0 +1,245 @@
+declare module "vuelidate" {
+
+ import _Vue = require("vue");
+
+ /**
+ * @module augmentation to ComponentOptions defined by Vue.js
+ */
+ module "vue/types/options" {
+
+ interface ComponentOptions {
+ validations?: ValidationRuleset<{}>;
+ }
+ }
+
+ module "vue/types/vue" {
+ interface Vue {
+ $v: Vuelidate;
+ }
+ }
+
+ /**
+ * Represents an instance of validator class at runtime
+ */
+ export interface IValidator {
+ /**
+ * Indicates the state of validation for given model. becomes true when any of it's child validators specified in options returns a falsy value. In case of validation groups, all grouped validators are considered.
+ */
+ readonly $invalid: boolean;
+ /**
+ * A flag representing if the field under validation was touched by the user at least once. Usually it is used to decide if the message is supposed to be displayed to the end user. Flag is managed manually. You have to use $touch and $reset methods to manipulate it. The $dirty flag is considered true if given model was $touched or all of it's children are $dirty.
+ */
+ $dirty: boolean;
+ /**
+ * Convenience flag to easily decide if a message should be displayed. It is a shorthand to $invalid && $dirty.
+ */
+ readonly $error: boolean;
+ /**
+ * Indicates if any child async validator is currently pending. Always false if all validators are synchronous.
+ */
+ $pending: boolean;
+
+ $params: any;
+
+ /**
+ * Sets the $dirty flag of the model and all its children to true recursively.
+ */
+ $touch(): void;
+ /**
+ * Sets the $dirty flag of the model and all its children to false recursively.
+ */
+ $reset(): void;
+ $flattenParams(): void;
+ }
+
+ /**
+ * Builtin validators
+ */
+ interface IDefaultValidators {
+ /**
+ * Accepts only alphabet characters.
+ */
+ alpha?: boolean;
+ /**
+ * Accepts only alphanumerics.
+ */
+ alphaNum?: boolean;
+ /**
+ * Checks if a number is in specified bounds. Min and max are both inclusive.
+ */
+ between?: boolean;
+ /**
+ * Accepts valid email addresses. Keep in mind you still have to carefully verify it on your server, as it is impossible to tell if the address is real without sending verification email.
+ */
+ email?: boolean;
+ /**
+ * Requires the input to have a maximum specified length, inclusive. Works with arrays.
+ */
+ maxLength?: boolean;
+ /**
+ * Requires the input to have a minimum specified length, inclusive. Works with arrays.
+ */
+ minLength?: boolean;
+ /**
+ * Requires non-empty data. Checks for empty arrays and strings containing only whitespaces.
+ */
+ required?: boolean;
+ /**
+ * Checks for equality with a given property. Locator might be either a sibling property name or a function, that will get your component as this and nested model which sibling properties under second parameter.
+ */
+ sameAs?: boolean;
+ /**
+ * Passes when at least one of provided validators passes.
+ */
+ or?: boolean;
+ /**
+ * Passes when all of provided validators passes.
+ */
+ and?: boolean;
+ }
+
+ type EachByKey = {
+ [K in keyof T]: Validator
+ }
+
+ /**
+ * Holds all validation models of collection validator. Always preserves the keys of original model, so it can be safely referenced in the v-for loop iterating over your data using the same index.
+ */
+ type Each =
+ & { [key: number]: EachByKey }
+ & { $trackBy: string | Function }
+ & IValidator
+
+ global {
+ interface Array {
+ /**
+ * Holds all validation models of collection validator. Always preserves the keys of original model, so it can be safely referenced in the v-for loop iterating over your data using the same index.
+ */
+ $each: Each & Vuelidate;
+ }
+ }
+
+ /**
+ * Represents an instance of validator class at runtime
+ */
+ type Validator = IValidator & IDefaultValidators & Each;
+
+ interface IPredicate {
+ (value: any, parentVm?: IValidationRule): boolean | Promise
+ }
+
+ interface IPredicateGenerator {
+ (...args: any[]): IPredicate
+ }
+
+ interface IValidationRule {
+ [key: string]: ValidationPredicate | IValidationRule | IValidationRule[];
+ }
+
+ export type ValidationPredicate = IPredicateGenerator | IPredicate;
+
+ /**
+ * Represents mixin data exposed by Vuelidate instance
+ */
+ export type Vuelidate = {
+ [K in keyof T]?: Vuelidate & Validator;
+ };
+
+ /**
+ * Represents component options used by Vuelidate
+ */
+ export type ValidationRuleset = {
+ [K in keyof T]?: ValidationPredicate | IValidationRule | IValidationRule[] | string[];
+ }
+
+ /**
+ * Represents Vuelidate mixin data extending a Vue component instance. Have your Vue component options implement this
+ * @param {Type} T - The interface or type being used to store model data requiring validation
+ *
+ * @example
+ * export class Foo implements IVuelidate {
+ * data() {
+ * return { bar: { length: 0 } };
+ * }
+ * validations: {
+ * bar: {
+ * length: {
+ * between: between(1,5)
+ * }
+ * }
+ * }
+ * $v: Vuelidate;
+ * }
+ */
+ export interface IVuelidate {
+ $v: Vuelidate;
+ }
+
+ /**
+ * Mixin object for supplying directly to components
+ */
+ export const validationMixin: {
+ beforeCreate(): void;
+ };
+
+ /**
+ * Vuelidate function that creates a validator directly, given a model, and a set of rules
+ */
+ export const validateModel: {
+ (model: T, validations: ValidationRuleset): IVuelidate;
+ }
+
+ /**
+ * Vue plugin object
+ */
+ export function Validation(Vue: typeof _Vue): void;
+
+ export default Validation;
+}
+
+
+declare module "vuelidate/lib/validators" {
+
+ import { ValidationPredicate } from "vuelidate";
+
+ /**
+ * Accepts only alphabet characters.
+ */
+ function alpha(value: any): boolean;
+ /**
+ * Accepts only alphanumerics.
+ */
+ function alphaNum(value: any): boolean;
+ /**
+ * Checks if a number is in specified bounds. Min and max are both inclusive.
+ */
+ function between(min: number, max: number): (value: any) => boolean;
+ /**
+ * Accepts valid email addresses. Keep in mind you still have to carefully verify it on your server, as it is impossible to tell if the address is real without sending verification email.
+ */
+ function email(value: any): boolean;
+ /**
+ * Requires the input to have a maximum specified length, inclusive. Works with arrays.
+ */
+ function maxLength(max: number): (value: any) => boolean;
+ /**
+ * Requires the input to have a minimum specified length, inclusive. Works with arrays.
+ */
+ function minLength(min: number): (value: any) => boolean;
+ /**
+ * Requires non-empty data. Checks for empty arrays and strings containing only whitespaces.
+ */
+ function required(value: any): boolean;
+ /**
+ * Checks for equality with a given property. Locator might be either a sibling property name or a function, that will get your component as this and nested model which sibling properties under second parameter.
+ */
+ function sameAs(locator: string): (value: any, vm?: any) => boolean;
+ /**
+ * Passes when at least one of provided validators passes.
+ */
+ function or(...validators: ValidationPredicate[]): () => boolean;
+ /**
+ * Passes when all of provided validators passes.
+ */
+ function and(...validators: ValidationPredicate[]): () => boolean;
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/src/utils/filters.ts b/examples/typescript-vue/src/utils/filters.ts
new file mode 100644
index 0000000000..9e99499e73
--- /dev/null
+++ b/examples/typescript-vue/src/utils/filters.ts
@@ -0,0 +1,28 @@
+
+export const numberFilter = (value: number, format: number): number => {
+ return Number(value.toPrecision(format));
+}
+
+export const capitalize = (value: string): string => {
+ if (!value && typeof value !== 'string') {
+ return '';
+ };
+ let newValue = value.toString();
+ return newValue.charAt(0).toUpperCase() + newValue.slice(1);
+}
+
+export const uppercase = (value: string): string => {
+ if (!value && typeof value !== 'string') {
+ return '';
+ };
+ let newValue = value.toString();
+ return newValue.toUpperCase();
+}
+
+export const lowercase = (value: string): string => {
+ if (!value && typeof value !== 'string') {
+ return '';
+ };
+ let newValue = value.toString();
+ return newValue.toLowerCase();
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/src/utils/methods.ts b/examples/typescript-vue/src/utils/methods.ts
new file mode 100644
index 0000000000..44b2cf0768
--- /dev/null
+++ b/examples/typescript-vue/src/utils/methods.ts
@@ -0,0 +1,40 @@
+import $ from 'jquery';
+
+export const timeout = (duration: number): Promise<{}> => {
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {resolve()}, duration);
+ })
+};
+
+export const calculatePopupPosition = (origin: HTMLElement, target: HTMLElement) => {
+ let $origin = $(origin);
+ let $target = $(target);
+ let originWidth: number = $origin.outerWidth();
+ let originHeight: number = $origin.outerHeight();
+ let viewportOffset = origin.getBoundingClientRect();
+ let position = {
+ left: Math.round(viewportOffset.left),
+ top: Math.round(viewportOffset.top)
+ }
+ let popupWidth: number = $target.width();
+ let outputLeft: number | string = position.left + originWidth / 2 - popupWidth / 2;
+ let outputTop: number | string = position.top + originHeight + 15 + "px";
+ let outputBottom: number | string = 'auto';
+ let windowWidth: number = $(window).width();
+
+ if ((outputLeft + popupWidth) > (windowWidth - 15)) {
+ outputLeft = windowWidth - popupWidth - 15 + "px";
+ } else if ((outputLeft < 15) ) {
+ outputLeft = 15 + "px";
+ }
+ if ((outputTop + 300) > $(window).height()){
+ outputTop = 'auto';
+ outputBottom = $(window).height() - position.top + 15 + "px";
+ }
+
+ return {
+ left: outputLeft,
+ top: outputTop ,
+ bottom: outputBottom
+ }
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/src/utils/validators.ts b/examples/typescript-vue/src/utils/validators.ts
new file mode 100644
index 0000000000..0199788937
--- /dev/null
+++ b/examples/typescript-vue/src/utils/validators.ts
@@ -0,0 +1,9 @@
+export namespace Validators {
+ const Regs = {
+ link: /(https?|ftp):\/\/(-\.)?([^\s/?\.#-]+\.?)+(\/[^\s]*)?$@iS/
+ }
+
+ export const LinkValidator = (value, component) => {
+ return Regs.link.test(value);
+ }
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/tsconfig.json b/examples/typescript-vue/tsconfig.json
new file mode 100644
index 0000000000..a0d92ecb27
--- /dev/null
+++ b/examples/typescript-vue/tsconfig.json
@@ -0,0 +1,41 @@
+{
+ "compilerOptions": {
+ "module": "es6",
+ "target": "es5",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "removeComments": true,
+ "noImplicitAny": false,
+ "pretty": true,
+ "lib": [
+ "dom",
+ "es5",
+ "es2015",
+ "es2015.promise"
+ ],
+ "baseUrl": "./src",
+ "paths": {
+ "@src/*": ["./*"],
+ "@components": ["./components/index.ts"],
+ "@images/*": ["./assets/images/*"],
+ "@icons/*": ["./assets/icons/*"],
+ "@views": ["./components/views/index.ts"],
+ "@validators": ["./utils/validators.ts"],
+ "@methods": ["./utils/methods.ts"],
+ "@filters": ["./utils/filters.ts"],
+ "@types": ["./typings/index.ts"],
+ "@store": ["./store/index.ts"]
+ },
+ "sourceMap": true,
+ "allowJs": true,
+ "skipLibCheck": true
+ },
+ "exclude": [
+ "typings/browser.d.ts",
+ "typings/browser",
+ "node_modules"
+ ],
+ "compileOnSave": true
+}
\ No newline at end of file
diff --git a/examples/typescript-vue/webpack.config.js b/examples/typescript-vue/webpack.config.js
new file mode 100644
index 0000000000..4e1a594ad0
--- /dev/null
+++ b/examples/typescript-vue/webpack.config.js
@@ -0,0 +1 @@
+module.exports = require("./config/webpack.config.dev");
\ No newline at end of file