{"version":3,"sources":["webpack:///app.bundle.js","webpack:///./src/app/main.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/todos/todos.component.ts","webpack:///./src/app/component-utils.ts","webpack:///./src/app/todos/todos.data-flow.ts","webpack:///./src/app/todos/todos.view-model.ts","webpack:///./src/app/todo-item/todo-item.component.ts","webpack:///./src/app/todo-item/todo-item.data-flow.ts","webpack:///./src/app/todo-item/todo-item.html","webpack:///./src/app/todos-storage.service.ts","webpack:///./src/app/todos/todos.html","webpack:///./~/todomvc-app-css/index.css?6159","webpack:///./~/todomvc-app-css/index.css","webpack:///./~/css-loader/lib/css-base.js","webpack:///./~/style-loader/addStyles.js"],"names":["webpackJsonp",0,"module","exports","__webpack_require__",1,"browser_1","app_component_1","router_1","core_1","router_2","todos_storage_service_1","bootstrap","AppComponent","ROUTER_PROVIDERS","provide","LocationStrategy","useClass","HashLocationStrategy","TodosStorageService",220,"__decorate","this","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","k","v","metadata","todos_component_1",245,"Rx_1","component_utils_1","todos_data_flow_1","todo_item_component_1","TodosComponent","TodosComponent.constructor","TodosComponent.add2","RouteParams",488,"makeObservableFunction","functionName","len","observer","next","args","Array","observeCurrentValueFor","changes$","propertyName","setFocus","elementRef",489,"todosReducers","intent","todosDataFlow","sources","cuid","todos_view_model_1",491,"createViewModel","todosStore","filter","includeTodoBasedOnFilter","todo",492,"todo_item_data_flow_1","TodoItemComponent","TodoItemComponent.constructor","TodoItemComponent.ngOnChanges","Observable",493,"todoItemDataFlow","todoProperty$",494,495,"TodosStorageService.constructor","TodosStorageService.save","TodosStorageService.load",496,497,"content","id","locals",498,"push",499,"list","toString","result","item","join","modules","mediaQuery","alreadyImportedModules",500,"addStylesToDom","styles","options","domStyle","stylesInDom","refs","j","parts","addStyle","listToStyles","newStyles","css","media","sourceMap","part","insertStyleElement","styleElement","head","getHeadElement","lastStyleElementInsertedAtTop","styleElementsInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","Error","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","document","createElement","type","createLinkElement","linkElement","rel","obj","update","remove","singleton","styleIndex","singletonCounter","singletonElement","applyToSingletonTag","bind","URL","createObjectURL","revokeObjectURL","Blob","btoa","updateLink","href","applyToTag","newObj","index","styleSheet","cssText","replaceText","cssNode","createTextNode","childNodes","setAttribute","unescape","encodeURIComponent","JSON","stringify","blob","oldSrc","memoize","fn","memo","apply","isOldIE","test","window","navigator","userAgent","toLowerCase","getElementsByTagName","newList","mayRemove","textStore","replacement","Boolean"],"mappings":"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","file":"app.bundle.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n\n/***/ 1:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar browser_1 = __webpack_require__(2);\r\n\tvar app_component_1 = __webpack_require__(220);\r\n\tvar router_1 = __webpack_require__(221);\r\n\tvar core_1 = __webpack_require__(23);\r\n\tvar router_2 = __webpack_require__(221);\r\n\tvar todos_storage_service_1 = __webpack_require__(495);\r\n\tbrowser_1.bootstrap(app_component_1.AppComponent, [\r\n\t    router_1.ROUTER_PROVIDERS,\r\n\t    core_1.provide(router_2.LocationStrategy, { useClass: router_2.HashLocationStrategy }),\r\n\t    todos_storage_service_1.TodosStorageService\r\n\t]);\r\n\n\n/***/ },\n\n/***/ 220:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(23);\r\n\tvar router_1 = __webpack_require__(221);\r\n\tvar todos_component_1 = __webpack_require__(245);\r\n\t__webpack_require__(497);\r\n\tvar AppComponent = (function () {\r\n\t    function AppComponent() {\r\n\t    }\r\n\t    AppComponent = __decorate([\r\n\t        core_1.Component({\r\n\t            selector: 'todo-app',\r\n\t            directives: [router_1.ROUTER_DIRECTIVES],\r\n\t            template: \"<router-outlet></router-outlet>\"\r\n\t        }),\r\n\t        router_1.RouteConfig([\r\n\t            { path: '/', name: 'Todos', component: todos_component_1.TodosComponent, useAsDefault: true },\r\n\t            { path: '/:filter', name: 'TodosFiltered', component: todos_component_1.TodosComponent }\r\n\t        ]), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], AppComponent);\r\n\t    return AppComponent;\r\n\t})();\r\n\texports.AppComponent = AppComponent;\r\n\n\n/***/ },\n\n/***/ 245:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(23);\r\n\tvar router_1 = __webpack_require__(221);\r\n\tvar Rx_1 = __webpack_require__(246);\r\n\tvar component_utils_1 = __webpack_require__(488);\r\n\tvar todos_data_flow_1 = __webpack_require__(489);\r\n\tvar todo_item_component_1 = __webpack_require__(492);\r\n\tvar todos_storage_service_1 = __webpack_require__(495);\r\n\tvar TodosComponent = (function () {\r\n\t    function TodosComponent(routeParams, todosStorageService) {\r\n\t        var _this = this;\r\n\t        this.routeParams = routeParams;\r\n\t        this.todosStorageService = todosStorageService;\r\n\t        // setup up intent\r\n\t        var intent = {\r\n\t            addTodo$: component_utils_1.makeObservableFunction(this, 'add').map(function (event) { return ({ title: event.target.value }); }),\r\n\t            deleteTodo$: component_utils_1.makeObservableFunction(this, 'delete'),\r\n\t            editTodo$: component_utils_1.makeObservableFunction(this, 'edit'),\r\n\t            toggleTodo$: component_utils_1.makeObservableFunction(this, 'toggle'),\r\n\t            removeCompleted$: component_utils_1.makeObservableFunction(this, 'removeCompleted'),\r\n\t            toggleAll$: component_utils_1.makeObservableFunction(this, 'toggleAll')\r\n\t        };\r\n\t        // set up sources\r\n\t        var sources = {\r\n\t            routeParams$: Rx_1.Observable.of(routeParams.get('filter')),\r\n\t            initialState$: Rx_1.Observable.of(todosStorageService.load())\r\n\t        };\r\n\t        // setup the core data flow\r\n\t        var _a = todos_data_flow_1.todosDataFlow(sources, intent), todosStore$ = _a.todosStore$, viewModel$ = _a.viewModel$;\r\n\t        // subscribe to sinks\r\n\t        viewModel$.subscribe(function (viewModel) { return _this.viewModel = viewModel; });\r\n\t        todosStore$.subscribe(function (todosStore) { return todosStorageService.save(todosStore); });\r\n\t    }\r\n\t    TodosComponent.prototype.add2 = function (event2) {\r\n\t        console.log(event2);\r\n\t    };\r\n\t    __decorate([\r\n\t        core_1.ViewChild('newTodo'), \r\n\t        __metadata('design:type', Object)\r\n\t    ], TodosComponent.prototype, \"inputNewTodoElementRef\", void 0);\r\n\t    TodosComponent = __decorate([\r\n\t        core_1.Component({\r\n\t            selector: 'todos',\r\n\t            changeDetection: core_1.ChangeDetectionStrategy.OnPush,\r\n\t            directives: [todo_item_component_1.TodoItemComponent, router_1.RouterLink],\r\n\t            template: __webpack_require__(496)\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [router_1.RouteParams, todos_storage_service_1.TodosStorageService])\r\n\t    ], TodosComponent);\r\n\t    return TodosComponent;\r\n\t})();\r\n\texports.TodosComponent = TodosComponent;\r\n\n\n/***/ },\n\n/***/ 488:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Rx_1 = __webpack_require__(246);\r\n\tfunction makeObservableFunction(target, functionName) {\r\n\t    var observer;\r\n\t    var observable = Rx_1.Observable.create(function (obs) {\r\n\t        observer = obs;\r\n\t    });\r\n\t    target[functionName] = function () {\r\n\t        var len = arguments.length;\r\n\t        if (len === 1) {\r\n\t            observer.next(arguments[0]);\r\n\t        }\r\n\t        else {\r\n\t            var args = new Array(len);\r\n\t            for (var i = 0; i < len; i++) {\r\n\t                args[0] = arguments[i];\r\n\t            }\r\n\t            observer.next(args);\r\n\t        }\r\n\t    };\r\n\t    return observable;\r\n\t}\r\n\texports.makeObservableFunction = makeObservableFunction;\r\n\tfunction observeCurrentValueFor(changes$, propertyName) {\r\n\t    return changes$\r\n\t        .filter(function (changes) { return !!changes[propertyName]; })\r\n\t        .map(function (changes) { return changes[propertyName].currentValue; });\r\n\t}\r\n\texports.observeCurrentValueFor = observeCurrentValueFor;\r\n\tfunction setFocus(elementRef) {\r\n\t    setTimeout(function () {\r\n\t        if (elementRef && elementRef.nativeElement) {\r\n\t            elementRef.nativeElement.focus();\r\n\t        }\r\n\t    });\r\n\t}\r\n\texports.setFocus = setFocus;\r\n\n\n/***/ },\n\n/***/ 489:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Rx_1 = __webpack_require__(246);\r\n\tvar cuid = __webpack_require__(490);\r\n\tvar todos_view_model_1 = __webpack_require__(491);\r\n\tfunction todosReducers(intent) {\r\n\t    var addTodoReducer$ = intent.addTodo$\r\n\t        .map(function (_a) {\r\n\t        var title = _a.title;\r\n\t        return title.trim();\r\n\t    })\r\n\t        .filter(function (title) { return !!title; })\r\n\t        .map(function (title) { return function (todosStore) { return ({\r\n\t        todos: todosStore.todos.concat([\r\n\t            { id: cuid(), title: title, completed: false }\r\n\t        ])\r\n\t    }); }; });\r\n\t    var deleteTodoReducer$ = intent.deleteTodo$\r\n\t        .map(function (_a) {\r\n\t        var id = _a.id;\r\n\t        return function (todosStore) { return ({\r\n\t            todos: todosStore.todos.filter(function (todo) { return todo.id !== id; })\r\n\t        }); };\r\n\t    });\r\n\t    var editTodoReducer$ = intent.editTodo$\r\n\t        .map(function (_a) {\r\n\t        var id = _a.id, title = _a.title;\r\n\t        return function (todosStore) { return ({\r\n\t            todos: todosStore.todos.map(function (todo) { return todo.id !== id ? todo : Object.assign({}, todo, { title: title }); })\r\n\t        }); };\r\n\t    });\r\n\t    var toggleTodoReducer$ = intent.toggleTodo$\r\n\t        .map(function (_a) {\r\n\t        var id = _a.id;\r\n\t        return function (todosStore) { return ({\r\n\t            todos: todosStore.todos.map(function (todo) { return todo.id !== id ? todo : Object.assign({}, todo, { completed: !todo.completed }); })\r\n\t        }); };\r\n\t    });\r\n\t    var removeCompletedReducer$ = intent.removeCompleted$\r\n\t        .map(function () { return function (todosStore) { return ({\r\n\t        todos: todosStore.todos.filter(function (todo) { return !todo.completed; })\r\n\t    }); }; });\r\n\t    var toggleAllReducer$ = intent.toggleAll$\r\n\t        .map(function () { return function (todosStore) {\r\n\t        var allCompleted = todosStore.todos.reduce(function (x, y) { return x && y.completed; }, true);\r\n\t        return {\r\n\t            todos: todosStore.todos.map(function (todo) { return Object.assign({}, todo, { completed: !allCompleted }); })\r\n\t        };\r\n\t    }; });\r\n\t    return Rx_1.Observable.merge(addTodoReducer$, deleteTodoReducer$, editTodoReducer$, toggleTodoReducer$, removeCompletedReducer$, toggleAllReducer$);\r\n\t}\r\n\tfunction todosDataFlow(sources, intent) {\r\n\t    var reducers$ = todosReducers(intent);\r\n\t    var todosStore$ = sources.initialState$\r\n\t        .concat(reducers$)\r\n\t        .scan(function (todosStore, reducer) { return ({\r\n\t        todos: reducer(todosStore).todos\r\n\t    }); }).publishReplay(1);\r\n\t    todosStore$.connect();\r\n\t    var viewModel$ = todosStore$\r\n\t        .withLatestFrom(sources.routeParams$, function (todosStore, routeParams) { return ({ todosStore: todosStore, routeParams: routeParams }); })\r\n\t        .map(function (x) { return todos_view_model_1.createViewModel(x.todosStore, x.routeParams); });\r\n\t    return {\r\n\t        todosStore$: todosStore$,\r\n\t        viewModel$: viewModel$\r\n\t    };\r\n\t}\r\n\texports.todosDataFlow = todosDataFlow;\r\n\n\n/***/ },\n\n/***/ 491:\n/***/ function(module, exports) {\n\n\tfunction createViewModel(todosStore, filter) {\r\n\t    var numTodos = todosStore.todos.length;\r\n\t    var numTodosCompleted = todosStore.todos.filter(function (x) { return x.completed; }).length;\r\n\t    return {\r\n\t        numTodos: numTodos,\r\n\t        numTodosCompleted: numTodosCompleted,\r\n\t        allTodosCompleted: numTodosCompleted > 0 && numTodosCompleted === numTodos,\r\n\t        todos: todosStore.todos.filter(function (todo) { return includeTodoBasedOnFilter(todo, filter); }),\r\n\t        numTodosActive: numTodos - numTodosCompleted,\r\n\t        newTodoTitle: ''\r\n\t    };\r\n\t}\r\n\texports.createViewModel = createViewModel;\r\n\tfunction includeTodoBasedOnFilter(todo, filter) {\r\n\t    switch (filter) {\r\n\t        case 'active':\r\n\t            return !todo.completed;\r\n\t        case 'completed':\r\n\t            return todo.completed;\r\n\t        default:\r\n\t            return true;\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n\n/***/ 492:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(23);\r\n\tvar Rx_1 = __webpack_require__(246);\r\n\tvar component_utils_1 = __webpack_require__(488);\r\n\tvar todo_item_data_flow_1 = __webpack_require__(493);\r\n\tvar TodoItemComponent = (function () {\r\n\t    function TodoItemComponent() {\r\n\t        var _this = this;\r\n\t        this.changes$ = Rx_1.Observable.create(function (observer) { return _this.changesObserver = observer; });\r\n\t        // setup up intent\r\n\t        var intent = {\r\n\t            startEdit$: component_utils_1.makeObservableFunction(this, 'todoDblClick').share(),\r\n\t            stopEdit$: Rx_1.Observable.merge(component_utils_1.makeObservableFunction(this, 'editOnBlur').map(function (x) { return x.target.value; }).share(), component_utils_1.makeObservableFunction(this, 'editOnKeyEnter').map(function (x) { return x.target.value; }).share()),\r\n\t            cancelEdit$: component_utils_1.makeObservableFunction(this, 'editOnKeyEsc').share(),\r\n\t            delete$: component_utils_1.makeObservableFunction(this, 'todoDeleteClick').share(),\r\n\t            toggleTodo$: component_utils_1.makeObservableFunction(this, 'toggleCompletion').share()\r\n\t        };\r\n\t        // set up sources\r\n\t        var todoInput$ = component_utils_1.observeCurrentValueFor(this.changes$, 'todo').publishReplay(1);\r\n\t        todoInput$.connect();\r\n\t        // setup the core data flow\r\n\t        var responses = todo_item_data_flow_1.todoItemDataFlow(intent, todoInput$);\r\n\t        // forward responses to parent component\r\n\t        this.delete$ = responses.delete$;\r\n\t        this.edit$ = responses.edit$;\r\n\t        this.toggle$ = responses.toggle$;\r\n\t        // subscribe to sink\r\n\t        responses.viewModel$\r\n\t            .subscribe(function (viewModel) {\r\n\t            _this.viewModel = viewModel;\r\n\t            component_utils_1.setFocus(_this.inputEditTitleElementRef);\r\n\t        });\r\n\t    }\r\n\t    TodoItemComponent.prototype.ngOnChanges = function (changes) {\r\n\t        this.changesObserver.next(changes);\r\n\t    };\r\n\t    __decorate([\r\n\t        core_1.Input('todo'), \r\n\t        __metadata('design:type', Object)\r\n\t    ], TodoItemComponent.prototype, \"todo\", void 0);\r\n\t    __decorate([\r\n\t        core_1.Output('delete'), \r\n\t        __metadata('design:type', Rx_1.Observable)\r\n\t    ], TodoItemComponent.prototype, \"delete$\", void 0);\r\n\t    __decorate([\r\n\t        core_1.Output('edit'), \r\n\t        __metadata('design:type', Rx_1.Observable)\r\n\t    ], TodoItemComponent.prototype, \"edit$\", void 0);\r\n\t    __decorate([\r\n\t        core_1.Output('toggle'), \r\n\t        __metadata('design:type', Rx_1.Observable)\r\n\t    ], TodoItemComponent.prototype, \"toggle$\", void 0);\r\n\t    __decorate([\r\n\t        core_1.ViewChild('inputEditTitle'), \r\n\t        __metadata('design:type', Object)\r\n\t    ], TodoItemComponent.prototype, \"inputEditTitleElementRef\", void 0);\r\n\t    TodoItemComponent = __decorate([\r\n\t        core_1.Component({\r\n\t            selector: 'todo-item',\r\n\t            changeDetection: core_1.ChangeDetectionStrategy.OnPush,\r\n\t            template: __webpack_require__(494)\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], TodoItemComponent);\r\n\t    return TodoItemComponent;\r\n\t})();\r\n\texports.TodoItemComponent = TodoItemComponent;\r\n\n\n/***/ },\n\n/***/ 493:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Rx_1 = __webpack_require__(246);\r\n\tfunction todoItemDataFlow(intent, todoProperty$) {\r\n\t    var editing$ = Rx_1.Observable.merge(intent.startEdit$.map(function () { return true; }), intent.stopEdit$.map(function () { return false; }), intent.cancelEdit$.map(function () { return false; })).startWith(false);\r\n\t    var viewModel$ = todoProperty$\r\n\t        .combineLatest(editing$, function (todoProperty, editing) { return Object.assign({}, todoProperty, { editing: editing }); });\r\n\t    var delete$ = intent.delete$\r\n\t        .withLatestFrom(todoProperty$, function (_, todo) { return todo; })\r\n\t        .map(function (x) { return ({ id: x.id }); });\r\n\t    var edit$ = intent.stopEdit$\r\n\t        .withLatestFrom(todoProperty$, function (title, todo) { return ({ title: title, todo: todo }); })\r\n\t        .filter(function (x) { return x.title !== x.todo.title; })\r\n\t        .map(function (x) { return ({ id: x.todo.id, title: x.title }); });\r\n\t    var toggle$ = intent.toggleTodo$\r\n\t        .withLatestFrom(todoProperty$, function (_, todo) { return todo; })\r\n\t        .map(function (todo) { return ({ id: todo.id }); });\r\n\t    return {\r\n\t        viewModel$: viewModel$,\r\n\t        delete$: delete$,\r\n\t        edit$: edit$,\r\n\t        toggle$: toggle$\r\n\t    };\r\n\t}\r\n\texports.todoItemDataFlow = todoItemDataFlow;\r\n\n\n/***/ },\n\n/***/ 494:\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<li [class.completed]=\\\"viewModel.completed\\\" [class.editing]=\\\"viewModel.editing\\\">\\r\\n    <div class=\\\"view\\\">\\r\\n        <input class=\\\"toggle\\\" type=\\\"checkbox\\\" (click)=\\\"toggleCompletion()\\\" [checked]=\\\"viewModel.completed\\\">\\r\\n        <label (dblclick)=\\\"todoDblClick()\\\">{{viewModel.title}}</label>\\r\\n        <button class=\\\"destroy\\\" (click)=\\\"todoDeleteClick()\\\"></button>\\r\\n    </div>\\r\\n    <input class=\\\"edit\\\" [value]=\\\"viewModel.title\\\" #inputEditTitle\\r\\n        (blur)=\\\"editOnBlur($event)\\\"\\r\\n        (keyup.enter)=\\\"editOnKeyEnter($event)\\\"\\r\\n        (keyup.esc)=\\\"editOnKeyEsc()\\\" />\\r\\n</li>\\r\\n\"\n\n/***/ },\n\n/***/ 495:\n/***/ function(module, exports) {\n\n\tvar TodosStorageService = (function () {\r\n\t    function TodosStorageService() {\r\n\t        this.localStorageKey = 'todomvc-ng2-rx';\r\n\t    }\r\n\t    TodosStorageService.prototype.save = function (todosStore) {\r\n\t        localStorage.setItem(this.localStorageKey, JSON.stringify(todosStore));\r\n\t    };\r\n\t    TodosStorageService.prototype.load = function () {\r\n\t        return JSON.parse(localStorage.getItem(this.localStorageKey) || '{ \"todos\": [] }');\r\n\t    };\r\n\t    return TodosStorageService;\r\n\t})();\r\n\texports.TodosStorageService = TodosStorageService;\r\n\n\n/***/ },\n\n/***/ 496:\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<section *ngIf=\\\"viewModel\\\" class=\\\"todoapp\\\">\\r\\n    <header class=\\\"header\\\">\\r\\n        <h1> todos </h1>\\r\\n        <input class=\\\"new-todo\\\" placeholder=\\\"What needs to be done?\\\" autofocus=\\\"\\\" [(ngModel)]=\\\"viewModel.newTodoTitle\\\" (keyup.enter)=\\\"add($event)\\\" />\\r\\n    </header>\\r\\n    <section class=\\\"main\\\">\\r\\n        <input type=\\\"checkbox\\\" class=\\\"toggle-all\\\" [checked]=\\\"viewModel.allTodosCompleted\\\" (click)=\\\"toggleAll()\\\" />\\r\\n        <ul class=\\\"todo-list\\\">\\r\\n            <todo-item *ngFor=\\\"#todo of viewModel.todos\\\" [todo]=\\\"todo\\\" (delete)=\\\"delete($event)\\\" (edit)=\\\"edit($event)\\\" (toggle)=\\\"toggle($event)\\\"></todo-item>\\r\\n        </ul>\\r\\n    </section>\\r\\n    <footer class=\\\"footer\\\" *ngIf=\\\"viewModel.numTodos > 0\\\">\\r\\n        <span class=\\\"todo-count\\\"><strong>{{ viewModel.numTodosActive }}</strong> item{{ viewModel.numTodosActive == 1 ? '' : 's' }} left</span>\\r\\n        <ul class=\\\"filters\\\">\\r\\n            <li> <a [routerLink]=\\\"['Todos']\\\"> All </a> </li>\\r\\n            <li> <a [routerLink]=\\\"['TodosFiltered', { filter: 'active' }]\\\"> Active </a> </li>\\r\\n            <li> <a [routerLink]=\\\"['TodosFiltered', { filter: 'completed' }]\\\"> Completed </a> </li>\\r\\n        </ul>\\r\\n        <button class=\\\"clear-completed\\\" *ngIf=\\\"viewModel.numTodosCompleted > 0\\\" (click)=\\\"removeCompleted()\\\">Clear completed ({{ viewModel.numTodosCompleted }})</button>\\r\\n    </footer>\\r\\n</section>\\r\\n\"\n\n/***/ },\n\n/***/ 497:\n/***/ function(module, exports, __webpack_require__) {\n\n\t// style-loader: Adds some css to the DOM by adding a <style> tag\n\t\n\t// load the styles\n\tvar content = __webpack_require__(498);\n\tif(typeof content === 'string') content = [[module.id, content, '']];\n\t// add the styles to the DOM\n\tvar update = __webpack_require__(500)(content, {});\n\tif(content.locals) module.exports = content.locals;\n\t// Hot Module Replacement\n\tif(false) {\n\t\t// When the styles change, update the <style> tags\n\t\tif(!content.locals) {\n\t\t\tmodule.hot.accept(\"!!./../css-loader/index.js!./index.css\", function() {\n\t\t\t\tvar newContent = require(\"!!./../css-loader/index.js!./index.css\");\n\t\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\t\tupdate(newContent);\n\t\t\t});\n\t\t}\n\t\t// When the module is disposed, remove the <style> tags\n\t\tmodule.hot.dispose(function() { update(); });\n\t}\n\n/***/ },\n\n/***/ 498:\n/***/ function(module, exports, __webpack_require__) {\n\n\texports = module.exports = __webpack_require__(499)();\n\t// imports\n\t\n\t\n\t// module\n\texports.push([module.id, \"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;appearance:none}body,button{-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;font-weight:300}button,input[type=checkbox]{outline:none}.hidden{display:none}.todoapp{background:#fff;margin:130px 0 40px;position:relative;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;outline:none;color:inherit;padding:6px;border:1px solid #999;box-shadow:inset 0 -1px 5px 0 rgba(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,.003);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:13px 17px 12px;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;appearance:none}.todo-list li .toggle:after{content:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"-10 -18 100 135\\\"><circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"50\\\" fill=\\\"none\\\" stroke=\\\"#ededed\\\" stroke-width=\\\"3\\\"/></svg>')}.todo-list li .toggle:checked:after{content:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"-10 -18 100 135\\\"><circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"50\\\" fill=\\\"none\\\" stroke=\\\"#bddad5\\\" stroke-width=\\\"3\\\"/><path fill=\\\"#5dc2af\\\" d=\\\"M72 25L42 71 27 56l-4 4 20 20 34-52z\\\"/></svg>')}.todo-list li label{white-space:pre-line;word-break:break-all;padding:15px 60px 15px 15px;margin-left:45px;display:block;line-height:1.2;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;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;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.selected,.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;appearance:none}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}\", \"\"]);\n\t\n\t// exports\n\n\n/***/ },\n\n/***/ 499:\n/***/ function(module, exports) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\t// css base code, injected by the css-loader\r\n\tmodule.exports = function() {\r\n\t\tvar list = [];\r\n\t\r\n\t\t// return the list of modules as css string\r\n\t\tlist.toString = function toString() {\r\n\t\t\tvar result = [];\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar item = this[i];\r\n\t\t\t\tif(item[2]) {\r\n\t\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.push(item[1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result.join(\"\");\r\n\t\t};\r\n\t\r\n\t\t// import a list of modules into the list\r\n\t\tlist.i = function(modules, mediaQuery) {\r\n\t\t\tif(typeof modules === \"string\")\r\n\t\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\t\tvar alreadyImportedModules = {};\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar id = this[i][0];\r\n\t\t\t\tif(typeof id === \"number\")\r\n\t\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t\t}\r\n\t\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\t\tvar item = modules[i];\r\n\t\t\t\t// skip already imported module\r\n\t\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn list;\r\n\t};\r\n\n\n/***/ },\n\n/***/ 500:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\tvar stylesInDom = {},\r\n\t\tmemoize = function(fn) {\r\n\t\t\tvar memo;\r\n\t\t\treturn function () {\r\n\t\t\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\r\n\t\t\t\treturn memo;\r\n\t\t\t};\r\n\t\t},\r\n\t\tisOldIE = memoize(function() {\r\n\t\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\r\n\t\t}),\r\n\t\tgetHeadElement = memoize(function () {\r\n\t\t\treturn document.head || document.getElementsByTagName(\"head\")[0];\r\n\t\t}),\r\n\t\tsingletonElement = null,\r\n\t\tsingletonCounter = 0,\r\n\t\tstyleElementsInsertedAtTop = [];\r\n\t\r\n\tmodule.exports = function(list, options) {\r\n\t\tif(false) {\r\n\t\t\tif(typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\r\n\t\t}\r\n\t\r\n\t\toptions = options || {};\r\n\t\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\r\n\t\t// tags it will allow on a page\r\n\t\tif (typeof options.singleton === \"undefined\") options.singleton = isOldIE();\r\n\t\r\n\t\t// By default, add <style> tags to the bottom of <head>.\r\n\t\tif (typeof options.insertAt === \"undefined\") options.insertAt = \"bottom\";\r\n\t\r\n\t\tvar styles = listToStyles(list);\r\n\t\taddStylesToDom(styles, options);\r\n\t\r\n\t\treturn function update(newList) {\r\n\t\t\tvar mayRemove = [];\r\n\t\t\tfor(var i = 0; i < styles.length; i++) {\r\n\t\t\t\tvar item = styles[i];\r\n\t\t\t\tvar domStyle = stylesInDom[item.id];\r\n\t\t\t\tdomStyle.refs--;\r\n\t\t\t\tmayRemove.push(domStyle);\r\n\t\t\t}\r\n\t\t\tif(newList) {\r\n\t\t\t\tvar newStyles = listToStyles(newList);\r\n\t\t\t\taddStylesToDom(newStyles, options);\r\n\t\t\t}\r\n\t\t\tfor(var i = 0; i < mayRemove.length; i++) {\r\n\t\t\t\tvar domStyle = mayRemove[i];\r\n\t\t\t\tif(domStyle.refs === 0) {\r\n\t\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\r\n\t\t\t\t\t\tdomStyle.parts[j]();\r\n\t\t\t\t\tdelete stylesInDom[domStyle.id];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\tfunction addStylesToDom(styles, options) {\r\n\t\tfor(var i = 0; i < styles.length; i++) {\r\n\t\t\tvar item = styles[i];\r\n\t\t\tvar domStyle = stylesInDom[item.id];\r\n\t\t\tif(domStyle) {\r\n\t\t\t\tdomStyle.refs++;\r\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\r\n\t\t\t\t\tdomStyle.parts[j](item.parts[j]);\r\n\t\t\t\t}\r\n\t\t\t\tfor(; j < item.parts.length; j++) {\r\n\t\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar parts = [];\r\n\t\t\t\tfor(var j = 0; j < item.parts.length; j++) {\r\n\t\t\t\t\tparts.push(addStyle(item.parts[j], options));\r\n\t\t\t\t}\r\n\t\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction listToStyles(list) {\r\n\t\tvar styles = [];\r\n\t\tvar newStyles = {};\r\n\t\tfor(var i = 0; i < list.length; i++) {\r\n\t\t\tvar item = list[i];\r\n\t\t\tvar id = item[0];\r\n\t\t\tvar css = item[1];\r\n\t\t\tvar media = item[2];\r\n\t\t\tvar sourceMap = item[3];\r\n\t\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\r\n\t\t\tif(!newStyles[id])\r\n\t\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\r\n\t\t\telse\r\n\t\t\t\tnewStyles[id].parts.push(part);\r\n\t\t}\r\n\t\treturn styles;\r\n\t}\r\n\t\r\n\tfunction insertStyleElement(options, styleElement) {\r\n\t\tvar head = getHeadElement();\r\n\t\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\r\n\t\tif (options.insertAt === \"top\") {\r\n\t\t\tif(!lastStyleElementInsertedAtTop) {\r\n\t\t\t\thead.insertBefore(styleElement, head.firstChild);\r\n\t\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\r\n\t\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\r\n\t\t\t} else {\r\n\t\t\t\thead.appendChild(styleElement);\r\n\t\t\t}\r\n\t\t\tstyleElementsInsertedAtTop.push(styleElement);\r\n\t\t} else if (options.insertAt === \"bottom\") {\r\n\t\t\thead.appendChild(styleElement);\r\n\t\t} else {\r\n\t\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction removeStyleElement(styleElement) {\r\n\t\tstyleElement.parentNode.removeChild(styleElement);\r\n\t\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\r\n\t\tif(idx >= 0) {\r\n\t\t\tstyleElementsInsertedAtTop.splice(idx, 1);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction createStyleElement(options) {\r\n\t\tvar styleElement = document.createElement(\"style\");\r\n\t\tstyleElement.type = \"text/css\";\r\n\t\tinsertStyleElement(options, styleElement);\r\n\t\treturn styleElement;\r\n\t}\r\n\t\r\n\tfunction createLinkElement(options) {\r\n\t\tvar linkElement = document.createElement(\"link\");\r\n\t\tlinkElement.rel = \"stylesheet\";\r\n\t\tinsertStyleElement(options, linkElement);\r\n\t\treturn linkElement;\r\n\t}\r\n\t\r\n\tfunction addStyle(obj, options) {\r\n\t\tvar styleElement, update, remove;\r\n\t\r\n\t\tif (options.singleton) {\r\n\t\t\tvar styleIndex = singletonCounter++;\r\n\t\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\r\n\t\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\r\n\t\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\r\n\t\t} else if(obj.sourceMap &&\r\n\t\t\ttypeof URL === \"function\" &&\r\n\t\t\ttypeof URL.createObjectURL === \"function\" &&\r\n\t\t\ttypeof URL.revokeObjectURL === \"function\" &&\r\n\t\t\ttypeof Blob === \"function\" &&\r\n\t\t\ttypeof btoa === \"function\") {\r\n\t\t\tstyleElement = createLinkElement(options);\r\n\t\t\tupdate = updateLink.bind(null, styleElement);\r\n\t\t\tremove = function() {\r\n\t\t\t\tremoveStyleElement(styleElement);\r\n\t\t\t\tif(styleElement.href)\r\n\t\t\t\t\tURL.revokeObjectURL(styleElement.href);\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tstyleElement = createStyleElement(options);\r\n\t\t\tupdate = applyToTag.bind(null, styleElement);\r\n\t\t\tremove = function() {\r\n\t\t\t\tremoveStyleElement(styleElement);\r\n\t\t\t};\r\n\t\t}\r\n\t\r\n\t\tupdate(obj);\r\n\t\r\n\t\treturn function updateStyle(newObj) {\r\n\t\t\tif(newObj) {\r\n\t\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tupdate(obj = newObj);\r\n\t\t\t} else {\r\n\t\t\t\tremove();\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar replaceText = (function () {\r\n\t\tvar textStore = [];\r\n\t\r\n\t\treturn function (index, replacement) {\r\n\t\t\ttextStore[index] = replacement;\r\n\t\t\treturn textStore.filter(Boolean).join('\\n');\r\n\t\t};\r\n\t})();\r\n\t\r\n\tfunction applyToSingletonTag(styleElement, index, remove, obj) {\r\n\t\tvar css = remove ? \"\" : obj.css;\r\n\t\r\n\t\tif (styleElement.styleSheet) {\r\n\t\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\r\n\t\t} else {\r\n\t\t\tvar cssNode = document.createTextNode(css);\r\n\t\t\tvar childNodes = styleElement.childNodes;\r\n\t\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\r\n\t\t\tif (childNodes.length) {\r\n\t\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\r\n\t\t\t} else {\r\n\t\t\t\tstyleElement.appendChild(cssNode);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction applyToTag(styleElement, obj) {\r\n\t\tvar css = obj.css;\r\n\t\tvar media = obj.media;\r\n\t\tvar sourceMap = obj.sourceMap;\r\n\t\r\n\t\tif(media) {\r\n\t\t\tstyleElement.setAttribute(\"media\", media)\r\n\t\t}\r\n\t\r\n\t\tif(styleElement.styleSheet) {\r\n\t\t\tstyleElement.styleSheet.cssText = css;\r\n\t\t} else {\r\n\t\t\twhile(styleElement.firstChild) {\r\n\t\t\t\tstyleElement.removeChild(styleElement.firstChild);\r\n\t\t\t}\r\n\t\t\tstyleElement.appendChild(document.createTextNode(css));\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction updateLink(linkElement, obj) {\r\n\t\tvar css = obj.css;\r\n\t\tvar media = obj.media;\r\n\t\tvar sourceMap = obj.sourceMap;\r\n\t\r\n\t\tif(sourceMap) {\r\n\t\t\t// http://stackoverflow.com/a/26603875\r\n\t\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\r\n\t\t}\r\n\t\r\n\t\tvar blob = new Blob([css], { type: \"text/css\" });\r\n\t\r\n\t\tvar oldSrc = linkElement.href;\r\n\t\r\n\t\tlinkElement.href = URL.createObjectURL(blob);\r\n\t\r\n\t\tif(oldSrc)\r\n\t\t\tURL.revokeObjectURL(oldSrc);\r\n\t}\r\n\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** app.bundle.js\n **/","import { bootstrap } from 'angular2/platform/browser'\r\nimport { AppComponent } from './app.component'\r\nimport { ROUTER_PROVIDERS } from 'angular2/router';\r\n\r\nimport { provide } from 'angular2/core';\r\nimport { LocationStrategy, HashLocationStrategy } from 'angular2/router';\r\n\r\nimport { TodosStorageService } from './todos-storage.service'\r\n\r\nbootstrap(AppComponent, [\r\n    ROUTER_PROVIDERS,\r\n    provide(LocationStrategy, { useClass: HashLocationStrategy }),\r\n    TodosStorageService\r\n]);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/main.ts\n **/","import { Component } from 'angular2/core';\r\nimport { RouteConfig, ROUTER_DIRECTIVES } from 'angular2/router';\r\n\r\nimport { TodosComponent } from './todos/todos.component';\r\n\r\nimport '../../node_modules/todomvc-app-css/index.css';\r\n\r\n@Component({\r\n    selector: 'todo-app',\r\n    directives: [ROUTER_DIRECTIVES],\r\n    template: `<router-outlet></router-outlet>`\r\n})\r\n@RouteConfig([\r\n    { path: '/', name:'Todos', component: TodosComponent, useAsDefault: true },\r\n    { path: '/:filter', name:'TodosFiltered', component: TodosComponent }\r\n])\r\nexport class AppComponent {}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/app.component.ts\n **/","import { Input, Component, ViewChild, ChangeDetectionStrategy } from 'angular2/core';\r\nimport { RouteParams, RouterLink } from 'angular2/router';\r\nimport { Observable } from 'rxjs/Rx';\r\n\r\nimport { makeObservableFunction } from '../component-utils';\r\n\r\nimport { TodosIntent, todosDataFlow } from './todos.data-flow';\r\nimport { TodosViewModel } from './todos.view-model';\r\nimport { TodoItemComponent } from '../todo-item/todo-item.component';\r\nimport { TodosStore, Todo } from '../Todo';\r\nimport { TodosStorageService } from '../todos-storage.service'\r\n\r\n@Component({\r\n    selector: 'todos',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    directives: [TodoItemComponent, RouterLink],\r\n    template: require('./todos.html')\r\n})\r\nexport class TodosComponent {\r\n    @ViewChild('newTodo') inputNewTodoElementRef: any;\r\n\r\n    private viewModel: TodosViewModel;\r\n\r\n    constructor(private routeParams: RouteParams, private todosStorageService: TodosStorageService) {\r\n        // setup up intent\r\n        const intent: TodosIntent = {\r\n            addTodo$: makeObservableFunction<{ title: string }>(this, 'add').map(event => ({ title: event.target.value })),\r\n            deleteTodo$: makeObservableFunction<{ id: string }>(this, 'delete'),\r\n            editTodo$: makeObservableFunction<{ id: string, title: string }>(this, 'edit'),\r\n            toggleTodo$: makeObservableFunction<{ id: string }>(this, 'toggle'),\r\n            removeCompleted$: makeObservableFunction<{}>(this, 'removeCompleted'),\r\n            toggleAll$: makeObservableFunction<{}>(this, 'toggleAll')\r\n        };\r\n\r\n        // set up sources\r\n        var sources = {\r\n            routeParams$: Observable.of<string>(routeParams.get('filter')),\r\n            initialState$: Observable.of<TodosStore>(todosStorageService.load())\r\n        };\r\n\r\n        // setup the core data flow\r\n        const { todosStore$, viewModel$ } = todosDataFlow(sources, intent);\r\n\r\n        // subscribe to sinks\r\n        viewModel$.subscribe(viewModel => this.viewModel = viewModel);\r\n        todosStore$.subscribe(todosStore => todosStorageService.save(todosStore));\r\n    }\r\n\r\n    add2(event2) {\r\n        console.log(event2)\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todos/todos.component.ts\n **/","import { SimpleChange } from 'angular2/core';\r\nimport { Observable, Observer } from 'rxjs/Rx';\r\n\r\nexport function makeObservableFunction<T>(target: any, functionName: string) {\r\n    let observer: Observer<any>;\r\n    const observable = Observable.create(obs => {\r\n        observer = obs;\r\n    });\r\n    target[functionName] = function() {\r\n        const len = arguments.length;\r\n        if (len === 1) {\r\n            observer.next(arguments[0]);\r\n        } else {\r\n            const args = new Array(len);\r\n            for (let i = 0; i < len; i++) {\r\n                args[0] = arguments[i];\r\n            }\r\n            observer.next(args);\r\n        }\r\n    }\r\n    return observable;\r\n}\r\n\r\nexport function observeCurrentValueFor<T>(changes$: Observable<{ [key: string]: SimpleChange }>, propertyName: string) {\r\n    return changes$\r\n        .filter(changes => !!changes[propertyName])\r\n        .map<T>(changes => changes[propertyName].currentValue);\r\n}\r\n\r\nexport function setFocus(elementRef) {\r\n    setTimeout(() => {\r\n        if (elementRef && elementRef.nativeElement) {\r\n            elementRef.nativeElement.focus()\r\n        }\r\n    });\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/component-utils.ts\n **/","import { Observable, ConnectableObservable } from 'rxjs/Rx';\r\nimport cuid = require('cuid');\r\n\r\nimport { TodosViewModel, createViewModel } from './todos.view-model';\r\nimport { Todo, TodosStore } from '../Todo';\r\n\r\nexport interface TodosSources {\r\n    routeParams$: Observable<string>;\r\n    initialState$: Observable<TodosStore>;\r\n}\r\n\r\nexport interface TodosIntent {\r\n    addTodo$: Observable<{ title: string }>;\r\n    deleteTodo$: Observable<{ id: string }>;\r\n    editTodo$: Observable<{ id: string, title: string }>;\r\n    toggleTodo$: Observable<{ id: string }>;\r\n    removeCompleted$: Observable<{}>;\r\n    toggleAll$: Observable<{}>;\r\n}\r\n\r\nexport interface TodoViewModel extends Todo {\r\n    editing: boolean;\r\n}\r\n\r\nfunction todosReducers(intent: TodosIntent): Observable<(todosStore: TodosStore) => TodosStore> {\r\n    const addTodoReducer$ = intent.addTodo$\r\n        .map(({ title }) => title.trim())\r\n        .filter(title => !!title)\r\n        .map(title => (todosStore: TodosStore) => ({\r\n            todos: [\r\n                ...todosStore.todos,\r\n                { id: cuid(), title, completed: false }\r\n            ]\r\n        }));\r\n\r\n    const deleteTodoReducer$ = intent.deleteTodo$\r\n        .map(({ id }) => (todosStore: TodosStore) => ({\r\n            todos: todosStore.todos.filter(todo => todo.id !== id)\r\n        }));\r\n\r\n    const editTodoReducer$ = intent.editTodo$\r\n        .map(({ id, title }) => (todosStore: TodosStore) => ({\r\n            todos: todosStore.todos.map(todo => todo.id !== id ? todo : Object.assign({}, todo, { title }))\r\n        }));\r\n\r\n    const toggleTodoReducer$ = intent.toggleTodo$\r\n        .map(({ id }) => (todosStore: TodosStore) => ({\r\n            todos: todosStore.todos.map(todo => todo.id !== id ? todo : Object.assign({}, todo, { completed: !todo.completed }))\r\n        }));\r\n\r\n    const removeCompletedReducer$ = intent.removeCompleted$\r\n        .map(() => (todosStore: TodosStore) => ({\r\n            todos: todosStore.todos.filter(todo => !todo.completed)\r\n        }));\r\n\r\n    const toggleAllReducer$ = intent.toggleAll$\r\n        .map(() => (todosStore: TodosStore) => {\r\n            const allCompleted = todosStore.todos.reduce((x, y) => x && y.completed, true);\r\n            return {\r\n                todos: todosStore.todos.map(todo => Object.assign({}, todo, { completed: !allCompleted }))\r\n            };\r\n        });\r\n\r\n    return Observable.merge(addTodoReducer$, deleteTodoReducer$, editTodoReducer$, toggleTodoReducer$, removeCompletedReducer$, toggleAllReducer$);\r\n}\r\n\r\nexport function todosDataFlow(sources: TodosSources, intent: TodosIntent) {\r\n    const reducers$ = todosReducers(intent);\r\n\r\n    const todosStore$ =\r\n        sources.initialState$\r\n            .concat<TodosStore>(reducers$)\r\n            .scan<TodosStore>((todosStore: TodosStore, reducer: any) => ({\r\n                todos: reducer(todosStore).todos\r\n            })).publishReplay(1);\r\n    todosStore$.connect();\r\n\r\n    const viewModel$ = todosStore$\r\n        .withLatestFrom(sources.routeParams$, (todosStore: TodosStore, routeParams: string) => ({ todosStore, routeParams }))\r\n        .map<TodosViewModel>(x => createViewModel(x.todosStore, x.routeParams));\r\n\r\n    return {\r\n        todosStore$,\r\n        viewModel$\r\n    };\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todos/todos.data-flow.ts\n **/","import { TodosStore, Todo } from '../Todo';\r\n\r\nexport interface TodosViewModel {\r\n    todos: Todo[];\r\n    allTodosCompleted: boolean;\r\n    numTodos: number;\r\n    numTodosActive: number;\r\n    numTodosCompleted: number;\r\n    newTodoTitle: string;\r\n}\r\n\r\nexport function createViewModel(todosStore: TodosStore, filter: string) {\r\n    const numTodos = todosStore.todos.length;\r\n    const numTodosCompleted = todosStore.todos.filter(x => x.completed).length;\r\n    return {\r\n        numTodos,\r\n        numTodosCompleted,\r\n        allTodosCompleted: numTodosCompleted > 0 && numTodosCompleted === numTodos,\r\n        todos: todosStore.todos.filter(todo => includeTodoBasedOnFilter(todo, filter)),\r\n        numTodosActive: numTodos - numTodosCompleted,\r\n        newTodoTitle: ''\r\n    }\r\n}\r\n\r\nfunction includeTodoBasedOnFilter(todo: Todo, filter: string) {\r\n    switch (filter) {\r\n        case 'active':\r\n            return !todo.completed;\r\n        case 'completed':\r\n            return todo.completed;\r\n        default:\r\n            return true;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todos/todos.view-model.ts\n **/","import { Component, Input, Output, OnChanges, ViewChild, SimpleChange, ChangeDetectionStrategy } from 'angular2/core';\r\nimport { Observable, Observer } from 'rxjs/Rx';\r\nimport { makeObservableFunction, observeCurrentValueFor, setFocus } from '../component-utils';\r\n\r\nimport { Todo } from '../Todo';\r\nimport { TodoItemIntent, TodoItemViewModel, todoItemDataFlow } from './todo-item.data-flow';\r\n\r\n@Component({\r\n    selector: 'todo-item',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    template: require('./todo-item.html')\r\n})\r\nexport class TodoItemComponent {\r\n    @Input('todo') private todo: Todo;\r\n    @Output('delete') private delete$: Observable<{ id: string }>;\r\n    @Output('edit') private edit$: Observable<{id: string, title: string}>;\r\n    @Output('toggle') private toggle$: Observable<{ id: string }>;\r\n    @ViewChild('inputEditTitle') private inputEditTitleElementRef: any;\r\n\r\n    private viewModel: TodoItemViewModel;\r\n    private changesObserver: Observer<{ [key: string]: SimpleChange }>;\r\n    private changes$ = Observable.create(observer => this.changesObserver = observer);\r\n\r\n    constructor() {\r\n        // setup up intent\r\n        const intent: TodoItemIntent = {\r\n            startEdit$: makeObservableFunction<{}>(this, 'todoDblClick').share(),\r\n            stopEdit$: Observable.merge(\r\n                makeObservableFunction<string>(this, 'editOnBlur').map(x => x.target.value).share(),\r\n                makeObservableFunction<string>(this, 'editOnKeyEnter').map(x => x.target.value).share()\r\n            ),\r\n            cancelEdit$: makeObservableFunction<{}>(this, 'editOnKeyEsc').share(),\r\n            delete$: makeObservableFunction<{}>(this, 'todoDeleteClick').share(),\r\n            toggleTodo$: makeObservableFunction<{}>(this, 'toggleCompletion').share()\r\n        };\r\n\r\n        // set up sources\r\n        const todoInput$ = observeCurrentValueFor<Todo>(this.changes$, 'todo').publishReplay(1);\r\n        todoInput$.connect();\r\n\r\n        // setup the core data flow\r\n        const responses = todoItemDataFlow(intent, todoInput$);\r\n\r\n        // forward responses to parent component\r\n        this.delete$ = responses.delete$;\r\n        this.edit$ = responses.edit$;\r\n        this.toggle$ = responses.toggle$;\r\n\r\n        // subscribe to sink\r\n        responses.viewModel$\r\n            .subscribe(viewModel => {\r\n                this.viewModel = viewModel;\r\n                setFocus(this.inputEditTitleElementRef);\r\n            });\r\n    }\r\n\r\n    ngOnChanges(changes: { [key: string]: SimpleChange }) {\r\n        this.changesObserver.next(changes);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todo-item/todo-item.component.ts\n **/","import { Observable } from 'rxjs/Rx';\r\n\r\nimport { Todo } from '../Todo';\r\n\r\nexport interface TodoItemIntent {\r\n    startEdit$: Observable<{}>;\r\n    stopEdit$: Observable<string>;\r\n    cancelEdit$: Observable<{}>;\r\n    delete$: Observable<{}>;\r\n    toggleTodo$: Observable<{}>;\r\n}\r\n\r\nexport interface TodoItemViewModel extends Todo {\r\n    editing: boolean;\r\n}\r\n\r\nexport function todoItemDataFlow(intent: TodoItemIntent, todoProperty$: Observable<Todo>){\r\n    const editing$ = Observable.merge<boolean, boolean>(\r\n        intent.startEdit$.map(() => true),\r\n        intent.stopEdit$.map(() => false),\r\n        intent.cancelEdit$.map(() => false)\r\n    ).startWith(false);\r\n\r\n    const viewModel$ = todoProperty$\r\n        .combineLatest(editing$, (todoProperty, editing) => Object.assign({}, todoProperty, { editing }));\r\n\r\n    const delete$ = intent.delete$\r\n        .withLatestFrom(todoProperty$, (_, todo: Todo) => todo)\r\n        .map(x => ({ id: x.id }));\r\n\r\n    const edit$ = intent.stopEdit$\r\n        .withLatestFrom(todoProperty$, (title: string, todo: Todo) => ({ title, todo }))\r\n        .filter(x => x.title !== x.todo.title)\r\n        .map(x => ({ id: x.todo.id, title: x.title }));\r\n\r\n    const toggle$ = intent.toggleTodo$\r\n        .withLatestFrom(todoProperty$, (_, todo: Todo) => todo)\r\n        .map(todo => ({ id: todo.id }));\r\n\r\n    return {\r\n        viewModel$,\r\n        delete$,\r\n        edit$,\r\n        toggle$\r\n    };\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todo-item/todo-item.data-flow.ts\n **/","module.exports = \"<li [class.completed]=\\\"viewModel.completed\\\" [class.editing]=\\\"viewModel.editing\\\">\\r\\n    <div class=\\\"view\\\">\\r\\n        <input class=\\\"toggle\\\" type=\\\"checkbox\\\" (click)=\\\"toggleCompletion()\\\" [checked]=\\\"viewModel.completed\\\">\\r\\n        <label (dblclick)=\\\"todoDblClick()\\\">{{viewModel.title}}</label>\\r\\n        <button class=\\\"destroy\\\" (click)=\\\"todoDeleteClick()\\\"></button>\\r\\n    </div>\\r\\n    <input class=\\\"edit\\\" [value]=\\\"viewModel.title\\\" #inputEditTitle\\r\\n        (blur)=\\\"editOnBlur($event)\\\"\\r\\n        (keyup.enter)=\\\"editOnKeyEnter($event)\\\"\\r\\n        (keyup.esc)=\\\"editOnKeyEsc()\\\" />\\r\\n</li>\\r\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/app/todo-item/todo-item.html\n ** module id = 494\n ** module chunks = 0\n **/","import { TodosStore } from './Todo';\r\n\r\nexport class TodosStorageService {\r\n    private localStorageKey = 'todomvc-ng2-rx';\r\n\r\n    save(todosStore: TodosStore): void {\r\n        localStorage.setItem(this.localStorageKey, JSON.stringify(todosStore));\r\n    }\r\n\r\n    load(): TodosStore {\r\n        return JSON.parse(localStorage.getItem(this.localStorageKey) || '{ \"todos\": [] }')\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/source-map-loader!./src/app/todos-storage.service.ts\n **/","module.exports = \"<section *ngIf=\\\"viewModel\\\" class=\\\"todoapp\\\">\\r\\n    <header class=\\\"header\\\">\\r\\n        <h1> todos </h1>\\r\\n        <input class=\\\"new-todo\\\" placeholder=\\\"What needs to be done?\\\" autofocus=\\\"\\\" [(ngModel)]=\\\"viewModel.newTodoTitle\\\" (keyup.enter)=\\\"add($event)\\\" />\\r\\n    </header>\\r\\n    <section class=\\\"main\\\">\\r\\n        <input type=\\\"checkbox\\\" class=\\\"toggle-all\\\" [checked]=\\\"viewModel.allTodosCompleted\\\" (click)=\\\"toggleAll()\\\" />\\r\\n        <ul class=\\\"todo-list\\\">\\r\\n            <todo-item *ngFor=\\\"#todo of viewModel.todos\\\" [todo]=\\\"todo\\\" (delete)=\\\"delete($event)\\\" (edit)=\\\"edit($event)\\\" (toggle)=\\\"toggle($event)\\\"></todo-item>\\r\\n        </ul>\\r\\n    </section>\\r\\n    <footer class=\\\"footer\\\" *ngIf=\\\"viewModel.numTodos > 0\\\">\\r\\n        <span class=\\\"todo-count\\\"><strong>{{ viewModel.numTodosActive }}</strong> item{{ viewModel.numTodosActive == 1 ? '' : 's' }} left</span>\\r\\n        <ul class=\\\"filters\\\">\\r\\n            <li> <a [routerLink]=\\\"['Todos']\\\"> All </a> </li>\\r\\n            <li> <a [routerLink]=\\\"['TodosFiltered', { filter: 'active' }]\\\"> Active </a> </li>\\r\\n            <li> <a [routerLink]=\\\"['TodosFiltered', { filter: 'completed' }]\\\"> Completed </a> </li>\\r\\n        </ul>\\r\\n        <button class=\\\"clear-completed\\\" *ngIf=\\\"viewModel.numTodosCompleted > 0\\\" (click)=\\\"removeCompleted()\\\">Clear completed ({{ viewModel.numTodosCompleted }})</button>\\r\\n    </footer>\\r\\n</section>\\r\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/app/todos/todos.html\n ** module id = 496\n ** module chunks = 0\n **/","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!./../css-loader/index.js!./index.css\");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\"!./../style-loader/addStyles.js\")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!./../css-loader/index.js!./index.css\", function() {\n\t\t\tvar newContent = require(\"!!./../css-loader/index.js!./index.css\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/todomvc-app-css/index.css\n ** module id = 497\n ** module chunks = 0\n **/","exports = module.exports = require(\"./../css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"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;appearance:none}body,button{-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;font-weight:300}button,input[type=checkbox]{outline:none}.hidden{display:none}.todoapp{background:#fff;margin:130px 0 40px;position:relative;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;outline:none;color:inherit;padding:6px;border:1px solid #999;box-shadow:inset 0 -1px 5px 0 rgba(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,.003);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:13px 17px 12px;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;appearance:none}.todo-list li .toggle:after{content:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"-10 -18 100 135\\\"><circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"50\\\" fill=\\\"none\\\" stroke=\\\"#ededed\\\" stroke-width=\\\"3\\\"/></svg>')}.todo-list li .toggle:checked:after{content:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"-10 -18 100 135\\\"><circle cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"50\\\" fill=\\\"none\\\" stroke=\\\"#bddad5\\\" stroke-width=\\\"3\\\"/><path fill=\\\"#5dc2af\\\" d=\\\"M72 25L42 71 27 56l-4 4 20 20 34-52z\\\"/></svg>')}.todo-list li label{white-space:pre-line;word-break:break-all;padding:15px 60px 15px 15px;margin-left:45px;display:block;line-height:1.2;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;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;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.selected,.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;appearance:none}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}\", \"\"]);\n\n// exports\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-loader!./~/todomvc-app-css/index.css\n ** module id = 498\n ** module chunks = 0\n **/","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\"\");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \"string\")\r\n\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \"number\")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-loader/lib/css-base.js\n ** module id = 499\n ** module chunks = 0\n **/","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\nvar stylesInDom = {},\r\n\tmemoize = function(fn) {\r\n\t\tvar memo;\r\n\t\treturn function () {\r\n\t\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\r\n\t\t\treturn memo;\r\n\t\t};\r\n\t},\r\n\tisOldIE = memoize(function() {\r\n\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\r\n\t}),\r\n\tgetHeadElement = memoize(function () {\r\n\t\treturn document.head || document.getElementsByTagName(\"head\")[0];\r\n\t}),\r\n\tsingletonElement = null,\r\n\tsingletonCounter = 0,\r\n\tstyleElementsInsertedAtTop = [];\r\n\r\nmodule.exports = function(list, options) {\r\n\tif(typeof DEBUG !== \"undefined\" && DEBUG) {\r\n\t\tif(typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\r\n\t}\r\n\r\n\toptions = options || {};\r\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\r\n\t// tags it will allow on a page\r\n\tif (typeof options.singleton === \"undefined\") options.singleton = isOldIE();\r\n\r\n\t// By default, add <style> tags to the bottom of <head>.\r\n\tif (typeof options.insertAt === \"undefined\") options.insertAt = \"bottom\";\r\n\r\n\tvar styles = listToStyles(list);\r\n\taddStylesToDom(styles, options);\r\n\r\n\treturn function update(newList) {\r\n\t\tvar mayRemove = [];\r\n\t\tfor(var i = 0; i < styles.length; i++) {\r\n\t\t\tvar item = styles[i];\r\n\t\t\tvar domStyle = stylesInDom[item.id];\r\n\t\t\tdomStyle.refs--;\r\n\t\t\tmayRemove.push(domStyle);\r\n\t\t}\r\n\t\tif(newList) {\r\n\t\t\tvar newStyles = listToStyles(newList);\r\n\t\t\taddStylesToDom(newStyles, options);\r\n\t\t}\r\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\r\n\t\t\tvar domStyle = mayRemove[i];\r\n\t\t\tif(domStyle.refs === 0) {\r\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\r\n\t\t\t\t\tdomStyle.parts[j]();\r\n\t\t\t\tdelete stylesInDom[domStyle.id];\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction addStylesToDom(styles, options) {\r\n\tfor(var i = 0; i < styles.length; i++) {\r\n\t\tvar item = styles[i];\r\n\t\tvar domStyle = stylesInDom[item.id];\r\n\t\tif(domStyle) {\r\n\t\t\tdomStyle.refs++;\r\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\r\n\t\t\t}\r\n\t\t\tfor(; j < item.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar parts = [];\r\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\r\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction listToStyles(list) {\r\n\tvar styles = [];\r\n\tvar newStyles = {};\r\n\tfor(var i = 0; i < list.length; i++) {\r\n\t\tvar item = list[i];\r\n\t\tvar id = item[0];\r\n\t\tvar css = item[1];\r\n\t\tvar media = item[2];\r\n\t\tvar sourceMap = item[3];\r\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\r\n\t\tif(!newStyles[id])\r\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\r\n\t\telse\r\n\t\t\tnewStyles[id].parts.push(part);\r\n\t}\r\n\treturn styles;\r\n}\r\n\r\nfunction insertStyleElement(options, styleElement) {\r\n\tvar head = getHeadElement();\r\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\r\n\tif (options.insertAt === \"top\") {\r\n\t\tif(!lastStyleElementInsertedAtTop) {\r\n\t\t\thead.insertBefore(styleElement, head.firstChild);\r\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\r\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\r\n\t\t} else {\r\n\t\t\thead.appendChild(styleElement);\r\n\t\t}\r\n\t\tstyleElementsInsertedAtTop.push(styleElement);\r\n\t} else if (options.insertAt === \"bottom\") {\r\n\t\thead.appendChild(styleElement);\r\n\t} else {\r\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\r\n\t}\r\n}\r\n\r\nfunction removeStyleElement(styleElement) {\r\n\tstyleElement.parentNode.removeChild(styleElement);\r\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\r\n\tif(idx >= 0) {\r\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\r\n\t}\r\n}\r\n\r\nfunction createStyleElement(options) {\r\n\tvar styleElement = document.createElement(\"style\");\r\n\tstyleElement.type = \"text/css\";\r\n\tinsertStyleElement(options, styleElement);\r\n\treturn styleElement;\r\n}\r\n\r\nfunction createLinkElement(options) {\r\n\tvar linkElement = document.createElement(\"link\");\r\n\tlinkElement.rel = \"stylesheet\";\r\n\tinsertStyleElement(options, linkElement);\r\n\treturn linkElement;\r\n}\r\n\r\nfunction addStyle(obj, options) {\r\n\tvar styleElement, update, remove;\r\n\r\n\tif (options.singleton) {\r\n\t\tvar styleIndex = singletonCounter++;\r\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\r\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\r\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\r\n\t} else if(obj.sourceMap &&\r\n\t\ttypeof URL === \"function\" &&\r\n\t\ttypeof URL.createObjectURL === \"function\" &&\r\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\r\n\t\ttypeof Blob === \"function\" &&\r\n\t\ttypeof btoa === \"function\") {\r\n\t\tstyleElement = createLinkElement(options);\r\n\t\tupdate = updateLink.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t\tif(styleElement.href)\r\n\t\t\t\tURL.revokeObjectURL(styleElement.href);\r\n\t\t};\r\n\t} else {\r\n\t\tstyleElement = createStyleElement(options);\r\n\t\tupdate = applyToTag.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t};\r\n\t}\r\n\r\n\tupdate(obj);\r\n\r\n\treturn function updateStyle(newObj) {\r\n\t\tif(newObj) {\r\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\r\n\t\t\t\treturn;\r\n\t\t\tupdate(obj = newObj);\r\n\t\t} else {\r\n\t\t\tremove();\r\n\t\t}\r\n\t};\r\n}\r\n\r\nvar replaceText = (function () {\r\n\tvar textStore = [];\r\n\r\n\treturn function (index, replacement) {\r\n\t\ttextStore[index] = replacement;\r\n\t\treturn textStore.filter(Boolean).join('\\n');\r\n\t};\r\n})();\r\n\r\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\r\n\tvar css = remove ? \"\" : obj.css;\r\n\r\n\tif (styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\r\n\t} else {\r\n\t\tvar cssNode = document.createTextNode(css);\r\n\t\tvar childNodes = styleElement.childNodes;\r\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\r\n\t\tif (childNodes.length) {\r\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\r\n\t\t} else {\r\n\t\t\tstyleElement.appendChild(cssNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction applyToTag(styleElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar media = obj.media;\r\n\tvar sourceMap = obj.sourceMap;\r\n\r\n\tif(media) {\r\n\t\tstyleElement.setAttribute(\"media\", media)\r\n\t}\r\n\r\n\tif(styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = css;\r\n\t} else {\r\n\t\twhile(styleElement.firstChild) {\r\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\r\n\t\t}\r\n\t\tstyleElement.appendChild(document.createTextNode(css));\r\n\t}\r\n}\r\n\r\nfunction updateLink(linkElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar media = obj.media;\r\n\tvar sourceMap = obj.sourceMap;\r\n\r\n\tif(sourceMap) {\r\n\t\t// http://stackoverflow.com/a/26603875\r\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\r\n\t}\r\n\r\n\tvar blob = new Blob([css], { type: \"text/css\" });\r\n\r\n\tvar oldSrc = linkElement.href;\r\n\r\n\tlinkElement.href = URL.createObjectURL(blob);\r\n\r\n\tif(oldSrc)\r\n\t\tURL.revokeObjectURL(oldSrc);\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/style-loader/addStyles.js\n ** module id = 500\n ** module chunks = 0\n **/"],"sourceRoot":""}