text: webpackJsonp(["common"],{
  
  /***/ "../../../../../src/app/router.animations.ts":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (immutable) */ __webpack_exports__["a"] = routerTransition;
  /* unused harmony export slideToRight */
  /* unused harmony export slideToLeft */
  /* unused harmony export slideToBottom */
  /* unused harmony export slideToTop */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_animations__ = __webpack_require__("../../../animations/@angular/animations.es5.js");
  
  function routerTransition() {
      return slideToTop();
  }
  function slideToRight() {
      return Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["j" /* trigger */])('routerTransition', [
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('void', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('*', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':enter', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(-100%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(0%)' }))
          ]),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':leave', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(0%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(100%)' }))
          ])
      ]);
  }
  function slideToLeft() {
      return Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["j" /* trigger */])('routerTransition', [
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('void', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('*', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':enter', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(100%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(0%)' }))
          ]),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':leave', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(0%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateX(-100%)' }))
          ])
      ]);
  }
  function slideToBottom() {
      return Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["j" /* trigger */])('routerTransition', [
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('void', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('*', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':enter', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(-100%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(0%)' }))
          ]),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':leave', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(0%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(100%)' }))
          ])
      ]);
  }
  function slideToTop() {
      return Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["j" /* trigger */])('routerTransition', [
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('void', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["g" /* state */])('*', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({})),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':enter', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(100%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(0%)' }))
          ]),
          Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["i" /* transition */])(':leave', [
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(0%)' }),
              Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["e" /* animate */])('0.5s ease-in-out', Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__["h" /* style */])({ transform: 'translateY(-100%)' }))
          ])
      ]);
  }
  //# sourceMappingURL=router.animations.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/calendar.module.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarModule; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_common__ = __webpack_require__("../../../common/@angular/common.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angular_resizable_element__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular_draggable_droppable__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_day_calendarDayView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/day/calendarDayView.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_week_calendarWeekView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/week/calendarWeekView.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__components_month_calendarMonthView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/month/calendarMonthView.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__components_month_calendarMonthViewHeader_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/month/calendarMonthViewHeader.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_common_calendarEventActions_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/common/calendarEventActions.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__components_common_calendarEventTitle_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/common/calendarEventTitle.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_month_calendarMonthCell_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/month/calendarMonthCell.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_month_calendarOpenDayEvents_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/month/calendarOpenDayEvents.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__components_week_calendarWeekViewHeader_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/week/calendarWeekViewHeader.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__components_week_calendarWeekViewEvent_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/week/calendarWeekViewEvent.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__components_day_calendarAllDayEvent_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/day/calendarAllDayEvent.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__components_day_calendarDayViewHourSegment_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/day/calendarDayViewHourSegment.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__components_day_calendarDayViewEvent_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/day/calendarDayViewEvent.component.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/directives/calendarTooltip.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__directives_calendarPreviousView_directive__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/directives/calendarPreviousView.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__directives_calendarNextView_directive__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/directives/calendarNextView.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__directives_calendarToday_directive__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/directives/calendarToday.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__directives_click_directive__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/directives/click.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__pipes_calendarDate_pipe__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/pipes/calendarDate.pipe.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__pipes_calendarEventTitle_pipe__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/pipes/calendarEventTitle.pipe.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__providers_calendarEventTitleFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarEventTitleFormatter.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__providers_calendarDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarDateFormatter.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__providers_calendarUtils_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js");
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  /**
   * The main module of this library. Example usage:
   *
   * ```typescript
   * import { CalenderModule } from 'angular-calendar';
   *
   * &commat;NgModule({
   *   imports: [
   *     CalenderModule.forRoot()
   *   ]
   * })
   * class MyModule {}
   * ```
   *
   */
  var CalendarModule = /** @class */ (function () {
      function CalendarModule() {
      }
      CalendarModule.forRoot = function (config) {
          if (config === void 0) { config = {}; }
          return {
              ngModule: CalendarModule,
              providers: [
                  __WEBPACK_IMPORTED_MODULE_3_angular_draggable_droppable__["b" /* DraggableHelper */],
                  config.eventTitleFormatter || __WEBPACK_IMPORTED_MODULE_24__providers_calendarEventTitleFormatter_provider__["a" /* CalendarEventTitleFormatter */],
                  config.dateFormatter || __WEBPACK_IMPORTED_MODULE_25__providers_calendarDateFormatter_provider__["a" /* CalendarDateFormatter */],
                  config.utils || __WEBPACK_IMPORTED_MODULE_26__providers_calendarUtils_provider__["a" /* CalendarUtils */]
              ]
          };
      };
      CalendarModule.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgModule */], args: [{
                      declarations: [
                          __WEBPACK_IMPORTED_MODULE_4__components_day_calendarDayView_component__["a" /* CalendarDayViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_5__components_week_calendarWeekView_component__["a" /* CalendarWeekViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_6__components_month_calendarMonthView_component__["a" /* CalendarMonthViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_8__components_common_calendarEventActions_component__["a" /* CalendarEventActionsComponent */],
                          __WEBPACK_IMPORTED_MODULE_9__components_common_calendarEventTitle_component__["a" /* CalendarEventTitleComponent */],
                          __WEBPACK_IMPORTED_MODULE_10__components_month_calendarMonthCell_component__["a" /* CalendarMonthCellComponent */],
                          __WEBPACK_IMPORTED_MODULE_11__components_month_calendarOpenDayEvents_component__["a" /* CalendarOpenDayEventsComponent */],
                          __WEBPACK_IMPORTED_MODULE_12__components_week_calendarWeekViewHeader_component__["a" /* CalendarWeekViewHeaderComponent */],
                          __WEBPACK_IMPORTED_MODULE_13__components_week_calendarWeekViewEvent_component__["a" /* CalendarWeekViewEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_14__components_day_calendarAllDayEvent_component__["a" /* CalendarAllDayEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_15__components_day_calendarDayViewHourSegment_component__["a" /* CalendarDayViewHourSegmentComponent */],
                          __WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__["b" /* CalendarTooltipWindowComponent */],
                          __WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__["a" /* CalendarTooltipDirective */],
                          __WEBPACK_IMPORTED_MODULE_18__directives_calendarPreviousView_directive__["a" /* CalendarPreviousViewDirective */],
                          __WEBPACK_IMPORTED_MODULE_19__directives_calendarNextView_directive__["a" /* CalendarNextViewDirective */],
                          __WEBPACK_IMPORTED_MODULE_20__directives_calendarToday_directive__["a" /* CalendarTodayDirective */],
                          __WEBPACK_IMPORTED_MODULE_22__pipes_calendarDate_pipe__["a" /* CalendarDatePipe */],
                          __WEBPACK_IMPORTED_MODULE_23__pipes_calendarEventTitle_pipe__["a" /* CalendarEventTitlePipe */],
                          __WEBPACK_IMPORTED_MODULE_7__components_month_calendarMonthViewHeader_component__["a" /* CalendarMonthViewHeaderComponent */],
                          __WEBPACK_IMPORTED_MODULE_16__components_day_calendarDayViewEvent_component__["a" /* CalendarDayViewEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_21__directives_click_directive__["a" /* ClickDirective */]
                      ],
                      imports: [__WEBPACK_IMPORTED_MODULE_1__angular_common__["b" /* CommonModule */], __WEBPACK_IMPORTED_MODULE_2_angular_resizable_element__["a" /* ResizableModule */], __WEBPACK_IMPORTED_MODULE_3_angular_draggable_droppable__["a" /* DragAndDropModule */]],
                      exports: [
                          __WEBPACK_IMPORTED_MODULE_4__components_day_calendarDayView_component__["a" /* CalendarDayViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_5__components_week_calendarWeekView_component__["a" /* CalendarWeekViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_6__components_month_calendarMonthView_component__["a" /* CalendarMonthViewComponent */],
                          __WEBPACK_IMPORTED_MODULE_8__components_common_calendarEventActions_component__["a" /* CalendarEventActionsComponent */],
                          __WEBPACK_IMPORTED_MODULE_9__components_common_calendarEventTitle_component__["a" /* CalendarEventTitleComponent */],
                          __WEBPACK_IMPORTED_MODULE_10__components_month_calendarMonthCell_component__["a" /* CalendarMonthCellComponent */],
                          __WEBPACK_IMPORTED_MODULE_11__components_month_calendarOpenDayEvents_component__["a" /* CalendarOpenDayEventsComponent */],
                          __WEBPACK_IMPORTED_MODULE_12__components_week_calendarWeekViewHeader_component__["a" /* CalendarWeekViewHeaderComponent */],
                          __WEBPACK_IMPORTED_MODULE_13__components_week_calendarWeekViewEvent_component__["a" /* CalendarWeekViewEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_14__components_day_calendarAllDayEvent_component__["a" /* CalendarAllDayEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_15__components_day_calendarDayViewHourSegment_component__["a" /* CalendarDayViewHourSegmentComponent */],
                          __WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__["b" /* CalendarTooltipWindowComponent */],
                          __WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__["a" /* CalendarTooltipDirective */],
                          __WEBPACK_IMPORTED_MODULE_18__directives_calendarPreviousView_directive__["a" /* CalendarPreviousViewDirective */],
                          __WEBPACK_IMPORTED_MODULE_19__directives_calendarNextView_directive__["a" /* CalendarNextViewDirective */],
                          __WEBPACK_IMPORTED_MODULE_20__directives_calendarToday_directive__["a" /* CalendarTodayDirective */],
                          __WEBPACK_IMPORTED_MODULE_22__pipes_calendarDate_pipe__["a" /* CalendarDatePipe */],
                          __WEBPACK_IMPORTED_MODULE_23__pipes_calendarEventTitle_pipe__["a" /* CalendarEventTitlePipe */],
                          __WEBPACK_IMPORTED_MODULE_7__components_month_calendarMonthViewHeader_component__["a" /* CalendarMonthViewHeaderComponent */],
                          __WEBPACK_IMPORTED_MODULE_16__components_day_calendarDayViewEvent_component__["a" /* CalendarDayViewEventComponent */],
                          __WEBPACK_IMPORTED_MODULE_21__directives_click_directive__["a" /* ClickDirective */]
                      ],
                      entryComponents: [__WEBPACK_IMPORTED_MODULE_17__directives_calendarTooltip_directive__["b" /* CalendarTooltipWindowComponent */]]
                  },] },
      ];
      /** @nocollapse */
      CalendarModule.ctorParameters = function () { return []; };
      return CalendarModule;
  }());
  
  //# sourceMappingURL=calendar.module.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/common/calendarEventActions.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarEventActionsComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarEventActionsComponent = /** @class */ (function () {
      function CalendarEventActionsComponent() {
      }
      CalendarEventActionsComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-event-actions',
                      template: "\n    <span *ngIf=\"event.actions\" class=\"cal-event-actions\">\n      <a\n        class=\"cal-event-action\"\n        href=\"javascript:;\"\n        *ngFor=\"let action of event.actions\"\n        (mwlClick)=\"action.onClick({event: event})\"\n        [ngClass]=\"action.cssClass\"\n        [innerHtml]=\"action.label\">\n      </a>\n    </span>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarEventActionsComponent.ctorParameters = function () { return []; };
      CalendarEventActionsComponent.propDecorators = {
          'event': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      };
      return CalendarEventActionsComponent;
  }());
  
  //# sourceMappingURL=calendarEventActions.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/common/calendarEventTitle.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarEventTitleComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarEventTitleComponent = /** @class */ (function () {
      function CalendarEventTitleComponent() {
      }
      CalendarEventTitleComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-event-title',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-event=\"event\"\n      let-view=\"view\">\n      <a\n        class=\"cal-event-title\"\n        href=\"javascript:;\"\n        [innerHTML]=\"event.title | calendarEventTitle:view:event\">\n      </a>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        event: event,\n        view: view\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarEventTitleComponent.ctorParameters = function () { return []; };
      CalendarEventTitleComponent.propDecorators = {
          'event': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'view': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      };
      return CalendarEventTitleComponent;
  }());
  
  //# sourceMappingURL=calendarEventTitle.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/day/calendarAllDayEvent.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarAllDayEventComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarAllDayEventComponent = /** @class */ (function () {
      function CalendarAllDayEventComponent() {
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      CalendarAllDayEventComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-all-day-event',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-event=\"event\"\n      let-eventClicked=\"eventClicked\">\n      <div\n        class=\"cal-all-day-event\"\n        [style.backgroundColor]=\"event.color.secondary\"\n        [style.borderColor]=\"event.color.primary\">\n        <mwl-calendar-event-actions [event]=\"event\"></mwl-calendar-event-actions>\n        <mwl-calendar-event-title\n          [event]=\"event\"\n          [customTemplate]=\"eventTitleTemplate\"\n          view=\"day\"\n          (mwlClick)=\"eventClicked.emit()\">\n        </mwl-calendar-event-title>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        event: event,\n        eventClicked: eventClicked\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarAllDayEventComponent.ctorParameters = function () { return []; };
      CalendarAllDayEventComponent.propDecorators = {
          'event': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarAllDayEventComponent;
  }());
  
  //# sourceMappingURL=calendarAllDayEvent.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/day/calendarDayView.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDayViewComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes__ = __webpack_require__("../../../../date-fns/add_minutes/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__providers_calendarDragHelper_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarDragHelper.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__providers_calendarResizeHelper_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarResizeHelper.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__providers_calendarUtils_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js");
  
  
  
  
  
  /**
   * @hidden
   */
  var SEGMENT_HEIGHT = 30;
  /**
   * @hidden
   */
  var MINUTES_IN_HOUR = 60;
  /**
   * Shows all events on a given day. Example usage:
   *
   * ```typescript
   * <mwl-calendar-day-view
   *  [viewDate]="viewDate"
   *  [events]="events">
   * </mwl-calendar-day-view>
   * ```
   */
  var CalendarDayViewComponent = /** @class */ (function () {
      /**
       * @hidden
       */
      function CalendarDayViewComponent(cdr, utils, locale) {
          this.cdr = cdr;
          this.utils = utils;
          /**
           * An array of events to display on view
           * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
           */
          this.events = [];
          /**
           * The number of segments in an hour. Must be <= 6
           */
          this.hourSegments = 2;
          /**
           * The day start hours in 24 hour time. Must be 0-23
           */
          this.dayStartHour = 0;
          /**
           * The day start minutes. Must be 0-59
           */
          this.dayStartMinute = 0;
          /**
           * The day end hours in 24 hour time. Must be 0-23
           */
          this.dayEndHour = 23;
          /**
           * The day end minutes. Must be 0-59
           */
          this.dayEndMinute = 59;
          /**
           * The width in pixels of each event on the view
           */
          this.eventWidth = 150;
          /**
           * The grid size to snap resizing and dragging of events to
           */
          this.eventSnapSize = 30;
          /**
           * The placement of the event tooltip
           */
          this.tooltipPlacement = 'top';
          /**
           * Whether to append tooltips to the body or next to the trigger element
           */
          this.tooltipAppendToBody = true;
          /**
           * Called when an event title is clicked
           */
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when an hour segment is clicked
           */
          this.hourSegmentClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when an event is resized or dragged and dropped
           */
          this.eventTimesChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * An output that will be called before the view is rendered for the current day.
           * If you add the `cssClass` property to a segment it will add that class to the hour segment in the template
           */
          this.beforeViewRender = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * @hidden
           */
          this.hours = [];
          /**
           * @hidden
           */
          this.width = 0;
          /**
           * @hidden
           */
          this.currentResizes = new Map();
          this.locale = locale;
      }
      /**
       * @hidden
       */
      CalendarDayViewComponent.prototype.ngOnInit = function () {
          var _this = this;
          if (this.refresh) {
              this.refreshSubscription = this.refresh.subscribe(function () {
                  _this.refreshAll();
                  _this.cdr.markForCheck();
              });
          }
      };
      /**
       * @hidden
       */
      CalendarDayViewComponent.prototype.ngOnDestroy = function () {
          if (this.refreshSubscription) {
              this.refreshSubscription.unsubscribe();
          }
      };
      /**
       * @hidden
       */
      CalendarDayViewComponent.prototype.ngOnChanges = function (changes) {
          if (changes.viewDate ||
              changes.dayStartHour ||
              changes.dayStartMinute ||
              changes.dayEndHour ||
              changes.dayEndMinute) {
              this.refreshHourGrid();
          }
          if (changes.viewDate ||
              changes.events ||
              changes.dayStartHour ||
              changes.dayStartMinute ||
              changes.dayEndHour ||
              changes.dayEndMinute ||
              changes.eventWidth) {
              this.refreshView();
          }
      };
      CalendarDayViewComponent.prototype.eventDropped = function (dropEvent, segment) {
          if (dropEvent.dropData && dropEvent.dropData.event) {
              this.eventTimesChanged.emit({
                  event: dropEvent.dropData.event,
                  newStart: segment.date
              });
          }
      };
      CalendarDayViewComponent.prototype.resizeStarted = function (event, resizeEvent, dayViewContainer) {
          this.currentResizes.set(event, {
              originalTop: event.top,
              originalHeight: event.height,
              edge: typeof resizeEvent.edges.top !== 'undefined' ? 'top' : 'bottom'
          });
          var resizeHelper = new __WEBPACK_IMPORTED_MODULE_3__providers_calendarResizeHelper_provider__["a" /* CalendarResizeHelper */](dayViewContainer);
          this.validateResize = function (_a) {
              var rectangle = _a.rectangle;
              return resizeHelper.validateResize({ rectangle: rectangle });
          };
          this.cdr.markForCheck();
      };
      CalendarDayViewComponent.prototype.resizing = function (event, resizeEvent) {
          var currentResize = this.currentResizes.get(event);
          if (resizeEvent.edges.top) {
              event.top = currentResize.originalTop + +resizeEvent.edges.top;
              event.height = currentResize.originalHeight - +resizeEvent.edges.top;
          }
          else if (resizeEvent.edges.bottom) {
              event.height = currentResize.originalHeight + +resizeEvent.edges.bottom;
          }
      };
      CalendarDayViewComponent.prototype.resizeEnded = function (dayEvent) {
          var currentResize = this.currentResizes.get(dayEvent);
          var pixelsMoved;
          if (currentResize.edge === 'top') {
              pixelsMoved = dayEvent.top - currentResize.originalTop;
          }
          else {
              pixelsMoved = dayEvent.height - currentResize.originalHeight;
          }
          dayEvent.top = currentResize.originalTop;
          dayEvent.height = currentResize.originalHeight;
          var pixelAmountInMinutes = MINUTES_IN_HOUR / (this.hourSegments * SEGMENT_HEIGHT);
          var minutesMoved = pixelsMoved * pixelAmountInMinutes;
          var newStart = dayEvent.event.start;
          var newEnd = dayEvent.event.end;
          if (currentResize.edge === 'top') {
              newStart = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default()(newStart, minutesMoved);
          }
          else if (newEnd) {
              newEnd = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default()(newEnd, minutesMoved);
          }
          this.eventTimesChanged.emit({ newStart: newStart, newEnd: newEnd, event: dayEvent.event });
          this.currentResizes.delete(dayEvent);
      };
      CalendarDayViewComponent.prototype.dragStart = function (event, dayViewContainer) {
          var _this = this;
          var dragHelper = new __WEBPACK_IMPORTED_MODULE_2__providers_calendarDragHelper_provider__["a" /* CalendarDragHelper */](dayViewContainer, event);
          this.validateDrag = function (_a) {
              var x = _a.x, y = _a.y;
              return _this.currentResizes.size === 0 && dragHelper.validateDrag({ x: x, y: y });
          };
          this.cdr.markForCheck();
      };
      CalendarDayViewComponent.prototype.eventDragged = function (dayEvent, draggedInPixels) {
          var pixelAmountInMinutes = MINUTES_IN_HOUR / (this.hourSegments * SEGMENT_HEIGHT);
          var minutesMoved = draggedInPixels * pixelAmountInMinutes;
          var newStart = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default()(dayEvent.event.start, minutesMoved);
          var newEnd;
          if (dayEvent.event.end) {
              newEnd = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default()(dayEvent.event.end, minutesMoved);
          }
          this.eventTimesChanged.emit({ newStart: newStart, newEnd: newEnd, event: dayEvent.event });
      };
      CalendarDayViewComponent.prototype.refreshHourGrid = function () {
          this.hours = this.utils.getDayViewHourGrid({
              viewDate: this.viewDate,
              hourSegments: this.hourSegments,
              dayStart: {
                  hour: this.dayStartHour,
                  minute: this.dayStartMinute
              },
              dayEnd: {
                  hour: this.dayEndHour,
                  minute: this.dayEndMinute
              }
          });
          this.beforeViewRender.emit({
              body: this.hours
          });
      };
      CalendarDayViewComponent.prototype.refreshView = function () {
          this.view = this.utils.getDayView({
              events: this.events,
              viewDate: this.viewDate,
              hourSegments: this.hourSegments,
              dayStart: {
                  hour: this.dayStartHour,
                  minute: this.dayStartMinute
              },
              dayEnd: {
                  hour: this.dayEndHour,
                  minute: this.dayEndMinute
              },
              eventWidth: this.eventWidth,
              segmentHeight: SEGMENT_HEIGHT
          });
      };
      CalendarDayViewComponent.prototype.refreshAll = function () {
          this.refreshHourGrid();
          this.refreshView();
      };
      CalendarDayViewComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-day-view',
                      template: "\n    <div class=\"cal-day-view\" #dayViewContainer>\n      <mwl-calendar-all-day-event\n        *ngFor=\"let event of view.allDayEvents\"\n        [event]=\"event\"\n        [customTemplate]=\"allDayEventTemplate\"\n        [eventTitleTemplate]=\"eventTitleTemplate\"\n        (eventClicked)=\"eventClicked.emit({event: event})\">\n      </mwl-calendar-all-day-event>\n      <div class=\"cal-hour-rows\">\n        <div class=\"cal-events\">\n          <div\n            #event\n            *ngFor=\"let dayEvent of view?.events\"\n            class=\"cal-event-container\"\n            [class.cal-draggable]=\"dayEvent.event.draggable\"\n            [class.cal-starts-within-day]=\"!dayEvent.startsBeforeDay\"\n            [class.cal-ends-within-day]=\"!dayEvent.endsAfterDay\"\n            [ngClass]=\"dayEvent.event.cssClass\"\n            mwlResizable\n            [resizeEdges]=\"{top: dayEvent.event?.resizable?.beforeStart, bottom: dayEvent.event?.resizable?.afterEnd}\"\n            [resizeSnapGrid]=\"{top: eventSnapSize, bottom: eventSnapSize}\"\n            [validateResize]=\"validateResize\"\n            (resizeStart)=\"resizeStarted(dayEvent, $event, dayViewContainer)\"\n            (resizing)=\"resizing(dayEvent, $event)\"\n            (resizeEnd)=\"resizeEnded(dayEvent)\"\n            mwlDraggable\n            [dragAxis]=\"{x: false, y: dayEvent.event.draggable && currentResizes.size === 0}\"\n            [dragSnapGrid]=\"{y: eventSnapSize}\"\n            [validateDrag]=\"validateDrag\"\n            (dragStart)=\"dragStart(event, dayViewContainer)\"\n            (dragEnd)=\"eventDragged(dayEvent, $event.y)\"\n            [style.marginTop.px]=\"dayEvent.top\"\n            [style.height.px]=\"dayEvent.height\"\n            [style.marginLeft.px]=\"dayEvent.left + 70\"\n            [style.width.px]=\"dayEvent.width - 1\">\n            <mwl-calendar-day-view-event\n              [dayEvent]=\"dayEvent\"\n              [tooltipPlacement]=\"tooltipPlacement\"\n              [tooltipTemplate]=\"tooltipTemplate\"\n              [tooltipAppendToBody]=\"tooltipAppendToBody\"\n              [customTemplate]=\"eventTemplate\"\n              [eventTitleTemplate]=\"eventTitleTemplate\"\n              (eventClicked)=\"eventClicked.emit({event: dayEvent.event})\">\n            </mwl-calendar-day-view-event>\n          </div>\n        </div>\n        <div class=\"cal-hour\" *ngFor=\"let hour of hours\" [style.minWidth.px]=\"view?.width + 70\">\n          <mwl-calendar-day-view-hour-segment\n            *ngFor=\"let segment of hour.segments\"\n            [segment]=\"segment\"\n            [locale]=\"locale\"\n            [customTemplate]=\"hourSegmentTemplate\"\n            (mwlClick)=\"hourSegmentClicked.emit({date: segment.date})\"\n            [class.cal-drag-over]=\"segment.dragOver\"\n            mwlDroppable\n            (dragEnter)=\"segment.dragOver = true\"\n            (dragLeave)=\"segment.dragOver = false\"\n            (drop)=\"segment.dragOver = false; eventDropped($event, segment)\">\n          </mwl-calendar-day-view-hour-segment>\n        </div>\n      </div>\n    </div>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarDayViewComponent.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ChangeDetectorRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_4__providers_calendarUtils_provider__["a" /* CalendarUtils */], },
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* LOCALE_ID */],] },] },
      ]; };
      CalendarDayViewComponent.propDecorators = {
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'events': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'hourSegments': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayStartHour': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayStartMinute': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayEndHour': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayEndMinute': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventWidth': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'refresh': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventSnapSize': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'hourSegmentTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'allDayEventTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'hourSegmentClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventTimesChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'beforeViewRender': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarDayViewComponent;
  }());
  
  //# sourceMappingURL=calendarDayView.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/day/calendarDayViewEvent.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDayViewEventComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarDayViewEventComponent = /** @class */ (function () {
      function CalendarDayViewEventComponent() {
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      CalendarDayViewEventComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-day-view-event',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-dayEvent=\"dayEvent\"\n      let-tooltipPlacement=\"tooltipPlacement\"\n      let-eventClicked=\"eventClicked\"\n      let-tooltipTemplate=\"tooltipTemplate\"\n      let-tooltipAppendToBody=\"tooltipAppendToBody\">\n      <div\n        class=\"cal-event\"\n        [style.backgroundColor]=\"dayEvent.event.color.secondary\"\n        [style.borderColor]=\"dayEvent.event.color.primary\"\n        [mwlCalendarTooltip]=\"dayEvent.event.title | calendarEventTitle:'dayTooltip':dayEvent.event\"\n        [tooltipPlacement]=\"tooltipPlacement\"\n        [tooltipEvent]=\"dayEvent.event\"\n        [tooltipTemplate]=\"tooltipTemplate\"\n        [tooltipAppendToBody]=\"tooltipAppendToBody\">\n        <mwl-calendar-event-actions [event]=\"dayEvent.event\"></mwl-calendar-event-actions>\n        <mwl-calendar-event-title\n          [event]=\"dayEvent.event\"\n          [customTemplate]=\"eventTitleTemplate\"\n          view=\"day\"\n          (mwlClick)=\"eventClicked.emit()\">\n        </mwl-calendar-event-title>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        dayEvent: dayEvent,\n        tooltipPlacement: tooltipPlacement,\n        eventClicked: eventClicked,\n        tooltipTemplate: tooltipTemplate,\n        tooltipAppendToBody: tooltipAppendToBody\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarDayViewEventComponent.ctorParameters = function () { return []; };
      CalendarDayViewEventComponent.propDecorators = {
          'dayEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarDayViewEventComponent;
  }());
  
  //# sourceMappingURL=calendarDayViewEvent.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/day/calendarDayViewHourSegment.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDayViewHourSegmentComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarDayViewHourSegmentComponent = /** @class */ (function () {
      function CalendarDayViewHourSegmentComponent() {
      }
      CalendarDayViewHourSegmentComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-day-view-hour-segment',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-segment=\"segment\"\n      let-locale=\"locale\">\n      <div\n        class=\"cal-hour-segment\"\n        [class.cal-hour-start]=\"segment.isStart\"\n        [class.cal-after-hour-start]=\"!segment.isStart\"\n        [ngClass]=\"segment.cssClass\">\n        <div class=\"cal-time\">\n          {{ segment.date | calendarDate:'dayViewHour':locale }}\n        </div>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        segment: segment,\n        locale: locale\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarDayViewHourSegmentComponent.ctorParameters = function () { return []; };
      CalendarDayViewHourSegmentComponent.propDecorators = {
          'segment': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      };
      return CalendarDayViewHourSegmentComponent;
  }());
  
  //# sourceMappingURL=calendarDayViewHourSegment.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/month/calendarMonthCell.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarMonthCellComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarMonthCellComponent = /** @class */ (function () {
      function CalendarMonthCellComponent() {
          this.highlightDay = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.unhighlightDay = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      /**
       * @hidden
       */
      CalendarMonthCellComponent.prototype.onEventClick = function (mouseEvent, calendarEvent) {
          if (mouseEvent.stopPropagation) {
              mouseEvent.stopPropagation();
          }
          this.eventClicked.emit({ event: calendarEvent });
      };
      CalendarMonthCellComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-month-cell',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-day=\"day\"\n      let-openDay=\"openDay\"\n      let-locale=\"locale\"\n      let-tooltipPlacement=\"tooltipPlacement\"\n      let-highlightDay=\"highlightDay\"\n      let-unhighlightDay=\"unhighlightDay\"\n      let-eventClicked=\"eventClicked\"\n      let-tooltipTemplate=\"tooltipTemplate\"\n      let-tooltipAppendToBody=\"tooltipAppendToBody\">\n      <div class=\"cal-cell-top\">\n        <span class=\"cal-day-badge\" *ngIf=\"day.badgeTotal > 0\">{{ day.badgeTotal }}</span>\n        <span class=\"cal-day-number\">{{ day.date | calendarDate:'monthViewDayNumber':locale }}</span>\n      </div>\n      <div class=\"cal-events\" *ngIf=\"day.events.length > 0\">\n        <div\n          class=\"cal-event\"\n          *ngFor=\"let event of day.events\"\n          [style.backgroundColor]=\"event.color.primary\"\n          [ngClass]=\"event?.cssClass\"\n          (mouseenter)=\"highlightDay.emit({event: event})\"\n          (mouseleave)=\"unhighlightDay.emit({event: event})\"\n          [mwlCalendarTooltip]=\"event.title | calendarEventTitle:'monthTooltip':event\"\n          [tooltipPlacement]=\"tooltipPlacement\"\n          [tooltipEvent]=\"event\"\n          [tooltipTemplate]=\"tooltipTemplate\"\n          [tooltipAppendToBody]=\"tooltipAppendToBody\"\n          mwlDraggable\n          [dropData]=\"{event: event}\"\n          [dragAxis]=\"{x: event.draggable, y: event.draggable}\"\n          (mwlClick)=\"onEventClick($event, event)\">\n        </div>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        day: day,\n        openDay: openDay,\n        locale: locale,\n        tooltipPlacement: tooltipPlacement,\n        highlightDay: highlightDay,\n        unhighlightDay: unhighlightDay,\n        eventClicked: eventClicked,\n        tooltipTemplate: tooltipTemplate,\n        tooltipAppendToBody: tooltipAppendToBody\n      }\">\n    </ng-template>\n  ",
                      host: {
                          class: 'cal-cell cal-day-cell',
                          '[class.cal-past]': 'day.isPast',
                          '[class.cal-today]': 'day.isToday',
                          '[class.cal-future]': 'day.isFuture',
                          '[class.cal-weekend]': 'day.isWeekend',
                          '[class.cal-in-month]': 'day.inMonth',
                          '[class.cal-out-month]': '!day.inMonth',
                          '[class.cal-has-events]': 'day.events.length > 0',
                          '[class.cal-open]': 'day === openDay',
                          '[style.backgroundColor]': 'day.backgroundColor'
                      }
                  },] },
      ];
      /** @nocollapse */
      CalendarMonthCellComponent.ctorParameters = function () { return []; };
      CalendarMonthCellComponent.propDecorators = {
          'day': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'openDay': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'highlightDay': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'unhighlightDay': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarMonthCellComponent;
  }());
  
  //# sourceMappingURL=calendarMonthCell.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/month/calendarMonthView.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarMonthViewComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_is_same_day__ = __webpack_require__("../../../../date-fns/is_same_day/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_is_same_day___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_is_same_day__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_set_date__ = __webpack_require__("../../../../date-fns/set_date/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_set_date___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_date_fns_set_date__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_set_month__ = __webpack_require__("../../../../date-fns/set_month/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_set_month___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_date_fns_set_month__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_date_fns_set_year__ = __webpack_require__("../../../../date-fns/set_year/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_date_fns_set_year___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_date_fns_set_year__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_date_fns_get_date__ = __webpack_require__("../../../../date-fns/get_date/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_date_fns_get_date___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_date_fns_get_date__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_date_fns_get_month__ = __webpack_require__("../../../../date-fns/get_month/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_date_fns_get_month___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_date_fns_get_month__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_date_fns_get_year__ = __webpack_require__("../../../../date-fns/get_year/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_date_fns_get_year___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_date_fns_get_year__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_date_fns_difference_in_seconds__ = __webpack_require__("../../../../date-fns/difference_in_seconds/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_date_fns_difference_in_seconds___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_date_fns_difference_in_seconds__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_date_fns_add_seconds__ = __webpack_require__("../../../../date-fns/add_seconds/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_date_fns_add_seconds___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_date_fns_add_seconds__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__providers_calendarUtils_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js");
  
  
  
  
  
  
  
  
  
  
  
  /**
   * Shows all events on a given month. Example usage:
   *
   * ```typescript
   * <mwl-calendar-month-view
   *  [viewDate]="viewDate"
   *  [events]="events">
   * </mwl-calendar-month-view>
   * ```
   */
  var CalendarMonthViewComponent = /** @class */ (function () {
      /**
       * @hidden
       */
      function CalendarMonthViewComponent(cdr, utils, locale) {
          this.cdr = cdr;
          this.utils = utils;
          /**
           * An array of events to display on view.
           * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
           */
          this.events = [];
          /**
           * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view
           */
          this.excludeDays = [];
          /**
           * Whether the events list for the day of the `viewDate` option is visible or not
           */
          this.activeDayIsOpen = false;
          /**
           * The placement of the event tooltip
           */
          this.tooltipPlacement = 'top';
          /**
           * Whether to append tooltips to the body or next to the trigger element
           */
          this.tooltipAppendToBody = true;
          /**
           * An output that will be called before the view is rendered for the current month.
           * If you add the `cssClass` property to a day in the body it will add that class to the cell element in the template
           */
          this.beforeViewRender = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when the day cell is clicked
           */
          this.dayClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when the event title is clicked
           */
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when an event is dragged and dropped
           */
          this.eventTimesChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.locale = locale;
      }
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.ngOnInit = function () {
          var _this = this;
          if (this.refresh) {
              this.refreshSubscription = this.refresh.subscribe(function () {
                  _this.refreshAll();
                  _this.cdr.markForCheck();
              });
          }
      };
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.ngOnChanges = function (changes) {
          if (changes.viewDate || changes.excludeDays || changes.weekendDays) {
              this.refreshHeader();
          }
          if (changes.viewDate ||
              changes.events ||
              changes.excludeDays ||
              changes.weekendDays) {
              this.refreshBody();
          }
          if (changes.activeDayIsOpen ||
              changes.viewDate ||
              changes.events ||
              changes.excludeDays) {
              this.checkActiveDayIsOpen();
          }
      };
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.ngOnDestroy = function () {
          if (this.refreshSubscription) {
              this.refreshSubscription.unsubscribe();
          }
      };
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.toggleDayHighlight = function (event, isHighlighted) {
          this.view.days.forEach(function (day) {
              if (isHighlighted && day.events.indexOf(event) > -1) {
                  day.backgroundColor = event.color.secondary;
              }
              else {
                  delete day.backgroundColor;
              }
          });
      };
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.eventDropped = function (day, event) {
          var year = __WEBPACK_IMPORTED_MODULE_7_date_fns_get_year___default()(day.date);
          var month = __WEBPACK_IMPORTED_MODULE_6_date_fns_get_month___default()(day.date);
          var date = __WEBPACK_IMPORTED_MODULE_5_date_fns_get_date___default()(day.date);
          var newStart = __WEBPACK_IMPORTED_MODULE_2_date_fns_set_date___default()(__WEBPACK_IMPORTED_MODULE_3_date_fns_set_month___default()(__WEBPACK_IMPORTED_MODULE_4_date_fns_set_year___default()(event.start, year), month), date);
          var newEnd;
          if (event.end) {
              var secondsDiff = __WEBPACK_IMPORTED_MODULE_8_date_fns_difference_in_seconds___default()(newStart, event.start);
              newEnd = __WEBPACK_IMPORTED_MODULE_9_date_fns_add_seconds___default()(event.end, secondsDiff);
          }
          this.eventTimesChanged.emit({ event: event, newStart: newStart, newEnd: newEnd });
      };
      /**
       * @hidden
       */
      CalendarMonthViewComponent.prototype.handleDayClick = function (clickEvent, day) {
          // when using hammerjs, stopPropagation doesn't work. See https://github.com/mattlewis92/angular-calendar/issues/318
          if (!clickEvent.target.classList.contains('cal-event')) {
              this.dayClicked.emit({ day: day });
          }
      };
      CalendarMonthViewComponent.prototype.refreshHeader = function () {
          this.columnHeaders = this.utils.getWeekViewHeader({
              viewDate: this.viewDate,
              weekStartsOn: this.weekStartsOn,
              excluded: this.excludeDays,
              weekendDays: this.weekendDays
          });
          this.emitBeforeViewRender();
      };
      CalendarMonthViewComponent.prototype.refreshBody = function () {
          this.view = this.utils.getMonthView({
              events: this.events,
              viewDate: this.viewDate,
              weekStartsOn: this.weekStartsOn,
              excluded: this.excludeDays,
              weekendDays: this.weekendDays
          });
          this.emitBeforeViewRender();
      };
      CalendarMonthViewComponent.prototype.checkActiveDayIsOpen = function () {
          var _this = this;
          if (this.activeDayIsOpen === true) {
              this.openDay = this.view.days.find(function (day) {
                  return __WEBPACK_IMPORTED_MODULE_1_date_fns_is_same_day___default()(day.date, _this.viewDate);
              });
              var index = this.view.days.indexOf(this.openDay);
              this.openRowIndex =
                  Math.floor(index / this.view.totalDaysVisibleInWeek) *
                      this.view.totalDaysVisibleInWeek;
          }
          else {
              this.openRowIndex = null;
              this.openDay = null;
          }
      };
      CalendarMonthViewComponent.prototype.refreshAll = function () {
          this.columnHeaders = null;
          this.view = null;
          this.refreshHeader();
          this.refreshBody();
          this.checkActiveDayIsOpen();
      };
      CalendarMonthViewComponent.prototype.emitBeforeViewRender = function () {
          if (this.columnHeaders && this.view) {
              this.beforeViewRender.emit({
                  header: this.columnHeaders,
                  body: this.view.days
              });
          }
      };
      CalendarMonthViewComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-month-view',
                      template: "\n    <div class=\"cal-month-view\">\n      <mwl-calendar-month-view-header\n        [days]=\"columnHeaders\"\n        [locale]=\"locale\"\n        [customTemplate]=\"headerTemplate\">\n      </mwl-calendar-month-view-header>\n      <div class=\"cal-days\">\n        <div *ngFor=\"let rowIndex of view.rowOffsets\">\n          <div class=\"cal-cell-row\">\n            <mwl-calendar-month-cell\n              *ngFor=\"let day of view.days | slice : rowIndex : rowIndex + (view.totalDaysVisibleInWeek)\"\n              [class.cal-drag-over]=\"day.dragOver\"\n              [ngClass]=\"day?.cssClass\"\n              [day]=\"day\"\n              [openDay]=\"openDay\"\n              [locale]=\"locale\"\n              [tooltipPlacement]=\"tooltipPlacement\"\n              [tooltipAppendToBody]=\"tooltipAppendToBody\"\n              [tooltipTemplate]=\"tooltipTemplate\"\n              [customTemplate]=\"cellTemplate\"\n              (click)=\"handleDayClick($event, day)\"\n              (highlightDay)=\"toggleDayHighlight($event.event, true)\"\n              (unhighlightDay)=\"toggleDayHighlight($event.event, false)\"\n              mwlDroppable\n              (dragEnter)=\"day.dragOver = true\"\n              (dragLeave)=\"day.dragOver = false\"\n              (drop)=\"day.dragOver = false; eventDropped(day, $event.dropData.event)\"\n              (eventClicked)=\"eventClicked.emit({event: $event.event})\">\n            </mwl-calendar-month-cell>\n          </div>\n          <mwl-calendar-open-day-events\n            [isOpen]=\"openRowIndex === rowIndex\"\n            [events]=\"openDay?.events\"\n            [customTemplate]=\"openDayEventsTemplate\"\n            [eventTitleTemplate]=\"eventTitleTemplate\"\n            (eventClicked)=\"eventClicked.emit({event: $event.event})\">\n          </mwl-calendar-open-day-events>\n        </div>\n      </div>\n    </div>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarMonthViewComponent.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ChangeDetectorRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_10__providers_calendarUtils_provider__["a" /* CalendarUtils */], },
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* LOCALE_ID */],] },] },
      ]; };
      CalendarMonthViewComponent.propDecorators = {
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'events': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'excludeDays': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'activeDayIsOpen': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'refresh': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'weekStartsOn': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'headerTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'cellTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'openDayEventsTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'weekendDays': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'beforeViewRender': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'dayClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventTimesChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarMonthViewComponent;
  }());
  
  //# sourceMappingURL=calendarMonthView.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/month/calendarMonthViewHeader.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarMonthViewHeaderComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarMonthViewHeaderComponent = /** @class */ (function () {
      function CalendarMonthViewHeaderComponent() {
      }
      CalendarMonthViewHeaderComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-month-view-header',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-days=\"days\"\n      let-locale=\"locale\">\n      <div class=\"cal-cell-row cal-header\">\n        <div\n          class=\"cal-cell\"\n          *ngFor=\"let day of days\"\n          [class.cal-past]=\"day.isPast\"\n          [class.cal-today]=\"day.isToday\"\n          [class.cal-future]=\"day.isFuture\"\n          [class.cal-weekend]=\"day.isWeekend\"\n          [ngClass]=\"day.cssClass\">\n          {{ day.date | calendarDate:'monthViewColumnHeader':locale }}\n        </div>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{days: days, locale: locale}\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarMonthViewHeaderComponent.ctorParameters = function () { return []; };
      CalendarMonthViewHeaderComponent.propDecorators = {
          'days': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      };
      return CalendarMonthViewHeaderComponent;
  }());
  
  //# sourceMappingURL=calendarMonthViewHeader.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/month/calendarOpenDayEvents.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarOpenDayEventsComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_animations__ = __webpack_require__("../../../animations/@angular/animations.es5.js");
  
  
  var CalendarOpenDayEventsComponent = /** @class */ (function () {
      function CalendarOpenDayEventsComponent() {
          this.isOpen = false;
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      CalendarOpenDayEventsComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-open-day-events',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-events=\"events\"\n      let-eventClicked=\"eventClicked\">\n      <div\n        *ngFor=\"let event of events\"\n        [ngClass]=\"event?.cssClass\"\n        mwlDraggable\n        [dropData]=\"{event: event}\"\n        [dragAxis]=\"{x: event.draggable, y: event.draggable}\">\n        <span\n          class=\"cal-event\"\n          [style.backgroundColor]=\"event.color.primary\">\n        </span>\n        <mwl-calendar-event-title\n          [event]=\"event\"\n          [customTemplate]=\"eventTitleTemplate\"\n          view=\"month\"\n          (mwlClick)=\"eventClicked.emit({event: event})\">\n        </mwl-calendar-event-title>\n        <mwl-calendar-event-actions [event]=\"event\"></mwl-calendar-event-actions>\n      </div>\n    </ng-template>\n    <div class=\"cal-open-day-events\" [@collapse] *ngIf=\"isOpen\">\n      <ng-template\n        [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n        [ngTemplateOutletContext]=\"{\n          events: events,\n          eventClicked: eventClicked\n        }\">\n      </ng-template>\n    </div>\n  ",
                      animations: [
                          Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["j" /* trigger */])('collapse', [
                              Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["i" /* transition */])('void => *', [
                                  Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["h" /* style */])({ height: 0, overflow: 'hidden' }),
                                  Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["e" /* animate */])('150ms', Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["h" /* style */])({ height: '*' }))
                              ]),
                              Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["i" /* transition */])('* => void', [
                                  Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["h" /* style */])({ height: '*', overflow: 'hidden' }),
                                  Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["e" /* animate */])('150ms', Object(__WEBPACK_IMPORTED_MODULE_1__angular_animations__["h" /* style */])({ height: 0 }))
                              ])
                          ])
                      ]
                  },] },
      ];
      /** @nocollapse */
      CalendarOpenDayEventsComponent.ctorParameters = function () { return []; };
      CalendarOpenDayEventsComponent.propDecorators = {
          'isOpen': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'events': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarOpenDayEventsComponent;
  }());
  
  //# sourceMappingURL=calendarOpenDayEvents.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/week/calendarWeekView.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarWeekViewComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days__ = __webpack_require__("../../../../date-fns/add_days/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_add_days__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__providers_calendarDragHelper_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarDragHelper.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__providers_calendarResizeHelper_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarResizeHelper.provider.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__providers_calendarUtils_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js");
  
  
  
  
  
  /**
   * Shows all events on a given week. Example usage:
   *
   * ```typescript
   * <mwl-calendar-week-view
   *  [viewDate]="viewDate"
   *  [events]="events">
   * </mwl-calendar-week-view>
   * ```
   */
  var CalendarWeekViewComponent = /** @class */ (function () {
      /**
       * @hidden
       */
      function CalendarWeekViewComponent(cdr, utils, locale) {
          this.cdr = cdr;
          this.utils = utils;
          /**
           * An array of events to display on view
           * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
           */
          this.events = [];
          /**
           * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view
           */
          this.excludeDays = [];
          /**
           * The placement of the event tooltip
           */
          this.tooltipPlacement = 'bottom';
          /**
           * Whether to append tooltips to the body or next to the trigger element
           */
          this.tooltipAppendToBody = true;
          /**
           * The precision to display events.
           * `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding
           */
          this.precision = 'days';
          /**
           * Called when a header week day is clicked. Adding a `cssClass` property on `$event.day` will add that class to the header element
           */
          this.dayHeaderClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when the event title is clicked
           */
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called when an event is resized or dragged and dropped
           */
          this.eventTimesChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * An output that will be called before the view is rendered for the current week.
           * If you add the `cssClass` property to a day in the header it will add that class to the cell element in the template
           */
          this.beforeViewRender = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * @hidden
           */
          this.eventRows = [];
          /**
           * @hidden
           */
          this.currentResizes = new Map();
          this.locale = locale;
      }
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.ngOnInit = function () {
          var _this = this;
          if (this.refresh) {
              this.refreshSubscription = this.refresh.subscribe(function () {
                  _this.refreshAll();
                  _this.cdr.markForCheck();
              });
          }
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.ngOnChanges = function (changes) {
          if (changes.viewDate || changes.excludeDays || changes.weekendDays) {
              this.refreshHeader();
          }
          if (changes.events || changes.viewDate || changes.excludeDays) {
              this.refreshBody();
          }
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.ngOnDestroy = function () {
          if (this.refreshSubscription) {
              this.refreshSubscription.unsubscribe();
          }
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.resizeStarted = function (weekViewContainer, weekEvent, resizeEvent) {
          this.currentResizes.set(weekEvent, {
              originalOffset: weekEvent.offset,
              originalSpan: weekEvent.span,
              edge: typeof resizeEvent.edges.left !== 'undefined' ? 'left' : 'right'
          });
          this.dayColumnWidth = this.getDayColumnWidth(weekViewContainer);
          var resizeHelper = new __WEBPACK_IMPORTED_MODULE_3__providers_calendarResizeHelper_provider__["a" /* CalendarResizeHelper */](weekViewContainer, this.dayColumnWidth);
          this.validateResize = function (_a) {
              var rectangle = _a.rectangle;
              return resizeHelper.validateResize({ rectangle: rectangle });
          };
          this.cdr.markForCheck();
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.resizing = function (weekEvent, resizeEvent, dayWidth) {
          var currentResize = this.currentResizes.get(weekEvent);
          if (resizeEvent.edges.left) {
              var diff = Math.round(+resizeEvent.edges.left / dayWidth);
              weekEvent.offset = currentResize.originalOffset + diff;
              weekEvent.span = currentResize.originalSpan - diff;
          }
          else if (resizeEvent.edges.right) {
              var diff = Math.round(+resizeEvent.edges.right / dayWidth);
              weekEvent.span = currentResize.originalSpan + diff;
          }
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.resizeEnded = function (weekEvent) {
          var currentResize = this.currentResizes.get(weekEvent);
          var daysDiff;
          if (currentResize.edge === 'left') {
              daysDiff = weekEvent.offset - currentResize.originalOffset;
          }
          else {
              daysDiff = weekEvent.span - currentResize.originalSpan;
          }
          weekEvent.offset = currentResize.originalOffset;
          weekEvent.span = currentResize.originalSpan;
          var newStart = weekEvent.event.start;
          var newEnd = weekEvent.event.end;
          if (currentResize.edge === 'left') {
              newStart = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default()(newStart, daysDiff);
          }
          else if (newEnd) {
              newEnd = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default()(newEnd, daysDiff);
          }
          this.eventTimesChanged.emit({ newStart: newStart, newEnd: newEnd, event: weekEvent.event });
          this.currentResizes.delete(weekEvent);
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.eventDragged = function (weekEvent, draggedByPx, dayWidth) {
          var daysDragged = draggedByPx / dayWidth;
          var newStart = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default()(weekEvent.event.start, daysDragged);
          var newEnd;
          if (weekEvent.event.end) {
              newEnd = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default()(weekEvent.event.end, daysDragged);
          }
          this.eventTimesChanged.emit({ newStart: newStart, newEnd: newEnd, event: weekEvent.event });
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.getDayColumnWidth = function (eventRowContainer) {
          return Math.floor(eventRowContainer.offsetWidth / this.days.length);
      };
      /**
       * @hidden
       */
      CalendarWeekViewComponent.prototype.dragStart = function (weekViewContainer, event) {
          var _this = this;
          this.dayColumnWidth = this.getDayColumnWidth(weekViewContainer);
          var dragHelper = new __WEBPACK_IMPORTED_MODULE_2__providers_calendarDragHelper_provider__["a" /* CalendarDragHelper */](weekViewContainer, event);
          this.validateDrag = function (_a) {
              var x = _a.x, y = _a.y;
              return _this.currentResizes.size === 0 && dragHelper.validateDrag({ x: x, y: y });
          };
          this.cdr.markForCheck();
      };
      CalendarWeekViewComponent.prototype.refreshHeader = function () {
          this.days = this.utils.getWeekViewHeader({
              viewDate: this.viewDate,
              weekStartsOn: this.weekStartsOn,
              excluded: this.excludeDays,
              weekendDays: this.weekendDays
          });
          this.beforeViewRender.emit({
              header: this.days
          });
      };
      CalendarWeekViewComponent.prototype.refreshBody = function () {
          this.eventRows = this.utils.getWeekView({
              events: this.events,
              viewDate: this.viewDate,
              weekStartsOn: this.weekStartsOn,
              excluded: this.excludeDays,
              precision: this.precision,
              absolutePositionedEvents: true
          });
      };
      CalendarWeekViewComponent.prototype.refreshAll = function () {
          this.refreshHeader();
          this.refreshBody();
      };
      CalendarWeekViewComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-week-view',
                      template: "\n    <div class=\"cal-week-view\" #weekViewContainer>\n      <mwl-calendar-week-view-header\n        [days]=\"days\"\n        [locale]=\"locale\"\n        [customTemplate]=\"headerTemplate\"\n        (dayHeaderClicked)=\"dayHeaderClicked.emit($event)\"\n        (eventDropped)=\"eventTimesChanged.emit($event)\">\n      </mwl-calendar-week-view-header>\n      <div *ngFor=\"let eventRow of eventRows\" #eventRowContainer class=\"cal-events-row\">\n        <div\n          *ngFor=\"let weekEvent of eventRow.row\"\n          #event\n          class=\"cal-event-container\"\n          [class.cal-draggable]=\"weekEvent.event.draggable\"\n          [class.cal-starts-within-week]=\"!weekEvent.startsBeforeWeek\"\n          [class.cal-ends-within-week]=\"!weekEvent.endsAfterWeek\"\n          [ngClass]=\"weekEvent.event?.cssClass\"\n          [style.width]=\"((100 / days.length) * weekEvent.span) + '%'\"\n          [style.marginLeft]=\"((100 / days.length) * weekEvent.offset) + '%'\"\n          mwlResizable\n          [resizeEdges]=\"{left: weekEvent.event?.resizable?.beforeStart, right: weekEvent.event?.resizable?.afterEnd}\"\n          [resizeSnapGrid]=\"{left: dayColumnWidth, right: dayColumnWidth}\"\n          [validateResize]=\"validateResize\"\n          (resizeStart)=\"resizeStarted(weekViewContainer, weekEvent, $event)\"\n          (resizing)=\"resizing(weekEvent, $event, dayColumnWidth)\"\n          (resizeEnd)=\"resizeEnded(weekEvent)\"\n          mwlDraggable\n          [dragAxis]=\"{x: weekEvent.event.draggable && currentResizes.size === 0, y: false}\"\n          [dragSnapGrid]=\"{x: dayColumnWidth}\"\n          [validateDrag]=\"validateDrag\"\n          (dragStart)=\"dragStart(weekViewContainer, event)\"\n          (dragEnd)=\"eventDragged(weekEvent, $event.x, dayColumnWidth)\">\n          <mwl-calendar-week-view-event\n            [weekEvent]=\"weekEvent\"\n            [tooltipPlacement]=\"tooltipPlacement\"\n            [tooltipTemplate]=\"tooltipTemplate\"\n            [tooltipAppendToBody]=\"tooltipAppendToBody\"\n            [customTemplate]=\"eventTemplate\"\n            [eventTitleTemplate]=\"eventTitleTemplate\"\n            (eventClicked)=\"eventClicked.emit({event: weekEvent.event})\">\n          </mwl-calendar-week-view-event>\n        </div>\n      </div>\n    </div>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarWeekViewComponent.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ChangeDetectorRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_4__providers_calendarUtils_provider__["a" /* CalendarUtils */], },
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* LOCALE_ID */],] },] },
      ]; };
      CalendarWeekViewComponent.propDecorators = {
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'events': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'excludeDays': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'refresh': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'weekStartsOn': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'headerTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'precision': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'weekendDays': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayHeaderClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventTimesChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'beforeViewRender': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarWeekViewComponent;
  }());
  
  //# sourceMappingURL=calendarWeekView.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/week/calendarWeekViewEvent.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarWeekViewEventComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarWeekViewEventComponent = /** @class */ (function () {
      function CalendarWeekViewEventComponent() {
          this.eventClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      CalendarWeekViewEventComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-week-view-event',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-weekEvent=\"weekEvent\"\n      let-tooltipPlacement=\"tooltipPlacement\"\n      let-eventClicked=\"eventClicked\"\n      let-tooltipTemplate=\"tooltipTemplate\"\n      let-tooltipAppendToBody=\"tooltipAppendToBody\">\n      <div\n        class=\"cal-event\"\n        [style.backgroundColor]=\"weekEvent.event.color.secondary\"\n        [mwlCalendarTooltip]=\"weekEvent.event.title | calendarEventTitle:'weekTooltip':weekEvent.event\"\n        [tooltipPlacement]=\"tooltipPlacement\"\n        [tooltipEvent]=\"weekEvent.event\"\n        [tooltipTemplate]=\"tooltipTemplate\"\n        [tooltipAppendToBody]=\"tooltipAppendToBody\">\n        <mwl-calendar-event-actions [event]=\"weekEvent.event\"></mwl-calendar-event-actions>\n        <mwl-calendar-event-title\n          [event]=\"weekEvent.event\"\n          [customTemplate]=\"eventTitleTemplate\"\n          view=\"week\"\n          (mwlClick)=\"eventClicked.emit()\">\n        </mwl-calendar-event-title>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        weekEvent: weekEvent,\n        tooltipPlacement: tooltipPlacement,\n        eventClicked: eventClicked,\n        tooltipTemplate: tooltipTemplate,\n        tooltipAppendToBody: tooltipAppendToBody\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarWeekViewEventComponent.ctorParameters = function () { return []; };
      CalendarWeekViewEventComponent.propDecorators = {
          'weekEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipAppendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventTitleTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'tooltipTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'eventClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarWeekViewEventComponent;
  }());
  
  //# sourceMappingURL=calendarWeekViewEvent.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/components/week/calendarWeekViewHeader.component.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarWeekViewHeaderComponent; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var CalendarWeekViewHeaderComponent = /** @class */ (function () {
      function CalendarWeekViewHeaderComponent() {
          this.dayHeaderClicked = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.eventDropped = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      CalendarWeekViewHeaderComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      selector: 'mwl-calendar-week-view-header',
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-days=\"days\"\n      let-locale=\"locale\"\n      let-dayHeaderClicked=\"dayHeaderClicked\"\n      let-eventDropped=\"eventDropped\">\n      <div class=\"cal-day-headers\">\n        <div\n          class=\"cal-header\"\n          *ngFor=\"let day of days\"\n          [class.cal-past]=\"day.isPast\"\n          [class.cal-today]=\"day.isToday\"\n          [class.cal-future]=\"day.isFuture\"\n          [class.cal-weekend]=\"day.isWeekend\"\n          [class.cal-drag-over]=\"day.dragOver\"\n          [ngClass]=\"day.cssClass\"\n          (mwlClick)=\"dayHeaderClicked.emit({day: day})\"\n          mwlDroppable\n          (dragEnter)=\"day.dragOver = true\"\n          (dragLeave)=\"day.dragOver = false\"\n          (drop)=\"day.dragOver = false; eventDropped.emit({event: $event.dropData.event, newStart: day.date})\">\n          <b>{{ day.date | calendarDate:'weekViewColumnHeader':locale }}</b><br>\n          <span>{{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}</span>\n        </div>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{days: days, locale: locale, dayHeaderClicked: dayHeaderClicked, eventDropped: eventDropped}\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarWeekViewHeaderComponent.ctorParameters = function () { return []; };
      CalendarWeekViewHeaderComponent.propDecorators = {
          'days': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dayHeaderClicked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'eventDropped': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return CalendarWeekViewHeaderComponent;
  }());
  
  //# sourceMappingURL=calendarWeekViewHeader.component.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/directives/calendarNextView.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarNextViewDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days__ = __webpack_require__("../../../../date-fns/add_days/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_add_days__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_add_weeks__ = __webpack_require__("../../../../date-fns/add_weeks/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_add_weeks___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_date_fns_add_weeks__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_add_months__ = __webpack_require__("../../../../date-fns/add_months/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_add_months___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_date_fns_add_months__);
  
  
  
  
  /**
   * Change the view date to the next view. For example:
   *
   * ```typescript
   * <button
   *  mwlCalendarNextView
   *  [(viewDate)]="viewDate"
   *  [view]="view">
   *  Next
   * </button>
   * ```
   */
  var CalendarNextViewDirective = /** @class */ (function () {
      function CalendarNextViewDirective() {
          /**
           * Called when the view date is changed
           */
          this.viewDateChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      /**
       * @hidden
       */
      CalendarNextViewDirective.prototype.onClick = function () {
          var addFn = {
              day: __WEBPACK_IMPORTED_MODULE_1_date_fns_add_days___default.a,
              week: __WEBPACK_IMPORTED_MODULE_2_date_fns_add_weeks___default.a,
              month: __WEBPACK_IMPORTED_MODULE_3_date_fns_add_months___default.a
          }[this.view];
          this.viewDateChange.emit(addFn(this.viewDate, 1));
      };
      CalendarNextViewDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlCalendarNextView]'
                  },] },
      ];
      /** @nocollapse */
      CalendarNextViewDirective.ctorParameters = function () { return []; };
      CalendarNextViewDirective.propDecorators = {
          'view': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'viewDateChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['click',] },],
      };
      return CalendarNextViewDirective;
  }());
  
  //# sourceMappingURL=calendarNextView.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/directives/calendarPreviousView.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarPreviousViewDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_sub_days__ = __webpack_require__("../../../../date-fns/sub_days/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_sub_days___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_sub_days__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_sub_weeks__ = __webpack_require__("../../../../date-fns/sub_weeks/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_sub_weeks___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_date_fns_sub_weeks__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_sub_months__ = __webpack_require__("../../../../date-fns/sub_months/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_sub_months___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_date_fns_sub_months__);
  
  
  
  
  /**
   * Change the view date to the previous view. For example:
   *
   * ```typescript
   * <button
   *  mwlCalendarPreviousView
   *  [(viewDate)]="viewDate"
   *  [view]="view">
   *  Previous
   * </button>
   * ```
   */
  var CalendarPreviousViewDirective = /** @class */ (function () {
      function CalendarPreviousViewDirective() {
          /**
           * Called when the view date is changed
           */
          this.viewDateChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      /**
       * @hidden
       */
      CalendarPreviousViewDirective.prototype.onClick = function () {
          var subFn = {
              day: __WEBPACK_IMPORTED_MODULE_1_date_fns_sub_days___default.a,
              week: __WEBPACK_IMPORTED_MODULE_2_date_fns_sub_weeks___default.a,
              month: __WEBPACK_IMPORTED_MODULE_3_date_fns_sub_months___default.a
          }[this.view];
          this.viewDateChange.emit(subFn(this.viewDate, 1));
      };
      CalendarPreviousViewDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlCalendarPreviousView]'
                  },] },
      ];
      /** @nocollapse */
      CalendarPreviousViewDirective.ctorParameters = function () { return []; };
      CalendarPreviousViewDirective.propDecorators = {
          'view': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'viewDateChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['click',] },],
      };
      return CalendarPreviousViewDirective;
  }());
  
  //# sourceMappingURL=calendarPreviousView.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/directives/calendarToday.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarTodayDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_start_of_today__ = __webpack_require__("../../../../date-fns/start_of_today/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_start_of_today___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_start_of_today__);
  
  
  /**
   * Change the view date to the current day. For example:
   *
   * ```typescript
   * <button
   *  mwlCalendarToday
   *  [(viewDate)]="viewDate">
   *  Today
   * </button>
   * ```
   */
  var CalendarTodayDirective = /** @class */ (function () {
      function CalendarTodayDirective() {
          /**
           * Called when the view date is changed
           */
          this.viewDateChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      /**
       * @hidden
       */
      CalendarTodayDirective.prototype.onClick = function () {
          this.viewDateChange.emit(__WEBPACK_IMPORTED_MODULE_1_date_fns_start_of_today___default()());
      };
      CalendarTodayDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlCalendarToday]'
                  },] },
      ];
      /** @nocollapse */
      CalendarTodayDirective.ctorParameters = function () { return []; };
      CalendarTodayDirective.propDecorators = {
          'viewDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'viewDateChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['click',] },],
      };
      return CalendarTodayDirective;
  }());
  
  //# sourceMappingURL=calendarToday.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/directives/calendarTooltip.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CalendarTooltipWindowComponent; });
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarTooltipDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__("../../../platform-browser/@angular/platform-browser.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_positioning__ = __webpack_require__("../../../../positioning/dist/positioning.js");
  
  
  
  var CalendarTooltipWindowComponent = /** @class */ (function () {
      function CalendarTooltipWindowComponent() {
      }
      CalendarTooltipWindowComponent.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* Component */], args: [{
                      template: "\n    <ng-template\n      #defaultTemplate\n      let-contents=\"contents\"\n      let-placement=\"placement\"\n      let-event=\"event\">\n      <div class=\"cal-tooltip\" [ngClass]=\"'cal-tooltip-' + placement\">\n        <div class=\"cal-tooltip-arrow\"></div>\n        <div class=\"cal-tooltip-inner\" [innerHtml]=\"contents\"></div>\n      </div>\n    </ng-template>\n    <ng-template\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        contents: contents,\n        placement: placement,\n        event: event\n      }\">\n    </ng-template>\n  "
                  },] },
      ];
      /** @nocollapse */
      CalendarTooltipWindowComponent.ctorParameters = function () { return []; };
      CalendarTooltipWindowComponent.propDecorators = {
          'contents': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'placement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'event': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      };
      return CalendarTooltipWindowComponent;
  }());
  
  var CalendarTooltipDirective = /** @class */ (function () {
      function CalendarTooltipDirective(elementRef, injector, renderer, componentFactoryResolver, viewContainerRef, document //tslint:disable-line
      ) {
          this.elementRef = elementRef;
          this.injector = injector;
          this.renderer = renderer;
          this.viewContainerRef = viewContainerRef;
          this.document = document; //tslint:disable-line
          this.placement = 'top'; // tslint:disable-line no-input-rename
          this.positioning = new __WEBPACK_IMPORTED_MODULE_2_positioning__["a" /* Positioning */]();
          this.tooltipFactory = componentFactoryResolver.resolveComponentFactory(CalendarTooltipWindowComponent);
      }
      CalendarTooltipDirective.prototype.ngOnDestroy = function () {
          this.hide();
      };
      CalendarTooltipDirective.prototype.onMouseOver = function () {
          this.show();
      };
      CalendarTooltipDirective.prototype.onMouseOut = function () {
          this.hide();
      };
      CalendarTooltipDirective.prototype.show = function () {
          var _this = this;
          if (!this.tooltipRef && this.contents) {
              this.tooltipRef = this.viewContainerRef.createComponent(this.tooltipFactory, 0, this.injector, []);
              this.tooltipRef.instance.contents = this.contents;
              this.tooltipRef.instance.placement = this.placement;
              this.tooltipRef.instance.customTemplate = this.customTemplate;
              this.tooltipRef.instance.event = this.event;
              if (this.appendToBody) {
                  this.document.body.appendChild(this.tooltipRef.location.nativeElement);
              }
              requestAnimationFrame(function () {
                  _this.positionTooltip();
              });
          }
      };
      CalendarTooltipDirective.prototype.hide = function () {
          if (this.tooltipRef) {
              this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.tooltipRef.hostView));
              this.tooltipRef = null;
          }
      };
      CalendarTooltipDirective.prototype.positionTooltip = function () {
          if (this.tooltipRef) {
              var targetPosition = this.positioning.positionElements(this.elementRef.nativeElement, this.tooltipRef.location.nativeElement.children[0], this.placement, this.appendToBody);
              var elm = this.tooltipRef.location.nativeElement
                  .children[0];
              this.renderer.setStyle(elm, 'top', targetPosition.top + "px");
              this.renderer.setStyle(elm, 'left', targetPosition.left + "px");
          }
      };
      CalendarTooltipDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlCalendarTooltip]'
                  },] },
      ];
      /** @nocollapse */
      CalendarTooltipDirective.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["E" /* Injector */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_3" /* Renderer2 */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ComponentFactoryResolver */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_19" /* ViewContainerRef */], },
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__["b" /* DOCUMENT */],] },] },
      ]; };
      CalendarTooltipDirective.propDecorators = {
          'contents': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */], args: ['mwlCalendarTooltip',] },],
          'placement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */], args: ['tooltipPlacement',] },],
          'customTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */], args: ['tooltipTemplate',] },],
          'event': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */], args: ['tooltipEvent',] },],
          'appendToBody': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */], args: ['tooltipAppendToBody',] },],
          'onMouseOver': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['mouseenter',] },],
          'onMouseOut': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['mouseleave',] },],
      };
      return CalendarTooltipDirective;
  }());
  
  //# sourceMappingURL=calendarTooltip.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/directives/click.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ClickDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var ClickDirective = /** @class */ (function () {
      function ClickDirective(renderer, elm) {
          this.renderer = renderer;
          this.elm = elm;
          this.click = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */](); // tslint:disable-line
      }
      ClickDirective.prototype.ngOnInit = function () {
          var _this = this;
          var eventName = typeof window['Hammer'] !== 'undefined' ? 'tap' : 'click';
          this.removeListener = this.renderer.listen(this.elm.nativeElement, eventName, function (event) {
              _this.click.next(event);
          });
      };
      ClickDirective.prototype.ngOnDestroy = function () {
          this.removeListener();
      };
      ClickDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlClick]'
                  },] },
      ];
      /** @nocollapse */
      ClickDirective.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_3" /* Renderer2 */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
      ]; };
      ClickDirective.propDecorators = {
          'click': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */], args: ['mwlClick',] },],
      };
      return ClickDirective;
  }());
  
  //# sourceMappingURL=click.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/index.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__providers_calendarEventTitleFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarEventTitleFormatter.provider.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__providers_calendarMomentDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarMomentDateFormatter.provider.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__providers_calendarNativeDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarNativeDateFormatter.provider.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__providers_calendarDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarDateFormatter.provider.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__providers_calendarUtils_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__calendar_module__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/calendar.module.js");
  /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_5__calendar_module__["a"]; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__components_day_calendarDayView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/day/calendarDayView.component.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__components_month_calendarMonthView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/month/calendarMonthView.component.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_week_calendarWeekView_component__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/components/week/calendarWeekView.component.js");
  /* unused harmony namespace reexport */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_calendar_utils__ = __webpack_require__("../../../../calendar-utils/dist/calendar-utils.js");
  /* unused harmony reexport DAYS_OF_WEEK */
  
  
  
  
  
  
  
  
  
  
  //# sourceMappingURL=index.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/pipes/calendarDate.pipe.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDatePipe; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__providers_calendarDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarDateFormatter.provider.js");
  
  
  /**
   * This pipe is primarily for rendering the current view title. Example usage:
   * ```typescript
   * // where `viewDate` is a `Date` and view is `'month' | 'week' | 'day'`
   * {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}
   * ```
   */
  var CalendarDatePipe = /** @class */ (function () {
      function CalendarDatePipe(dateFormatter, locale) {
          this.dateFormatter = dateFormatter;
          this.locale = locale;
      }
      CalendarDatePipe.prototype.transform = function (date, method, locale) {
          if (locale === void 0) { locale = this.locale; }
          return this.dateFormatter[method]({ date: date, locale: locale });
      };
      CalendarDatePipe.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["Y" /* Pipe */], args: [{
                      name: 'calendarDate'
                  },] },
      ];
      /** @nocollapse */
      CalendarDatePipe.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_1__providers_calendarDateFormatter_provider__["a" /* CalendarDateFormatter */], },
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* LOCALE_ID */],] },] },
      ]; };
      return CalendarDatePipe;
  }());
  
  //# sourceMappingURL=calendarDate.pipe.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/pipes/calendarEventTitle.pipe.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarEventTitlePipe; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__providers_calendarEventTitleFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarEventTitleFormatter.provider.js");
  
  
  var CalendarEventTitlePipe = /** @class */ (function () {
      function CalendarEventTitlePipe(calendarEventTitle) {
          this.calendarEventTitle = calendarEventTitle;
      }
      CalendarEventTitlePipe.prototype.transform = function (title, titleType, event) {
          return this.calendarEventTitle[titleType](event);
      };
      CalendarEventTitlePipe.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["Y" /* Pipe */], args: [{
                      name: 'calendarEventTitle'
                  },] },
      ];
      /** @nocollapse */
      CalendarEventTitlePipe.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_1__providers_calendarEventTitleFormatter_provider__["a" /* CalendarEventTitleFormatter */], },
      ]; };
      return CalendarEventTitlePipe;
  }());
  
  //# sourceMappingURL=calendarEventTitle.pipe.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarDateFormatter.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDateFormatter; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__calendarNativeDateFormatter_provider__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/calendarNativeDateFormatter.provider.js");
  var __extends = (this && this.__extends) || (function () {
      var extendStatics = Object.setPrototypeOf ||
          ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
          function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
      return function (d, b) {
          extendStatics(d, b);
          function __() { this.constructor = d; }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
  })();
  
  /**
   * This class is responsible for all formatting of dates. There are 2 implementations available, the `CalendarNativeDateFormatter` (default) which will use the <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl" target="_blank">Intl</a> API to format dates, or there is the `CalendarMomentDateFormatter` which uses <a href="http://momentjs.com/" target="_blank">moment</a>.
   *
   * If you wish, you may override any of the defaults via angulars DI. For example:
   *
   * ```typescript
   * import { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';
   *
   * class CustomDateFormatter extends CalendarDateFormatter {
   *
   *   public monthViewColumnHeader({date, locale}: DateFormatterParams): string {
   *     return new Intl.DateTimeFormat(locale, {weekday: 'short'}).format(date); // use short week days
   *   }
   *
   * }
   *
   * // in your component that uses the calendar
   * providers: [{
   *   provide: CalendarDateFormatter,
   *   useClass: CustomDateFormatter
   * }]
   * ```
   */
  var CalendarDateFormatter = /** @class */ (function (_super) {
      __extends(CalendarDateFormatter, _super);
      function CalendarDateFormatter() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      return CalendarDateFormatter;
  }(__WEBPACK_IMPORTED_MODULE_0__calendarNativeDateFormatter_provider__["a" /* CalendarNativeDateFormatter */]));
  
  //# sourceMappingURL=calendarDateFormatter.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarDragHelper.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarDragHelper; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/util.js");
  
  var CalendarDragHelper = /** @class */ (function () {
      function CalendarDragHelper(dragContainerElement, draggableElement) {
          this.dragContainerElement = dragContainerElement;
          this.startPosition = draggableElement.getBoundingClientRect();
      }
      CalendarDragHelper.prototype.validateDrag = function (_a) {
          var x = _a.x, y = _a.y;
          var newRect = Object.assign({}, this.startPosition, {
              left: this.startPosition.left + x,
              right: this.startPosition.right + x,
              top: this.startPosition.top + y,
              bottom: this.startPosition.bottom + y
          });
          return Object(__WEBPACK_IMPORTED_MODULE_0__util__["a" /* isInside */])(this.dragContainerElement.getBoundingClientRect(), newRect);
      };
      return CalendarDragHelper;
  }());
  
  //# sourceMappingURL=calendarDragHelper.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarEventTitleFormatter.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarEventTitleFormatter; });
  /**
   * This class is responsible for displaying all event titles within the calendar. You may override any of its methods via angulars DI to suit your requirements. For example:
   *
   * ```typescript
   * import { CalendarEventTitleFormatter, CalendarEvent } from 'angular-calendar';
   *
   * class CustomEventTitleFormatter extends CalendarEventTitleFormatter {
   *
   *   month(event: CalendarEvent): string {
   *     return `Custom prefix: ${event.title}`;
   *   }
   *
   * }
   *
   * // in your component
   * providers: [{
   *  provide: CalendarEventTitleFormatter,
   *  useClass: CustomEventTitleFormatter
   * }]
   * ```
   */
  var CalendarEventTitleFormatter = /** @class */ (function () {
      function CalendarEventTitleFormatter() {
      }
      /**
       * The month view event title.
       */
      CalendarEventTitleFormatter.prototype.month = function (event) {
          return event.title;
      };
      /**
       * The month view event tooltip. Return a falsey value from this to disable the tooltip.
       */
      CalendarEventTitleFormatter.prototype.monthTooltip = function (event) {
          return event.title;
      };
      /**
       * The week view event title.
       */
      CalendarEventTitleFormatter.prototype.week = function (event) {
          return event.title;
      };
      /**
       * The week view event tooltip. Return a falsey value from this to disable the tooltip.
       */
      CalendarEventTitleFormatter.prototype.weekTooltip = function (event) {
          return event.title;
      };
      /**
       * The day view event title.
       */
      CalendarEventTitleFormatter.prototype.day = function (event) {
          return event.title;
      };
      /**
       * The day view event tooltip. Return a falsey value from this to disable the tooltip.
       */
      CalendarEventTitleFormatter.prototype.dayTooltip = function (event) {
          return event.title;
      };
      return CalendarEventTitleFormatter;
  }());
  
  //# sourceMappingURL=calendarEventTitleFormatter.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarMomentDateFormatter.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* unused harmony export MOMENT */
  /* unused harmony export CalendarMomentDateFormatter */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  var MOMENT = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* InjectionToken */]('Moment');
  /**
   * This will use <a href="http://momentjs.com/" target="_blank">moment</a> to do all date formatting. To use this class:
   *
   * ```typescript
   * import { CalendarDateFormatter, CalendarMomentDateFormatter, MOMENT } from 'angular-calendar';
   * import * as moment from 'moment';
   *
   * // in your component
   * provide: [{
   *   provide: MOMENT, useValue: moment
   * }, {
   *   provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter
   * }]
   *
   * ```
   */
  var CalendarMomentDateFormatter = /** @class */ (function () {
      /**
       * @hidden
       */
      function CalendarMomentDateFormatter(moment) {
          this.moment = moment;
      }
      /**
       * The month view header week day labels
       */
      CalendarMomentDateFormatter.prototype.monthViewColumnHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('dddd');
      };
      /**
       * The month view cell day number
       */
      CalendarMomentDateFormatter.prototype.monthViewDayNumber = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('D');
      };
      /**
       * The month view title
       */
      CalendarMomentDateFormatter.prototype.monthViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('MMMM YYYY');
      };
      /**
       * The week view header week day labels
       */
      CalendarMomentDateFormatter.prototype.weekViewColumnHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('dddd');
      };
      /**
       * The week view sub header day and month labels
       */
      CalendarMomentDateFormatter.prototype.weekViewColumnSubHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('D MMM');
      };
      /**
       * The week view title
       */
      CalendarMomentDateFormatter.prototype.weekViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('[Week] W [of] YYYY');
      };
      /**
       * The time formatting down the left hand side of the day view
       */
      CalendarMomentDateFormatter.prototype.dayViewHour = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('ha');
      };
      /**
       * The day view title
       */
      CalendarMomentDateFormatter.prototype.dayViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          return this.moment(date)
              .locale(locale)
              .format('dddd, D MMMM, YYYY');
      };
      /** @nocollapse */
      CalendarMomentDateFormatter.ctorParameters = function () { return [
          { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* Inject */], args: [MOMENT,] },] },
      ]; };
      return CalendarMomentDateFormatter;
  }());
  
  //# sourceMappingURL=calendarMomentDateFormatter.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarNativeDateFormatter.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarNativeDateFormatter; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_date_fns_get_iso_week__ = __webpack_require__("../../../../date-fns/get_iso_week/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_date_fns_get_iso_week___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_date_fns_get_iso_week__);
  
  /**
   * This will use <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl" target="_blank">Intl</a> API to do all date formatting. It is the default date formatter used by the calendar.
   *
   * You will need to include a <a href="https://github.com/andyearnshaw/Intl.js/">polyfill</a> for older browsers.
   */
  var CalendarNativeDateFormatter = /** @class */ (function () {
      function CalendarNativeDateFormatter() {
      }
      /**
       * The month view header week day labels
       */
      CalendarNativeDateFormatter.prototype.monthViewColumnHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);
      };
      /**
       * The month view cell day number
       */
      CalendarNativeDateFormatter.prototype.monthViewDayNumber = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(date);
      };
      /**
       * The month view title
       */
      CalendarNativeDateFormatter.prototype.monthViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, {
              year: 'numeric',
              month: 'long'
          }).format(date);
      };
      /**
       * The week view header week day labels
       */
      CalendarNativeDateFormatter.prototype.weekViewColumnHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);
      };
      /**
       * The week view sub header day and month labels
       */
      CalendarNativeDateFormatter.prototype.weekViewColumnSubHeader = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, {
              day: 'numeric',
              month: 'short'
          }).format(date);
      };
      /**
       * The week view title
       */
      CalendarNativeDateFormatter.prototype.weekViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          var year = new Intl.DateTimeFormat(locale, {
              year: 'numeric'
          }).format(date);
          var weekNumber = __WEBPACK_IMPORTED_MODULE_0_date_fns_get_iso_week___default()(date);
          return "Week " + weekNumber + " of " + year;
      };
      /**
       * The time formatting down the left hand side of the day view
       */
      CalendarNativeDateFormatter.prototype.dayViewHour = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);
      };
      /**
       * The day view title
       */
      CalendarNativeDateFormatter.prototype.dayViewTitle = function (_a) {
          var date = _a.date, locale = _a.locale;
          return new Intl.DateTimeFormat(locale, {
              day: 'numeric',
              month: 'long',
              year: 'numeric',
              weekday: 'long'
          }).format(date);
      };
      return CalendarNativeDateFormatter;
  }());
  
  //# sourceMappingURL=calendarNativeDateFormatter.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarResizeHelper.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarResizeHelper; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util__ = __webpack_require__("../../../../angular-calendar/dist/esm/src/providers/util.js");
  
  var CalendarResizeHelper = /** @class */ (function () {
      function CalendarResizeHelper(resizeContainerElement, minWidth) {
          this.resizeContainerElement = resizeContainerElement;
          this.minWidth = minWidth;
      }
      CalendarResizeHelper.prototype.validateResize = function (_a) {
          var rectangle = _a.rectangle;
          if (this.minWidth && rectangle.width < this.minWidth) {
              return false;
          }
          return Object(__WEBPACK_IMPORTED_MODULE_0__util__["a" /* isInside */])(this.resizeContainerElement.getBoundingClientRect(), rectangle);
      };
      return CalendarResizeHelper;
  }());
  
  //# sourceMappingURL=calendarResizeHelper.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/calendarUtils.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CalendarUtils; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_calendar_utils__ = __webpack_require__("../../../../calendar-utils/dist/calendar-utils.js");
  
  
  var CalendarUtils = /** @class */ (function () {
      function CalendarUtils() {
      }
      CalendarUtils.prototype.getMonthView = function (args) {
          return Object(__WEBPACK_IMPORTED_MODULE_1_calendar_utils__["c" /* getMonthView */])(args);
      };
      CalendarUtils.prototype.getWeekViewHeader = function (args) {
          return Object(__WEBPACK_IMPORTED_MODULE_1_calendar_utils__["e" /* getWeekViewHeader */])(args);
      };
      CalendarUtils.prototype.getWeekView = function (args) {
          return Object(__WEBPACK_IMPORTED_MODULE_1_calendar_utils__["d" /* getWeekView */])(args);
      };
      CalendarUtils.prototype.getDayView = function (args) {
          return Object(__WEBPACK_IMPORTED_MODULE_1_calendar_utils__["a" /* getDayView */])(args);
      };
      CalendarUtils.prototype.getDayViewHourGrid = function (args) {
          return Object(__WEBPACK_IMPORTED_MODULE_1_calendar_utils__["b" /* getDayViewHourGrid */])(args);
      };
      CalendarUtils.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["C" /* Injectable */] },
      ];
      /** @nocollapse */
      CalendarUtils.ctorParameters = function () { return []; };
      return CalendarUtils;
  }());
  
  //# sourceMappingURL=calendarUtils.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-calendar/dist/esm/src/providers/util.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (immutable) */ __webpack_exports__["a"] = isInside;
  function isInside(outer, inner) {
      return (outer.left <= inner.left &&
          inner.left <= outer.right &&
          outer.left <= inner.right &&
          inner.right <= outer.right &&
          outer.top <= inner.top &&
          inner.top <= outer.bottom &&
          outer.top <= inner.bottom &&
          inner.bottom <= outer.bottom);
  }
  //# sourceMappingURL=util.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-draggable-droppable/dist/esm/src/drag-and-drop.module.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DragAndDropModule; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__draggable_directive__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/draggable.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__droppable_directive__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/droppable.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__draggable_helper_provider__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/draggable-helper.provider.js");
  
  
  
  
  var DragAndDropModule = /** @class */ (function () {
      function DragAndDropModule() {
      }
      DragAndDropModule.forRoot = function () {
          return {
              ngModule: DragAndDropModule,
              providers: [__WEBPACK_IMPORTED_MODULE_3__draggable_helper_provider__["a" /* DraggableHelper */]]
          };
      };
      DragAndDropModule.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgModule */], args: [{
                      declarations: [__WEBPACK_IMPORTED_MODULE_1__draggable_directive__["a" /* DraggableDirective */], __WEBPACK_IMPORTED_MODULE_2__droppable_directive__["a" /* DroppableDirective */]],
                      exports: [__WEBPACK_IMPORTED_MODULE_1__draggable_directive__["a" /* DraggableDirective */], __WEBPACK_IMPORTED_MODULE_2__droppable_directive__["a" /* DroppableDirective */]]
                  },] },
      ];
      /** @nocollapse */
      DragAndDropModule.ctorParameters = function () { return []; };
      return DragAndDropModule;
  }());
  
  //# sourceMappingURL=drag-and-drop.module.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-draggable-droppable/dist/esm/src/draggable-helper.provider.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DraggableHelper; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_Subject__ = __webpack_require__("../../../../rxjs/Subject.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_rxjs_Subject__);
  
  var DraggableHelper = /** @class */ (function () {
      function DraggableHelper() {
          this.currentDrag = new __WEBPACK_IMPORTED_MODULE_0_rxjs_Subject__["Subject"]();
      }
      return DraggableHelper;
  }());
  
  //# sourceMappingURL=draggable-helper.provider.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-draggable-droppable/dist/esm/src/draggable.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DraggableDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__("../../../../rxjs/Subject.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__("../../../../rxjs/Observable.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_observable_merge__ = __webpack_require__("../../../../rxjs/add/observable/merge.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_observable_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_observable_merge__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_operator_map__ = __webpack_require__("../../../../rxjs/add/operator/map.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_add_operator_map__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap__ = __webpack_require__("../../../../rxjs/add/operator/mergeMap.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_takeUntil__ = __webpack_require__("../../../../rxjs/add/operator/takeUntil.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_takeUntil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_takeUntil__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_take__ = __webpack_require__("../../../../rxjs/add/operator/take.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_take___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_take__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_takeLast__ = __webpack_require__("../../../../rxjs/add/operator/takeLast.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_takeLast___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_takeLast__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise__ = __webpack_require__("../../../../rxjs/add/operator/pairwise.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_share__ = __webpack_require__("../../../../rxjs/add/operator/share.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_share___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_share__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__draggable_helper_provider__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/draggable-helper.provider.js");
  
  
  
  
  
  
  
  
  
  
  
  
  var MOVE_CURSOR = 'move';
  var DraggableDirective = /** @class */ (function () {
      /**
       * @hidden
       */
      function DraggableDirective(element, renderer, draggableHelper, zone) {
          this.element = element;
          this.renderer = renderer;
          this.draggableHelper = draggableHelper;
          this.zone = zone;
          this.dragAxis = { x: true, y: true };
          this.dragSnapGrid = {};
          this.ghostDragEnabled = true;
          this.dragCursor = MOVE_CURSOR;
          this.dragStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.dragging = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.dragEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * @hidden
           */
          this.pointerDown = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          /**
           * @hidden
           */
          this.pointerMove = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          /**
           * @hidden
           */
          this.pointerUp = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          this.eventListenerSubscriptions = {};
      }
      DraggableDirective.prototype.ngOnInit = function () {
          var _this = this;
          this.checkEventListeners();
          var pointerDrag = this.pointerDown
              .filter(function () { return _this.canDrag(); })
              .flatMap(function (pointerDownEvent) {
              pointerDownEvent.event.preventDefault();
              _this.zone.run(function () {
                  _this.dragStart.next({ x: 0, y: 0 });
              });
              _this.setCursor(_this.dragCursor);
              var currentDrag = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
              _this.draggableHelper.currentDrag.next(currentDrag);
              var pointerMove = _this.pointerMove
                  .map(function (pointerMoveEvent) {
                  pointerMoveEvent.event.preventDefault();
                  return {
                      currentDrag: currentDrag,
                      x: pointerMoveEvent.clientX - pointerDownEvent.clientX,
                      y: pointerMoveEvent.clientY - pointerDownEvent.clientY,
                      clientX: pointerMoveEvent.clientX,
                      clientY: pointerMoveEvent.clientY
                  };
              })
                  .map(function (moveData) {
                  if (_this.dragSnapGrid.x) {
                      moveData.x =
                          Math.floor(moveData.x / _this.dragSnapGrid.x) *
                              _this.dragSnapGrid.x;
                  }
                  if (_this.dragSnapGrid.y) {
                      moveData.y =
                          Math.floor(moveData.y / _this.dragSnapGrid.y) *
                              _this.dragSnapGrid.y;
                  }
                  return moveData;
              })
                  .map(function (moveData) {
                  if (!_this.dragAxis.x) {
                      moveData.x = 0;
                  }
                  if (!_this.dragAxis.y) {
                      moveData.y = 0;
                  }
                  return moveData;
              })
                  .filter(function (_a) {
                  var x = _a.x, y = _a.y;
                  return !_this.validateDrag || _this.validateDrag({ x: x, y: y });
              })
                  .takeUntil(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"].merge(_this.pointerUp, _this.pointerDown));
              pointerMove.takeLast(1).subscribe(function (_a) {
                  var x = _a.x, y = _a.y;
                  _this.zone.run(function () {
                      _this.dragEnd.next({ x: x, y: y });
                  });
                  currentDrag.complete();
                  _this.setCssTransform(null);
                  if (_this.ghostDragEnabled) {
                      _this.renderer.setStyle(_this.element.nativeElement, 'pointerEvents', null);
                  }
              });
              _this.pointerMove.next(pointerDownEvent);
              return pointerMove;
          })
              .share();
          __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"].merge(pointerDrag.take(1).map(function (value) { return [, value]; }), pointerDrag.pairwise())
              .filter(function (_a) {
              var previous = _a[0], next = _a[1];
              if (!previous) {
                  return true;
              }
              return previous.x !== next.x || previous.y !== next.y;
          })
              .map(function (_a) {
              var previous = _a[0], next = _a[1];
              return next;
          })
              .subscribe(function (_a) {
              var x = _a.x, y = _a.y, currentDrag = _a.currentDrag, clientX = _a.clientX, clientY = _a.clientY;
              _this.zone.run(function () {
                  _this.dragging.next({ x: x, y: y });
              });
              if (_this.ghostDragEnabled) {
                  _this.renderer.setStyle(_this.element.nativeElement, 'pointerEvents', 'none');
              }
              _this.setCssTransform("translate(" + x + "px, " + y + "px)");
              currentDrag.next({
                  clientX: clientX,
                  clientY: clientY,
                  dropData: _this.dropData
              });
          });
      };
      DraggableDirective.prototype.ngOnChanges = function (changes) {
          if (changes['dragAxis']) {
              this.checkEventListeners();
          }
      };
      DraggableDirective.prototype.ngOnDestroy = function () {
          this.unsubscribeEventListeners();
          this.pointerDown.complete();
          this.pointerMove.complete();
          this.pointerUp.complete();
      };
      DraggableDirective.prototype.checkEventListeners = function () {
          var _this = this;
          var canDrag = this.canDrag();
          var hasEventListeners = Object.keys(this.eventListenerSubscriptions).length > 0;
          if (canDrag && !hasEventListeners) {
              this.zone.runOutsideAngular(function () {
                  _this.eventListenerSubscriptions.mousedown = _this.renderer.listen(_this.element.nativeElement, 'mousedown', function (event) {
                      _this.onMouseDown(event);
                  });
                  _this.eventListenerSubscriptions.mouseup = _this.renderer.listen('document', 'mouseup', function (event) {
                      _this.onMouseUp(event);
                  });
                  _this.eventListenerSubscriptions.touchstart = _this.renderer.listen(_this.element.nativeElement, 'touchstart', function (event) {
                      _this.onTouchStart(event);
                  });
                  _this.eventListenerSubscriptions.touchend = _this.renderer.listen('document', 'touchend', function (event) {
                      _this.onTouchEnd(event);
                  });
                  _this.eventListenerSubscriptions.touchcancel = _this.renderer.listen('document', 'touchcancel', function (event) {
                      _this.onTouchEnd(event);
                  });
                  _this.eventListenerSubscriptions.mouseenter = _this.renderer.listen(_this.element.nativeElement, 'mouseenter', function () {
                      _this.onMouseEnter();
                  });
                  _this.eventListenerSubscriptions.mouseleave = _this.renderer.listen(_this.element.nativeElement, 'mouseleave', function () {
                      _this.onMouseLeave();
                  });
              });
          }
          else if (!canDrag && hasEventListeners) {
              this.unsubscribeEventListeners();
          }
      };
      DraggableDirective.prototype.onMouseDown = function (event) {
          var _this = this;
          if (!this.eventListenerSubscriptions.mousemove) {
              this.eventListenerSubscriptions.mousemove = this.renderer.listen('document', 'mousemove', function (mouseMoveEvent) {
                  _this.pointerMove.next({
                      event: mouseMoveEvent,
                      clientX: mouseMoveEvent.clientX,
                      clientY: mouseMoveEvent.clientY
                  });
              });
          }
          this.pointerDown.next({
              event: event,
              clientX: event.clientX,
              clientY: event.clientY
          });
      };
      DraggableDirective.prototype.onMouseUp = function (event) {
          if (this.eventListenerSubscriptions.mousemove) {
              this.eventListenerSubscriptions.mousemove();
              delete this.eventListenerSubscriptions.mousemove;
          }
          this.pointerUp.next({
              event: event,
              clientX: event.clientX,
              clientY: event.clientY
          });
      };
      DraggableDirective.prototype.onTouchStart = function (event) {
          var _this = this;
          if (!this.eventListenerSubscriptions.touchmove) {
              this.eventListenerSubscriptions.touchmove = this.renderer.listen('document', 'touchmove', function (touchMoveEvent) {
                  _this.pointerMove.next({
                      event: touchMoveEvent,
                      clientX: touchMoveEvent.targetTouches[0].clientX,
                      clientY: touchMoveEvent.targetTouches[0].clientY
                  });
              });
          }
          this.pointerDown.next({
              event: event,
              clientX: event.touches[0].clientX,
              clientY: event.touches[0].clientY
          });
      };
      DraggableDirective.prototype.onTouchEnd = function (event) {
          if (this.eventListenerSubscriptions.touchmove) {
              this.eventListenerSubscriptions.touchmove();
              delete this.eventListenerSubscriptions.touchmove;
          }
          this.pointerUp.next({
              event: event,
              clientX: event.changedTouches[0].clientX,
              clientY: event.changedTouches[0].clientY
          });
      };
      DraggableDirective.prototype.onMouseEnter = function () {
          this.setCursor(this.dragCursor);
      };
      DraggableDirective.prototype.onMouseLeave = function () {
          this.setCursor(null);
      };
      DraggableDirective.prototype.setCssTransform = function (value) {
          if (this.ghostDragEnabled) {
              this.renderer.setStyle(this.element.nativeElement, 'transform', value);
              this.renderer.setStyle(this.element.nativeElement, '-webkit-transform', value);
              this.renderer.setStyle(this.element.nativeElement, '-ms-transform', value);
              this.renderer.setStyle(this.element.nativeElement, '-moz-transform', value);
              this.renderer.setStyle(this.element.nativeElement, '-o-transform', value);
          }
      };
      DraggableDirective.prototype.canDrag = function () {
          return this.dragAxis.x || this.dragAxis.y;
      };
      DraggableDirective.prototype.setCursor = function (value) {
          this.renderer.setStyle(this.element.nativeElement, 'cursor', value);
      };
      DraggableDirective.prototype.unsubscribeEventListeners = function () {
          var _this = this;
          Object.keys(this.eventListenerSubscriptions).forEach(function (type) {
              _this.eventListenerSubscriptions[type]();
              delete _this.eventListenerSubscriptions[type];
          });
      };
      DraggableDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlDraggable]'
                  },] },
      ];
      /** @nocollapse */
      DraggableDirective.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_3" /* Renderer2 */], },
          { type: __WEBPACK_IMPORTED_MODULE_11__draggable_helper_provider__["a" /* DraggableHelper */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["R" /* NgZone */], },
      ]; };
      DraggableDirective.propDecorators = {
          'dropData': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dragAxis': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dragSnapGrid': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'ghostDragEnabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'validateDrag': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dragCursor': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
          'dragStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'dragging': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'dragEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return DraggableDirective;
  }());
  
  //# sourceMappingURL=draggable.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-draggable-droppable/dist/esm/src/droppable.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DroppableDirective; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_add_operator_distinctUntilChanged__ = __webpack_require__("../../../../rxjs/add/operator/distinctUntilChanged.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_add_operator_distinctUntilChanged___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_add_operator_distinctUntilChanged__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_pairwise__ = __webpack_require__("../../../../rxjs/add/operator/pairwise.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_pairwise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_pairwise__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_filter__ = __webpack_require__("../../../../rxjs/add/operator/filter.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_filter___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_filter__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__draggable_helper_provider__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/draggable-helper.provider.js");
  
  
  
  
  
  function isCoordinateWithinRectangle(clientX, clientY, rect) {
      return (clientX >= rect.left &&
          clientX <= rect.right &&
          clientY >= rect.top &&
          clientY <= rect.bottom);
  }
  var DroppableDirective = /** @class */ (function () {
      function DroppableDirective(element, draggableHelper, zone) {
          this.element = element;
          this.draggableHelper = draggableHelper;
          this.zone = zone;
          this.dragEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.dragLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.dragOver = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          this.drop = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
      }
      DroppableDirective.prototype.ngOnInit = function () {
          var _this = this;
          this.currentDragSubscription = this.draggableHelper.currentDrag.subscribe(function (drag) {
              var droppableRectangle = _this.element.nativeElement.getBoundingClientRect();
              var currentDragDropData;
              var overlaps = drag.map(function (_a) {
                  var clientX = _a.clientX, clientY = _a.clientY, dropData = _a.dropData;
                  currentDragDropData = dropData;
                  return isCoordinateWithinRectangle(clientX, clientY, droppableRectangle);
              });
              var overlapsChanged = overlaps.distinctUntilChanged();
              var dragOverActive; // TODO - see if there's a way of doing this via rxjs
              overlapsChanged.filter(function (overlapsNow) { return overlapsNow; }).subscribe(function () {
                  dragOverActive = true;
                  _this.zone.run(function () {
                      _this.dragEnter.next({
                          dropData: currentDragDropData
                      });
                  });
              });
              overlaps.filter(function (overlapsNow) { return overlapsNow; }).subscribe(function () {
                  _this.zone.run(function () {
                      _this.dragOver.next({
                          dropData: currentDragDropData
                      });
                  });
              });
              overlapsChanged
                  .pairwise()
                  .filter(function (_a) {
                  var didOverlap = _a[0], overlapsNow = _a[1];
                  return didOverlap && !overlapsNow;
              })
                  .subscribe(function () {
                  dragOverActive = false;
                  _this.zone.run(function () {
                      _this.dragLeave.next({
                          dropData: currentDragDropData
                      });
                  });
              });
              drag.flatMap(function () { return overlaps; }).subscribe({
                  complete: function () {
                      if (dragOverActive) {
                          _this.zone.run(function () {
                              _this.drop.next({
                                  dropData: currentDragDropData
                              });
                          });
                      }
                  }
              });
          });
      };
      DroppableDirective.prototype.ngOnDestroy = function () {
          this.currentDragSubscription.unsubscribe();
      };
      DroppableDirective.decorators = [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                      selector: '[mwlDroppable]'
                  },] },
      ];
      /** @nocollapse */
      DroppableDirective.ctorParameters = function () { return [
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
          { type: __WEBPACK_IMPORTED_MODULE_4__draggable_helper_provider__["a" /* DraggableHelper */], },
          { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["R" /* NgZone */], },
      ]; };
      DroppableDirective.propDecorators = {
          'dragEnter': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'dragLeave': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'dragOver': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
          'drop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      };
      return DroppableDirective;
  }());
  
  //# sourceMappingURL=droppable.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-draggable-droppable/dist/esm/src/index.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__drag_and_drop_module__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/drag-and-drop.module.js");
  /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__drag_and_drop_module__["a"]; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__draggable_helper_provider__ = __webpack_require__("../../../../angular-draggable-droppable/dist/esm/src/draggable-helper.provider.js");
  /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__draggable_helper_provider__["a"]; });
  
  
  //# sourceMappingURL=index.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-resizable-element/dist/esm/src/index.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__resizable_module__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizable.module.js");
  /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__resizable_module__["a"]; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__resizable_directive__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizable.directive.js");
  /* unused harmony reexport Resizable */
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resizeHandle_directive__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizeHandle.directive.js");
  /* unused harmony reexport ResizeHandle */
  
   // tslint:disable-line
   // tslint:disable-line
  //# sourceMappingURL=index.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-resizable-element/dist/esm/src/resizable.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* unused harmony export MOUSE_MOVE_THROTTLE_MS */
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Resizable; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__("../../../../rxjs/Subject.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__("../../../../rxjs/Observable.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_merge__ = __webpack_require__("../../../../rxjs/observable/merge.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_merge__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_observable_interval__ = __webpack_require__("../../../../rxjs/observable/interval.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_observable_interval___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_observable_interval__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_map__ = __webpack_require__("../../../../rxjs/add/operator/map.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_map__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_mergeMap__ = __webpack_require__("../../../../rxjs/add/operator/mergeMap.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_mergeMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_mergeMap__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_takeUntil__ = __webpack_require__("../../../../rxjs/add/operator/takeUntil.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_takeUntil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_takeUntil__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_filter__ = __webpack_require__("../../../../rxjs/add/operator/filter.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_filter___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_rxjs_add_operator_filter__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise__ = __webpack_require__("../../../../rxjs/add/operator/pairwise.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_rxjs_add_operator_pairwise__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_take__ = __webpack_require__("../../../../rxjs/add/operator/take.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_take___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_rxjs_add_operator_take__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_rxjs_add_operator_throttle__ = __webpack_require__("../../../../rxjs/add/operator/throttle.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_rxjs_add_operator_throttle___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_rxjs_add_operator_throttle__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_rxjs_add_operator_share__ = __webpack_require__("../../../../rxjs/add/operator/share.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_rxjs_add_operator_share___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_rxjs_add_operator_share__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__resizeHandle_directive__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizeHandle.directive.js");
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  function isNumberCloseTo(value1, value2, precision) {
      if (precision === void 0) { precision = 3; }
      var diff = Math.abs(value1 - value2);
      return diff < precision;
  }
  function getNewBoundingRectangle(startingRect, edges, clientX, clientY) {
      var newBoundingRect = {
          top: startingRect.top,
          bottom: startingRect.bottom,
          left: startingRect.left,
          right: startingRect.right
      };
      if (edges.top) {
          newBoundingRect.top += clientY;
      }
      if (edges.bottom) {
          newBoundingRect.bottom += clientY;
      }
      if (edges.left) {
          newBoundingRect.left += clientX;
      }
      if (edges.right) {
          newBoundingRect.right += clientX;
      }
      newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;
      newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;
      return newBoundingRect;
  }
  function getElementRect(element, ghostElementPositioning) {
      if (ghostElementPositioning === 'absolute') {
          return {
              height: element.nativeElement.offsetHeight,
              width: element.nativeElement.offsetWidth,
              top: element.nativeElement.offsetTop,
              bottom: element.nativeElement.offsetHeight + element.nativeElement.offsetTop,
              left: element.nativeElement.offsetLeft,
              right: element.nativeElement.offsetWidth + element.nativeElement.offsetLeft
          };
      }
      else {
          var boundingRect = element.nativeElement.getBoundingClientRect();
          return {
              height: boundingRect.height,
              width: boundingRect.width,
              top: boundingRect.top,
              bottom: boundingRect.bottom,
              left: boundingRect.left,
              right: boundingRect.right,
              scrollTop: element.nativeElement.scrollTop,
              scrollLeft: element.nativeElement.scrollLeft
          };
      }
  }
  function isWithinBoundingY(_a) {
      var clientY = _a.clientY, rect = _a.rect;
      return clientY >= rect.top && clientY <= rect.bottom;
  }
  function isWithinBoundingX(_a) {
      var clientX = _a.clientX, rect = _a.rect;
      return clientX >= rect.left && clientX <= rect.right;
  }
  function getResizeEdges(_a) {
      var clientX = _a.clientX, clientY = _a.clientY, elm = _a.elm, allowedEdges = _a.allowedEdges, cursorPrecision = _a.cursorPrecision;
      var elmPosition = elm.nativeElement.getBoundingClientRect();
      var edges = {};
      if (allowedEdges.left &&
          isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&
          isWithinBoundingY({ clientY: clientY, rect: elmPosition })) {
          edges.left = true;
      }
      if (allowedEdges.right &&
          isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&
          isWithinBoundingY({ clientY: clientY, rect: elmPosition })) {
          edges.right = true;
      }
      if (allowedEdges.top &&
          isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&
          isWithinBoundingX({ clientX: clientX, rect: elmPosition })) {
          edges.top = true;
      }
      if (allowedEdges.bottom &&
          isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&
          isWithinBoundingX({ clientX: clientX, rect: elmPosition })) {
          edges.bottom = true;
      }
      return edges;
  }
  var DEFAULT_RESIZE_CURSORS = Object.freeze({
      topLeft: 'nw-resize',
      topRight: 'ne-resize',
      bottomLeft: 'sw-resize',
      bottomRight: 'se-resize',
      leftOrRight: 'ew-resize',
      topOrBottom: 'ns-resize'
  });
  function getResizeCursor(edges, cursors) {
      if (edges.left && edges.top) {
          return cursors.topLeft;
      }
      else if (edges.right && edges.top) {
          return cursors.topRight;
      }
      else if (edges.left && edges.bottom) {
          return cursors.bottomLeft;
      }
      else if (edges.right && edges.bottom) {
          return cursors.bottomRight;
      }
      else if (edges.left || edges.right) {
          return cursors.leftOrRight;
      }
      else if (edges.top || edges.bottom) {
          return cursors.topOrBottom;
      }
      else {
          return '';
      }
  }
  function getEdgesDiff(_a) {
      var edges = _a.edges, initialRectangle = _a.initialRectangle, newRectangle = _a.newRectangle;
      var edgesDiff = {};
      Object.keys(edges).forEach(function (edge) {
          edgesDiff[edge] = newRectangle[edge] - initialRectangle[edge];
      });
      return edgesDiff;
  }
  var RESIZE_ACTIVE_CLASS = 'resize-active';
  var RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover';
  var RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover';
  var RESIZE_TOP_HOVER_CLASS = 'resize-top-hover';
  var RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover';
  var RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element';
  var MOUSE_MOVE_THROTTLE_MS = 50;
  /**
   * Place this on an element to make it resizable
   *
   * For example
   *
   * ```
   * &lt;div mwlResizable [resizeEdges]="{bottom: true, right: true, top: true, left: true}" [enableGhostResize]="true"&gt;&lt;/div&gt;
   * ```
   */
  var Resizable = (function () {
      /**
       * @hidden
       */
      function Resizable(renderer, elm, zone) {
          this.renderer = renderer;
          this.elm = elm;
          this.zone = zone;
          /**
           * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.
           */
          this.resizeEdges = {};
          /**
           * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.
           */
          this.enableGhostResize = false;
          /**
           * A snap grid that resize events will be locked to.
           *
           * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`
           */
          this.resizeSnapGrid = {};
          /**
           * The mouse cursors that will be set on the resize edges
           */
          this.resizeCursors = DEFAULT_RESIZE_CURSORS;
          /**
           * Mouse over thickness to active cursor.
           */
          this.resizeCursorPrecision = 3;
          /**
           * Define the positioning of the ghost element (can be fixed or absolute)
           */
          this.ghostElementPositioning = 'fixed';
          /**
           * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.
           */
          this.resizeStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.
           */
          this.resizing = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.
           */
          this.resizeEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* EventEmitter */]();
          /**
           * @hidden
           */
          this.mouseup = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          /**
           * @hidden
           */
          this.mousedown = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          /**
           * @hidden
           */
          this.mousemove = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
          this.pointerEventListenerSubscriptions = {};
          this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone);
      }
      /**
       * @hidden
       */
      Resizable.prototype.ngOnInit = function () {
          var _this = this;
          // TODO - use some fancy Observable.merge's for this
          this.pointerEventListenerSubscriptions.pointerDown = this.pointerEventListeners.pointerDown.subscribe(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY;
              _this.mousedown.next({ clientX: clientX, clientY: clientY });
          });
          this.pointerEventListenerSubscriptions.pointerMove = this.pointerEventListeners.pointerMove.subscribe(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY, event = _a.event;
              _this.mousemove.next({ clientX: clientX, clientY: clientY, event: event });
          });
          this.pointerEventListenerSubscriptions.pointerUp = this.pointerEventListeners.pointerUp.subscribe(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY;
              _this.mouseup.next({ clientX: clientX, clientY: clientY });
          });
          var currentResize;
          var removeGhostElement = function () {
              if (currentResize.clonedNode) {
                  _this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode);
                  _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'inherit');
              }
          };
          var mouseMove = this.mousemove.share();
          mouseMove
              .filter(function () { return !!currentResize; })
              .subscribe(function (_a) {
              var event = _a.event;
              event.preventDefault();
          });
          mouseMove.throttle(function (val) { return Object(__WEBPACK_IMPORTED_MODULE_4_rxjs_observable_interval__["interval"])(MOUSE_MOVE_THROTTLE_MS); }).subscribe(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY;
              var resizeEdges = getResizeEdges({
                  clientX: clientX, clientY: clientY,
                  elm: _this.elm,
                  allowedEdges: _this.resizeEdges,
                  cursorPrecision: _this.resizeCursorPrecision
              });
              var resizeCursors = Object.assign({}, DEFAULT_RESIZE_CURSORS, _this.resizeCursors);
              var cursor = currentResize ? '' : getResizeCursor(resizeEdges, resizeCursors);
              _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', cursor);
              _this.setElementClass(_this.elm, RESIZE_ACTIVE_CLASS, !!currentResize);
              _this.setElementClass(_this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true);
              _this.setElementClass(_this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true);
              _this.setElementClass(_this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true);
              _this.setElementClass(_this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true);
          });
          var mousedrag = this.mousedown.flatMap(function (startCoords) {
              var getDiff = function (moveCoords) {
                  return {
                      clientX: moveCoords.clientX - startCoords.clientX,
                      clientY: moveCoords.clientY - startCoords.clientY
                  };
              };
              var getSnapGrid = function () {
                  var snapGrid = { x: 1, y: 1 };
                  if (currentResize) {
                      if (_this.resizeSnapGrid.left && currentResize.edges.left) {
                          snapGrid.x = +_this.resizeSnapGrid.left;
                      }
                      else if (_this.resizeSnapGrid.right && currentResize.edges.right) {
                          snapGrid.x = +_this.resizeSnapGrid.right;
                      }
                      if (_this.resizeSnapGrid.top && currentResize.edges.top) {
                          snapGrid.y = +_this.resizeSnapGrid.top;
                      }
                      else if (_this.resizeSnapGrid.bottom && currentResize.edges.bottom) {
                          snapGrid.y = +_this.resizeSnapGrid.bottom;
                      }
                  }
                  return snapGrid;
              };
              var getGrid = function (coords, snapGrid) {
                  return {
                      x: Math.ceil(coords.clientX / snapGrid.x),
                      y: Math.ceil(coords.clientY / snapGrid.y)
                  };
              };
              return Object(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_merge__["merge"])(mouseMove.take(1).map(function (coords) { return [, coords]; }), mouseMove.pairwise()).map(function (_a) {
                  var previousCoords = _a[0], newCoords = _a[1];
                  return [previousCoords ? getDiff(previousCoords) : previousCoords, getDiff(newCoords)];
              }).filter(function (_a) {
                  var previousCoords = _a[0], newCoords = _a[1];
                  if (!previousCoords) {
                      return true;
                  }
                  var snapGrid = getSnapGrid();
                  var previousGrid = getGrid(previousCoords, snapGrid);
                  var newGrid = getGrid(newCoords, snapGrid);
                  return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y);
              }).map(function (_a) {
                  var newCoords = _a[1];
                  var snapGrid = getSnapGrid();
                  return {
                      clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,
                      clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y
                  };
              }).takeUntil(Object(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_merge__["merge"])(_this.mouseup, _this.mousedown));
          }).filter(function () { return !!currentResize; });
          mousedrag.map(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY;
              return getNewBoundingRectangle(currentResize.startingRect, currentResize.edges, clientX, clientY);
          }).filter(function (newBoundingRect) {
              return newBoundingRect.height > 0 && newBoundingRect.width > 0;
          }).filter(function (newBoundingRect) {
              return _this.validateResize ? _this.validateResize({
                  rectangle: newBoundingRect,
                  edges: getEdgesDiff({
                      edges: currentResize.edges,
                      initialRectangle: currentResize.startingRect,
                      newRectangle: newBoundingRect
                  })
              }) : true;
          }).subscribe(function (newBoundingRect) {
              if (currentResize.clonedNode) {
                  _this.renderer.setStyle(currentResize.clonedNode, 'height', newBoundingRect.height + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'width', newBoundingRect.width + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'top', newBoundingRect.top + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'left', newBoundingRect.left + "px");
              }
              _this.zone.run(function () {
                  _this.resizing.emit({
                      edges: getEdgesDiff({
                          edges: currentResize.edges,
                          initialRectangle: currentResize.startingRect,
                          newRectangle: newBoundingRect
                      }),
                      rectangle: newBoundingRect
                  });
              });
              currentResize.currentRect = newBoundingRect;
          });
          this.mousedown.map(function (_a) {
              var clientX = _a.clientX, clientY = _a.clientY, edges = _a.edges;
              return edges || getResizeEdges({
                  clientX: clientX, clientY: clientY,
                  elm: _this.elm,
                  allowedEdges: _this.resizeEdges,
                  cursorPrecision: _this.resizeCursorPrecision
              });
          }).filter(function (edges) {
              return Object.keys(edges).length > 0;
          }).subscribe(function (edges) {
              if (currentResize) {
                  removeGhostElement();
              }
              var startingRect = getElementRect(_this.elm, _this.ghostElementPositioning);
              currentResize = {
                  edges: edges,
                  startingRect: startingRect,
                  currentRect: startingRect
              };
              if (_this.enableGhostResize) {
                  currentResize.clonedNode = _this.elm.nativeElement.cloneNode(true);
                  var resizeCursors = Object.assign({}, DEFAULT_RESIZE_CURSORS, _this.resizeCursors);
                  _this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode);
                  _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'hidden');
                  _this.renderer.setStyle(currentResize.clonedNode, 'position', _this.ghostElementPositioning);
                  _this.renderer.setStyle(currentResize.clonedNode, 'left', currentResize.startingRect.left + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'top', currentResize.startingRect.top + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'height', currentResize.startingRect.height + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'width', currentResize.startingRect.width + "px");
                  _this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors));
                  _this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS);
                  currentResize.clonedNode.scrollTop = currentResize.startingRect.scrollTop;
                  currentResize.clonedNode.scrollLeft = currentResize.startingRect.scrollLeft;
              }
              _this.zone.run(function () {
                  _this.resizeStart.emit({
                      edges: getEdgesDiff({ edges: edges, initialRectangle: startingRect, newRectangle: startingRect }),
                      rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)
                  });
              });
          });
          this.mouseup.subscribe(function () {
              if (currentResize) {
                  _this.renderer.removeClass(_this.elm.nativeElement, RESIZE_ACTIVE_CLASS);
                  _this.zone.run(function () {
                      _this.resizeEnd.emit({
                          edges: getEdgesDiff({
                              edges: currentResize.edges,
                              initialRectangle: currentResize.startingRect,
                              newRectangle: currentResize.currentRect
                          }),
                          rectangle: currentResize.currentRect
                      });
                  });
                  removeGhostElement();
                  currentResize = null;
              }
          });
      };
      /**
       * @hidden
       */
      Resizable.prototype.ngAfterViewInit = function () {
          var _this = this;
          this.resizeHandles.forEach(function (handle) {
              handle.resizable = _this;
          });
      };
      /**
       * @hidden
       */
      Resizable.prototype.ngOnDestroy = function () {
          this.mousedown.complete();
          this.mouseup.complete();
          this.mousemove.complete();
          this.pointerEventListenerSubscriptions.pointerDown.unsubscribe();
          this.pointerEventListenerSubscriptions.pointerMove.unsubscribe();
          this.pointerEventListenerSubscriptions.pointerUp.unsubscribe();
      };
      Resizable.prototype.setElementClass = function (elm, name, add) {
          if (add) {
              this.renderer.addClass(elm.nativeElement, name);
          }
          else {
              this.renderer.removeClass(elm.nativeElement, name);
          }
      };
      return Resizable;
  }());
  
  Resizable.decorators = [
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                  selector: '[mwlResizable]'
              },] },
  ];
  /** @nocollapse */
  Resizable.ctorParameters = function () { return [
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_3" /* Renderer2 */], },
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["R" /* NgZone */], },
  ]; };
  Resizable.propDecorators = {
      'validateResize': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'resizeEdges': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'enableGhostResize': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'resizeSnapGrid': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'resizeCursors': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'resizeCursorPrecision': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'ghostElementPositioning': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'resizeStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      'resizing': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      'resizeEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* Output */] },],
      'resizeHandles': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_13__resizeHandle_directive__["a" /* ResizeHandle */],] },],
  };
  var PointerEventListeners = (function () {
      function PointerEventListeners(renderer, zone) {
          this.pointerDown = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"](function (observer) {
              var unsubscribeMouseDown, unsubscribeTouchStart;
              zone.runOutsideAngular(function () {
                  unsubscribeMouseDown = renderer.listen('document', 'mousedown', function (event) {
                      observer.next({ clientX: event.clientX, clientY: event.clientY, event: event });
                  });
                  unsubscribeTouchStart = renderer.listen('document', 'touchstart', function (event) {
                      observer.next({ clientX: event.touches[0].clientX, clientY: event.touches[0].clientY, event: event });
                  });
              });
              return function () {
                  unsubscribeMouseDown();
                  unsubscribeTouchStart();
              };
          }).share();
          this.pointerMove = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"](function (observer) {
              var unsubscribeMouseMove, unsubscribeTouchMove;
              zone.runOutsideAngular(function () {
                  unsubscribeMouseMove = renderer.listen('document', 'mousemove', function (event) {
                      observer.next({ clientX: event.clientX, clientY: event.clientY, event: event });
                  });
                  unsubscribeTouchMove = renderer.listen('document', 'touchmove', function (event) {
                      observer.next({ clientX: event.targetTouches[0].clientX, clientY: event.targetTouches[0].clientY, event: event });
                  });
              });
              return function () {
                  unsubscribeMouseMove();
                  unsubscribeTouchMove();
              };
          }).share();
          this.pointerUp = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"](function (observer) {
              var unsubscribeMouseUp, unsubscribeTouchEnd, unsubscribeTouchCancel;
              zone.runOutsideAngular(function () {
                  unsubscribeMouseUp = renderer.listen('document', 'mouseup', function (event) {
                      observer.next({ clientX: event.clientX, clientY: event.clientY, event: event });
                  });
                  unsubscribeTouchEnd = renderer.listen('document', 'touchend', function (event) {
                      observer.next({ clientX: event.changedTouches[0].clientX, clientY: event.changedTouches[0].clientY, event: event });
                  });
                  unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', function (event) {
                      observer.next({ clientX: event.changedTouches[0].clientX, clientY: event.changedTouches[0].clientY, event: event });
                  });
              });
              return function () {
                  unsubscribeMouseUp();
                  unsubscribeTouchEnd();
                  unsubscribeTouchCancel();
              };
          }).share();
      }
      PointerEventListeners.getInstance = function (renderer, zone) {
          if (!PointerEventListeners.instance) {
              PointerEventListeners.instance = new PointerEventListeners(renderer, zone);
          }
          return PointerEventListeners.instance;
      };
      return PointerEventListeners;
  }());
  //# sourceMappingURL=resizable.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-resizable-element/dist/esm/src/resizable.module.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResizableModule; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__resizable_directive__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizable.directive.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resizeHandle_directive__ = __webpack_require__("../../../../angular-resizable-element/dist/esm/src/resizeHandle.directive.js");
  
  
  
  var ResizableModule = (function () {
      function ResizableModule() {
      }
      return ResizableModule;
  }());
  
  ResizableModule.decorators = [
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgModule */], args: [{
                  declarations: [__WEBPACK_IMPORTED_MODULE_1__resizable_directive__["a" /* Resizable */], __WEBPACK_IMPORTED_MODULE_2__resizeHandle_directive__["a" /* ResizeHandle */]],
                  exports: [__WEBPACK_IMPORTED_MODULE_1__resizable_directive__["a" /* Resizable */], __WEBPACK_IMPORTED_MODULE_2__resizeHandle_directive__["a" /* ResizeHandle */]]
              },] },
  ];
  /** @nocollapse */
  ResizableModule.ctorParameters = function () { return []; };
  //# sourceMappingURL=resizable.module.js.map
  
  /***/ }),
  
  /***/ "../../../../angular-resizable-element/dist/esm/src/resizeHandle.directive.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResizeHandle; });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__("../../../core/@angular/core.es5.js");
  
  /**
   * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle
   *
   * For example
   *
   * ```
   * &lt;div mwlResizable&gt;
   *   &lt;div mwlResizeHandle [resizeEdges]="{bottom: true, right: true}"&gt;&lt;/div&gt;
   * &lt;/div&gt;
   * ```
   */
  var ResizeHandle = (function () {
      function ResizeHandle(renderer, element, zone) {
          this.renderer = renderer;
          this.element = element;
          this.zone = zone;
          /**
           * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on
           */
          this.resizeEdges = {};
          this.eventListeners = {};
      }
      ResizeHandle.prototype.ngOnDestroy = function () {
          this.unsubscribeEventListeners();
      };
      /**
       * @private
       */
      ResizeHandle.prototype.onMousedown = function (event, mouseX, mouseY) {
          var _this = this;
          event.preventDefault();
          this.zone.runOutsideAngular(function () {
              if (!_this.eventListeners.touchmove) {
                  _this.eventListeners.touchmove = _this.renderer.listen(_this.element.nativeElement, 'touchmove', function (event) {
                      _this.onMousemove(event, event.targetTouches[0].clientX, event.targetTouches[0].clientY);
                  });
              }
              if (!_this.eventListeners.mousemove) {
                  _this.eventListeners.mousemove = _this.renderer.listen(_this.element.nativeElement, 'mousemove', function (event) {
                      _this.onMousemove(event, event.clientX, event.clientY);
                  });
              }
              _this.resizable.mousedown.next({ mouseX: mouseX, mouseY: mouseY, edges: _this.resizeEdges });
          });
      };
      /**
       * @private
       */
      ResizeHandle.prototype.onMouseup = function (mouseX, mouseY) {
          var _this = this;
          this.zone.runOutsideAngular(function () {
              _this.unsubscribeEventListeners();
              _this.resizable.mouseup.next({ mouseX: mouseX, mouseY: mouseY, edges: _this.resizeEdges });
          });
      };
      ResizeHandle.prototype.onMousemove = function (event, mouseX, mouseY) {
          this.resizable.mousemove.next({ mouseX: mouseX, mouseY: mouseY, edges: this.resizeEdges, event: event });
      };
      ResizeHandle.prototype.unsubscribeEventListeners = function () {
          var _this = this;
          Object.keys(this.eventListeners).forEach(function (type) {
              _this.eventListeners[type]();
              delete _this.eventListeners[type];
          });
      };
      return ResizeHandle;
  }());
  
  ResizeHandle.decorators = [
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* Directive */], args: [{
                  selector: '[mwlResizeHandle]'
              },] },
  ];
  /** @nocollapse */
  ResizeHandle.ctorParameters = function () { return [
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_3" /* Renderer2 */], },
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* ElementRef */], },
      { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["R" /* NgZone */], },
  ]; };
  ResizeHandle.propDecorators = {
      'resizeEdges': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* Input */] },],
      'onMousedown': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['touchstart', ['$event', '$event.touches[0].clientX', '$event.touches[0].clientY'],] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] },],
      'onMouseup': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['touchend', ['$event.changedTouches[0].clientX', '$event.changedTouches[0].clientY'],] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['touchcancel', ['$event.changedTouches[0].clientX', '$event.changedTouches[0].clientY'],] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* HostListener */], args: ['mouseup', ['$event.clientX', '$event.clientY'],] },],
  };
  //# sourceMappingURL=resizeHandle.directive.js.map
  
  /***/ }),
  
  /***/ "../../../../calendar-utils/dist/calendar-utils.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* unused harmony export DAYS_OF_WEEK */
  /* unused harmony export SECONDS_IN_DAY */
  /* unused harmony export SECONDS_IN_WEEK */
  /* unused harmony export getWeekViewEventOffset */
  /* harmony export (immutable) */ __webpack_exports__["e"] = getWeekViewHeader;
  /* harmony export (immutable) */ __webpack_exports__["d"] = getWeekView;
  /* harmony export (immutable) */ __webpack_exports__["c"] = getMonthView;
  /* harmony export (immutable) */ __webpack_exports__["a"] = getDayView;
  /* harmony export (immutable) */ __webpack_exports__["b"] = getDayViewHourGrid;
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day__ = __webpack_require__("../../../../date-fns/end_of_day/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes__ = __webpack_require__("../../../../date-fns/add_minutes/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days__ = __webpack_require__("../../../../date-fns/difference_in_days/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day__ = __webpack_require__("../../../../date-fns/start_of_day/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_date_fns_is_same_day__ = __webpack_require__("../../../../date-fns/is_same_day/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_date_fns_is_same_day___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_date_fns_is_same_day__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_date_fns_get_day__ = __webpack_require__("../../../../date-fns/get_day/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_date_fns_get_day___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_date_fns_get_day__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week__ = __webpack_require__("../../../../date-fns/start_of_week/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_date_fns_add_days__ = __webpack_require__("../../../../date-fns/add_days/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_date_fns_add_days___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_date_fns_add_days__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_date_fns_end_of_week__ = __webpack_require__("../../../../date-fns/end_of_week/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_date_fns_end_of_week___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_date_fns_end_of_week__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds__ = __webpack_require__("../../../../date-fns/difference_in_seconds/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_date_fns_start_of_month__ = __webpack_require__("../../../../date-fns/start_of_month/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_date_fns_start_of_month___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_date_fns_start_of_month__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_date_fns_end_of_month__ = __webpack_require__("../../../../date-fns/end_of_month/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_date_fns_end_of_month___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_date_fns_end_of_month__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_date_fns_is_same_month__ = __webpack_require__("../../../../date-fns/is_same_month/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_date_fns_is_same_month___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_date_fns_is_same_month__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second__ = __webpack_require__("../../../../date-fns/is_same_second/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours__ = __webpack_require__("../../../../date-fns/set_hours/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes__ = __webpack_require__("../../../../date-fns/set_minutes/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_date_fns_start_of_minute__ = __webpack_require__("../../../../date-fns/start_of_minute/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_date_fns_start_of_minute___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16_date_fns_start_of_minute__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_date_fns_difference_in_minutes__ = __webpack_require__("../../../../date-fns/difference_in_minutes/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_date_fns_difference_in_minutes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_17_date_fns_difference_in_minutes__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours__ = __webpack_require__("../../../../date-fns/add_hours/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_date_fns_add_seconds__ = __webpack_require__("../../../../date-fns/add_seconds/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_date_fns_add_seconds___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_19_date_fns_add_seconds__);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_date_fns_max__ = __webpack_require__("../../../../date-fns/max/index.js");
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_date_fns_max___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_20_date_fns_max__);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  var DAYS_OF_WEEK;
  (function (DAYS_OF_WEEK) {
      DAYS_OF_WEEK[DAYS_OF_WEEK["SUNDAY"] = 0] = "SUNDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["MONDAY"] = 1] = "MONDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["TUESDAY"] = 2] = "TUESDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["WEDNESDAY"] = 3] = "WEDNESDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["THURSDAY"] = 4] = "THURSDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["FRIDAY"] = 5] = "FRIDAY";
      DAYS_OF_WEEK[DAYS_OF_WEEK["SATURDAY"] = 6] = "SATURDAY";
  })(DAYS_OF_WEEK || (DAYS_OF_WEEK = {}));
  var DEFAULT_WEEKEND_DAYS = [DAYS_OF_WEEK.SUNDAY, DAYS_OF_WEEK.SATURDAY];
  var DAYS_IN_WEEK = 7;
  var HOURS_IN_DAY = 24;
  var MINUTES_IN_HOUR = 60;
  var SECONDS_IN_DAY = 60 * 60 * 24;
  var SECONDS_IN_WEEK = SECONDS_IN_DAY * DAYS_IN_WEEK;
  function getExcludedSeconds(_a) {
      var startDate = _a.startDate, seconds = _a.seconds, excluded = _a.excluded, _b = _a.precision, precision = _b === void 0 ? 'days' : _b;
      if (excluded.length < 1) {
          return 0;
      }
      var endDate = __WEBPACK_IMPORTED_MODULE_19_date_fns_add_seconds___default()(startDate, seconds - 1);
      var dayStart = __WEBPACK_IMPORTED_MODULE_5_date_fns_get_day___default()(startDate);
      var dayEnd = __WEBPACK_IMPORTED_MODULE_5_date_fns_get_day___default()(__WEBPACK_IMPORTED_MODULE_19_date_fns_add_seconds___default()(endDate, 0));
      var result = 0; // Calculated in seconds
      var current = startDate;
      var _loop_1 = function () {
          var day = __WEBPACK_IMPORTED_MODULE_5_date_fns_get_day___default()(current);
          if (excluded.some(function (excludedDay) { return excludedDay === day; })) {
              result += calculateExcludedSeconds({ dayStart: dayStart, dayEnd: dayEnd, day: day, precision: precision, startDate: startDate, endDate: endDate });
          }
          current = __WEBPACK_IMPORTED_MODULE_7_date_fns_add_days___default()(current, 1);
      };
      while (current < endDate) {
          _loop_1();
      }
      return result;
  }
  function calculateExcludedSeconds(_a) {
      var precision = _a.precision, day = _a.day, dayStart = _a.dayStart, dayEnd = _a.dayEnd, startDate = _a.startDate, endDate = _a.endDate;
      if (precision === 'minutes') {
          if (day === dayStart) {
              return __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(__WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default()(startDate), startDate) + 1;
          }
          else if (day === dayEnd) {
              return __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(endDate, __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(endDate)) + 1;
          }
      }
      return SECONDS_IN_DAY;
  }
  function getWeekViewEventSpan(_a) {
      var event = _a.event, offset = _a.offset, startOfWeekDate = _a.startOfWeekDate, excluded = _a.excluded, _b = _a.precision, precision = _b === void 0 ? 'days' : _b;
      var span = SECONDS_IN_DAY;
      var begin = __WEBPACK_IMPORTED_MODULE_20_date_fns_max___default()(event.start, startOfWeekDate);
      if (event.end) {
          switch (precision) {
              case 'minutes':
                  span = __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(event.end, begin);
                  break;
              default:
                  span = __WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days___default()(__WEBPACK_IMPORTED_MODULE_7_date_fns_add_days___default()(event.end, 1), begin) * SECONDS_IN_DAY;
                  break;
          }
      }
      var offsetSeconds = offset * SECONDS_IN_DAY;
      var totalLength = offsetSeconds + span;
      // the best way to detect if an event is outside the week-view
      // is to check if the total span beginning (from startOfWeekDay or event start) exceeds 7days
      if (totalLength > SECONDS_IN_WEEK) {
          span = SECONDS_IN_WEEK - offsetSeconds;
      }
      span -= getExcludedSeconds({ startDate: begin, seconds: span, excluded: excluded, precision: precision });
      return span / SECONDS_IN_DAY;
  }
  function getWeekViewEventOffset(_a) {
      var event = _a.event, startOfWeek = _a.startOfWeek, _b = _a.excluded, excluded = _b === void 0 ? [] : _b, _c = _a.precision, precision = _c === void 0 ? 'days' : _c;
      if (event.start < startOfWeek) {
          return 0;
      }
      var offset = 0;
      switch (precision) {
          case 'days':
              offset = __WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days___default()(__WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(event.start), startOfWeek) * SECONDS_IN_DAY;
              break;
          case 'minutes':
              offset = __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(event.start, startOfWeek);
              break;
      }
      offset -= getExcludedSeconds({ startDate: startOfWeek, seconds: offset, excluded: excluded, precision: precision });
      return offset / SECONDS_IN_DAY;
  }
  function isEventIsPeriod(_a) {
      var event = _a.event, periodStart = _a.periodStart, periodEnd = _a.periodEnd;
      var eventStart = event.start;
      var eventEnd = event.end || event.start;
      if (eventStart > periodStart && eventStart < periodEnd) {
          return true;
      }
      if (eventEnd > periodStart && eventEnd < periodEnd) {
          return true;
      }
      if (eventStart < periodStart && eventEnd > periodEnd) {
          return true;
      }
      if (__WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second___default()(eventStart, periodStart) || __WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second___default()(eventStart, periodEnd)) {
          return true;
      }
      if (__WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second___default()(eventEnd, periodStart) || __WEBPACK_IMPORTED_MODULE_13_date_fns_is_same_second___default()(eventEnd, periodEnd)) {
          return true;
      }
      return false;
  }
  function getEventsInPeriod(_a) {
      var events = _a.events, periodStart = _a.periodStart, periodEnd = _a.periodEnd;
      return events.filter(function (event) { return isEventIsPeriod({ event: event, periodStart: periodStart, periodEnd: periodEnd }); });
  }
  function getWeekDay(_a) {
      var date = _a.date, _b = _a.weekendDays, weekendDays = _b === void 0 ? DEFAULT_WEEKEND_DAYS : _b;
      var today = __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(new Date());
      return {
          date: date,
          isPast: date < today,
          isToday: __WEBPACK_IMPORTED_MODULE_4_date_fns_is_same_day___default()(date, today),
          isFuture: date > today,
          isWeekend: weekendDays.indexOf(__WEBPACK_IMPORTED_MODULE_5_date_fns_get_day___default()(date)) > -1
      };
  }
  function getWeekViewHeader(_a) {
      var viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _b = _a.excluded, excluded = _b === void 0 ? [] : _b, weekendDays = _a.weekendDays;
      var start = __WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week___default()(viewDate, { weekStartsOn: weekStartsOn });
      var days = [];
      var _loop_2 = function (i) {
          var date = __WEBPACK_IMPORTED_MODULE_7_date_fns_add_days___default()(start, i);
          if (!excluded.some(function (e) { return date.getDay() === e; })) {
              days.push(getWeekDay({ date: date, weekendDays: weekendDays }));
          }
      };
      for (var i = 0; i < DAYS_IN_WEEK; i++) {
          _loop_2(i);
      }
      return days;
  }
  function getWeekView(_a) {
      var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.precision, precision = _d === void 0 ? 'days' : _d, _e = _a.absolutePositionedEvents, absolutePositionedEvents = _e === void 0 ? false : _e;
      if (!events) {
          events = [];
      }
      var startOfViewWeek = __WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week___default()(viewDate, { weekStartsOn: weekStartsOn });
      var endOfViewWeek = __WEBPACK_IMPORTED_MODULE_8_date_fns_end_of_week___default()(viewDate, { weekStartsOn: weekStartsOn });
      var maxRange = DAYS_IN_WEEK - excluded.length;
      var eventsMapped = getEventsInPeriod({ events: events, periodStart: startOfViewWeek, periodEnd: endOfViewWeek }).map(function (event) {
          var offset = getWeekViewEventOffset({ event: event, startOfWeek: startOfViewWeek, excluded: excluded, precision: precision });
          var span = getWeekViewEventSpan({ event: event, offset: offset, startOfWeekDate: startOfViewWeek, excluded: excluded, precision: precision });
          return { event: event, offset: offset, span: span };
      }).filter(function (e) { return e.offset < maxRange; }).filter(function (e) { return e.span > 0; }).map(function (entry) { return ({
          event: entry.event,
          offset: entry.offset,
          span: entry.span,
          startsBeforeWeek: entry.event.start < startOfViewWeek,
          endsAfterWeek: (entry.event.end || entry.event.start) > endOfViewWeek
      }); }).sort(function (itemA, itemB) {
          var startSecondsDiff = __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(itemA.event.start, itemB.event.start);
          if (startSecondsDiff === 0) {
              return __WEBPACK_IMPORTED_MODULE_9_date_fns_difference_in_seconds___default()(itemB.event.end || itemB.event.start, itemA.event.end || itemA.event.start);
          }
          return startSecondsDiff;
      });
      var eventRows = [];
      var allocatedEvents = [];
      eventsMapped.forEach(function (event, index) {
          if (allocatedEvents.indexOf(event) === -1) {
              allocatedEvents.push(event);
              var rowSpan_1 = event.span + event.offset;
              var otherRowEvents = eventsMapped.slice(index + 1).filter(function (nextEvent) {
                  if (nextEvent.offset >= rowSpan_1 &&
                      rowSpan_1 + nextEvent.span <= DAYS_IN_WEEK &&
                      allocatedEvents.indexOf(nextEvent) === -1) {
                      var nextEventOffset = nextEvent.offset - rowSpan_1;
                      if (!absolutePositionedEvents) {
                          nextEvent.offset = nextEventOffset;
                      }
                      rowSpan_1 += nextEvent.span + nextEventOffset;
                      allocatedEvents.push(nextEvent);
                      return true;
                  }
              });
              eventRows.push({
                  row: [
                      event
                  ].concat(otherRowEvents)
              });
          }
      });
      return eventRows;
  }
  function getMonthView(_a) {
      var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.viewStart, viewStart = _d === void 0 ? __WEBPACK_IMPORTED_MODULE_10_date_fns_start_of_month___default()(viewDate) : _d, _e = _a.viewEnd, viewEnd = _e === void 0 ? __WEBPACK_IMPORTED_MODULE_11_date_fns_end_of_month___default()(viewDate) : _e, weekendDays = _a.weekendDays;
      if (!events) {
          events = [];
      }
      var start = __WEBPACK_IMPORTED_MODULE_6_date_fns_start_of_week___default()(viewStart, { weekStartsOn: weekStartsOn });
      var end = __WEBPACK_IMPORTED_MODULE_8_date_fns_end_of_week___default()(viewEnd, { weekStartsOn: weekStartsOn });
      var eventsInMonth = getEventsInPeriod({
          events: events,
          periodStart: start,
          periodEnd: end
      });
      var initialViewDays = [];
      var previousDate;
      var _loop_3 = function (i) {
          // hacky fix for https://github.com/mattlewis92/angular-calendar/issues/173
          var date;
          if (previousDate) {
              date = __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(__WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours___default()(previousDate, HOURS_IN_DAY));
              if (previousDate.getTime() === date.getTime()) {
                  date = __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(__WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours___default()(previousDate, HOURS_IN_DAY + 1));
              }
              previousDate = date;
          }
          else {
              date = previousDate = start;
          }
          if (!excluded.some(function (e) { return date.getDay() === e; })) {
              var day = getWeekDay({ date: date, weekendDays: weekendDays });
              var events_1 = getEventsInPeriod({
                  events: eventsInMonth,
                  periodStart: __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(date),
                  periodEnd: __WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default()(date)
              });
              day.inMonth = __WEBPACK_IMPORTED_MODULE_12_date_fns_is_same_month___default()(date, viewDate);
              day.events = events_1;
              day.badgeTotal = events_1.length;
              initialViewDays.push(day);
          }
      };
      for (var i = 0; i < __WEBPACK_IMPORTED_MODULE_2_date_fns_difference_in_days___default()(end, start) + 1; i++) {
          _loop_3(i);
      }
      var days = [];
      var totalDaysVisibleInWeek = DAYS_IN_WEEK - excluded.length;
      if (totalDaysVisibleInWeek < DAYS_IN_WEEK) {
          for (var i = 0; i < initialViewDays.length; i += totalDaysVisibleInWeek) {
              var row = initialViewDays.slice(i, i + totalDaysVisibleInWeek);
              var isRowInMonth = row.some(function (day) { return day.date.getMonth() === viewDate.getMonth(); });
              if (isRowInMonth) {
                  days = days.concat(row);
              }
          }
      }
      else {
          days = initialViewDays;
      }
      var rows = Math.floor(days.length / totalDaysVisibleInWeek);
      var rowOffsets = [];
      for (var i = 0; i < rows; i++) {
          rowOffsets.push(i * totalDaysVisibleInWeek);
      }
      return {
          rowOffsets: rowOffsets,
          totalDaysVisibleInWeek: totalDaysVisibleInWeek,
          days: days
      };
  }
  function getDayView(_a) {
      var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, eventWidth = _a.eventWidth, segmentHeight = _a.segmentHeight;
      if (!events) {
          events = [];
      }
      var startOfView = __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes___default()(__WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours___default()(__WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(viewDate), dayStart.hour), dayStart.minute);
      var endOfView = __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes___default()(__WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours___default()(__WEBPACK_IMPORTED_MODULE_16_date_fns_start_of_minute___default()(__WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default()(viewDate)), dayEnd.hour), dayEnd.minute);
      var previousDayEvents = [];
      var dayViewEvents = getEventsInPeriod({
          events: events.filter(function (event) { return !event.allDay; }),
          periodStart: startOfView,
          periodEnd: endOfView
      }).sort(function (eventA, eventB) {
          return eventA.start.valueOf() - eventB.start.valueOf();
      }).map(function (event) {
          var eventStart = event.start;
          var eventEnd = event.end || eventStart;
          var startsBeforeDay = eventStart < startOfView;
          var endsAfterDay = eventEnd > endOfView;
          var hourHeightModifier = (hourSegments * segmentHeight) / MINUTES_IN_HOUR;
          var top = 0;
          if (eventStart > startOfView) {
              top += __WEBPACK_IMPORTED_MODULE_17_date_fns_difference_in_minutes___default()(eventStart, startOfView);
          }
          top *= hourHeightModifier;
          var startDate = startsBeforeDay ? startOfView : eventStart;
          var endDate = endsAfterDay ? endOfView : eventEnd;
          var height = __WEBPACK_IMPORTED_MODULE_17_date_fns_difference_in_minutes___default()(endDate, startDate);
          if (!event.end) {
              height = segmentHeight;
          }
          else {
              height *= hourHeightModifier;
          }
          var bottom = top + height;
          var overlappingPreviousEvents = previousDayEvents.filter(function (previousEvent) {
              var previousEventTop = previousEvent.top;
              var previousEventBottom = previousEvent.top + previousEvent.height;
              if (top < previousEventBottom && previousEventBottom < bottom) {
                  return true;
              }
              else if (previousEventTop <= top && bottom <= previousEventBottom) {
                  return true;
              }
              return false;
          });
          var left = 0;
          while (overlappingPreviousEvents.some(function (previousEvent) { return previousEvent.left === left; })) {
              left += eventWidth;
          }
          var dayEvent = {
              event: event,
              height: height,
              width: eventWidth,
              top: top,
              left: left,
              startsBeforeDay: startsBeforeDay,
              endsAfterDay: endsAfterDay
          };
          if (height > 0) {
              previousDayEvents.push(dayEvent);
          }
          return dayEvent;
      }).filter(function (dayEvent) { return dayEvent.height > 0; });
      var width = Math.max.apply(Math, dayViewEvents.map(function (event) { return event.left + event.width; }));
      var allDayEvents = getEventsInPeriod({
          events: events.filter(function (event) { return event.allDay; }),
          periodStart: __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(startOfView),
          periodEnd: __WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default()(endOfView)
      });
      return {
          events: dayViewEvents,
          width: width,
          allDayEvents: allDayEvents
      };
  }
  function getDayViewHourGrid(_a) {
      var viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd;
      var hours = [];
      var startOfView = __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes___default()(__WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours___default()(__WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(viewDate), dayStart.hour), dayStart.minute);
      var endOfView = __WEBPACK_IMPORTED_MODULE_15_date_fns_set_minutes___default()(__WEBPACK_IMPORTED_MODULE_14_date_fns_set_hours___default()(__WEBPACK_IMPORTED_MODULE_16_date_fns_start_of_minute___default()(__WEBPACK_IMPORTED_MODULE_0_date_fns_end_of_day___default()(viewDate)), dayEnd.hour), dayEnd.minute);
      var segmentDuration = MINUTES_IN_HOUR / hourSegments;
      var startOfViewDay = __WEBPACK_IMPORTED_MODULE_3_date_fns_start_of_day___default()(viewDate);
      for (var i = 0; i < HOURS_IN_DAY; i++) {
          var segments = [];
          for (var j = 0; j < hourSegments; j++) {
              var date = __WEBPACK_IMPORTED_MODULE_1_date_fns_add_minutes___default()(__WEBPACK_IMPORTED_MODULE_18_date_fns_add_hours___default()(startOfViewDay, i), j * segmentDuration);
              if (date >= startOfView && date < endOfView) {
                  segments.push({
                      date: date,
                      isStart: j === 0
                  });
              }
          }
          if (segments.length > 0) {
              hours.push({ segments: segments });
          }
      }
      return hours;
  }
  //# sourceMappingURL=calendar-utils.js.map
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_days/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Day Helpers
   * @summary Add the specified number of days to the given date.
   *
   * @description
   * Add the specified number of days to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of days to be added
   * @returns {Date} the new date with the days added
   *
   * @example
   * // Add 10 days to 1 September 2014:
   * var result = addDays(new Date(2014, 8, 1), 10)
   * //=> Thu Sep 11 2014 00:00:00
   */
  function addDays (dirtyDate, dirtyAmount) {
    var date = parse(dirtyDate)
    var amount = Number(dirtyAmount)
    date.setDate(date.getDate() + amount)
    return date
  }
  
  module.exports = addDays
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_hours/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addMilliseconds = __webpack_require__("../../../../date-fns/add_milliseconds/index.js")
  
  var MILLISECONDS_IN_HOUR = 3600000
  
  /**
   * @category Hour Helpers
   * @summary Add the specified number of hours to the given date.
   *
   * @description
   * Add the specified number of hours to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of hours to be added
   * @returns {Date} the new date with the hours added
   *
   * @example
   * // Add 2 hours to 10 July 2014 23:00:00:
   * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)
   * //=> Fri Jul 11 2014 01:00:00
   */
  function addHours (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)
  }
  
  module.exports = addHours
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_milliseconds/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Millisecond Helpers
   * @summary Add the specified number of milliseconds to the given date.
   *
   * @description
   * Add the specified number of milliseconds to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of milliseconds to be added
   * @returns {Date} the new date with the milliseconds added
   *
   * @example
   * // Add 750 milliseconds to 10 July 2014 12:45:30.000:
   * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
   * //=> Thu Jul 10 2014 12:45:30.750
   */
  function addMilliseconds (dirtyDate, dirtyAmount) {
    var timestamp = parse(dirtyDate).getTime()
    var amount = Number(dirtyAmount)
    return new Date(timestamp + amount)
  }
  
  module.exports = addMilliseconds
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_minutes/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addMilliseconds = __webpack_require__("../../../../date-fns/add_milliseconds/index.js")
  
  var MILLISECONDS_IN_MINUTE = 60000
  
  /**
   * @category Minute Helpers
   * @summary Add the specified number of minutes to the given date.
   *
   * @description
   * Add the specified number of minutes to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of minutes to be added
   * @returns {Date} the new date with the minutes added
   *
   * @example
   * // Add 30 minutes to 10 July 2014 12:00:00:
   * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)
   * //=> Thu Jul 10 2014 12:30:00
   */
  function addMinutes (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)
  }
  
  module.exports = addMinutes
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_months/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  var getDaysInMonth = __webpack_require__("../../../../date-fns/get_days_in_month/index.js")
  
  /**
   * @category Month Helpers
   * @summary Add the specified number of months to the given date.
   *
   * @description
   * Add the specified number of months to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of months to be added
   * @returns {Date} the new date with the months added
   *
   * @example
   * // Add 5 months to 1 September 2014:
   * var result = addMonths(new Date(2014, 8, 1), 5)
   * //=> Sun Feb 01 2015 00:00:00
   */
  function addMonths (dirtyDate, dirtyAmount) {
    var date = parse(dirtyDate)
    var amount = Number(dirtyAmount)
    var desiredMonth = date.getMonth() + amount
    var dateWithDesiredMonth = new Date(0)
    dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)
    dateWithDesiredMonth.setHours(0, 0, 0, 0)
    var daysInMonth = getDaysInMonth(dateWithDesiredMonth)
    // Set the last day of the new month
    // if the original date was the last day of the longer month
    date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))
    return date
  }
  
  module.exports = addMonths
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_seconds/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addMilliseconds = __webpack_require__("../../../../date-fns/add_milliseconds/index.js")
  
  /**
   * @category Second Helpers
   * @summary Add the specified number of seconds to the given date.
   *
   * @description
   * Add the specified number of seconds to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of seconds to be added
   * @returns {Date} the new date with the seconds added
   *
   * @example
   * // Add 30 seconds to 10 July 2014 12:45:00:
   * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)
   * //=> Thu Jul 10 2014 12:45:30
   */
  function addSeconds (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addMilliseconds(dirtyDate, amount * 1000)
  }
  
  module.exports = addSeconds
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/add_weeks/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addDays = __webpack_require__("../../../../date-fns/add_days/index.js")
  
  /**
   * @category Week Helpers
   * @summary Add the specified number of weeks to the given date.
   *
   * @description
   * Add the specified number of week to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of weeks to be added
   * @returns {Date} the new date with the weeks added
   *
   * @example
   * // Add 4 weeks to 1 September 2014:
   * var result = addWeeks(new Date(2014, 8, 1), 4)
   * //=> Mon Sep 29 2014 00:00:00
   */
  function addWeeks (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    var days = amount * 7
    return addDays(dirtyDate, days)
  }
  
  module.exports = addWeeks
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/compare_asc/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Common Helpers
   * @summary Compare the two dates and return -1, 0 or 1.
   *
   * @description
   * Compare the two dates and return 1 if the first date is after the second,
   * -1 if the first date is before the second or 0 if dates are equal.
   *
   * @param {Date|String|Number} dateLeft - the first date to compare
   * @param {Date|String|Number} dateRight - the second date to compare
   * @returns {Number} the result of the comparison
   *
   * @example
   * // Compare 11 February 1987 and 10 July 1989:
   * var result = compareAsc(
   *   new Date(1987, 1, 11),
   *   new Date(1989, 6, 10)
   * )
   * //=> -1
   *
   * @example
   * // Sort the array of dates:
   * var result = [
   *   new Date(1995, 6, 2),
   *   new Date(1987, 1, 11),
   *   new Date(1989, 6, 10)
   * ].sort(compareAsc)
   * //=> [
   * //   Wed Feb 11 1987 00:00:00,
   * //   Mon Jul 10 1989 00:00:00,
   * //   Sun Jul 02 1995 00:00:00
   * // ]
   */
  function compareAsc (dirtyDateLeft, dirtyDateRight) {
    var dateLeft = parse(dirtyDateLeft)
    var timeLeft = dateLeft.getTime()
    var dateRight = parse(dirtyDateRight)
    var timeRight = dateRight.getTime()
  
    if (timeLeft < timeRight) {
      return -1
    } else if (timeLeft > timeRight) {
      return 1
    } else {
      return 0
    }
  }
  
  module.exports = compareAsc
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/difference_in_calendar_days/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var startOfDay = __webpack_require__("../../../../date-fns/start_of_day/index.js")
  
  var MILLISECONDS_IN_MINUTE = 60000
  var MILLISECONDS_IN_DAY = 86400000
  
  /**
   * @category Day Helpers
   * @summary Get the number of calendar days between the given dates.
   *
   * @description
   * Get the number of calendar days between the given dates.
   *
   * @param {Date|String|Number} dateLeft - the later date
   * @param {Date|String|Number} dateRight - the earlier date
   * @returns {Number} the number of calendar days
   *
   * @example
   * // How many calendar days are between
   * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
   * var result = differenceInCalendarDays(
   *   new Date(2012, 6, 2, 0, 0),
   *   new Date(2011, 6, 2, 23, 0)
   * )
   * //=> 366
   */
  function differenceInCalendarDays (dirtyDateLeft, dirtyDateRight) {
    var startOfDayLeft = startOfDay(dirtyDateLeft)
    var startOfDayRight = startOfDay(dirtyDateRight)
  
    var timestampLeft = startOfDayLeft.getTime() -
      startOfDayLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE
    var timestampRight = startOfDayRight.getTime() -
      startOfDayRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE
  
    // Round the number of days to the nearest integer
    // because the number of milliseconds in a day is not constant
    // (e.g. it's different in the day of the daylight saving time clock shift)
    return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)
  }
  
  module.exports = differenceInCalendarDays
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/difference_in_days/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  var differenceInCalendarDays = __webpack_require__("../../../../date-fns/difference_in_calendar_days/index.js")
  var compareAsc = __webpack_require__("../../../../date-fns/compare_asc/index.js")
  
  /**
   * @category Day Helpers
   * @summary Get the number of full days between the given dates.
   *
   * @description
   * Get the number of full days between the given dates.
   *
   * @param {Date|String|Number} dateLeft - the later date
   * @param {Date|String|Number} dateRight - the earlier date
   * @returns {Number} the number of full days
   *
   * @example
   * // How many full days are between
   * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
   * var result = differenceInDays(
   *   new Date(2012, 6, 2, 0, 0),
   *   new Date(2011, 6, 2, 23, 0)
   * )
   * //=> 365
   */
  function differenceInDays (dirtyDateLeft, dirtyDateRight) {
    var dateLeft = parse(dirtyDateLeft)
    var dateRight = parse(dirtyDateRight)
  
    var sign = compareAsc(dateLeft, dateRight)
    var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))
    dateLeft.setDate(dateLeft.getDate() - sign * difference)
  
    // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full
    // If so, result must be decreased by 1 in absolute value
    var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign
    return sign * (difference - isLastDayNotFull)
  }
  
  module.exports = differenceInDays
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/difference_in_milliseconds/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Millisecond Helpers
   * @summary Get the number of milliseconds between the given dates.
   *
   * @description
   * Get the number of milliseconds between the given dates.
   *
   * @param {Date|String|Number} dateLeft - the later date
   * @param {Date|String|Number} dateRight - the earlier date
   * @returns {Number} the number of milliseconds
   *
   * @example
   * // How many milliseconds are between
   * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?
   * var result = differenceInMilliseconds(
   *   new Date(2014, 6, 2, 12, 30, 21, 700),
   *   new Date(2014, 6, 2, 12, 30, 20, 600)
   * )
   * //=> 1100
   */
  function differenceInMilliseconds (dirtyDateLeft, dirtyDateRight) {
    var dateLeft = parse(dirtyDateLeft)
    var dateRight = parse(dirtyDateRight)
    return dateLeft.getTime() - dateRight.getTime()
  }
  
  module.exports = differenceInMilliseconds
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/difference_in_minutes/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var differenceInMilliseconds = __webpack_require__("../../../../date-fns/difference_in_milliseconds/index.js")
  
  var MILLISECONDS_IN_MINUTE = 60000
  
  /**
   * @category Minute Helpers
   * @summary Get the number of minutes between the given dates.
   *
   * @description
   * Get the number of minutes between the given dates.
   *
   * @param {Date|String|Number} dateLeft - the later date
   * @param {Date|String|Number} dateRight - the earlier date
   * @returns {Number} the number of minutes
   *
   * @example
   * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?
   * var result = differenceInMinutes(
   *   new Date(2014, 6, 2, 12, 20, 0),
   *   new Date(2014, 6, 2, 12, 7, 59)
   * )
   * //=> 12
   */
  function differenceInMinutes (dirtyDateLeft, dirtyDateRight) {
    var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE
    return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
  }
  
  module.exports = differenceInMinutes
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/difference_in_seconds/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var differenceInMilliseconds = __webpack_require__("../../../../date-fns/difference_in_milliseconds/index.js")
  
  /**
   * @category Second Helpers
   * @summary Get the number of seconds between the given dates.
   *
   * @description
   * Get the number of seconds between the given dates.
   *
   * @param {Date|String|Number} dateLeft - the later date
   * @param {Date|String|Number} dateRight - the earlier date
   * @returns {Number} the number of seconds
   *
   * @example
   * // How many seconds are between
   * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?
   * var result = differenceInSeconds(
   *   new Date(2014, 6, 2, 12, 30, 20, 0),
   *   new Date(2014, 6, 2, 12, 30, 7, 999)
   * )
   * //=> 12
   */
  function differenceInSeconds (dirtyDateLeft, dirtyDateRight) {
    var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000
    return diff > 0 ? Math.floor(diff) : Math.ceil(diff)
  }
  
  module.exports = differenceInSeconds
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/end_of_day/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Day Helpers
   * @summary Return the end of a day for the given date.
   *
   * @description
   * Return the end of a day for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the end of a day
   *
   * @example
   * // The end of a day for 2 September 2014 11:55:00:
   * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Tue Sep 02 2014 23:59:59.999
   */
  function endOfDay (dirtyDate) {
    var date = parse(dirtyDate)
    date.setHours(23, 59, 59, 999)
    return date
  }
  
  module.exports = endOfDay
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/end_of_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Month Helpers
   * @summary Return the end of a month for the given date.
   *
   * @description
   * Return the end of a month for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the end of a month
   *
   * @example
   * // The end of a month for 2 September 2014 11:55:00:
   * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Tue Sep 30 2014 23:59:59.999
   */
  function endOfMonth (dirtyDate) {
    var date = parse(dirtyDate)
    var month = date.getMonth()
    date.setFullYear(date.getFullYear(), month + 1, 0)
    date.setHours(23, 59, 59, 999)
    return date
  }
  
  module.exports = endOfMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/end_of_week/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Week Helpers
   * @summary Return the end of a week for the given date.
   *
   * @description
   * Return the end of a week for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @param {Object} [options] - the object with options
   * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
   * @returns {Date} the end of a week
   *
   * @example
   * // The end of a week for 2 September 2014 11:55:00:
   * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Sat Sep 06 2014 23:59:59.999
   *
   * @example
   * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:
   * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})
   * //=> Sun Sep 07 2014 23:59:59.999
   */
  function endOfWeek (dirtyDate, dirtyOptions) {
    var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0
  
    var date = parse(dirtyDate)
    var day = date.getDay()
    var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)
  
    date.setDate(date.getDate() + diff)
    date.setHours(23, 59, 59, 999)
    return date
  }
  
  module.exports = endOfWeek
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_date/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Day Helpers
   * @summary Get the day of the month of the given date.
   *
   * @description
   * Get the day of the month of the given date.
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the day of month
   *
   * @example
   * // Which day of the month is 29 February 2012?
   * var result = getDate(new Date(2012, 1, 29))
   * //=> 29
   */
  function getDate (dirtyDate) {
    var date = parse(dirtyDate)
    var dayOfMonth = date.getDate()
    return dayOfMonth
  }
  
  module.exports = getDate
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_day/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Weekday Helpers
   * @summary Get the day of the week of the given date.
   *
   * @description
   * Get the day of the week of the given date.
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the day of week
   *
   * @example
   * // Which day of the week is 29 February 2012?
   * var result = getDay(new Date(2012, 1, 29))
   * //=> 3
   */
  function getDay (dirtyDate) {
    var date = parse(dirtyDate)
    var day = date.getDay()
    return day
  }
  
  module.exports = getDay
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_days_in_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Month Helpers
   * @summary Get the number of days in a month of the given date.
   *
   * @description
   * Get the number of days in a month of the given date.
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the number of days in a month
   *
   * @example
   * // How many days are in February 2000?
   * var result = getDaysInMonth(new Date(2000, 1))
   * //=> 29
   */
  function getDaysInMonth (dirtyDate) {
    var date = parse(dirtyDate)
    var year = date.getFullYear()
    var monthIndex = date.getMonth()
    var lastDayOfMonth = new Date(0)
    lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)
    lastDayOfMonth.setHours(0, 0, 0, 0)
    return lastDayOfMonth.getDate()
  }
  
  module.exports = getDaysInMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_iso_week/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  var startOfISOWeek = __webpack_require__("../../../../date-fns/start_of_iso_week/index.js")
  var startOfISOYear = __webpack_require__("../../../../date-fns/start_of_iso_year/index.js")
  
  var MILLISECONDS_IN_WEEK = 604800000
  
  /**
   * @category ISO Week Helpers
   * @summary Get the ISO week of the given date.
   *
   * @description
   * Get the ISO week of the given date.
   *
   * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the ISO week
   *
   * @example
   * // Which week of the ISO-week numbering year is 2 January 2005?
   * var result = getISOWeek(new Date(2005, 0, 2))
   * //=> 53
   */
  function getISOWeek (dirtyDate) {
    var date = parse(dirtyDate)
    var diff = startOfISOWeek(date).getTime() - startOfISOYear(date).getTime()
  
    // Round the number of days to the nearest integer
    // because the number of milliseconds in a week is not constant
    // (e.g. it's different in the week of the daylight saving time clock shift)
    return Math.round(diff / MILLISECONDS_IN_WEEK) + 1
  }
  
  module.exports = getISOWeek
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_iso_year/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  var startOfISOWeek = __webpack_require__("../../../../date-fns/start_of_iso_week/index.js")
  
  /**
   * @category ISO Week-Numbering Year Helpers
   * @summary Get the ISO week-numbering year of the given date.
   *
   * @description
   * Get the ISO week-numbering year of the given date,
   * which always starts 3 days before the year's first Thursday.
   *
   * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the ISO week-numbering year
   *
   * @example
   * // Which ISO-week numbering year is 2 January 2005?
   * var result = getISOYear(new Date(2005, 0, 2))
   * //=> 2004
   */
  function getISOYear (dirtyDate) {
    var date = parse(dirtyDate)
    var year = date.getFullYear()
  
    var fourthOfJanuaryOfNextYear = new Date(0)
    fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)
    fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)
    var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)
  
    var fourthOfJanuaryOfThisYear = new Date(0)
    fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)
    fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)
    var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)
  
    if (date.getTime() >= startOfNextYear.getTime()) {
      return year + 1
    } else if (date.getTime() >= startOfThisYear.getTime()) {
      return year
    } else {
      return year - 1
    }
  }
  
  module.exports = getISOYear
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Month Helpers
   * @summary Get the month of the given date.
   *
   * @description
   * Get the month of the given date.
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the month
   *
   * @example
   * // Which month is 29 February 2012?
   * var result = getMonth(new Date(2012, 1, 29))
   * //=> 1
   */
  function getMonth (dirtyDate) {
    var date = parse(dirtyDate)
    var month = date.getMonth()
    return month
  }
  
  module.exports = getMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/get_year/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Year Helpers
   * @summary Get the year of the given date.
   *
   * @description
   * Get the year of the given date.
   *
   * @param {Date|String|Number} date - the given date
   * @returns {Number} the year
   *
   * @example
   * // Which year is 2 July 2014?
   * var result = getYear(new Date(2014, 6, 2))
   * //=> 2014
   */
  function getYear (dirtyDate) {
    var date = parse(dirtyDate)
    var year = date.getFullYear()
    return year
  }
  
  module.exports = getYear
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/is_date/index.js":
  /***/ (function(module, exports) {
  
  /**
   * @category Common Helpers
   * @summary Is the given argument an instance of Date?
   *
   * @description
   * Is the given argument an instance of Date?
   *
   * @param {*} argument - the argument to check
   * @returns {Boolean} the given argument is an instance of Date
   *
   * @example
   * // Is 'mayonnaise' a Date?
   * var result = isDate('mayonnaise')
   * //=> false
   */
  function isDate (argument) {
    return argument instanceof Date
  }
  
  module.exports = isDate
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/is_same_day/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var startOfDay = __webpack_require__("../../../../date-fns/start_of_day/index.js")
  
  /**
   * @category Day Helpers
   * @summary Are the given dates in the same day?
   *
   * @description
   * Are the given dates in the same day?
   *
   * @param {Date|String|Number} dateLeft - the first date to check
   * @param {Date|String|Number} dateRight - the second date to check
   * @returns {Boolean} the dates are in the same day
   *
   * @example
   * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?
   * var result = isSameDay(
   *   new Date(2014, 8, 4, 6, 0),
   *   new Date(2014, 8, 4, 18, 0)
   * )
   * //=> true
   */
  function isSameDay (dirtyDateLeft, dirtyDateRight) {
    var dateLeftStartOfDay = startOfDay(dirtyDateLeft)
    var dateRightStartOfDay = startOfDay(dirtyDateRight)
  
    return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()
  }
  
  module.exports = isSameDay
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/is_same_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Month Helpers
   * @summary Are the given dates in the same month?
   *
   * @description
   * Are the given dates in the same month?
   *
   * @param {Date|String|Number} dateLeft - the first date to check
   * @param {Date|String|Number} dateRight - the second date to check
   * @returns {Boolean} the dates are in the same month
   *
   * @example
   * // Are 2 September 2014 and 25 September 2014 in the same month?
   * var result = isSameMonth(
   *   new Date(2014, 8, 2),
   *   new Date(2014, 8, 25)
   * )
   * //=> true
   */
  function isSameMonth (dirtyDateLeft, dirtyDateRight) {
    var dateLeft = parse(dirtyDateLeft)
    var dateRight = parse(dirtyDateRight)
    return dateLeft.getFullYear() === dateRight.getFullYear() &&
      dateLeft.getMonth() === dateRight.getMonth()
  }
  
  module.exports = isSameMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/is_same_second/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var startOfSecond = __webpack_require__("../../../../date-fns/start_of_second/index.js")
  
  /**
   * @category Second Helpers
   * @summary Are the given dates in the same second?
   *
   * @description
   * Are the given dates in the same second?
   *
   * @param {Date|String|Number} dateLeft - the first date to check
   * @param {Date|String|Number} dateRight - the second date to check
   * @returns {Boolean} the dates are in the same second
   *
   * @example
   * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500
   * // in the same second?
   * var result = isSameSecond(
   *   new Date(2014, 8, 4, 6, 30, 15),
   *   new Date(2014, 8, 4, 6, 30, 15, 500)
   * )
   * //=> true
   */
  function isSameSecond (dirtyDateLeft, dirtyDateRight) {
    var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)
    var dateRightStartOfSecond = startOfSecond(dirtyDateRight)
  
    return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()
  }
  
  module.exports = isSameSecond
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/max/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Common Helpers
   * @summary Return the latest of the given dates.
   *
   * @description
   * Return the latest of the given dates.
   *
   * @param {...(Date|String|Number)} dates - the dates to compare
   * @returns {Date} the latest of the dates
   *
   * @example
   * // Which of these dates is the latest?
   * var result = max(
   *   new Date(1989, 6, 10),
   *   new Date(1987, 1, 11),
   *   new Date(1995, 6, 2),
   *   new Date(1990, 0, 1)
   * )
   * //=> Sun Jul 02 1995 00:00:00
   */
  function max () {
    var dirtyDates = Array.prototype.slice.call(arguments)
    var dates = dirtyDates.map(function (dirtyDate) {
      return parse(dirtyDate)
    })
    var latestTimestamp = Math.max.apply(null, dates)
    return new Date(latestTimestamp)
  }
  
  module.exports = max
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/parse/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var isDate = __webpack_require__("../../../../date-fns/is_date/index.js")
  
  var MILLISECONDS_IN_HOUR = 3600000
  var MILLISECONDS_IN_MINUTE = 60000
  var DEFAULT_ADDITIONAL_DIGITS = 2
  
  var parseTokenDateTimeDelimeter = /[T ]/
  var parseTokenPlainTime = /:/
  
  // year tokens
  var parseTokenYY = /^(\d{2})$/
  var parseTokensYYY = [
    /^([+-]\d{2})$/, // 0 additional digits
    /^([+-]\d{3})$/, // 1 additional digit
    /^([+-]\d{4})$/ // 2 additional digits
  ]
  
  var parseTokenYYYY = /^(\d{4})/
  var parseTokensYYYYY = [
    /^([+-]\d{4})/, // 0 additional digits
    /^([+-]\d{5})/, // 1 additional digit
    /^([+-]\d{6})/ // 2 additional digits
  ]
  
  // date tokens
  var parseTokenMM = /^-(\d{2})$/
  var parseTokenDDD = /^-?(\d{3})$/
  var parseTokenMMDD = /^-?(\d{2})-?(\d{2})$/
  var parseTokenWww = /^-?W(\d{2})$/
  var parseTokenWwwD = /^-?W(\d{2})-?(\d{1})$/
  
  // time tokens
  var parseTokenHH = /^(\d{2}([.,]\d*)?)$/
  var parseTokenHHMM = /^(\d{2}):?(\d{2}([.,]\d*)?)$/
  var parseTokenHHMMSS = /^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/
  
  // timezone tokens
  var parseTokenTimezone = /([Z+-].*)$/
  var parseTokenTimezoneZ = /^(Z)$/
  var parseTokenTimezoneHH = /^([+-])(\d{2})$/
  var parseTokenTimezoneHHMM = /^([+-])(\d{2}):?(\d{2})$/
  
  /**
   * @category Common Helpers
   * @summary Convert the given argument to an instance of Date.
   *
   * @description
   * Convert the given argument to an instance of Date.
   *
   * If the argument is an instance of Date, the function returns its clone.
   *
   * If the argument is a number, it is treated as a timestamp.
   *
   * If an argument is a string, the function tries to parse it.
   * Function accepts complete ISO 8601 formats as well as partial implementations.
   * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
   *
   * If all above fails, the function passes the given argument to Date constructor.
   *
   * @param {Date|String|Number} argument - the value to convert
   * @param {Object} [options] - the object with options
   * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format
   * @returns {Date} the parsed date in the local time zone
   *
   * @example
   * // Convert string '2014-02-11T11:30:30' to date:
   * var result = parse('2014-02-11T11:30:30')
   * //=> Tue Feb 11 2014 11:30:30
   *
   * @example
   * // Parse string '+02014101',
   * // if the additional number of digits in the extended year format is 1:
   * var result = parse('+02014101', {additionalDigits: 1})
   * //=> Fri Apr 11 2014 00:00:00
   */
  function parse (argument, dirtyOptions) {
    if (isDate(argument)) {
      // Prevent the date to lose the milliseconds when passed to new Date() in IE10
      return new Date(argument.getTime())
    } else if (typeof argument !== 'string') {
      return new Date(argument)
    }
  
    var options = dirtyOptions || {}
    var additionalDigits = options.additionalDigits
    if (additionalDigits == null) {
      additionalDigits = DEFAULT_ADDITIONAL_DIGITS
    } else {
      additionalDigits = Number(additionalDigits)
    }
  
    var dateStrings = splitDateString(argument)
  
    var parseYearResult = parseYear(dateStrings.date, additionalDigits)
    var year = parseYearResult.year
    var restDateString = parseYearResult.restDateString
  
    var date = parseDate(restDateString, year)
  
    if (date) {
      var timestamp = date.getTime()
      var time = 0
      var offset
  
      if (dateStrings.time) {
        time = parseTime(dateStrings.time)
      }
  
      if (dateStrings.timezone) {
        offset = parseTimezone(dateStrings.timezone)
      } else {
        // get offset accurate to hour in timezones that change offset
        offset = new Date(timestamp + time).getTimezoneOffset()
        offset = new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE).getTimezoneOffset()
      }
  
      return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE)
    } else {
      return new Date(argument)
    }
  }
  
  function splitDateString (dateString) {
    var dateStrings = {}
    var array = dateString.split(parseTokenDateTimeDelimeter)
    var timeString
  
    if (parseTokenPlainTime.test(array[0])) {
      dateStrings.date = null
      timeString = array[0]
    } else {
      dateStrings.date = array[0]
      timeString = array[1]
    }
  
    if (timeString) {
      var token = parseTokenTimezone.exec(timeString)
      if (token) {
        dateStrings.time = timeString.replace(token[1], '')
        dateStrings.timezone = token[1]
      } else {
        dateStrings.time = timeString
      }
    }
  
    return dateStrings
  }
  
  function parseYear (dateString, additionalDigits) {
    var parseTokenYYY = parseTokensYYY[additionalDigits]
    var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]
  
    var token
  
    // YYYY or ±YYYYY
    token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString)
    if (token) {
      var yearString = token[1]
      return {
        year: parseInt(yearString, 10),
        restDateString: dateString.slice(yearString.length)
      }
    }
  
    // YY or ±YYY
    token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString)
    if (token) {
      var centuryString = token[1]
      return {
        year: parseInt(centuryString, 10) * 100,
        restDateString: dateString.slice(centuryString.length)
      }
    }
  
    // Invalid ISO-formatted year
    return {
      year: null
    }
  }
  
  function parseDate (dateString, year) {
    // Invalid ISO-formatted year
    if (year === null) {
      return null
    }
  
    var token
    var date
    var month
    var week
  
    // YYYY
    if (dateString.length === 0) {
      date = new Date(0)
      date.setUTCFullYear(year)
      return date
    }
  
    // YYYY-MM
    token = parseTokenMM.exec(dateString)
    if (token) {
      date = new Date(0)
      month = parseInt(token[1], 10) - 1
      date.setUTCFullYear(year, month)
      return date
    }
  
    // YYYY-DDD or YYYYDDD
    token = parseTokenDDD.exec(dateString)
    if (token) {
      date = new Date(0)
      var dayOfYear = parseInt(token[1], 10)
      date.setUTCFullYear(year, 0, dayOfYear)
      return date
    }
  
    // YYYY-MM-DD or YYYYMMDD
    token = parseTokenMMDD.exec(dateString)
    if (token) {
      date = new Date(0)
      month = parseInt(token[1], 10) - 1
      var day = parseInt(token[2], 10)
      date.setUTCFullYear(year, month, day)
      return date
    }
  
    // YYYY-Www or YYYYWww
    token = parseTokenWww.exec(dateString)
    if (token) {
      week = parseInt(token[1], 10) - 1
      return dayOfISOYear(year, week)
    }
  
    // YYYY-Www-D or YYYYWwwD
    token = parseTokenWwwD.exec(dateString)
    if (token) {
      week = parseInt(token[1], 10) - 1
      var dayOfWeek = parseInt(token[2], 10) - 1
      return dayOfISOYear(year, week, dayOfWeek)
    }
  
    // Invalid ISO-formatted date
    return null
  }
  
  function parseTime (timeString) {
    var token
    var hours
    var minutes
  
    // hh
    token = parseTokenHH.exec(timeString)
    if (token) {
      hours = parseFloat(token[1].replace(',', '.'))
      return (hours % 24) * MILLISECONDS_IN_HOUR
    }
  
    // hh:mm or hhmm
    token = parseTokenHHMM.exec(timeString)
    if (token) {
      hours = parseInt(token[1], 10)
      minutes = parseFloat(token[2].replace(',', '.'))
      return (hours % 24) * MILLISECONDS_IN_HOUR +
        minutes * MILLISECONDS_IN_MINUTE
    }
  
    // hh:mm:ss or hhmmss
    token = parseTokenHHMMSS.exec(timeString)
    if (token) {
      hours = parseInt(token[1], 10)
      minutes = parseInt(token[2], 10)
      var seconds = parseFloat(token[3].replace(',', '.'))
      return (hours % 24) * MILLISECONDS_IN_HOUR +
        minutes * MILLISECONDS_IN_MINUTE +
        seconds * 1000
    }
  
    // Invalid ISO-formatted time
    return null
  }
  
  function parseTimezone (timezoneString) {
    var token
    var absoluteOffset
  
    // Z
    token = parseTokenTimezoneZ.exec(timezoneString)
    if (token) {
      return 0
    }
  
    // ±hh
    token = parseTokenTimezoneHH.exec(timezoneString)
    if (token) {
      absoluteOffset = parseInt(token[2], 10) * 60
      return (token[1] === '+') ? -absoluteOffset : absoluteOffset
    }
  
    // ±hh:mm or ±hhmm
    token = parseTokenTimezoneHHMM.exec(timezoneString)
    if (token) {
      absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)
      return (token[1] === '+') ? -absoluteOffset : absoluteOffset
    }
  
    return 0
  }
  
  function dayOfISOYear (isoYear, week, day) {
    week = week || 0
    day = day || 0
    var date = new Date(0)
    date.setUTCFullYear(isoYear, 0, 4)
    var fourthOfJanuaryDay = date.getUTCDay() || 7
    var diff = week * 7 + day + 1 - fourthOfJanuaryDay
    date.setUTCDate(date.getUTCDate() + diff)
    return date
  }
  
  module.exports = parse
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/set_date/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Day Helpers
   * @summary Set the day of the month to the given date.
   *
   * @description
   * Set the day of the month to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} dayOfMonth - the day of the month of the new date
   * @returns {Date} the new date with the day of the month setted
   *
   * @example
   * // Set the 30th day of the month to 1 September 2014:
   * var result = setDate(new Date(2014, 8, 1), 30)
   * //=> Tue Sep 30 2014 00:00:00
   */
  function setDate (dirtyDate, dirtyDayOfMonth) {
    var date = parse(dirtyDate)
    var dayOfMonth = Number(dirtyDayOfMonth)
    date.setDate(dayOfMonth)
    return date
  }
  
  module.exports = setDate
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/set_hours/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Hour Helpers
   * @summary Set the hours to the given date.
   *
   * @description
   * Set the hours to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} hours - the hours of the new date
   * @returns {Date} the new date with the hours setted
   *
   * @example
   * // Set 4 hours to 1 September 2014 11:30:00:
   * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)
   * //=> Mon Sep 01 2014 04:30:00
   */
  function setHours (dirtyDate, dirtyHours) {
    var date = parse(dirtyDate)
    var hours = Number(dirtyHours)
    date.setHours(hours)
    return date
  }
  
  module.exports = setHours
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/set_minutes/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Minute Helpers
   * @summary Set the minutes to the given date.
   *
   * @description
   * Set the minutes to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} minutes - the minutes of the new date
   * @returns {Date} the new date with the minutes setted
   *
   * @example
   * // Set 45 minutes to 1 September 2014 11:30:40:
   * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)
   * //=> Mon Sep 01 2014 11:45:40
   */
  function setMinutes (dirtyDate, dirtyMinutes) {
    var date = parse(dirtyDate)
    var minutes = Number(dirtyMinutes)
    date.setMinutes(minutes)
    return date
  }
  
  module.exports = setMinutes
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/set_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  var getDaysInMonth = __webpack_require__("../../../../date-fns/get_days_in_month/index.js")
  
  /**
   * @category Month Helpers
   * @summary Set the month to the given date.
   *
   * @description
   * Set the month to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} month - the month of the new date
   * @returns {Date} the new date with the month setted
   *
   * @example
   * // Set February to 1 September 2014:
   * var result = setMonth(new Date(2014, 8, 1), 1)
   * //=> Sat Feb 01 2014 00:00:00
   */
  function setMonth (dirtyDate, dirtyMonth) {
    var date = parse(dirtyDate)
    var month = Number(dirtyMonth)
    var year = date.getFullYear()
    var day = date.getDate()
  
    var dateWithDesiredMonth = new Date(0)
    dateWithDesiredMonth.setFullYear(year, month, 15)
    dateWithDesiredMonth.setHours(0, 0, 0, 0)
    var daysInMonth = getDaysInMonth(dateWithDesiredMonth)
    // Set the last day of the new month
    // if the original date was the last day of the longer month
    date.setMonth(month, Math.min(day, daysInMonth))
    return date
  }
  
  module.exports = setMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/set_year/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Year Helpers
   * @summary Set the year to the given date.
   *
   * @description
   * Set the year to the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} year - the year of the new date
   * @returns {Date} the new date with the year setted
   *
   * @example
   * // Set year 2013 to 1 September 2014:
   * var result = setYear(new Date(2014, 8, 1), 2013)
   * //=> Sun Sep 01 2013 00:00:00
   */
  function setYear (dirtyDate, dirtyYear) {
    var date = parse(dirtyDate)
    var year = Number(dirtyYear)
    date.setFullYear(year)
    return date
  }
  
  module.exports = setYear
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_day/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Day Helpers
   * @summary Return the start of a day for the given date.
   *
   * @description
   * Return the start of a day for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of a day
   *
   * @example
   * // The start of a day for 2 September 2014 11:55:00:
   * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Tue Sep 02 2014 00:00:00
   */
  function startOfDay (dirtyDate) {
    var date = parse(dirtyDate)
    date.setHours(0, 0, 0, 0)
    return date
  }
  
  module.exports = startOfDay
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_iso_week/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var startOfWeek = __webpack_require__("../../../../date-fns/start_of_week/index.js")
  
  /**
   * @category ISO Week Helpers
   * @summary Return the start of an ISO week for the given date.
   *
   * @description
   * Return the start of an ISO week for the given date.
   * The result will be in the local timezone.
   *
   * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of an ISO week
   *
   * @example
   * // The start of an ISO week for 2 September 2014 11:55:00:
   * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Mon Sep 01 2014 00:00:00
   */
  function startOfISOWeek (dirtyDate) {
    return startOfWeek(dirtyDate, {weekStartsOn: 1})
  }
  
  module.exports = startOfISOWeek
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_iso_year/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var getISOYear = __webpack_require__("../../../../date-fns/get_iso_year/index.js")
  var startOfISOWeek = __webpack_require__("../../../../date-fns/start_of_iso_week/index.js")
  
  /**
   * @category ISO Week-Numbering Year Helpers
   * @summary Return the start of an ISO week-numbering year for the given date.
   *
   * @description
   * Return the start of an ISO week-numbering year,
   * which always starts 3 days before the year's first Thursday.
   * The result will be in the local timezone.
   *
   * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of an ISO year
   *
   * @example
   * // The start of an ISO week-numbering year for 2 July 2005:
   * var result = startOfISOYear(new Date(2005, 6, 2))
   * //=> Mon Jan 03 2005 00:00:00
   */
  function startOfISOYear (dirtyDate) {
    var year = getISOYear(dirtyDate)
    var fourthOfJanuary = new Date(0)
    fourthOfJanuary.setFullYear(year, 0, 4)
    fourthOfJanuary.setHours(0, 0, 0, 0)
    var date = startOfISOWeek(fourthOfJanuary)
    return date
  }
  
  module.exports = startOfISOYear
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_minute/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Minute Helpers
   * @summary Return the start of a minute for the given date.
   *
   * @description
   * Return the start of a minute for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of a minute
   *
   * @example
   * // The start of a minute for 1 December 2014 22:15:45.400:
   * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
   * //=> Mon Dec 01 2014 22:15:00
   */
  function startOfMinute (dirtyDate) {
    var date = parse(dirtyDate)
    date.setSeconds(0, 0)
    return date
  }
  
  module.exports = startOfMinute
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_month/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Month Helpers
   * @summary Return the start of a month for the given date.
   *
   * @description
   * Return the start of a month for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of a month
   *
   * @example
   * // The start of a month for 2 September 2014 11:55:00:
   * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Mon Sep 01 2014 00:00:00
   */
  function startOfMonth (dirtyDate) {
    var date = parse(dirtyDate)
    date.setDate(1)
    date.setHours(0, 0, 0, 0)
    return date
  }
  
  module.exports = startOfMonth
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_second/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Second Helpers
   * @summary Return the start of a second for the given date.
   *
   * @description
   * Return the start of a second for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @returns {Date} the start of a second
   *
   * @example
   * // The start of a second for 1 December 2014 22:15:45.400:
   * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))
   * //=> Mon Dec 01 2014 22:15:45.000
   */
  function startOfSecond (dirtyDate) {
    var date = parse(dirtyDate)
    date.setMilliseconds(0)
    return date
  }
  
  module.exports = startOfSecond
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_today/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var startOfDay = __webpack_require__("../../../../date-fns/start_of_day/index.js")
  
  /**
   * @category Day Helpers
   * @summary Return the start of today.
   *
   * @description
   * Return the start of today.
   *
   * @returns {Date} the start of today
   *
   * @example
   * // If today is 6 October 2014:
   * var result = startOfToday()
   * //=> Mon Oct 6 2014 00:00:00
   */
  function startOfToday () {
    return startOfDay(new Date())
  }
  
  module.exports = startOfToday
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/start_of_week/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var parse = __webpack_require__("../../../../date-fns/parse/index.js")
  
  /**
   * @category Week Helpers
   * @summary Return the start of a week for the given date.
   *
   * @description
   * Return the start of a week for the given date.
   * The result will be in the local timezone.
   *
   * @param {Date|String|Number} date - the original date
   * @param {Object} [options] - the object with options
   * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
   * @returns {Date} the start of a week
   *
   * @example
   * // The start of a week for 2 September 2014 11:55:00:
   * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
   * //=> Sun Aug 31 2014 00:00:00
   *
   * @example
   * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:
   * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})
   * //=> Mon Sep 01 2014 00:00:00
   */
  function startOfWeek (dirtyDate, dirtyOptions) {
    var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0
  
    var date = parse(dirtyDate)
    var day = date.getDay()
    var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn
  
    date.setDate(date.getDate() - diff)
    date.setHours(0, 0, 0, 0)
    return date
  }
  
  module.exports = startOfWeek
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/sub_days/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addDays = __webpack_require__("../../../../date-fns/add_days/index.js")
  
  /**
   * @category Day Helpers
   * @summary Subtract the specified number of days from the given date.
   *
   * @description
   * Subtract the specified number of days from the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of days to be subtracted
   * @returns {Date} the new date with the days subtracted
   *
   * @example
   * // Subtract 10 days from 1 September 2014:
   * var result = subDays(new Date(2014, 8, 1), 10)
   * //=> Fri Aug 22 2014 00:00:00
   */
  function subDays (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addDays(dirtyDate, -amount)
  }
  
  module.exports = subDays
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/sub_months/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addMonths = __webpack_require__("../../../../date-fns/add_months/index.js")
  
  /**
   * @category Month Helpers
   * @summary Subtract the specified number of months from the given date.
   *
   * @description
   * Subtract the specified number of months from the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of months to be subtracted
   * @returns {Date} the new date with the months subtracted
   *
   * @example
   * // Subtract 5 months from 1 February 2015:
   * var result = subMonths(new Date(2015, 1, 1), 5)
   * //=> Mon Sep 01 2014 00:00:00
   */
  function subMonths (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addMonths(dirtyDate, -amount)
  }
  
  module.exports = subMonths
  
  
  /***/ }),
  
  /***/ "../../../../date-fns/sub_weeks/index.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var addWeeks = __webpack_require__("../../../../date-fns/add_weeks/index.js")
  
  /**
   * @category Week Helpers
   * @summary Subtract the specified number of weeks from the given date.
   *
   * @description
   * Subtract the specified number of weeks from the given date.
   *
   * @param {Date|String|Number} date - the date to be changed
   * @param {Number} amount - the amount of weeks to be subtracted
   * @returns {Date} the new date with the weeks subtracted
   *
   * @example
   * // Subtract 4 weeks from 1 September 2014:
   * var result = subWeeks(new Date(2014, 8, 1), 4)
   * //=> Mon Aug 04 2014 00:00:00
   */
  function subWeeks (dirtyDate, dirtyAmount) {
    var amount = Number(dirtyAmount)
    return addWeeks(dirtyDate, -amount)
  }
  
  module.exports = subWeeks
  
  
  /***/ }),
  
  /***/ "../../../../positioning/dist/positioning.js":
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Positioning; });
  /* unused harmony export positionElements */
  // previous version:
  // https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js
  var Positioning = (function () {
      function Positioning() {
      }
      Positioning.prototype.getAllStyles = function (element) { return window.getComputedStyle(element); };
      Positioning.prototype.getStyle = function (element, prop) { return this.getAllStyles(element)[prop]; };
      Positioning.prototype.isStaticPositioned = function (element) {
          return (this.getStyle(element, 'position') || 'static') === 'static';
      };
      Positioning.prototype.offsetParent = function (element) {
          var offsetParentEl = element.offsetParent || document.documentElement;
          while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {
              offsetParentEl = offsetParentEl.offsetParent;
          }
          return offsetParentEl || document.documentElement;
      };
      Positioning.prototype.position = function (element, round) {
          if (round === void 0) { round = true; }
          var elPosition;
          var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };
          if (this.getStyle(element, 'position') === 'fixed') {
              elPosition = element.getBoundingClientRect();
          }
          else {
              var offsetParentEl = this.offsetParent(element);
              elPosition = this.offset(element, false);
              if (offsetParentEl !== document.documentElement) {
                  parentOffset = this.offset(offsetParentEl, false);
              }
              parentOffset.top += offsetParentEl.clientTop;
              parentOffset.left += offsetParentEl.clientLeft;
          }
          elPosition.top -= parentOffset.top;
          elPosition.bottom -= parentOffset.top;
          elPosition.left -= parentOffset.left;
          elPosition.right -= parentOffset.left;
          if (round) {
              elPosition.top = Math.round(elPosition.top);
              elPosition.bottom = Math.round(elPosition.bottom);
              elPosition.left = Math.round(elPosition.left);
              elPosition.right = Math.round(elPosition.right);
          }
          return elPosition;
      };
      Positioning.prototype.offset = function (element, round) {
          if (round === void 0) { round = true; }
          var elBcr = element.getBoundingClientRect();
          var viewportOffset = {
              top: window.pageYOffset - document.documentElement.clientTop,
              left: window.pageXOffset - document.documentElement.clientLeft
          };
          var elOffset = {
              height: elBcr.height || element.offsetHeight,
              width: elBcr.width || element.offsetWidth,
              top: elBcr.top + viewportOffset.top,
              bottom: elBcr.bottom + viewportOffset.top,
              left: elBcr.left + viewportOffset.left,
              right: elBcr.right + viewportOffset.left
          };
          if (round) {
              elOffset.height = Math.round(elOffset.height);
              elOffset.width = Math.round(elOffset.width);
              elOffset.top = Math.round(elOffset.top);
              elOffset.bottom = Math.round(elOffset.bottom);
              elOffset.left = Math.round(elOffset.left);
              elOffset.right = Math.round(elOffset.right);
          }
          return elOffset;
      };
      Positioning.prototype.positionElements = function (hostElement, targetElement, placement, appendToBody) {
          var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);
          var targetElStyles = this.getAllStyles(targetElement);
          var targetElBCR = targetElement.getBoundingClientRect();
          var placementPrimary = placement.split('-')[0] || 'top';
          var placementSecondary = placement.split('-')[1] || 'center';
          var targetElPosition = {
              'height': targetElBCR.height || targetElement.offsetHeight,
              'width': targetElBCR.width || targetElement.offsetWidth,
              'top': 0,
              'bottom': targetElBCR.height || targetElement.offsetHeight,
              'left': 0,
              'right': targetElBCR.width || targetElement.offsetWidth
          };
          switch (placementPrimary) {
              case 'top':
                  targetElPosition.top =
                      hostElPosition.top - (targetElement.offsetHeight + parseFloat(targetElStyles.marginBottom));
                  break;
              case 'bottom':
                  targetElPosition.top = hostElPosition.top + hostElPosition.height;
                  break;
              case 'left':
                  targetElPosition.left =
                      hostElPosition.left - (targetElement.offsetWidth + parseFloat(targetElStyles.marginRight));
                  break;
              case 'right':
                  targetElPosition.left = hostElPosition.left + hostElPosition.width;
                  break;
          }
          switch (placementSecondary) {
              case 'top':
                  targetElPosition.top = hostElPosition.top;
                  break;
              case 'bottom':
                  targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;
                  break;
              case 'left':
                  targetElPosition.left = hostElPosition.left;
                  break;
              case 'right':
                  targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;
                  break;
              case 'center':
                  if (placementPrimary === 'top' || placementPrimary === 'bottom') {
                      targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;
                  }
                  else {
                      targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;
                  }
                  break;
          }
          targetElPosition.top = Math.round(targetElPosition.top);
          targetElPosition.bottom = Math.round(targetElPosition.bottom);
          targetElPosition.left = Math.round(targetElPosition.left);
          targetElPosition.right = Math.round(targetElPosition.right);
          return targetElPosition;
      };
      return Positioning;
  }());
  
  var positionService = new Positioning();
  function positionElements(hostElement, targetElement, placement, appendToBody) {
      var pos = positionService.positionElements(hostElement, targetElement, placement, appendToBody);
      targetElement.style.top = pos.top + "px";
      targetElement.style.left = pos.left + "px";
  }
  //# sourceMappingURL=positioning.js.map
  
  /***/ }),
  
  /***/ "../../../../rrule/lib/nlp.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
   * rrule.js - Library for working with recurrence rules for calendar dates.
   * https://github.com/jakubroztocil/rrule
   *
   * Copyright 2010, Jakub Roztocil and Lars Schoning
   * Licenced under the BSD licence.
   * https://github.com/jakubroztocil/rrule/blob/master/LICENCE
   *
   */
  
  /**
   *
   * Implementation of RRule.fromText() and RRule::toText().
   *
   *
   * On the client side, this file needs to be included
   * when those functions are used.
   *
   */
  /* global module, define */
  
  ;(function (root, factory) {
    if (typeof module === 'object' && module.exports) {
      module.exports = factory()
    } else if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
    } else {
      root._getRRuleNLP = factory()
    }
  }(typeof window === 'object' ? window : this, function () {
    // =============================================================================
    // Helper functions
    // =============================================================================
  
    /**
     * Return true if a value is in an array
     */
    var contains = function (arr, val) {
      return arr.indexOf(val) !== -1
    }
  
    return function (RRule) {
      // =============================================================================
      // ToText
      // =============================================================================
  
      /**
       *
       * @param {RRule} rrule
       * Optional:
       * @param {Function} gettext function
       * @param {Object} language definition
       * @constructor
       */
      var ToText = function (rrule, gettext, language) {
        this.text = ''
        this.language = language || ENGLISH
        this.gettext = gettext || function (id) {
          return id
        }
  
        this.rrule = rrule
        this.freq = rrule.options.freq
        this.options = rrule.options
        this.origOptions = rrule.origOptions
  
        if (this.origOptions.bymonthday) {
          var bymonthday = [].concat(this.options.bymonthday)
          var bynmonthday = [].concat(this.options.bynmonthday)
  
          bymonthday.sort()
          bynmonthday.sort()
          bynmonthday.reverse()
          // 1, 2, 3, .., -5, -4, -3, ..
          this.bymonthday = bymonthday.concat(bynmonthday)
          if (!this.bymonthday.length) this.bymonthday = null
        }
  
        if (this.origOptions.byweekday) {
          var byweekday = !(this.origOptions.byweekday instanceof Array)
            ? [this.origOptions.byweekday] : this.origOptions.byweekday
          var days = String(byweekday)
  
          this.byweekday = {
            allWeeks: byweekday.filter(function (weekday) {
              return !Boolean(weekday.n)
            }),
            someWeeks: byweekday.filter(function (weekday) {
              return Boolean(weekday.n)
            }),
            isWeekdays: (
              days.indexOf('MO') !== -1 &&
              days.indexOf('TU') !== -1 &&
              days.indexOf('WE') !== -1 &&
              days.indexOf('TH') !== -1 &&
              days.indexOf('FR') !== -1 &&
              days.indexOf('SA') === -1 &&
              days.indexOf('SU') === -1
            )
          }
  
          var sortWeekDays = function (a, b) {
            return a.weekday - b.weekday
          }
  
          this.byweekday.allWeeks.sort(sortWeekDays)
          this.byweekday.someWeeks.sort(sortWeekDays)
  
          if (!this.byweekday.allWeeks.length) this.byweekday.allWeeks = null
          if (!this.byweekday.someWeeks.length) this.byweekday.someWeeks = null
        } else {
          this.byweekday = null
        }
      }
  
      var common = [
        'count', 'until', 'interval',
        'byweekday', 'bymonthday', 'bymonth'
      ]
      ToText.IMPLEMENTED = []
      ToText.IMPLEMENTED[RRule.HOURLY] = common
      ToText.IMPLEMENTED[RRule.DAILY] = ['byhour'].concat(common)
      ToText.IMPLEMENTED[RRule.WEEKLY] = common
      ToText.IMPLEMENTED[RRule.MONTHLY] = common
      ToText.IMPLEMENTED[RRule.YEARLY] = ['byweekno', 'byyearday'].concat(common)
  
      /**
       * Test whether the rrule can be fully converted to text.
       * @param {RRule} rrule
       * @return {Boolean}
       */
      ToText.isFullyConvertible = function (rrule) {
        var canConvert = true
  
        if (!(rrule.options.freq in ToText.IMPLEMENTED)) return false
        if (rrule.origOptions.until && rrule.origOptions.count) return false
  
        for (var key in rrule.origOptions) {
          if (contains(['dtstart', 'wkst', 'freq'], key)) return true
          if (!contains(ToText.IMPLEMENTED[rrule.options.freq], key)) return false
        }
  
        return canConvert
      }
  
      ToText.prototype = {
        constructor: ToText,
  
        isFullyConvertible: function () {
          return ToText.isFullyConvertible(this.rrule)
        },
  
        /**
         * Perform the conversion. Only some of the frequencies are supported.
         * If some of the rrule's options aren't supported, they'll
         * be omitted from the output an "(~ approximate)" will be appended.
         * @return {*}
         */
        toString: function () {
          var gettext = this.gettext
  
          if (!(this.options.freq in ToText.IMPLEMENTED)) {
            return gettext('RRule error: Unable to fully convert this rrule to text')
          }
  
          this.text = [gettext('every')]
          this[RRule.FREQUENCIES[this.options.freq]]()
  
          if (this.options.until) {
            this.add(gettext('until'))
            var until = this.options.until
            this.add(this.language.monthNames[until.getMonth()])
              .add(until.getDate() + ',')
              .add(until.getFullYear())
          } else if (this.options.count) {
            this.add(gettext('for'))
              .add(this.options.count)
              .add(this.plural(this.options.count)
                ? gettext('times') : gettext('time'))
          }
  
          if (!this.isFullyConvertible()) this.add(gettext('(~ approximate)'))
  
          return this.text.join('')
        },
  
        HOURLY: function () {
          var gettext = this.gettext
  
          if (this.options.interval !== 1) this.add(this.options.interval)
  
          this.add(this.plural(this.options.interval)
            ? gettext('hours') : gettext('hour'))
        },
  
        DAILY: function () {
          var gettext = this.gettext
  
          if (this.options.interval !== 1) this.add(this.options.interval)
  
          if (this.byweekday && this.byweekday.isWeekdays) {
            this.add(this.plural(this.options.interval)
              ? gettext('weekdays') : gettext('weekday'))
          } else {
            this.add(this.plural(this.options.interval)
              ? gettext('days') : gettext('day'))
          }
  
          if (this.origOptions.bymonth) {
            this.add(gettext('in'))
            this._bymonth()
          }
  
          if (this.bymonthday) {
            this._bymonthday()
          } else if (this.byweekday) {
            this._byweekday()
          } else if (this.origOptions.byhour) {
            this._byhour()
          }
        },
  
        WEEKLY: function () {
          var gettext = this.gettext
  
          if (this.options.interval !== 1) {
            this.add(this.options.interval)
              .add(this.plural(this.options.interval)
                ? gettext('weeks') : gettext('week'))
          }
  
          if (this.byweekday && this.byweekday.isWeekdays) {
            if (this.options.interval === 1) {
              this.add(this.plural(this.options.interval)
                ? gettext('weekdays') : gettext('weekday'))
            } else {
              this.add(gettext('on')).add(gettext('weekdays'))
            }
          } else {
            if (this.options.interval === 1) this.add(gettext('week'))
  
            if (this.origOptions.bymonth) {
              this.add(gettext('in'))
              this._bymonth()
            }
  
            if (this.bymonthday) {
              this._bymonthday()
            } else if (this.byweekday) {
              this._byweekday()
            }
          }
        },
  
        MONTHLY: function () {
          var gettext = this.gettext
  
          if (this.origOptions.bymonth) {
            if (this.options.interval !== 1) {
              this.add(this.options.interval).add(gettext('months'))
              if (this.plural(this.options.interval)) this.add(gettext('in'))
            } else {
              // this.add(gettext('MONTH'))
            }
            this._bymonth()
          } else {
            if (this.options.interval !== 1) this.add(this.options.interval)
            this.add(this.plural(this.options.interval)
              ? gettext('months') : gettext('month'))
          }
          if (this.bymonthday) {
            this._bymonthday()
          } else if (this.byweekday && this.byweekday.isWeekdays) {
            this.add(gettext('on')).add(gettext('weekdays'))
          } else if (this.byweekday) {
            this._byweekday()
          }
        },
  
        YEARLY: function () {
          var gettext = this.gettext
  
          if (this.origOptions.bymonth) {
            if (this.options.interval !== 1) {
              this.add(this.options.interval)
              this.add(gettext('years'))
            } else {
              // this.add(gettext('YEAR'))
            }
            this._bymonth()
          } else {
            if (this.options.interval !== 1) this.add(this.options.interval)
            this.add(this.plural(this.options.interval)
              ? gettext('years') : gettext('year'))
          }
  
          if (this.bymonthday) {
            this._bymonthday()
          } else if (this.byweekday) {
            this._byweekday()
          }
  
          if (this.options.byyearday) {
            this.add(gettext('on the'))
              .add(this.list(this.options.byyearday, this.nth, gettext('and')))
              .add(gettext('day'))
          }
  
          if (this.options.byweekno) {
            this.add(gettext('in'))
              .add(this.plural(this.options.byweekno.length) ? gettext('weeks') : gettext('week'))
              .add(this.list(this.options.byweekno, null, gettext('and')))
          }
        },
  
        _bymonthday: function () {
          var gettext = this.gettext
          if (this.byweekday && this.byweekday.allWeeks) {
            this.add(gettext('on'))
              .add(this.list(this.byweekday.allWeeks, this.weekdaytext, gettext('or')))
              .add(gettext('the'))
              .add(this.list(this.bymonthday, this.nth, gettext('or')))
          } else {
            this.add(gettext('on the'))
              .add(this.list(this.bymonthday, this.nth, gettext('and')))
          }
        // this.add(gettext('DAY'))
        },
  
        _byweekday: function () {
          var gettext = this.gettext
          if (this.byweekday.allWeeks && !this.byweekday.isWeekdays) {
            this.add(gettext('on'))
              .add(this.list(this.byweekday.allWeeks, this.weekdaytext))
          }
  
          if (this.byweekday.someWeeks) {
            if (this.byweekday.allWeeks) this.add(gettext('and'))
  
            this.add(gettext('on the'))
              .add(this.list(this.byweekday.someWeeks, this.weekdaytext, gettext('and')))
          }
        },
  
        _byhour: function () {
          var gettext = this.gettext
  
          this.add(gettext('at'))
            .add(this.list(this.origOptions.byhour, null, gettext('and')))
        },
  
        _bymonth: function () {
          this.add(this.list(this.options.bymonth, this.monthtext, this.gettext('and')))
        },
  
        nth: function (n) {
          var nth, npos
          var gettext = this.gettext
  
          if (n === -1) return gettext('last')
  
          npos = Math.abs(n)
          switch (npos) {
            case 1:
            case 21:
            case 31:
              nth = npos + gettext('st')
              break
            case 2:
            case 22:
              nth = npos + gettext('nd')
              break
            case 3:
            case 23:
              nth = npos + gettext('rd')
              break
            default:
              nth = npos + gettext('th')
          }
  
          return n < 0 ? nth + ' ' + gettext('last') : nth
        },
  
        monthtext: function (m) {
          return this.language.monthNames[m - 1]
        },
  
        weekdaytext: function (wday) {
          var weekday = typeof wday === 'number' ? wday : wday.getJsWeekday()
          return (wday.n ? this.nth(wday.n) + ' ' : '') +
            this.language.dayNames[weekday]
        },
  
        plural: function (n) {
          return n % 100 !== 1
        },
  
        add: function (s) {
          this.text.push(' ')
          this.text.push(s)
          return this
        },
  
        list: function (arr, callback, finalDelim, delim) {
          var delimJoin = function (array, delimiter, finalDelimiter) {
            var list = ''
  
            for (var i = 0; i < array.length; i++) {
              if (i !== 0) {
                if (i === array.length - 1) {
                  list += ' ' + finalDelimiter + ' '
                } else {
                  list += delimiter + ' '
                }
              }
              list += array[i]
            }
            return list
          }
  
          delim = delim || ','
          callback = callback || function (o) {
            return o
          }
          var self = this
          var realCallback = function (arg) {
            return callback.call(self, arg)
          }
  
          if (finalDelim) {
            return delimJoin(arr.map(realCallback), delim, finalDelim)
          } else {
            return arr.map(realCallback).join(delim + ' ')
          }
        }
      }
  
      // =============================================================================
      // fromText
      // =============================================================================
      /**
       * Will be able to convert some of the below described rules from
       * text format to a rule object.
       *
       *
       * RULES
       *
       * Every ([n])
       *       day(s)
       *     | [weekday], ..., (and) [weekday]
       *     | weekday(s)
       *     | week(s)
       *     | month(s)
       *     | [month], ..., (and) [month]
       *     | year(s)
       *
       *
       * Plus 0, 1, or multiple of these:
       *
       * on [weekday], ..., (or) [weekday] the [monthday], [monthday], ... (or) [monthday]
       *
       * on [weekday], ..., (and) [weekday]
       *
       * on the [monthday], [monthday], ... (and) [monthday] (day of the month)
       *
       * on the [nth-weekday], ..., (and) [nth-weekday] (of the month/year)
       *
       *
       * Plus 0 or 1 of these:
       *
       * for [n] time(s)
       *
       * until [date]
       *
       * Plus (.)
       *
       *
       * Definitely no supported for parsing:
       *
       * (for year):
       *     in week(s) [n], ..., (and) [n]
       *
       *     on the [yearday], ..., (and) [n] day of the year
       *     on day [yearday], ..., (and) [n]
       *
       *
       * NON-TERMINALS
       *
       * [n]: 1, 2 ..., one, two, three ..
       * [month]: January, February, March, April, May, ... December
       * [weekday]: Monday, ... Sunday
       * [nth-weekday]: first [weekday], 2nd [weekday], ... last [weekday], ...
       * [monthday]: first, 1., 2., 1st, 2nd, second, ... 31st, last day, 2nd last day, ..
       * [date]:
       *     [month] (0-31(,) ([year])),
       *     (the) 0-31.(1-12.([year])),
       *     (the) 0-31/(1-12/([year])),
       *     [weekday]
       *
       * [year]: 0000, 0001, ... 01, 02, ..
       *
       * Definitely not supported for parsing:
       *
       * [yearday]: first, 1., 2., 1st, 2nd, second, ... 366th, last day, 2nd last day, ..
       *
       * @param {String} text
       * @return {Object, Boolean} the rule, or null.
       */
      var fromText = function (text, language) {
        return new RRule(parseText(text, language))
      }
  
      var parseText = function (text, language) {
        var options = {}
        var ttr = new Parser((language || ENGLISH).tokens)
  
        if (!ttr.start(text)) return null
  
        S()
        return options
  
        function S () {
          // every [n]
          var n
  
          ttr.expect('every')
          if ((n = ttr.accept('number'))) options.interval = parseInt(n[0], 10)
          if (ttr.isDone()) throw new Error('Unexpected end')
  
          switch (ttr.symbol) {
            case 'day(s)':
              options.freq = RRule.DAILY
              if (ttr.nextSymbol()) {
                AT()
                F()
              }
              break
  
            // FIXME Note: every 2 weekdays != every two weeks on weekdays.
            // DAILY on weekdays is not a valid rule
            case 'weekday(s)':
              options.freq = RRule.WEEKLY
              options.byweekday = [
                RRule.MO,
                RRule.TU,
                RRule.WE,
                RRule.TH,
                RRule.FR
              ]
              ttr.nextSymbol()
              F()
              break
  
            case 'week(s)':
              options.freq = RRule.WEEKLY
              if (ttr.nextSymbol()) {
                ON()
                F()
              }
              break
  
            case 'hour(s)':
              options.freq = RRule.HOURLY
              if (ttr.nextSymbol()) {
                ON()
                F()
              }
              break
  
            case 'month(s)':
              options.freq = RRule.MONTHLY
              if (ttr.nextSymbol()) {
                ON()
                F()
              }
              break
  
            case 'year(s)':
              options.freq = RRule.YEARLY
              if (ttr.nextSymbol()) {
                ON()
                F()
              }
              break
  
            case 'monday':
            case 'tuesday':
            case 'wednesday':
            case 'thursday':
            case 'friday':
            case 'saturday':
            case 'sunday':
              options.freq = RRule.WEEKLY
              options.byweekday = [RRule[ttr.symbol.substr(0, 2).toUpperCase()]]
  
              if (!ttr.nextSymbol()) return
  
              // TODO check for duplicates
              while (ttr.accept('comma')) {
                if (ttr.isDone()) throw new Error('Unexpected end')
  
                var wkd
                if (!(wkd = decodeWKD())) {
                  throw new Error('Unexpected symbol ' + ttr.symbol + ', expected weekday')
                }
  
                options.byweekday.push(RRule[wkd])
                ttr.nextSymbol()
              }
              MDAYs()
              F()
              break
  
            case 'january':
            case 'february':
            case 'march':
            case 'april':
            case 'may':
            case 'june':
            case 'july':
            case 'august':
            case 'september':
            case 'october':
            case 'november':
            case 'december':
              options.freq = RRule.YEARLY
              options.bymonth = [decodeM()]
  
              if (!ttr.nextSymbol()) return
  
              // TODO check for duplicates
              while (ttr.accept('comma')) {
                if (ttr.isDone()) throw new Error('Unexpected end')
  
                var m
                if (!(m = decodeM())) {
                  throw new Error('Unexpected symbol ' + ttr.symbol + ', expected month')
                }
  
                options.bymonth.push(m)
                ttr.nextSymbol()
              }
  
              ON()
              F()
              break
  
            default:
              throw new Error('Unknown symbol')
  
          }
        }
  
        function ON () {
          var on = ttr.accept('on')
          var the = ttr.accept('the')
          if (!(on || the)) return
  
          do {
            var nth, wkd, m
  
            // nth <weekday> | <weekday>
            if ((nth = decodeNTH())) {
              // ttr.nextSymbol()
  
              if ((wkd = decodeWKD())) {
                ttr.nextSymbol()
                if (!options.byweekday) options.byweekday = []
                options.byweekday.push(RRule[wkd].nth(nth))
              } else {
                if (!options.bymonthday) options.bymonthday = []
                options.bymonthday.push(nth)
                ttr.accept('day(s)')
              }
              // <weekday>
            } else if ((wkd = decodeWKD())) {
              ttr.nextSymbol()
              if (!options.byweekday) options.byweekday = []
              options.byweekday.push(RRule[wkd])
            } else if (ttr.symbol === 'weekday(s)') {
              ttr.nextSymbol()
              if (!options.byweekday) options.byweekday = []
              options.byweekday.push(RRule.MO)
              options.byweekday.push(RRule.TU)
              options.byweekday.push(RRule.WE)
              options.byweekday.push(RRule.TH)
              options.byweekday.push(RRule.FR)
            } else if (ttr.symbol === 'week(s)') {
              ttr.nextSymbol()
              var n
              if (!(n = ttr.accept('number'))) {
                throw new Error('Unexpected symbol ' + ttr.symbol + ', expected week number')
              }
              options.byweekno = [n[0]]
              while (ttr.accept('comma')) {
                if (!(n = ttr.accept('number'))) {
                  throw new Error('Unexpected symbol ' + ttr.symbol + '; expected monthday')
                }
                options.byweekno.push(n[0])
              }
            } else if ((m = decodeM())) {
              ttr.nextSymbol()
              if (!options.bymonth) options.bymonth = []
              options.bymonth.push(m)
            } else {
              return
            }
          } while (ttr.accept('comma') || ttr.accept('the') || ttr.accept('on'))
        }
  
        function AT () {
          var at = ttr.accept('at')
          if (!at) return
  
          do {
            var n
            if (!(n = ttr.accept('number'))) {
              throw new Error('Unexpected symbol ' + ttr.symbol + ', expected hour')
            }
            options.byhour = [n[0]]
            while (ttr.accept('comma')) {
              if (!(n = ttr.accept('number'))) {
                throw new Error('Unexpected symbol ' + ttr.symbol + '; expected hour')
              }
              options.byhour.push(n[0])
            }
          } while (ttr.accept('comma') || ttr.accept('at'))
        }
  
        function decodeM () {
          switch (ttr.symbol) {
            case 'january':
              return 1
            case 'february':
              return 2
            case 'march':
              return 3
            case 'april':
              return 4
            case 'may':
              return 5
            case 'june':
              return 6
            case 'july':
              return 7
            case 'august':
              return 8
            case 'september':
              return 9
            case 'october':
              return 10
            case 'november':
              return 11
            case 'december':
              return 12
            default:
              return false
          }
        }
  
        function decodeWKD () {
          switch (ttr.symbol) {
            case 'monday':
            case 'tuesday':
            case 'wednesday':
            case 'thursday':
            case 'friday':
            case 'saturday':
            case 'sunday':
              return ttr.symbol.substr(0, 2).toUpperCase()
            default:
              return false
          }
        }
  
        function decodeNTH () {
          switch (ttr.symbol) {
            case 'last':
              ttr.nextSymbol()
              return -1
            case 'first':
              ttr.nextSymbol()
              return 1
            case 'second':
              ttr.nextSymbol()
              return ttr.accept('last') ? -2 : 2
            case 'third':
              ttr.nextSymbol()
              return ttr.accept('last') ? -3 : 3
            case 'nth':
              var v = parseInt(ttr.value[1], 10)
              if (v < -366 || v > 366) throw new Error('Nth out of range: ' + v)
  
              ttr.nextSymbol()
              return ttr.accept('last') ? -v : v
  
            default:
              return false
          }
        }
  
        function MDAYs () {
          ttr.accept('on')
          ttr.accept('the')
  
          var nth
          if (!(nth = decodeNTH())) return
  
          options.bymonthday = [nth]
          ttr.nextSymbol()
  
          while (ttr.accept('comma')) {
            if (!(nth = decodeNTH())) {
              throw new Error('Unexpected symbol ' + ttr.symbol + '; expected monthday')
            }
  
            options.bymonthday.push(nth)
            ttr.nextSymbol()
          }
        }
  
        function F () {
          if (ttr.symbol === 'until') {
            var date = Date.parse(ttr.text)
  
            if (!date) throw new Error('Cannot parse until date:' + ttr.text)
            options.until = new Date(date)
          } else if (ttr.accept('for')) {
            options.count = ttr.value[0]
            ttr.expect('number')
            // ttr.expect('times')
          }
        }
      }
  
      // =============================================================================
      // Parser
      // =============================================================================
  
      var Parser = function (rules) {
        this.rules = rules
      }
  
      Parser.prototype.start = function (text) {
        this.text = text
        this.done = false
        return this.nextSymbol()
      }
  
      Parser.prototype.isDone = function () {
        return this.done && this.symbol == null
      }
  
      Parser.prototype.nextSymbol = function () {
        var best, bestSymbol
        var p = this
  
        this.symbol = null
        this.value = null
        do {
          if (this.done) return false
  
          var match, rule
          best = null
          for (var name in this.rules) {
            rule = this.rules[name]
            if ((match = rule.exec(p.text))) {
              if (best == null || match[0].length > best[0].length) {
                best = match
                bestSymbol = name
              }
            }
          }
  
          if (best != null) {
            this.text = this.text.substr(best[0].length)
  
            if (this.text === '') this.done = true
          }
  
          if (best == null) {
            this.done = true
            this.symbol = null
            this.value = null
            return
          }
        } while (bestSymbol === 'SKIP')
  
        this.symbol = bestSymbol
        this.value = best
        return true
      }
  
      Parser.prototype.accept = function (name) {
        if (this.symbol === name) {
          if (this.value) {
            var v = this.value
            this.nextSymbol()
            return v
          }
  
          this.nextSymbol()
          return true
        }
  
        return false
      }
  
      Parser.prototype.expect = function (name) {
        if (this.accept(name)) return true
  
        throw new Error('expected ' + name + ' but found ' + this.symbol)
      }
  
      // =============================================================================
      // i18n
      // =============================================================================
  
      var ENGLISH = {
        dayNames: [
          'Sunday', 'Monday', 'Tuesday', 'Wednesday',
          'Thursday', 'Friday', 'Saturday'
        ],
        monthNames: [
          'January', 'February', 'March', 'April', 'May',
          'June', 'July', 'August', 'September', 'October',
          'November', 'December'
        ],
        tokens: {
          'SKIP': /^[ \r\n\t]+|^\.$/,
          'number': /^[1-9][0-9]*/,
          'numberAsText': /^(one|two|three)/i,
          'every': /^every/i,
          'day(s)': /^days?/i,
          'weekday(s)': /^weekdays?/i,
          'week(s)': /^weeks?/i,
          'hour(s)': /^hours?/i,
          'month(s)': /^months?/i,
          'year(s)': /^years?/i,
          'on': /^(on|in)/i,
          'at': /^(at)/i,
          'the': /^the/i,
          'first': /^first/i,
          'second': /^second/i,
          'third': /^third/i,
          'nth': /^([1-9][0-9]*)(\.|th|nd|rd|st)/i,
          'last': /^last/i,
          'for': /^for/i,
          'time(s)': /^times?/i,
          'until': /^(un)?til/i,
          'monday': /^mo(n(day)?)?/i,
          'tuesday': /^tu(e(s(day)?)?)?/i,
          'wednesday': /^we(d(n(esday)?)?)?/i,
          'thursday': /^th(u(r(sday)?)?)?/i,
          'friday': /^fr(i(day)?)?/i,
          'saturday': /^sa(t(urday)?)?/i,
          'sunday': /^su(n(day)?)?/i,
          'january': /^jan(uary)?/i,
          'february': /^feb(ruary)?/i,
          'march': /^mar(ch)?/i,
          'april': /^apr(il)?/i,
          'may': /^may/i,
          'june': /^june?/i,
          'july': /^july?/i,
          'august': /^aug(ust)?/i,
          'september': /^sep(t(ember)?)?/i,
          'october': /^oct(ober)?/i,
          'november': /^nov(ember)?/i,
          'december': /^dec(ember)?/i,
          'comma': /^(,\s*|(and|or)\s*)+/i
        }
      }
  
      // =============================================================================
      // Export
      // =============================================================================
  
      return {
        fromText: fromText,
        parseText: parseText,
        isFullyConvertible: ToText.isFullyConvertible,
        toText: function (rrule, gettext, language) {
          return new ToText(rrule, gettext, language).toString()
        }
      }
    }
  }))
  
  
  /***/ }),
  
  /***/ "../../../../rrule/lib/rrule.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
   * rrule.js - Library for working with recurrence rules for calendar dates.
   * https://github.com/jakubroztocil/rrule
   *
   * Copyright 2010, Jakub Roztocil and Lars Schoning
   * Licenced under the BSD licence.
   * https://github.com/jakubroztocil/rrule/blob/master/LICENCE
   *
   * Based on:
   * python-dateutil - Extensions to the standard Python datetime module.
   * Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
   * Copyright (c) 2012 - Tomi Pieviläinen <tomi.pievilainen@iki.fi>
   * https://github.com/jakubroztocil/rrule/blob/master/LICENCE
   *
   */
  /* global module, define */
  
  ;(function (root, factory) {
    if (typeof module === 'object' && module.exports) {
      module.exports = factory()
    } else if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
    } else {
      root.RRule = factory(root)
      root.RRuleSet = root.RRule.RRuleSet
      root.rrulestr = root.RRule.rrulestr
    }
  }(typeof window === 'object' ? window : this, function (root) {
    // =============================================================================
    // Date utilities
    // =============================================================================
  
    /**
     * General date-related utilities.
     * Also handles several incompatibilities between JavaScript and Python
     *
     */
    var dateutil = {
      MONTH_DAYS: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
  
      /**
       * Number of milliseconds of one day
       */
      ONE_DAY: 1000 * 60 * 60 * 24,
  
      /**
       * @see: <http://docs.python.org/library/datetime.html#datetime.MAXYEAR>
       */
      MAXYEAR: 9999,
  
      /**
       * Python uses 1-Jan-1 as the base for calculating ordinals but we don't
       * want to confuse the JS engine with milliseconds > Number.MAX_NUMBER,
       * therefore we use 1-Jan-1970 instead
       */
      ORDINAL_BASE: new Date(1970, 0, 1),
  
      /**
       * Python: MO-SU: 0 - 6
       * JS: SU-SAT 0 - 6
       */
      PY_WEEKDAYS: [6, 0, 1, 2, 3, 4, 5],
  
      /**
       * py_date.timetuple()[7]
       */
      getYearDay: function (date) {
        var dateNoTime = new Date(
          date.getFullYear(), date.getMonth(), date.getDate())
        return Math.ceil(
          (dateNoTime - new Date(date.getFullYear(), 0, 1)) / dateutil.ONE_DAY) + 1
      },
  
      isLeapYear: function (year) {
        if (year instanceof Date) year = year.getFullYear()
        return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)
      },
  
      /**
       * @return {Number} the date's timezone offset in ms
       */
      tzOffset: function (date) {
        return date.getTimezoneOffset() * 60 * 1000
      },
  
      /**
       * @see: <http://www.mcfedries.com/JavaScript/DaysBetween.asp>
       */
      daysBetween: function (date1, date2) {
        // The number of milliseconds in one day
        // Convert both dates to milliseconds
        var date1_ms = date1.getTime() - dateutil.tzOffset(date1)
        var date2_ms = date2.getTime() - dateutil.tzOffset(date2)
        // Calculate the difference in milliseconds
        var difference_ms = Math.abs(date1_ms - date2_ms)
        // Convert back to days and return
        return Math.round(difference_ms / dateutil.ONE_DAY)
      },
  
      /**
       * @see: <http://docs.python.org/library/datetime.html#datetime.date.toordinal>
       */
      toOrdinal: function (date) {
        return dateutil.daysBetween(date, dateutil.ORDINAL_BASE)
      },
  
      /**
       * @see - <http://docs.python.org/library/datetime.html#datetime.date.fromordinal>
       */
      fromOrdinal: function (ordinal) {
        var millisecsFromBase = ordinal * dateutil.ONE_DAY
        return new Date(dateutil.ORDINAL_BASE.getTime() -
          dateutil.tzOffset(dateutil.ORDINAL_BASE) +
          millisecsFromBase +
          dateutil.tzOffset(new Date(millisecsFromBase)))
      },
  
      /**
       * @see: <http://docs.python.org/library/calendar.html#calendar.monthrange>
       */
      monthRange: function (year, month) {
        var date = new Date(year, month, 1)
        return [dateutil.getWeekday(date), dateutil.getMonthDays(date)]
      },
  
      getMonthDays: function (date) {
        var month = date.getMonth()
        return month === 1 && dateutil.isLeapYear(date)
          ? 29 : dateutil.MONTH_DAYS[month]
      },
  
      /**
       * @return {Number} python-like weekday
       */
      getWeekday: function (date) {
        return dateutil.PY_WEEKDAYS[date.getDay()]
      },
  
      /**
       * @see: <http://docs.python.org/library/datetime.html#datetime.datetime.combine>
       */
      combine: function (date, time) {
        time = time || date
        return new Date(
          date.getFullYear(), date.getMonth(), date.getDate(),
          time.getHours(), time.getMinutes(), time.getSeconds(),
          time.getMilliseconds())
      },
  
      clone: function (date) {
        var dolly = new Date(date.getTime())
        return dolly
      },
  
      cloneDates: function (dates) {
        var clones = []
        for (var i = 0; i < dates.length; i++) {
          clones.push(dateutil.clone(dates[i]))
        }
        return clones
      },
  
      /**
       * Sorts an array of Date or dateutil.Time objects
       */
      sort: function (dates) {
        dates.sort(function (a, b) {
          return a.getTime() - b.getTime()
        })
      },
  
      timeToUntilString: function (time) {
        var comp
        var date = new Date(time)
        var comps = [
          date.getUTCFullYear(),
          date.getUTCMonth() + 1,
          date.getUTCDate(),
          'T',
          date.getUTCHours(),
          date.getUTCMinutes(),
          date.getUTCSeconds(),
          'Z'
        ]
  
        for (var i = 0; i < comps.length; i++) {
          comp = comps[i]
          if (!/[TZ]/.test(comp) && comp < 10) comps[i] = '0' + String(comp)
        }
        return comps.join('')
      },
  
      untilStringToDate: function (until) {
        var re = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z)?$/
        var bits = re.exec(until)
        if (!bits) throw new Error('Invalid UNTIL value: ' + until)
        return new Date(Date.UTC(
          bits[1],
          bits[2] - 1,
          bits[3],
          bits[5] || 0,
          bits[6] || 0,
          bits[7] || 0))
      }
    }
  
    dateutil.Time = function (hour, minute, second, millisecond) {
      this.hour = hour
      this.minute = minute
      this.second = second
      this.millisecond = millisecond || 0
    }
  
    dateutil.Time.prototype = {
      constructor: dateutil.Time,
      getHours: function () {
        return this.hour
      },
      getMinutes: function () {
        return this.minute
      },
      getSeconds: function () {
        return this.second
      },
      getMilliseconds: function () {
        return this.millisecond
      },
      getTime: function () {
        return ((this.hour * 60 * 60) + (this.minute * 60) + this.second) * 1000 +
          this.millisecond
      }
    }
  
    // =============================================================================
    // Helper functions
    // =============================================================================
  
    /**
     * Simplified version of python's range()
     */
    var range = function (start, end) {
      if (arguments.length === 1) {
        end = start
        start = 0
      }
      var rang = []
      for (var i = start; i < end; i++) rang.push(i)
      return rang
    }
  
    var repeat = function (value, times) {
      var i = 0
      var array = []
  
      if (value instanceof Array) {
        for (; i < times; i++) array[i] = [].concat(value)
      } else {
        for (; i < times; i++) array[i] = value
      }
      return array
    }
  
    /**
     * Python like split
     */
    var split = function (str, sep, num) {
      var splits = str.split(sep)
      return num
        ? splits.slice(0, num).concat([splits.slice(num).join(sep)]) : splits
    }
  
    /**
     * closure/goog/math/math.js:modulo
     * Copyright 2006 The Closure Library Authors.
     * The % operator in JavaScript returns the remainder of a / b, but differs from
     * some other languages in that the result will have the same sign as the
     * dividend. For example, -1 % 8 == -1, whereas in some other languages
     * (such as Python) the result would be 7. This function emulates the more
     * correct modulo behavior, which is useful for certain applications such as
     * calculating an offset index in a circular list.
     *
     * @param {number} a The dividend.
     * @param {number} b The divisor.
     * @return {number} a % b where the result is between 0 and b (either 0 <= x < b
     *     or b < x <= 0, depending on the sign of b).
     */
    var pymod = function (a, b) {
      var r = a % b
      // If r and b differ in sign, add b to wrap the result to the correct sign.
      return (r * b < 0) ? r + b : r
    }
  
    /**
     * @see: <http://docs.python.org/library/functions.html#divmod>
     */
    var divmod = function (a, b) {
      return {div: Math.floor(a / b), mod: pymod(a, b)}
    }
  
    /**
     * Python-like boolean
     * @return {Boolean} value of an object/primitive, taking into account
     * the fact that in Python an empty list's/tuple's
     * boolean value is False, whereas in JS it's true
     */
    var plb = function (obj) {
      return (obj instanceof Array && obj.length === 0)
        ? false : Boolean(obj)
    }
  
    /**
     * Return true if a value is in an array
     */
    var contains = function (arr, val) {
      return arr.indexOf(val) !== -1
    }
  
    // =============================================================================
    // Date masks
    // =============================================================================
  
    // Every mask is 7 days longer to handle cross-year weekly periods.
  
    var M365MASK = [].concat(
      repeat(1, 31), repeat(2, 28), repeat(3, 31),
      repeat(4, 30), repeat(5, 31), repeat(6, 30),
      repeat(7, 31), repeat(8, 31), repeat(9, 30),
      repeat(10, 31), repeat(11, 30), repeat(12, 31),
      repeat(1, 7))
  
    var M366MASK = [].concat(
      repeat(1, 31), repeat(2, 29), repeat(3, 31),
      repeat(4, 30), repeat(5, 31), repeat(6, 30),
      repeat(7, 31), repeat(8, 31), repeat(9, 30),
      repeat(10, 31), repeat(11, 30), repeat(12, 31),
      repeat(1, 7))
  
    var M28 = range(1, 29)
    var M29 = range(1, 30)
    var M30 = range(1, 31)
    var M31 = range(1, 32)
  
    var MDAY366MASK = [].concat(
      M31, M29, M31,
      M30, M31, M30,
      M31, M31, M30,
      M31, M30, M31,
      M31.slice(0, 7))
  
    var MDAY365MASK = [].concat(
      M31, M28, M31,
      M30, M31, M30,
      M31, M31, M30,
      M31, M30, M31,
      M31.slice(0, 7))
  
    M28 = range(-28, 0)
    M29 = range(-29, 0)
    M30 = range(-30, 0)
    M31 = range(-31, 0)
  
    var NMDAY366MASK = [].concat(
      M31, M29, M31,
      M30, M31, M30,
      M31, M31, M30,
      M31, M30, M31,
      M31.slice(0, 7))
  
    var NMDAY365MASK = [].concat(
      M31, M28, M31,
      M30, M31, M30,
      M31, M31, M30,
      M31, M30, M31,
      M31.slice(0, 7))
  
    var M366RANGE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
    var M365RANGE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
  
    var WDAYMASK = (function () {
      for (var wdaymask = [], i = 0; i < 55; i++) wdaymask = wdaymask.concat(range(7))
      return wdaymask
    }())
  
    // =============================================================================
    // Weekday
    // =============================================================================
  
    var Weekday = function (weekday, n) {
      if (n === 0) throw new Error("Can't create weekday with n == 0")
      this.weekday = weekday
      this.n = n
    }
  
    Weekday.prototype = {
      constructor: Weekday,
      // __call__ - Cannot call the object directly, do it through
      // e.g. RRule.TH.nth(-1) instead,
      nth: function (n) {
        return this.n === n ? this : new Weekday(this.weekday, n)
      },
  
      // __eq__
      equals: function (other) {
        return this.weekday === other.weekday && this.n === other.n
      },
  
      // __repr__
      toString: function () {
        var s = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'][this.weekday]
        if (this.n) s = (this.n > 0 ? '+' : '') + String(this.n) + s
        return s
      },
  
      getJsWeekday: function () {
        return this.weekday === 6 ? 0 : this.weekday + 1
      }
  
    }
  
    // =============================================================================
    // RRule
    // =============================================================================
  
    /**
     *
     * @param {Object?} options - see <http://labix.org/python-dateutil/#head-cf004ee9a75592797e076752b2a889c10f445418>
     *        The only required option is `freq`, one of RRule.YEARLY, RRule.MONTHLY, ...
     * @constructor
     */
    var RRule = function (options, noCache) {
      options = options || {}
      // RFC string
      this._string = null
      this._cache = noCache ? null : {
        all: false,
        before: [],
        after: [],
        between: []
      }
  
      // used by toString()
      this.origOptions = {}
  
      var invalid = []
      var keys = Object.keys(options)
      var defaultKeys = Object.keys(RRule.DEFAULT_OPTIONS)
  
      // Shallow copy for origOptions and check for invalid
      keys.forEach(function (key) {
        this.origOptions[key] = options[key]
        if (!contains(defaultKeys, key)) invalid.push(key)
      }, this)
  
      if (invalid.length) throw new Error('Invalid options: ' + invalid.join(', '))
  
      if (!RRule.FREQUENCIES[options.freq] && options.byeaster === null) {
        throw new Error('Invalid frequency: ' + String(options.freq))
      }
  
      // Merge in default options
      defaultKeys.forEach(function (key) {
        if (!contains(keys, key)) options[key] = RRule.DEFAULT_OPTIONS[key]
      })
  
      var opts = this.options = options
  
      if (opts.byeaster !== null) opts.freq = RRule.YEARLY
      if (!opts.dtstart) opts.dtstart = new Date()
  
      var millisecondModulo = opts.dtstart.getTime() % 1000
      if (opts.wkst === null) {
        opts.wkst = RRule.MO.weekday
      } else if (typeof opts.wkst === 'number') {
        // cool, just keep it like that
      } else {
        opts.wkst = opts.wkst.weekday
      }
  
      if (opts.bysetpos !== null) {
        if (typeof opts.bysetpos === 'number') opts.bysetpos = [opts.bysetpos]
  
        for (var i = 0; i < opts.bysetpos.length; i++) {
          var v = opts.bysetpos[i]
          if (v === 0 || !(v >= -366 && v <= 366)) {
            throw new Error('bysetpos must be between 1 and 366,' +
              ' or between -366 and -1')
          }
        }
      }
  
      if (!(plb(opts.byweekno) || plb(opts.byyearday) || plb(opts.bymonthday) ||
        opts.byweekday !== null || opts.byeaster !== null)) {
        switch (opts.freq) {
          case RRule.YEARLY:
            if (!opts.bymonth) opts.bymonth = opts.dtstart.getMonth() + 1
            opts.bymonthday = opts.dtstart.getDate()
            break
          case RRule.MONTHLY:
            opts.bymonthday = opts.dtstart.getDate()
            break
          case RRule.WEEKLY:
            opts.byweekday = dateutil.getWeekday(opts.dtstart)
            break
        }
      }
  
      // bymonth
      if (opts.bymonth !== null && !(opts.bymonth instanceof Array)) {
        opts.bymonth = [opts.bymonth]
      }
      // byyearday
      if (opts.byyearday !== null && !(opts.byyearday instanceof Array)) {
        opts.byyearday = [opts.byyearday]
      }
  
      // bymonthday
      if (opts.bymonthday === null) {
        opts.bymonthday = []
        opts.bynmonthday = []
      } else if (opts.bymonthday instanceof Array) {
        var bymonthday = []
        var bynmonthday = []
  
        for (i = 0; i < opts.bymonthday.length; i++) {
          v = opts.bymonthday[i]
          if (v > 0) {
            bymonthday.push(v)
          } else if (v < 0) {
            bynmonthday.push(v)
          }
        }
        opts.bymonthday = bymonthday
        opts.bynmonthday = bynmonthday
      } else {
        if (opts.bymonthday < 0) {
          opts.bynmonthday = [opts.bymonthday]
          opts.bymonthday = []
        } else {
          opts.bynmonthday = []
          opts.bymonthday = [opts.bymonthday]
        }
      }
  
      // byweekno
      if (opts.byweekno !== null && !(opts.byweekno instanceof Array)) {
        opts.byweekno = [opts.byweekno]
      }
  
      // byweekday / bynweekday
      if (opts.byweekday === null) {
        opts.bynweekday = null
      } else if (typeof opts.byweekday === 'number') {
        opts.byweekday = [opts.byweekday]
        opts.bynweekday = null
      } else if (opts.byweekday instanceof Weekday) {
        if (!opts.byweekday.n || opts.freq > RRule.MONTHLY) {
          opts.byweekday = [opts.byweekday.weekday]
          opts.bynweekday = null
        } else {
          opts.bynweekday = [
            [opts.byweekday.weekday, opts.byweekday.n]
          ]
          opts.byweekday = null
        }
      } else {
        var byweekday = []
        var bynweekday = []
  
        for (i = 0; i < opts.byweekday.length; i++) {
          var wday = opts.byweekday[i]
  
          if (typeof wday === 'number') {
            byweekday.push(wday)
          } else if (!wday.n || opts.freq > RRule.MONTHLY) {
            byweekday.push(wday.weekday)
          } else {
            bynweekday.push([wday.weekday, wday.n])
          }
        }
        opts.byweekday = plb(byweekday) ? byweekday : null
        opts.bynweekday = plb(bynweekday) ? bynweekday : null
      }
  
      // byhour
      if (opts.byhour === null) {
        opts.byhour = (opts.freq < RRule.HOURLY) ? [opts.dtstart.getHours()] : null
      } else if (typeof opts.byhour === 'number') {
        opts.byhour = [opts.byhour]
      }
  
      // byminute
      if (opts.byminute === null) {
        opts.byminute = (opts.freq < RRule.MINUTELY)
          ? [opts.dtstart.getMinutes()] : null
      } else if (typeof opts.byminute === 'number') {
        opts.byminute = [opts.byminute]
      }
  
      // bysecond
      if (opts.bysecond === null) {
        opts.bysecond = (opts.freq < RRule.SECONDLY)
          ? [opts.dtstart.getSeconds()] : null
      } else if (typeof opts.bysecond === 'number') {
        opts.bysecond = [opts.bysecond]
      }
  
      if (opts.freq >= RRule.HOURLY) {
        this.timeset = null
      } else {
        this.timeset = []
        for (i = 0; i < opts.byhour.length; i++) {
          var hour = opts.byhour[i]
          for (var j = 0; j < opts.byminute.length; j++) {
            var minute = opts.byminute[j]
            for (var k = 0; k < opts.bysecond.length; k++) {
              var second = opts.bysecond[k]
              // python:
              // datetime.time(hour, minute, second,
              // tzinfo=self._tzinfo))
              this.timeset.push(new dateutil.Time(hour, minute, second, millisecondModulo))
            }
          }
        }
        dateutil.sort(this.timeset)
      }
    }
  
    // RRule class 'constants'
  
    RRule.FREQUENCIES = [
      'YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY',
      'HOURLY', 'MINUTELY', 'SECONDLY'
    ]
  
    RRule.YEARLY = 0
    RRule.MONTHLY = 1
    RRule.WEEKLY = 2
    RRule.DAILY = 3
    RRule.HOURLY = 4
    RRule.MINUTELY = 5
    RRule.SECONDLY = 6
  
    RRule.MO = new Weekday(0)
    RRule.TU = new Weekday(1)
    RRule.WE = new Weekday(2)
    RRule.TH = new Weekday(3)
    RRule.FR = new Weekday(4)
    RRule.SA = new Weekday(5)
    RRule.SU = new Weekday(6)
  
    RRule.DEFAULT_OPTIONS = {
      freq: null,
      dtstart: null,
      interval: 1,
      wkst: RRule.MO,
      count: null,
      until: null,
      bysetpos: null,
      bymonth: null,
      bymonthday: null,
      bynmonthday: null,
      byyearday: null,
      byweekno: null,
      byweekday: null,
      bynweekday: null,
      byhour: null,
      byminute: null,
      bysecond: null,
      byeaster: null
    }
  
    RRule.parseText = function (text, language) {
      return getnlp().parseText(text, language)
    }
  
    RRule.fromText = function (text, language) {
      return getnlp().fromText(text, language)
    }
  
    RRule.optionsToString = function (options) {
      var key, value, strValues
      var pairs = []
      var keys = Object.keys(options)
      var defaultKeys = Object.keys(RRule.DEFAULT_OPTIONS)
  
      for (var i = 0; i < keys.length; i++) {
        if (!contains(defaultKeys, keys[i])) continue
  
        key = keys[i].toUpperCase()
        value = options[keys[i]]
        strValues = []
  
        if (value === null || value instanceof Array && !value.length) continue
  
        switch (key) {
          case 'FREQ':
            value = RRule.FREQUENCIES[options.freq]
            break
          case 'WKST':
            value = value.toString()
            break
          case 'BYWEEKDAY':
            /*
            NOTE: BYWEEKDAY is a special case.
            RRule() deconstructs the rule.options.byweekday array
            into an array of Weekday arguments.
            On the other hand, rule.origOptions is an array of Weekdays.
            We need to handle both cases here.
            It might be worth change RRule to keep the Weekdays.
  
            Also, BYWEEKDAY (used by RRule) vs. BYDAY (RFC)
  
            */
            key = 'BYDAY'
            if (!(value instanceof Array)) value = [value]
  
            for (var wday, j = 0; j < value.length; j++) {
              wday = value[j]
              if (wday instanceof Weekday) {
                // good
              } else if (wday instanceof Array) {
                wday = new Weekday(wday[0], wday[1])
              } else {
                wday = new Weekday(wday)
              }
              strValues[j] = wday.toString()
            }
            value = strValues
            break
          case 'DTSTART':
          case 'UNTIL':
            value = dateutil.timeToUntilString(value)
            break
          default:
            if (value instanceof Array) {
              for (j = 0; j < value.length; j++) strValues[j] = String(value[j])
              value = strValues
            } else {
              value = String(value)
            }
  
        }
        pairs.push([key, value])
      }
  
      var strings = []
      for (i = 0; i < pairs.length; i++) {
        var attr = pairs[i]
        strings.push(attr[0] + '=' + attr[1].toString())
      }
      return strings.join(';')
    }
  
    RRule.prototype = {
      constructor: RRule,
  
      /**
       * @param {Function} iterator - optional function that will be called
       *                   on each date that is added. It can return false
       *                   to stop the iteration.
       * @return Array containing all recurrences.
       */
      all: function (iterator) {
        if (iterator) {
          return this._iter(new CallbackIterResult('all', {}, iterator))
        } else {
          var result = this._cacheGet('all')
          if (result === false) {
            result = this._iter(new IterResult('all', {}))
            this._cacheAdd('all', result)
          }
          return result
        }
      },
  
      /**
       * Returns all the occurrences of the rrule between after and before.
       * The inc keyword defines what happens if after and/or before are
       * themselves occurrences. With inc == True, they will be included in the
       * list, if they are found in the recurrence set.
       * @return Array
       */
      between: function (after, before, inc, iterator) {
        var args = {
          before: before,
          after: after,
          inc: inc
        }
  
        if (iterator) {
          return this._iter(new CallbackIterResult('between', args, iterator))
        }
        var result = this._cacheGet('between', args)
        if (result === false) {
          result = this._iter(new IterResult('between', args))
          this._cacheAdd('between', result, args)
        }
        return result
      },
  
      /**
       * Returns the last recurrence before the given datetime instance.
       * The inc keyword defines what happens if dt is an occurrence.
       * With inc == True, if dt itself is an occurrence, it will be returned.
       * @return Date or null
       */
      before: function (dt, inc) {
        var args = {dt: dt, inc: inc}
        var result = this._cacheGet('before', args)
        if (result === false) {
          result = this._iter(new IterResult('before', args))
          this._cacheAdd('before', result, args)
        }
        return result
      },
  
      /**
       * Returns the first recurrence after the given datetime instance.
       * The inc keyword defines what happens if dt is an occurrence.
       * With inc == True, if dt itself is an occurrence, it will be returned.
       * @return Date or null
       */
      after: function (dt, inc) {
        var args = {dt: dt, inc: inc}
        var result = this._cacheGet('after', args)
        if (result === false) {
          result = this._iter(new IterResult('after', args))
          this._cacheAdd('after', result, args)
        }
        return result
      },
  
      /**
       * Returns the number of recurrences in this set. It will have go trough
       * the whole recurrence, if this hasn't been done before.
       */
      count: function () {
        return this.all().length
      },
  
      /**
       * Converts the rrule into its string representation
       * @see <http://www.ietf.org/rfc/rfc2445.txt>
       * @return String
       */
      toString: function () {
        return RRule.optionsToString(this.origOptions)
      },
  
      /**
      * Will convert all rules described in nlp:ToText
      * to text.
      */
      toText: function (gettext, language) {
        return getnlp().toText(this, gettext, language)
      },
  
      isFullyConvertibleToText: function () {
        return getnlp().isFullyConvertible(this)
      },
  
      /**
       * @param {String} what - all/before/after/between
       * @param {Array,Date} value - an array of dates, one date, or null
       * @param {Object?} args - _iter arguments
       */
      _cacheAdd: function (what, value, args) {
        if (!this._cache) return
  
        if (value) {
          value = (value instanceof Date)
            ? dateutil.clone(value) : dateutil.cloneDates(value)
        }
  
        if (what === 'all') {
          this._cache.all = value
        } else {
          args._value = value
          this._cache[what].push(args)
        }
      },
  
      /**
       * @return false - not in the cache
       *         null  - cached, but zero occurrences (before/after)
       *         Date  - cached (before/after)
       *         []    - cached, but zero occurrences (all/between)
       *         [Date1, DateN] - cached (all/between)
       */
      _cacheGet: function (what, args) {
        if (!this._cache) return false
  
        var cached = false
        var argsKeys = args ? Object.keys(args) : []
        var findCacheDiff = function (item) {
          for (var key, i = 0; i < argsKeys.length; i++) {
            key = argsKeys[i]
            if (String(args[key]) !== String(item[key])) return true
          }
          return false
        }
  
        if (what === 'all') {
          cached = this._cache.all
        } else {
          // Let's see whether we've already called the
          // 'what' method with the same 'args'
          for (var item, i = 0; i < this._cache[what].length; i++) {
            item = this._cache[what][i]
            if (argsKeys.length && findCacheDiff(item)) continue
            cached = item._value
            break
          }
        }
  
        if (!cached && this._cache.all) {
          // Not in the cache, but we already know all the occurrences,
          // so we can find the correct dates from the cached ones.
          var iterResult = new IterResult(what, args)
          for (i = 0; i < this._cache.all.length; i++) {
            if (!iterResult.accept(this._cache.all[i])) break
          }
          cached = iterResult.getValue()
          this._cacheAdd(what, cached, args)
        }
  
        return cached instanceof Array
          ? dateutil.cloneDates(cached)
          : (cached instanceof Date ? dateutil.clone(cached) : cached)
      },
  
      /**
       * @return a RRule instance with the same freq and options
       *          as this one (cache is not cloned)
       */
      clone: function () {
        return new RRule(this.origOptions)
      },
  
      _iter: function (iterResult) {
        /* Since JavaScript doesn't have the python's yield operator (<1.7),
           we use the IterResult object that tells us when to stop iterating.
  
        */
  
        var dtstart = this.options.dtstart
        var dtstartMillisecondModulo = this.options.dtstart % 1000
  
        var year = dtstart.getFullYear()
        var month = dtstart.getMonth() + 1
        var day = dtstart.getDate()
        var hour = dtstart.getHours()
        var minute = dtstart.getMinutes()
        var second = dtstart.getSeconds()
        var weekday = dateutil.getWeekday(dtstart)
  
        // Some local variables to speed things up a bit
        var freq = this.options.freq
        var interval = this.options.interval
        var wkst = this.options.wkst
        var until = this.options.until
        var bymonth = this.options.bymonth
        var byweekno = this.options.byweekno
        var byyearday = this.options.byyearday
        var byweekday = this.options.byweekday
        var byeaster = this.options.byeaster
        var bymonthday = this.options.bymonthday
        var bynmonthday = this.options.bynmonthday
        var bysetpos = this.options.bysetpos
        var byhour = this.options.byhour
        var byminute = this.options.byminute
        var bysecond = this.options.bysecond
  
        var ii = new Iterinfo(this)
        ii.rebuild(year, month)
  
        var getdayset = {}
        getdayset[RRule.YEARLY] = ii.ydayset
        getdayset[RRule.MONTHLY] = ii.mdayset
        getdayset[RRule.WEEKLY] = ii.wdayset
        getdayset[RRule.DAILY] = ii.ddayset
        getdayset[RRule.HOURLY] = ii.ddayset
        getdayset[RRule.MINUTELY] = ii.ddayset
        getdayset[RRule.SECONDLY] = ii.ddayset
  
        getdayset = getdayset[freq]
  
        var timeset
        if (freq < RRule.HOURLY) {
          timeset = this.timeset
        } else {
          var gettimeset = {}
          gettimeset[RRule.HOURLY] = ii.htimeset
          gettimeset[RRule.MINUTELY] = ii.mtimeset
          gettimeset[RRule.SECONDLY] = ii.stimeset
          gettimeset = gettimeset[freq]
          if ((freq >= RRule.HOURLY && plb(byhour) && !contains(byhour, hour)) ||
            (freq >= RRule.MINUTELY && plb(byminute) && !contains(byminute, minute)) ||
            (freq >= RRule.SECONDLY && plb(bysecond) && !contains(bysecond, minute))) {
            timeset = []
          } else {
            timeset = gettimeset.call(ii, hour, minute, second, dtstartMillisecondModulo)
          }
        }
  
        var total = 0
        var count = this.options.count
        var i, j, k, dm, div, mod, tmp, pos, dayset, start, end, fixday, filtered
  
        while (true) {
          // Get dayset with the right frequency
          tmp = getdayset.call(ii, year, month, day)
          dayset = tmp[0]
          start = tmp[1]
          end = tmp[2]
  
          // Do the "hard" work ;-)
          filtered = false
          for (j = start; j < end; j++) {
            i = dayset[j]
  
            filtered = (plb(bymonth) && !contains(bymonth, ii.mmask[i])) ||
              (plb(byweekno) && !ii.wnomask[i]) ||
              (plb(byweekday) && !contains(byweekday, ii.wdaymask[i])) ||
              (plb(ii.nwdaymask) && !ii.nwdaymask[i]) ||
              (byeaster !== null && !contains(ii.eastermask, i)) ||
              ((plb(bymonthday) || plb(bynmonthday)) &&
                !contains(bymonthday, ii.mdaymask[i]) &&
                !contains(bynmonthday, ii.nmdaymask[i])) ||
              (plb(byyearday) &&
                ((i < ii.yearlen &&
                  !contains(byyearday, i + 1) &&
                  !contains(byyearday, -ii.yearlen + i)) ||
                (i >= ii.yearlen &&
                  !contains(byyearday, i + 1 - ii.yearlen) &&
                  !contains(byyearday, -ii.nextyearlen + i - ii.yearlen))))
  
            if (filtered) dayset[i] = null
          }
  
          // Output results
          if (plb(bysetpos) && plb(timeset)) {
            var daypos, timepos
            var poslist = []
  
            for (i, j = 0; j < bysetpos.length; j++) {
              pos = bysetpos[j]
  
              if (pos < 0) {
                daypos = Math.floor(pos / timeset.length)
                timepos = pymod(pos, timeset.length)
              } else {
                daypos = Math.floor((pos - 1) / timeset.length)
                timepos = pymod((pos - 1), timeset.length)
              }
  
              try {
                tmp = []
                for (k = start; k < end; k++) {
                  var val = dayset[k]
                  if (val === null) continue
                  tmp.push(val)
                }
                if (daypos < 0) {
                  // we're trying to emulate python's aList[-n]
                  i = tmp.slice(daypos)[0]
                } else {
                  i = tmp[daypos]
                }
  
                var time = timeset[timepos]
                var date = dateutil.fromOrdinal(ii.yearordinal + i)
                var res = dateutil.combine(date, time)
                // XXX: can this ever be in the array?
                // - compare the actual date instead?
                if (!contains(poslist, res)) poslist.push(res)
              } catch (e) {}
            }
  
            dateutil.sort(poslist)
            for (j = 0; j < poslist.length; j++) {
              res = poslist[j]
              if (until && res > until) {
                this._len = total
                return iterResult.getValue()
              } else if (res >= dtstart) {
                ++total
                if (!iterResult.accept(res)) return iterResult.getValue()
                if (count) {
                  --count
                  if (!count) {
                    this._len = total
                    return iterResult.getValue()
                  }
                }
              }
            }
          } else {
            for (j = start; j < end; j++) {
              i = dayset[j]
              if (i !== null) {
                date = dateutil.fromOrdinal(ii.yearordinal + i)
                for (k = 0; k < timeset.length; k++) {
                  time = timeset[k]
                  res = dateutil.combine(date, time)
                  if (until && res > until) {
                    this._len = total
                    return iterResult.getValue()
                  } else if (res >= dtstart) {
                    ++total
                    if (!iterResult.accept(res)) return iterResult.getValue()
                    if (count) {
                      --count
                      if (!count) {
                        this._len = total
                        return iterResult.getValue()
                      }
                    }
                  }
                }
              }
            }
          }
  
          // Handle frequency and interval
          fixday = false
          if (freq === RRule.YEARLY) {
            year += interval
            if (year > dateutil.MAXYEAR) {
              this._len = total
              return iterResult.getValue()
            }
            ii.rebuild(year, month)
          } else if (freq === RRule.MONTHLY) {
            month += interval
            if (month > 12) {
              div = Math.floor(month / 12)
              mod = pymod(month, 12)
              month = mod
              year += div
              if (month === 0) {
                month = 12
                --year
              }
              if (year > dateutil.MAXYEAR) {
                this._len = total
                return iterResult.getValue()
              }
            }
            ii.rebuild(year, month)
          } else if (freq === RRule.WEEKLY) {
            if (wkst > weekday) {
              day += -(weekday + 1 + (6 - wkst)) + interval * 7
            } else {
              day += -(weekday - wkst) + interval * 7
            }
            weekday = wkst
            fixday = true
          } else if (freq === RRule.DAILY) {
            day += interval
            fixday = true
          } else if (freq === RRule.HOURLY) {
            if (filtered) {
              // Jump to one iteration before next day
              hour += Math.floor((23 - hour) / interval) * interval
            }
            while (true) {
              hour += interval
              dm = divmod(hour, 24)
              div = dm.div
              mod = dm.mod
              if (div) {
                hour = mod
                day += div
                fixday = true
              }
              if (!plb(byhour) || contains(byhour, hour)) break
            }
            timeset = gettimeset.call(ii, hour, minute, second)
          } else if (freq === RRule.MINUTELY) {
            if (filtered) {
              // Jump to one iteration before next day
              minute += Math.floor(
                (1439 - (hour * 60 + minute)) / interval) * interval
            }
  
            while (true) {
              minute += interval
              dm = divmod(minute, 60)
              div = dm.div
              mod = dm.mod
              if (div) {
                minute = mod
                hour += div
                dm = divmod(hour, 24)
                div = dm.div
                mod = dm.mod
                if (div) {
                  hour = mod
                  day += div
                  fixday = true
                  filtered = false
                }
              }
              if ((!plb(byhour) || contains(byhour, hour)) &&
                (!plb(byminute) || contains(byminute, minute))) {
                break
              }
            }
            timeset = gettimeset.call(ii, hour, minute, second)
          } else if (freq === RRule.SECONDLY) {
            if (filtered) {
              // Jump to one iteration before next day
              second += Math.floor(
                  (86399 - (hour * 3600 + minute * 60 + second)) / interval) * interval
            }
            while (true) {
              second += interval
              dm = divmod(second, 60)
              div = dm.div
              mod = dm.mod
              if (div) {
                second = mod
                minute += div
                dm = divmod(minute, 60)
                div = dm.div
                mod = dm.mod
                if (div) {
                  minute = mod
                  hour += div
                  dm = divmod(hour, 24)
                  div = dm.div
                  mod = dm.mod
                  if (div) {
                    hour = mod
                    day += div
                    fixday = true
                  }
                }
              }
              if ((!plb(byhour) || contains(byhour, hour)) &&
                (!plb(byminute) || contains(byminute, minute)) &&
                (!plb(bysecond) || contains(bysecond, second))) {
                break
              }
            }
            timeset = gettimeset.call(ii, hour, minute, second)
          }
  
          if (fixday && day > 28) {
            var daysinmonth = dateutil.monthRange(year, month - 1)[1]
            if (day > daysinmonth) {
              while (day > daysinmonth) {
                day -= daysinmonth
                ++month
                if (month === 13) {
                  month = 1
                  ++year
                  if (year > dateutil.MAXYEAR) {
                    this._len = total
                    return iterResult.getValue()
                  }
                }
                daysinmonth = dateutil.monthRange(year, month - 1)[1]
              }
              ii.rebuild(year, month)
            }
          }
        }
      }
  
    }
  
    RRule.parseString = function (rfcString) {
      rfcString = rfcString.replace(/^\s+|\s+$/, '')
      if (!rfcString.length) return null
  
      var i, j, key, value, attr
      var attrs = rfcString.split(';')
      var options = {}
  
      for (i = 0; i < attrs.length; i++) {
        attr = attrs[i].split('=')
        key = attr[0]
        value = attr[1]
        switch (key) {
          case 'FREQ':
            options.freq = RRule[value]
            break
          case 'WKST':
            options.wkst = RRule[value]
            break
          case 'COUNT':
          case 'INTERVAL':
          case 'BYSETPOS':
          case 'BYMONTH':
          case 'BYMONTHDAY':
          case 'BYYEARDAY':
          case 'BYWEEKNO':
          case 'BYHOUR':
          case 'BYMINUTE':
          case 'BYSECOND':
            if (value.indexOf(',') !== -1) {
              value = value.split(',')
              for (j = 0; j < value.length; j++) {
                if (/^[+-]?\d+$/.test(value[j])) value[j] = Number(value[j])
              }
            } else if (/^[+-]?\d+$/.test(value)) {
              value = Number(value)
            }
            key = key.toLowerCase()
            options[key] = value
            break
          case 'BYDAY': // => byweekday
            var n, wday, day
            var days = value.split(',')
  
            options.byweekday = []
            for (j = 0; j < days.length; j++) {
              day = days[j]
              if (day.length === 2) { // MO, TU, ...
                wday = RRule[day] // wday instanceof Weekday
                options.byweekday.push(wday)
              } else { // -1MO, +3FR, 1SO, ...
                day = day.match(/^([+-]?\d)([A-Z]{2})$/)
                n = Number(day[1])
                wday = day[2]
                wday = RRule[wday].weekday
                options.byweekday.push(new Weekday(wday, n))
              }
            }
            break
          case 'DTSTART':
            options.dtstart = dateutil.untilStringToDate(value)
            break
          case 'UNTIL':
            options.until = dateutil.untilStringToDate(value)
            break
          case 'BYEASTER':
            options.byeaster = Number(value)
            break
          default:
            throw new Error("Unknown RRULE property '" + key + "'")
        }
      }
      return options
    }
  
    RRule.fromString = function (string) {
      return new RRule(RRule.parseString(string))
    }
  
    // =============================================================================
    // Iterinfo
    // =============================================================================
  
    var Iterinfo = function (rrule) {
      this.rrule = rrule
      this.lastyear = null
      this.lastmonth = null
      this.yearlen = null
      this.nextyearlen = null
      this.yearordinal = null
      this.yearweekday = null
      this.mmask = null
      this.mrange = null
      this.mdaymask = null
      this.nmdaymask = null
      this.wdaymask = null
      this.wnomask = null
      this.nwdaymask = null
      this.eastermask = null
    }
  
    Iterinfo.prototype.easter = function (y, offset) {
      offset = offset || 0
  
      var a = y % 19
      var b = Math.floor(y / 100)
      var c = y % 100
      var d = Math.floor(b / 4)
      var e = b % 4
      var f = Math.floor((b + 8) / 25)
      var g = Math.floor((b - f + 1) / 3)
      var h = Math.floor(19 * a + b - d - g + 15) % 30
      var i = Math.floor(c / 4)
      var k = c % 4
      var l = Math.floor(32 + 2 * e + 2 * i - h - k) % 7
      var m = Math.floor((a + 11 * h + 22 * l) / 451)
      var month = Math.floor((h + l - 7 * m + 114) / 31)
      var day = (h + l - 7 * m + 114) % 31 + 1
      var date = Date.UTC(y, month - 1, day + offset)
      var yearStart = Date.UTC(y, 0, 1)
  
      return [Math.ceil((date - yearStart) / (1000 * 60 * 60 * 24))]
    }
  
    Iterinfo.prototype.rebuild = function (year, month) {
      var rr = this.rrule
  
      if (year !== this.lastyear) {
        this.yearlen = dateutil.isLeapYear(year) ? 366 : 365
        this.nextyearlen = dateutil.isLeapYear(year + 1) ? 366 : 365
        var firstyday = new Date(year, 0, 1)
  
        this.yearordinal = dateutil.toOrdinal(firstyday)
        this.yearweekday = dateutil.getWeekday(firstyday)
  
        var wday = dateutil.getWeekday(new Date(year, 0, 1))
  
        if (this.yearlen === 365) {
          this.mmask = [].concat(M365MASK)
          this.mdaymask = [].concat(MDAY365MASK)
          this.nmdaymask = [].concat(NMDAY365MASK)
          this.wdaymask = WDAYMASK.slice(wday)
          this.mrange = [].concat(M365RANGE)
        } else {
          this.mmask = [].concat(M366MASK)
          this.mdaymask = [].concat(MDAY366MASK)
          this.nmdaymask = [].concat(NMDAY366MASK)
          this.wdaymask = WDAYMASK.slice(wday)
          this.mrange = [].concat(M366RANGE)
        }
  
        if (!plb(rr.options.byweekno)) {
          this.wnomask = null
        } else {
          this.wnomask = repeat(0, this.yearlen + 7)
          var no1wkst, firstwkst, wyearlen
          no1wkst = firstwkst = pymod(7 - this.yearweekday + rr.options.wkst, 7)
          if (no1wkst >= 4) {
            no1wkst = 0
            // Number of days in the year, plus the days we got
            // from last year.
            wyearlen = this.yearlen + pymod(this.yearweekday - rr.options.wkst, 7)
          } else {
            // Number of days in the year, minus the days we
            // left in last year.
            wyearlen = this.yearlen - no1wkst
          }
          var div = Math.floor(wyearlen / 7)
          var mod = pymod(wyearlen, 7)
          var numweeks = Math.floor(div + (mod / 4))
          for (var n, i, j = 0; j < rr.options.byweekno.length; j++) {
            n = rr.options.byweekno[j]
            if (n < 0) {
              n += numweeks + 1
            } if (!(n > 0 && n <= numweeks)) {
              continue
            } if (n > 1) {
              i = no1wkst + (n - 1) * 7
              if (no1wkst !== firstwkst) {
                i -= 7 - firstwkst
              }
            } else {
              i = no1wkst
            }
            for (var k = 0; k < 7; k++) {
              this.wnomask[i] = 1
              i++
              if (this.wdaymask[i] === rr.options.wkst) break
            }
          }
  
          if (contains(rr.options.byweekno, 1)) {
            // Check week number 1 of next year as well
            // orig-TODO : Check -numweeks for next year.
            i = no1wkst + numweeks * 7
            if (no1wkst !== firstwkst) i -= 7 - firstwkst
            if (i < this.yearlen) {
              // If week starts in next year, we
              // don't care about it.
              for (j = 0; j < 7; j++) {
                this.wnomask[i] = 1
                i += 1
                if (this.wdaymask[i] === rr.options.wkst) break
              }
            }
          }
  
          if (no1wkst) {
            // Check last week number of last year as
            // well. If no1wkst is 0, either the year
            // started on week start, or week number 1
            // got days from last year, so there are no
            // days from last year's last week number in
            // this year.
            var lnumweeks
            if (!contains(rr.options.byweekno, -1)) {
              var lyearweekday = dateutil.getWeekday(new Date(year - 1, 0, 1))
              var lno1wkst = pymod(7 - lyearweekday + rr.options.wkst, 7)
              var lyearlen = dateutil.isLeapYear(year - 1) ? 366 : 365
              if (lno1wkst >= 4) {
                lno1wkst = 0
                lnumweeks = Math.floor(52 +
                  pymod(lyearlen + pymod(lyearweekday - rr.options.wkst, 7), 7) / 4)
              } else {
                lnumweeks = Math.floor(52 + pymod(this.yearlen - no1wkst, 7) / 4)
              }
            } else {
              lnumweeks = -1
            }
            if (contains(rr.options.byweekno, lnumweeks)) {
              for (i = 0; i < no1wkst; i++) this.wnomask[i] = 1
            }
          }
        }
      }
  
      if (plb(rr.options.bynweekday) && (month !== this.lastmonth || year !== this.lastyear)) {
        var ranges = []
        if (rr.options.freq === RRule.YEARLY) {
          if (plb(rr.options.bymonth)) {
            for (j = 0; j < rr.options.bymonth.length; j++) {
              month = rr.options.bymonth[j]
              ranges.push(this.mrange.slice(month - 1, month + 1))
            }
          } else {
            ranges = [[0, this.yearlen]]
          }
        } else if (rr.options.freq === RRule.MONTHLY) {
          ranges = [this.mrange.slice(month - 1, month + 1)]
        }
        if (plb(ranges)) {
          // Weekly frequency won't get here, so we may not
          // care about cross-year weekly periods.
          this.nwdaymask = repeat(0, this.yearlen)
  
          for (j = 0; j < ranges.length; j++) {
            var rang = ranges[j]
            var first = rang[0]
            var last = rang[1]
            last -= 1
            for (k = 0; k < rr.options.bynweekday.length; k++) {
              wday = rr.options.bynweekday[k][0]
              n = rr.options.bynweekday[k][1]
              if (n < 0) {
                i = last + (n + 1) * 7
                i -= pymod(this.wdaymask[i] - wday, 7)
              } else {
                i = first + (n - 1) * 7
                i += pymod(7 - this.wdaymask[i] + wday, 7)
              }
              if (first <= i && i <= last) this.nwdaymask[i] = 1
            }
          }
        }
  
        this.lastyear = year
        this.lastmonth = month
      }
  
      if (rr.options.byeaster !== null) {
        this.eastermask = this.easter(year, rr.options.byeaster)
      }
    }
  
    Iterinfo.prototype.ydayset = function (year, month, day) {
      return [range(this.yearlen), 0, this.yearlen]
    }
  
    Iterinfo.prototype.mdayset = function (year, month, day) {
      var set = repeat(null, this.yearlen)
      var start = this.mrange[month - 1]
      var end = this.mrange[month]
      for (var i = start; i < end; i++) set[i] = i
      return [set, start, end]
    }
  
    Iterinfo.prototype.wdayset = function (year, month, day) {
      // We need to handle cross-year weeks here.
      var set = repeat(null, this.yearlen + 7)
      var i = dateutil.toOrdinal(new Date(year, month - 1, day)) - this.yearordinal
      var start = i
      for (var j = 0; j < 7; j++) {
        set[i] = i
        ++i
        if (this.wdaymask[i] === this.rrule.options.wkst) break
      }
      return [set, start, i]
    }
  
    Iterinfo.prototype.ddayset = function (year, month, day) {
      var set = repeat(null, this.yearlen)
      var i = dateutil.toOrdinal(new Date(year, month - 1, day)) - this.yearordinal
      set[i] = i
      return [set, i, i + 1]
    }
  
    Iterinfo.prototype.htimeset = function (hour, minute, second, millisecond) {
      var set = []
      var rr = this.rrule
      for (var i = 0; i < rr.options.byminute.length; i++) {
        minute = rr.options.byminute[i]
        for (var j = 0; j < rr.options.bysecond.length; j++) {
          second = rr.options.bysecond[j]
          set.push(new dateutil.Time(hour, minute, second, millisecond))
        }
      }
      dateutil.sort(set)
      return set
    }
  
    Iterinfo.prototype.mtimeset = function (hour, minute, second, millisecond) {
      var set = []
      var rr = this.rrule
      for (var j = 0; j < rr.options.bysecond.length; j++) {
        second = rr.options.bysecond[j]
        set.push(new dateutil.Time(hour, minute, second, millisecond))
      }
      dateutil.sort(set)
      return set
    }
  
    Iterinfo.prototype.stimeset = function (hour, minute, second, millisecond) {
      return [new dateutil.Time(hour, minute, second, millisecond)]
    }
  
    // =============================================================================
    // Results
    // =============================================================================
  
    /**
     * This class helps us to emulate python's generators, sorta.
     */
    var IterResult = function (method, args) {
      this.init(method, args)
    }
  
    IterResult.prototype = {
      constructor: IterResult,
      init: function (method, args) {
        this.method = method
        this.args = args
        this.minDate = null
        this.maxDate = null
        this._result = []
  
        if (method === 'between') {
          this.maxDate = args.inc
            ? args.before : new Date(args.before.getTime() - 1)
          this.minDate = args.inc
            ? args.after : new Date(args.after.getTime() + 1)
        } else if (method === 'before') {
          this.maxDate = args.inc ? args.dt : new Date(args.dt.getTime() - 1)
        } else if (method === 'after') {
          this.minDate = args.inc ? args.dt : new Date(args.dt.getTime() + 1)
        }
      },
  
      /**
       * Possibly adds a date into the result.
       *
       * @param {Date} date - the date isn't necessarly added to the result
       *                      list (if it is too late/too early)
       * @return {Boolean} true if it makes sense to continue the iteration
       *                   false if we're done.
       */
      accept: function (date) {
        var tooEarly = this.minDate && date < this.minDate
        var tooLate = this.maxDate && date > this.maxDate
  
        if (this.method === 'between') {
          if (tooEarly) return true
          if (tooLate) return false
        } else if (this.method === 'before') {
          if (tooLate) return false
        } else if (this.method === 'after') {
          if (tooEarly) return true
          this.add(date)
          return false
        }
  
        return this.add(date)
      },
  
      /**
       *
       * @param {Date} date that is part of the result.
       * @return {Boolean} whether we are interested in more values.
       */
      add: function (date) {
        this._result.push(date)
        return true
      },
  
      /**
       * 'before' and 'after' return only one date, whereas 'all'
       * and 'between' an array.
       * @return {Date,Array?}
       */
      getValue: function () {
        var res = this._result
        switch (this.method) {
          case 'all':
          case 'between':
            return res
          case 'before':
          case 'after':
            return res.length ? res[res.length - 1] : null
        }
      },
  
      clone: function () {
        return new IterResult(this.method, this.args)
      }
    }
  
    /**
     * IterResult subclass that calls a callback function on each add,
     * and stops iterating when the callback returns false.
     */
    var CallbackIterResult = function (method, args, iterator) {
      var allowedMethods = ['all', 'between']
      if (!contains(allowedMethods, method)) {
        throw new Error('Invalid method "' + method +
          '". Only all and between works with iterator.')
      }
      this.add = function (date) {
        if (iterator(date, this._result.length)) {
          this._result.push(date)
          return true
        }
        return false
      }
  
      this.init(method, args)
    }
    CallbackIterResult.prototype = IterResult.prototype
  
    /**
     *
     * @param {Boolean?} noCache
     *  The same stratagy as RRule on cache, default to false
     * @constructor
     */
  
    var RRuleSet = function (noCache) {
      // Let RRuleSet cacheable
      this._cache = noCache ? null : {
        all: false,
        before: [],
        after: [],
        between: []
      }
      this._rrule = []
      this._rdate = []
      this._exrule = []
      this._exdate = []
    }
  
    RRuleSet.prototype = {
      constructor: RRuleSet,
  
      /**
      * @param {RRule}
      */
      rrule: function (rrule) {
        if (!(rrule instanceof RRule)) {
          throw new TypeError(String(rrule) + ' is not RRule instance')
        }
        if (!contains(this._rrule.map(String), String(rrule))) {
          this._rrule.push(rrule)
        }
      },
  
      /**
      * @param {Date}
      */
      rdate: function (date) {
        if (!(date instanceof Date)) {
          throw new TypeError(String(date) + ' is not Date instance')
        }
        if (!contains(this._rdate.map(Number), Number(date))) {
          this._rdate.push(date)
          dateutil.sort(this._rdate)
        }
      },
  
      /**
      * @param {RRule}
      */
      exrule: function (rrule) {
        if (!(rrule instanceof RRule)) {
          throw new TypeError(String(rrule) + ' is not RRule instance')
        }
        if (!contains(this._exrule.map(String), String(rrule))) {
          this._exrule.push(rrule)
        }
      },
  
      /**
      * @param {Date}
      */
      exdate: function (date) {
        if (!(date instanceof Date)) {
          throw new TypeError(String(date) + ' is not Date instance')
        }
        if (!contains(this._exdate.map(Number), Number(date))) {
          this._exdate.push(date)
          dateutil.sort(this._exdate)
        }
      },
  
      valueOf: function () {
        var result = []
        if (this._rrule.length) {
          this._rrule.forEach(function (rrule) {
            result.push('RRULE:' + rrule)
          })
        }
        if (this._rdate.length) {
          result.push('RDATE:' + this._rdate.map(function (rdate) {
            return dateutil.timeToUntilString(rdate)
          }).join(','))
        }
        if (this._exrule.length) {
          this._exrule.forEach(function (exrule) {
            result.push('EXRULE:' + exrule)
          })
        }
        if (this._exdate.length) {
          result.push('EXDATE:' + this._exdate.map(function (exdate) {
            return dateutil.timeToUntilString(exdate)
          }).join(','))
        }
        return result
      },
  
      /**
      * to generate recurrence field sush as:
      *   ["RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU;DTSTART=19970902T010000Z","RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH;DTSTART=19970902T010000Z"]
      */
      toString: function () {
        return JSON.stringify(this.valueOf())
      },
  
      _iter: function (iterResult) {
        var _exdateHash = {}
        var _exrule = this._exrule
        var _accept = iterResult.accept
  
        function evalExdate (after, before) {
          _exrule.forEach(function (rrule) {
            rrule.between(after, before, true).forEach(function (date) {
              _exdateHash[Number(date)] = true
            })
          })
        }
  
        this._exdate.forEach(function (date) {
          _exdateHash[Number(date)] = true
        })
  
        iterResult.accept = function (date) {
          var dt = Number(date)
          if (!_exdateHash[dt]) {
            evalExdate(new Date(dt - 1), new Date(dt + 1))
            if (!_exdateHash[dt]) {
              _exdateHash[dt] = true
              return _accept.call(this, date)
            }
          }
          return true
        }
  
        if (iterResult.method === 'between') {
          evalExdate(iterResult.args.after, iterResult.args.before)
          iterResult.accept = function (date) {
            var dt = Number(date)
            if (!_exdateHash[dt]) {
              _exdateHash[dt] = true
              return _accept.call(this, date)
            }
            return true
          }
        }
  
        for (var i = 0; i < this._rdate.length; i++) {
          if (!iterResult.accept(new Date(this._rdate[i]))) break
        }
  
        this._rrule.forEach(function (rrule) {
          rrule._iter(iterResult)
        })
  
        var res = iterResult._result
        dateutil.sort(res)
        switch (iterResult.method) {
          case 'all':
          case 'between':
            return res
          case 'before':
            return (res.length && res[res.length - 1]) || null
          case 'after':
            return (res.length && res[0]) || null
          default:
            return null
        }
      },
  
      /**
      * Create a new RRuleSet Object completely base on current instance
      */
      clone: function () {
        var rrs = new RRuleSet(!!this._cache)
        var i
        for (i = 0; i < this._rrule.length; i++) {
          rrs.rrule(this._rrule[i].clone())
        }
        for (i = 0; i < this._rdate.length; i++) {
          rrs.rdate(new Date(this._rdate[i]))
        }
        for (i = 0; i < this._exrule.length; i++) {
          rrs.exrule(this._exrule[i].clone())
        }
        for (i = 0; i < this._exdate.length; i++) {
          rrs.exdate(new Date(this._exdate[i]))
        }
        return rrs
      }
    }
  
    /**
     * Inherts method from RRule
     *  add Read interface and set RRuleSet cacheable
     */
    var RRuleSetMethods = ['all', 'between', 'before', 'after', 'count', '_cacheAdd', '_cacheGet']
    RRuleSetMethods.forEach(function (method) {
      RRuleSet.prototype[method] = RRule.prototype[method]
    })
  
    /**
     * RRuleStr
     *  To parse a set of rrule strings
     */
  
    var RRuleStr = function () {}
  
    RRuleStr.DEFAULT_OPTIONS = {
      dtstart: null,
      cache: false,
      unfold: false,
      forceset: false,
      compatible: false,
      ignoretz: false,
      tzinfos: null
    }
  
    RRuleStr._freq_map = {
      'YEARLY': RRule.YEARLY,
      'MONTHLY': RRule.MONTHLY,
      'WEEKLY': RRule.WEEKLY,
      'DAILY': RRule.DAILY,
      'HOURLY': RRule.HOURLY,
      'MINUTELY': RRule.MINUTELY,
      'SECONDLY': RRule.SECONDLY
    }
  
    RRuleStr._weekday_map = {
      'MO': 0,
      'TU': 1,
      'WE': 2,
      'TH': 3,
      'FR': 4,
      'SA': 5,
      'SU': 6
    }
  
    RRuleStr.prototype = {
      constructor: RRuleStr,
  
      _handle_int: function (rrkwargs, name, value, options) {
        rrkwargs[name.toLowerCase()] = parseInt(value, 10)
      },
  
      _handle_int_list: function (rrkwargs, name, value, options) {
        rrkwargs[name.toLowerCase()] = value.split(',').map(function (x) {
          return parseInt(x, 10)
        })
      },
  
      _handle_FREQ: function (rrkwargs, name, value, options) {
        rrkwargs['freq'] = RRuleStr._freq_map[value]
      },
  
      _handle_UNTIL: function (rrkwargs, name, value, options) {
        try {
          rrkwargs['until'] = dateutil.untilStringToDate(value)
        } catch (error) {
          throw new Error('invalid until date')
        }
      },
  
      _handle_WKST: function (rrkwargs, name, value, options) {
        rrkwargs['wkst'] = RRuleStr._weekday_map[value]
      },
  
      _handle_BYWEEKDAY: function (rrkwargs, name, value, options) {
        // Two ways to specify this: +1MO or MO(+1)
        var splt, i, j, n, w, wday
        var l = []
        var wdays = value.split(',')
  
        for (i = 0; i < wdays.length; i++) {
          wday = wdays[i]
          if (wday.indexOf('(') > -1) {
            // If it's of the form TH(+1), etc.
            splt = wday.split('(')
            w = splt[0]
            n = parseInt(splt.slice(1, -1), 10)
          } else {
            // # If it's of the form +1MO
            for (j = 0; j < wday.length; j++) {
              if ('+-0123456789'.indexOf(wday[j]) === -1) break
            }
            n = wday.slice(0, j) || null
            w = wday.slice(j)
  
            if (n) n = parseInt(n, 10)
          }
  
          var weekday = new Weekday(RRuleStr._weekday_map[w], n)
          l.push(weekday)
        }
        rrkwargs['byweekday'] = l
      },
  
      _parseRfcRRule: function (line, options) {
        options = options || {}
        options.dtstart = options.dtstart || null
        options.cache = options.cache || false
        options.ignoretz = options.ignoretz || false
        options.tzinfos = options.tzinfos || null
  
        var name, value, parts
        if (line.indexOf(':') !== -1) {
          parts = line.split(':')
          name = parts[0]
          value = parts[1]
  
          if (name !== 'RRULE') throw new Error('unknown parameter name')
        } else {
          value = line
        }
  
        var i
        var rrkwargs = {}
        var pairs = value.split(';')
  
        for (i = 0; i < pairs.length; i++) {
          parts = pairs[i].split('=')
          name = parts[0].toUpperCase()
          value = parts[1].toUpperCase()
  
          try {
            this['_handle_' + name](rrkwargs, name, value, {
              ignoretz: options.ignoretz,
              tzinfos: options.tzinfos
            })
          } catch (error) {
            throw new Error("unknown parameter '" + name + "':" + value)
          }
        }
        rrkwargs.dtstart = rrkwargs.dtstart || options.dtstart
        return new RRule(rrkwargs, !options.cache)
      },
  
      _parseRfc: function (s, options) {
        if (options.compatible) {
          options.forceset = true
          options.unfold = true
        }
  
        s = s && s.toUpperCase().trim()
        if (!s) throw new Error('Invalid empty string')
  
        var i = 0
        var line, lines
  
        // More info about 'unfold' option
        // Go head to http://www.ietf.org/rfc/rfc2445.txt
        if (options.unfold) {
          lines = s.split('\n')
          while (i < lines.length) {
            // TODO
            line = lines[i] = lines[i].replace(/\s+$/g, '')
            if (!line) {
              lines.splice(i, 1)
            } else if (i > 0 && line[0] === ' ') {
              lines[i - 1] += line.slice(1)
              lines.splice(i, 1)
            } else {
              i += 1
            }
          }
        } else {
          lines = s.split(/\s/)
        }
  
        var rrulevals = []
        var rdatevals = []
        var exrulevals = []
        var exdatevals = []
        var name, value, parts, parms, parm, dtstart, rset, j, k, datestrs, datestr
  
        if (!options.forceset && lines.length === 1 && (s.indexOf(':') === -1 ||
          s.indexOf('RRULE:') === 0)) {
          return this._parseRfcRRule(lines[0], {
            cache: options.cache,
            dtstart: options.dtstart,
            ignoretz: options.ignoretz,
            tzinfos: options.tzinfos
          })
        } else {
          for (i = 0; i < lines.length; i++) {
            line = lines[i]
            if (!line) continue
            if (line.indexOf(':') === -1) {
              name = 'RRULE'
              value = line
            } else {
              parts = split(line, ':', 1)
              name = parts[0]
              value = parts[1]
            }
            parms = name.split(';')
            if (!parms) throw new Error('empty property name')
            name = parms[0]
            parms = parms.slice(1)
  
            if (name === 'RRULE') {
              for (j = 0; j < parms.length; j++) {
                parm = parms[j]
                throw new Error('unsupported RRULE parm: ' + parm)
              }
              rrulevals.push(value)
            } else if (name === 'RDATE') {
              for (j = 0; j < parms.length; j++) {
                parm = parms[j]
                if (parm !== 'VALUE=DATE-TIME') {
                  throw new Error('unsupported RDATE parm: ' + parm)
                }
              }
              rdatevals.push(value)
            } else if (name === 'EXRULE') {
              for (j = 0; j < parms.length; j++) {
                parm = parms[j]
                throw new Error('unsupported EXRULE parm: ' + parm)
              }
              exrulevals.push(value)
            } else if (name === 'EXDATE') {
              for (j = 0; j < parms.length; j++) {
                parm = parms[j]
                if (parm !== 'VALUE=DATE-TIME') {
                  throw new Error('unsupported RDATE parm: ' + parm)
                }
              }
              exdatevals.push(value)
            } else if (name === 'DTSTART') {
              dtstart = dateutil.untilStringToDate(value)
            } else {
              throw new Error('unsupported property: ' + name)
            }
          }
  
          if (options.forceset || rrulevals.length > 1 || rdatevals.length ||
            exrulevals.length || exdatevals.length) {
            rset = new RRuleSet(!options.cache)
            for (j = 0; j < rrulevals.length; j++) {
              rset.rrule(this._parseRfcRRule(rrulevals[j], {
                dtstart: options.dtstart || dtstart,
                ignoretz: options.ignoretz,
                tzinfos: options.tzinfos
              }))
            }
            for (j = 0; j < rdatevals.length; j++) {
              datestrs = rdatevals[j].split(',')
              for (k = 0; k < datestrs.length; k++) {
                datestr = datestrs[k]
                rset.rdate(dateutil.untilStringToDate(datestr))
              }
            }
            for (j = 0; j < exrulevals.length; j++) {
              rset.exrule(this._parseRfcRRule(exrulevals[j], {
                dtstart: options.dtstart || dtstart,
                ignoretz: options.ignoretz,
                tzinfos: options.tzinfos
              }))
            }
            for (j = 0; j < exdatevals.length; j++) {
              datestrs = exdatevals[j].split(',')
              for (k = 0; k < datestrs.length; k++) {
                datestr = datestrs[k]
                rset.exdate(dateutil.untilStringToDate(datestr))
              }
            }
  
            if (options.campatiable && options.dtstart) rset.rdate(dtstart)
            return rset
          } else {
            return this._parseRfcRRule(rrulevals[0], {
              dtstart: options.dtstart || dtstart,
              cache: options.cache,
              ignoretz: options.ignoretz,
              tzinfos: options.tzinfos
            })
          }
        }
      },
  
      parse: function (s, options) {
        options = options || {}
  
        var invalid = []
        var keys = Object.keys(options)
        var defaultKeys = Object.keys(RRuleStr.DEFAULT_OPTIONS)
  
        keys.forEach(function (key) {
          if (!contains(defaultKeys, key)) invalid.push(key)
        }, this)
  
        if (invalid.length) throw new Error('Invalid options: ' + invalid.join(', '))
  
        // Merge in default options
        defaultKeys.forEach(function (key) {
          if (!contains(keys, key)) options[key] = RRuleStr.DEFAULT_OPTIONS[key]
        })
  
        return this._parseRfc(s, options)
      }
    }
  
    RRuleStr.prototype._handle_DTSTART = function (rrkwargs, name, value, options) {
      rrkwargs[name.toLowerCase()] = dateutil.untilStringToDate(value)
    }
  
    RRuleStr.prototype._handle_BYDAY = RRuleStr.prototype._handle_BYWEEKDAY
    RRuleStr.prototype._handle_INTERVAL = RRuleStr.prototype._handle_int
    RRuleStr.prototype._handle_COUNT = RRuleStr.prototype._handle_int
  
    ;[
      '_handle_BYSETPOS', '_handle_BYMONTH', '_handle_BYMONTHDAY',
      '_handle_BYYEARDAY', '_handle_BYEASTER', '_handle_BYWEEKNO',
      '_handle_BYHOUR', '_handle_BYMINUTE', '_handle_BYSECOND'
    ].forEach(function (method) {
      RRuleStr.prototype[method] = RRuleStr.prototype._handle_int_list
    })
  
    // =============================================================================
    // Export
    // =============================================================================
  
    // Only one RRuleStr instance for all rrule string parsing work.
    var rruleStr = new RRuleStr()
    var rrulestr = function () {
      return rruleStr.parse.apply(rruleStr, arguments)
    }
  
    RRule.RRule = RRule
    RRule.RRuleSet = RRuleSet
    RRule.rrulestr = rrulestr
    return RRule
  
    function getnlp () {
      // Lazy, runtime import to avoid circular refs.
      if (!getnlp._nlp) {
        if (root && root._getRRuleNLP) {
          getnlp._nlp = root._getRRuleNLP(RRule)
        } else if (true) {
          getnlp._nlp = __webpack_require__("../../../../rrule/lib/nlp.js")(RRule)
        } else {
          throw new Error('You need to include rrule/nlp.js for fromText/toText to work.')
        }
      }
      return getnlp._nlp
    }
  }))
  
  
  /***/ }),
  
  /***/ "../../../../rxjs/Scheduler.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  /**
   * An execution context and a data structure to order tasks and schedule their
   * execution. Provides a notion of (potentially virtual) time, through the
   * `now()` getter method.
   *
   * Each unit of work in a Scheduler is called an {@link Action}.
   *
   * ```ts
   * class Scheduler {
   *   now(): number;
   *   schedule(work, delay?, state?): Subscription;
   * }
   * ```
   *
   * @class Scheduler
   */
  var Scheduler = (function () {
      function Scheduler(SchedulerAction, now) {
          if (now === void 0) { now = Scheduler.now; }
          this.SchedulerAction = SchedulerAction;
          this.now = now;
      }
      /**
       * Schedules a function, `work`, for execution. May happen at some point in
       * the future, according to the `delay` parameter, if specified. May be passed
       * some context object, `state`, which will be passed to the `work` function.
       *
       * The given arguments will be processed an stored as an Action object in a
       * queue of actions.
       *
       * @param {function(state: ?T): ?Subscription} work A function representing a
       * task, or some unit of work to be executed by the Scheduler.
       * @param {number} [delay] Time to wait before executing the work, where the
       * time unit is implicit and defined by the Scheduler itself.
       * @param {T} [state] Some contextual data that the `work` function uses when
       * called by the Scheduler.
       * @return {Subscription} A subscription in order to be able to unsubscribe
       * the scheduled work.
       */
      Scheduler.prototype.schedule = function (work, delay, state) {
          if (delay === void 0) { delay = 0; }
          return new this.SchedulerAction(this, work).schedule(state, delay);
      };
      Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };
      return Scheduler;
  }());
  exports.Scheduler = Scheduler;
  //# sourceMappingURL=Scheduler.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/observable/merge.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var merge_1 = __webpack_require__("../../../../rxjs/observable/merge.js");
  Observable_1.Observable.merge = merge_1.merge;
  //# sourceMappingURL=merge.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/distinctUntilChanged.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var distinctUntilChanged_1 = __webpack_require__("../../../../rxjs/operator/distinctUntilChanged.js");
  Observable_1.Observable.prototype.distinctUntilChanged = distinctUntilChanged_1.distinctUntilChanged;
  //# sourceMappingURL=distinctUntilChanged.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/filter.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var filter_1 = __webpack_require__("../../../../rxjs/operator/filter.js");
  Observable_1.Observable.prototype.filter = filter_1.filter;
  //# sourceMappingURL=filter.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/mergeMap.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var mergeMap_1 = __webpack_require__("../../../../rxjs/operator/mergeMap.js");
  Observable_1.Observable.prototype.mergeMap = mergeMap_1.mergeMap;
  Observable_1.Observable.prototype.flatMap = mergeMap_1.mergeMap;
  //# sourceMappingURL=mergeMap.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/pairwise.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var pairwise_1 = __webpack_require__("../../../../rxjs/operator/pairwise.js");
  Observable_1.Observable.prototype.pairwise = pairwise_1.pairwise;
  //# sourceMappingURL=pairwise.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/takeLast.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var takeLast_1 = __webpack_require__("../../../../rxjs/operator/takeLast.js");
  Observable_1.Observable.prototype.takeLast = takeLast_1.takeLast;
  //# sourceMappingURL=takeLast.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/takeUntil.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var takeUntil_1 = __webpack_require__("../../../../rxjs/operator/takeUntil.js");
  Observable_1.Observable.prototype.takeUntil = takeUntil_1.takeUntil;
  //# sourceMappingURL=takeUntil.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/add/operator/throttle.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var throttle_1 = __webpack_require__("../../../../rxjs/operator/throttle.js");
  Observable_1.Observable.prototype.throttle = throttle_1.throttle;
  //# sourceMappingURL=throttle.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/observable/IntervalObservable.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var isNumeric_1 = __webpack_require__("../../../../rxjs/util/isNumeric.js");
  var Observable_1 = __webpack_require__("../../../../rxjs/Observable.js");
  var async_1 = __webpack_require__("../../../../rxjs/scheduler/async.js");
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @extends {Ignored}
   * @hide true
   */
  var IntervalObservable = (function (_super) {
      __extends(IntervalObservable, _super);
      function IntervalObservable(period, scheduler) {
          if (period === void 0) { period = 0; }
          if (scheduler === void 0) { scheduler = async_1.async; }
          _super.call(this);
          this.period = period;
          this.scheduler = scheduler;
          if (!isNumeric_1.isNumeric(period) || period < 0) {
              this.period = 0;
          }
          if (!scheduler || typeof scheduler.schedule !== 'function') {
              this.scheduler = async_1.async;
          }
      }
      /**
       * Creates an Observable that emits sequential numbers every specified
       * interval of time, on a specified IScheduler.
       *
       * <span class="informal">Emits incremental numbers periodically in time.
       * </span>
       *
       * <img src="./img/interval.png" width="100%">
       *
       * `interval` returns an Observable that emits an infinite sequence of
       * ascending integers, with a constant interval of time of your choosing
       * between those emissions. The first emission is not sent immediately, but
       * only after the first period has passed. By default, this operator uses the
       * `async` IScheduler to provide a notion of time, but you may pass any
       * IScheduler to it.
       *
       * @example <caption>Emits ascending numbers, one every second (1000ms)</caption>
       * var numbers = Rx.Observable.interval(1000);
       * numbers.subscribe(x => console.log(x));
       *
       * @see {@link timer}
       * @see {@link delay}
       *
       * @param {number} [period=0] The interval size in milliseconds (by default)
       * or the time unit determined by the scheduler's clock.
       * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling
       * the emission of values, and providing a notion of "time".
       * @return {Observable} An Observable that emits a sequential number each time
       * interval.
       * @static true
       * @name interval
       * @owner Observable
       */
      IntervalObservable.create = function (period, scheduler) {
          if (period === void 0) { period = 0; }
          if (scheduler === void 0) { scheduler = async_1.async; }
          return new IntervalObservable(period, scheduler);
      };
      IntervalObservable.dispatch = function (state) {
          var index = state.index, subscriber = state.subscriber, period = state.period;
          subscriber.next(index);
          if (subscriber.closed) {
              return;
          }
          state.index += 1;
          this.schedule(state, period);
      };
      IntervalObservable.prototype._subscribe = function (subscriber) {
          var index = 0;
          var period = this.period;
          var scheduler = this.scheduler;
          subscriber.add(scheduler.schedule(IntervalObservable.dispatch, period, {
              index: index, subscriber: subscriber, period: period
          }));
      };
      return IntervalObservable;
  }(Observable_1.Observable));
  exports.IntervalObservable = IntervalObservable;
  //# sourceMappingURL=IntervalObservable.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/observable/interval.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var IntervalObservable_1 = __webpack_require__("../../../../rxjs/observable/IntervalObservable.js");
  exports.interval = IntervalObservable_1.IntervalObservable.create;
  //# sourceMappingURL=interval.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/operator/distinctUntilChanged.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Subscriber_1 = __webpack_require__("../../../../rxjs/Subscriber.js");
  var tryCatch_1 = __webpack_require__("../../../../rxjs/util/tryCatch.js");
  var errorObject_1 = __webpack_require__("../../../../rxjs/util/errorObject.js");
  /* tslint:enable:max-line-length */
  /**
   * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
   *
   * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
   *
   * If a comparator function is not provided, an equality check is used by default.
   *
   * @example <caption>A simple example with numbers</caption>
   * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)
   *   .distinctUntilChanged()
   *   .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
   *
   * @example <caption>An example using a compare function</caption>
   * interface Person {
   *    age: number,
   *    name: string
   * }
   *
   * Observable.of<Person>(
   *     { age: 4, name: 'Foo'},
   *     { age: 7, name: 'Bar'},
   *     { age: 5, name: 'Foo'})
   *     { age: 6, name: 'Foo'})
   *     .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)
   *     .subscribe(x => console.log(x));
   *
   * // displays:
   * // { age: 4, name: 'Foo' }
   * // { age: 7, name: 'Bar' }
   * // { age: 5, name: 'Foo' }
   *
   * @see {@link distinct}
   * @see {@link distinctUntilKeyChanged}
   *
   * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
   * @return {Observable} An Observable that emits items from the source Observable with distinct values.
   * @method distinctUntilChanged
   * @owner Observable
   */
  function distinctUntilChanged(compare, keySelector) {
      return this.lift(new DistinctUntilChangedOperator(compare, keySelector));
  }
  exports.distinctUntilChanged = distinctUntilChanged;
  var DistinctUntilChangedOperator = (function () {
      function DistinctUntilChangedOperator(compare, keySelector) {
          this.compare = compare;
          this.keySelector = keySelector;
      }
      DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
      };
      return DistinctUntilChangedOperator;
  }());
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  var DistinctUntilChangedSubscriber = (function (_super) {
      __extends(DistinctUntilChangedSubscriber, _super);
      function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
          _super.call(this, destination);
          this.keySelector = keySelector;
          this.hasKey = false;
          if (typeof compare === 'function') {
              this.compare = compare;
          }
      }
      DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
          return x === y;
      };
      DistinctUntilChangedSubscriber.prototype._next = function (value) {
          var keySelector = this.keySelector;
          var key = value;
          if (keySelector) {
              key = tryCatch_1.tryCatch(this.keySelector)(value);
              if (key === errorObject_1.errorObject) {
                  return this.destination.error(errorObject_1.errorObject.e);
              }
          }
          var result = false;
          if (this.hasKey) {
              result = tryCatch_1.tryCatch(this.compare)(this.key, key);
              if (result === errorObject_1.errorObject) {
                  return this.destination.error(errorObject_1.errorObject.e);
              }
          }
          else {
              this.hasKey = true;
          }
          if (Boolean(result) === false) {
              this.key = key;
              this.destination.next(value);
          }
      };
      return DistinctUntilChangedSubscriber;
  }(Subscriber_1.Subscriber));
  //# sourceMappingURL=distinctUntilChanged.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/operator/pairwise.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Subscriber_1 = __webpack_require__("../../../../rxjs/Subscriber.js");
  /**
   * Groups pairs of consecutive emissions together and emits them as an array of
   * two values.
   *
   * <span class="informal">Puts the current value and previous value together as
   * an array, and emits that.</span>
   *
   * <img src="./img/pairwise.png" width="100%">
   *
   * The Nth emission from the source Observable will cause the output Observable
   * to emit an array [(N-1)th, Nth] of the previous and the current value, as a
   * pair. For this reason, `pairwise` emits on the second and subsequent
   * emissions from the source Observable, but not on the first emission, because
   * there is no previous value in that case.
   *
   * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>
   * var clicks = Rx.Observable.fromEvent(document, 'click');
   * var pairs = clicks.pairwise();
   * var distance = pairs.map(pair => {
   *   var x0 = pair[0].clientX;
   *   var y0 = pair[0].clientY;
   *   var x1 = pair[1].clientX;
   *   var y1 = pair[1].clientY;
   *   return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
   * });
   * distance.subscribe(x => console.log(x));
   *
   * @see {@link buffer}
   * @see {@link bufferCount}
   *
   * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of
   * consecutive values from the source Observable.
   * @method pairwise
   * @owner Observable
   */
  function pairwise() {
      return this.lift(new PairwiseOperator());
  }
  exports.pairwise = pairwise;
  var PairwiseOperator = (function () {
      function PairwiseOperator() {
      }
      PairwiseOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new PairwiseSubscriber(subscriber));
      };
      return PairwiseOperator;
  }());
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  var PairwiseSubscriber = (function (_super) {
      __extends(PairwiseSubscriber, _super);
      function PairwiseSubscriber(destination) {
          _super.call(this, destination);
          this.hasPrev = false;
      }
      PairwiseSubscriber.prototype._next = function (value) {
          if (this.hasPrev) {
              this.destination.next([this.prev, value]);
          }
          else {
              this.hasPrev = true;
          }
          this.prev = value;
      };
      return PairwiseSubscriber;
  }(Subscriber_1.Subscriber));
  //# sourceMappingURL=pairwise.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/operator/takeLast.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Subscriber_1 = __webpack_require__("../../../../rxjs/Subscriber.js");
  var ArgumentOutOfRangeError_1 = __webpack_require__("../../../../rxjs/util/ArgumentOutOfRangeError.js");
  var EmptyObservable_1 = __webpack_require__("../../../../rxjs/observable/EmptyObservable.js");
  /**
   * Emits only the last `count` values emitted by the source Observable.
   *
   * <span class="informal">Remembers the latest `count` values, then emits those
   * only when the source completes.</span>
   *
   * <img src="./img/takeLast.png" width="100%">
   *
   * `takeLast` returns an Observable that emits at most the last `count` values
   * emitted by the source Observable. If the source emits fewer than `count`
   * values then all of its values are emitted. This operator must wait until the
   * `complete` notification emission from the source in order to emit the `next`
   * values on the output Observable, because otherwise it is impossible to know
   * whether or not more values will be emitted on the source. For this reason,
   * all values are emitted synchronously, followed by the complete notification.
   *
   * @example <caption>Take the last 3 values of an Observable with many values</caption>
   * var many = Rx.Observable.range(1, 100);
   * var lastThree = many.takeLast(3);
   * lastThree.subscribe(x => console.log(x));
   *
   * @see {@link take}
   * @see {@link takeUntil}
   * @see {@link takeWhile}
   * @see {@link skip}
   *
   * @throws {ArgumentOutOfRangeError} When using `takeLast(i)`, it delivers an
   * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
   *
   * @param {number} count The maximum number of values to emit from the end of
   * the sequence of values emitted by the source Observable.
   * @return {Observable<T>} An Observable that emits at most the last count
   * values emitted by the source Observable.
   * @method takeLast
   * @owner Observable
   */
  function takeLast(count) {
      if (count === 0) {
          return new EmptyObservable_1.EmptyObservable();
      }
      else {
          return this.lift(new TakeLastOperator(count));
      }
  }
  exports.takeLast = takeLast;
  var TakeLastOperator = (function () {
      function TakeLastOperator(total) {
          this.total = total;
          if (this.total < 0) {
              throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
          }
      }
      TakeLastOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
      };
      return TakeLastOperator;
  }());
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  var TakeLastSubscriber = (function (_super) {
      __extends(TakeLastSubscriber, _super);
      function TakeLastSubscriber(destination, total) {
          _super.call(this, destination);
          this.total = total;
          this.ring = new Array();
          this.count = 0;
      }
      TakeLastSubscriber.prototype._next = function (value) {
          var ring = this.ring;
          var total = this.total;
          var count = this.count++;
          if (ring.length < total) {
              ring.push(value);
          }
          else {
              var index = count % total;
              ring[index] = value;
          }
      };
      TakeLastSubscriber.prototype._complete = function () {
          var destination = this.destination;
          var count = this.count;
          if (count > 0) {
              var total = this.count >= this.total ? this.total : this.count;
              var ring = this.ring;
              for (var i = 0; i < total; i++) {
                  var idx = (count++) % total;
                  destination.next(ring[idx]);
              }
          }
          destination.complete();
      };
      return TakeLastSubscriber;
  }(Subscriber_1.Subscriber));
  //# sourceMappingURL=takeLast.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/operator/takeUntil.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var OuterSubscriber_1 = __webpack_require__("../../../../rxjs/OuterSubscriber.js");
  var subscribeToResult_1 = __webpack_require__("../../../../rxjs/util/subscribeToResult.js");
  /**
   * Emits the values emitted by the source Observable until a `notifier`
   * Observable emits a value.
   *
   * <span class="informal">Lets values pass until a second Observable,
   * `notifier`, emits something. Then, it completes.</span>
   *
   * <img src="./img/takeUntil.png" width="100%">
   *
   * `takeUntil` subscribes and begins mirroring the source Observable. It also
   * monitors a second Observable, `notifier` that you provide. If the `notifier`
   * emits a value or a complete notification, the output Observable stops
   * mirroring the source Observable and completes.
   *
   * @example <caption>Tick every second until the first click happens</caption>
   * var interval = Rx.Observable.interval(1000);
   * var clicks = Rx.Observable.fromEvent(document, 'click');
   * var result = interval.takeUntil(clicks);
   * result.subscribe(x => console.log(x));
   *
   * @see {@link take}
   * @see {@link takeLast}
   * @see {@link takeWhile}
   * @see {@link skip}
   *
   * @param {Observable} notifier The Observable whose first emitted value will
   * cause the output Observable of `takeUntil` to stop emitting values from the
   * source Observable.
   * @return {Observable<T>} An Observable that emits the values from the source
   * Observable until such time as `notifier` emits its first value.
   * @method takeUntil
   * @owner Observable
   */
  function takeUntil(notifier) {
      return this.lift(new TakeUntilOperator(notifier));
  }
  exports.takeUntil = takeUntil;
  var TakeUntilOperator = (function () {
      function TakeUntilOperator(notifier) {
          this.notifier = notifier;
      }
      TakeUntilOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));
      };
      return TakeUntilOperator;
  }());
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  var TakeUntilSubscriber = (function (_super) {
      __extends(TakeUntilSubscriber, _super);
      function TakeUntilSubscriber(destination, notifier) {
          _super.call(this, destination);
          this.notifier = notifier;
          this.add(subscribeToResult_1.subscribeToResult(this, notifier));
      }
      TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
          this.complete();
      };
      TakeUntilSubscriber.prototype.notifyComplete = function () {
          // noop
      };
      return TakeUntilSubscriber;
  }(OuterSubscriber_1.OuterSubscriber));
  //# sourceMappingURL=takeUntil.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/operator/throttle.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var OuterSubscriber_1 = __webpack_require__("../../../../rxjs/OuterSubscriber.js");
  var subscribeToResult_1 = __webpack_require__("../../../../rxjs/util/subscribeToResult.js");
  exports.defaultThrottleConfig = {
      leading: true,
      trailing: false
  };
  /**
   * Emits a value from the source Observable, then ignores subsequent source
   * values for a duration determined by another Observable, then repeats this
   * process.
   *
   * <span class="informal">It's like {@link throttleTime}, but the silencing
   * duration is determined by a second Observable.</span>
   *
   * <img src="./img/throttle.png" width="100%">
   *
   * `throttle` emits the source Observable values on the output Observable
   * when its internal timer is disabled, and ignores source values when the timer
   * is enabled. Initially, the timer is disabled. As soon as the first source
   * value arrives, it is forwarded to the output Observable, and then the timer
   * is enabled by calling the `durationSelector` function with the source value,
   * which returns the "duration" Observable. When the duration Observable emits a
   * value or completes, the timer is disabled, and this process repeats for the
   * next source value.
   *
   * @example <caption>Emit clicks at a rate of at most one click per second</caption>
   * var clicks = Rx.Observable.fromEvent(document, 'click');
   * var result = clicks.throttle(ev => Rx.Observable.interval(1000));
   * result.subscribe(x => console.log(x));
   *
   * @see {@link audit}
   * @see {@link debounce}
   * @see {@link delayWhen}
   * @see {@link sample}
   * @see {@link throttleTime}
   *
   * @param {function(value: T): SubscribableOrPromise} durationSelector A function
   * that receives a value from the source Observable, for computing the silencing
   * duration for each source value, returned as an Observable or a Promise.
   * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults
   * to `{ leading: true, trailing: false }`.
   * @return {Observable<T>} An Observable that performs the throttle operation to
   * limit the rate of emissions from the source.
   * @method throttle
   * @owner Observable
   */
  function throttle(durationSelector, config) {
      if (config === void 0) { config = exports.defaultThrottleConfig; }
      return this.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing));
  }
  exports.throttle = throttle;
  var ThrottleOperator = (function () {
      function ThrottleOperator(durationSelector, leading, trailing) {
          this.durationSelector = durationSelector;
          this.leading = leading;
          this.trailing = trailing;
      }
      ThrottleOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
      };
      return ThrottleOperator;
  }());
  /**
   * We need this JSDoc comment for affecting ESDoc
   * @ignore
   * @extends {Ignored}
   */
  var ThrottleSubscriber = (function (_super) {
      __extends(ThrottleSubscriber, _super);
      function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
          _super.call(this, destination);
          this.destination = destination;
          this.durationSelector = durationSelector;
          this._leading = _leading;
          this._trailing = _trailing;
          this._hasTrailingValue = false;
      }
      ThrottleSubscriber.prototype._next = function (value) {
          if (this.throttled) {
              if (this._trailing) {
                  this._hasTrailingValue = true;
                  this._trailingValue = value;
              }
          }
          else {
              var duration = this.tryDurationSelector(value);
              if (duration) {
                  this.add(this.throttled = subscribeToResult_1.subscribeToResult(this, duration));
              }
              if (this._leading) {
                  this.destination.next(value);
                  if (this._trailing) {
                      this._hasTrailingValue = true;
                      this._trailingValue = value;
                  }
              }
          }
      };
      ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
          try {
              return this.durationSelector(value);
          }
          catch (err) {
              this.destination.error(err);
              return null;
          }
      };
      ThrottleSubscriber.prototype._unsubscribe = function () {
          var _a = this, throttled = _a.throttled, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue, _trailing = _a._trailing;
          this._trailingValue = null;
          this._hasTrailingValue = false;
          if (throttled) {
              this.remove(throttled);
              this.throttled = null;
              throttled.unsubscribe();
          }
      };
      ThrottleSubscriber.prototype._sendTrailing = function () {
          var _a = this, destination = _a.destination, throttled = _a.throttled, _trailing = _a._trailing, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue;
          if (throttled && _trailing && _hasTrailingValue) {
              destination.next(_trailingValue);
              this._trailingValue = null;
              this._hasTrailingValue = false;
          }
      };
      ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
          this._sendTrailing();
          this._unsubscribe();
      };
      ThrottleSubscriber.prototype.notifyComplete = function () {
          this._sendTrailing();
          this._unsubscribe();
      };
      return ThrottleSubscriber;
  }(OuterSubscriber_1.OuterSubscriber));
  //# sourceMappingURL=throttle.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/scheduler/Action.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Subscription_1 = __webpack_require__("../../../../rxjs/Subscription.js");
  /**
   * A unit of work to be executed in a {@link Scheduler}. An action is typically
   * created from within a Scheduler and an RxJS user does not need to concern
   * themselves about creating and manipulating an Action.
   *
   * ```ts
   * class Action<T> extends Subscription {
   *   new (scheduler: Scheduler, work: (state?: T) => void);
   *   schedule(state?: T, delay: number = 0): Subscription;
   * }
   * ```
   *
   * @class Action<T>
   */
  var Action = (function (_super) {
      __extends(Action, _super);
      function Action(scheduler, work) {
          _super.call(this);
      }
      /**
       * Schedules this action on its parent Scheduler for execution. May be passed
       * some context object, `state`. May happen at some point in the future,
       * according to the `delay` parameter, if specified.
       * @param {T} [state] Some contextual data that the `work` function uses when
       * called by the Scheduler.
       * @param {number} [delay] Time to wait before executing the work, where the
       * time unit is implicit and defined by the Scheduler.
       * @return {void}
       */
      Action.prototype.schedule = function (state, delay) {
          if (delay === void 0) { delay = 0; }
          return this;
      };
      return Action;
  }(Subscription_1.Subscription));
  exports.Action = Action;
  //# sourceMappingURL=Action.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/scheduler/AsyncAction.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var root_1 = __webpack_require__("../../../../rxjs/util/root.js");
  var Action_1 = __webpack_require__("../../../../rxjs/scheduler/Action.js");
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  var AsyncAction = (function (_super) {
      __extends(AsyncAction, _super);
      function AsyncAction(scheduler, work) {
          _super.call(this, scheduler, work);
          this.scheduler = scheduler;
          this.work = work;
          this.pending = false;
      }
      AsyncAction.prototype.schedule = function (state, delay) {
          if (delay === void 0) { delay = 0; }
          if (this.closed) {
              return this;
          }
          // Always replace the current state with the new state.
          this.state = state;
          // Set the pending flag indicating that this action has been scheduled, or
          // has recursively rescheduled itself.
          this.pending = true;
          var id = this.id;
          var scheduler = this.scheduler;
          //
          // Important implementation note:
          //
          // Actions only execute once by default, unless rescheduled from within the
          // scheduled callback. This allows us to implement single and repeat
          // actions via the same code path, without adding API surface area, as well
          // as mimic traditional recursion but across asynchronous boundaries.
          //
          // However, JS runtimes and timers distinguish between intervals achieved by
          // serial `setTimeout` calls vs. a single `setInterval` call. An interval of
          // serial `setTimeout` calls can be individually delayed, which delays
          // scheduling the next `setTimeout`, and so on. `setInterval` attempts to
          // guarantee the interval callback will be invoked more precisely to the
          // interval period, regardless of load.
          //
          // Therefore, we use `setInterval` to schedule single and repeat actions.
          // If the action reschedules itself with the same delay, the interval is not
          // canceled. If the action doesn't reschedule, or reschedules with a
          // different delay, the interval will be canceled after scheduled callback
          // execution.
          //
          if (id != null) {
              this.id = this.recycleAsyncId(scheduler, id, delay);
          }
          this.delay = delay;
          // If this action has already an async Id, don't request a new one.
          this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
          return this;
      };
      AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
          if (delay === void 0) { delay = 0; }
          return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);
      };
      AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
          if (delay === void 0) { delay = 0; }
          // If this action is rescheduled with the same delay time, don't clear the interval id.
          if (delay !== null && this.delay === delay && this.pending === false) {
              return id;
          }
          // Otherwise, if the action's delay time is different from the current delay,
          // or the action has been rescheduled before it's executed, clear the interval id
          return root_1.root.clearInterval(id) && undefined || undefined;
      };
      /**
       * Immediately executes this action and the `work` it contains.
       * @return {any}
       */
      AsyncAction.prototype.execute = function (state, delay) {
          if (this.closed) {
              return new Error('executing a cancelled action');
          }
          this.pending = false;
          var error = this._execute(state, delay);
          if (error) {
              return error;
          }
          else if (this.pending === false && this.id != null) {
              // Dequeue if the action didn't reschedule itself. Don't call
              // unsubscribe(), because the action could reschedule later.
              // For example:
              // ```
              // scheduler.schedule(function doWork(counter) {
              //   /* ... I'm a busy worker bee ... */
              //   var originalAction = this;
              //   /* wait 100ms before rescheduling the action */
              //   setTimeout(function () {
              //     originalAction.schedule(counter + 1);
              //   }, 100);
              // }, 1000);
              // ```
              this.id = this.recycleAsyncId(this.scheduler, this.id, null);
          }
      };
      AsyncAction.prototype._execute = function (state, delay) {
          var errored = false;
          var errorValue = undefined;
          try {
              this.work(state);
          }
          catch (e) {
              errored = true;
              errorValue = !!e && e || new Error(e);
          }
          if (errored) {
              this.unsubscribe();
              return errorValue;
          }
      };
      AsyncAction.prototype._unsubscribe = function () {
          var id = this.id;
          var scheduler = this.scheduler;
          var actions = scheduler.actions;
          var index = actions.indexOf(this);
          this.work = null;
          this.state = null;
          this.pending = false;
          this.scheduler = null;
          if (index !== -1) {
              actions.splice(index, 1);
          }
          if (id != null) {
              this.id = this.recycleAsyncId(scheduler, id, null);
          }
          this.delay = null;
      };
      return AsyncAction;
  }(Action_1.Action));
  exports.AsyncAction = AsyncAction;
  //# sourceMappingURL=AsyncAction.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/scheduler/AsyncScheduler.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Scheduler_1 = __webpack_require__("../../../../rxjs/Scheduler.js");
  var AsyncScheduler = (function (_super) {
      __extends(AsyncScheduler, _super);
      function AsyncScheduler() {
          _super.apply(this, arguments);
          this.actions = [];
          /**
           * A flag to indicate whether the Scheduler is currently executing a batch of
           * queued actions.
           * @type {boolean}
           */
          this.active = false;
          /**
           * An internal ID used to track the latest asynchronous task such as those
           * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and
           * others.
           * @type {any}
           */
          this.scheduled = undefined;
      }
      AsyncScheduler.prototype.flush = function (action) {
          var actions = this.actions;
          if (this.active) {
              actions.push(action);
              return;
          }
          var error;
          this.active = true;
          do {
              if (error = action.execute(action.state, action.delay)) {
                  break;
              }
          } while (action = actions.shift()); // exhaust the scheduler queue
          this.active = false;
          if (error) {
              while (action = actions.shift()) {
                  action.unsubscribe();
              }
              throw error;
          }
      };
      return AsyncScheduler;
  }(Scheduler_1.Scheduler));
  exports.AsyncScheduler = AsyncScheduler;
  //# sourceMappingURL=AsyncScheduler.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/scheduler/async.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var AsyncAction_1 = __webpack_require__("../../../../rxjs/scheduler/AsyncAction.js");
  var AsyncScheduler_1 = __webpack_require__("../../../../rxjs/scheduler/AsyncScheduler.js");
  /**
   *
   * Async Scheduler
   *
   * <span class="informal">Schedule task as if you used setTimeout(task, duration)</span>
   *
   * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript
   * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating
   * in intervals.
   *
   * If you just want to "defer" task, that is to perform it right after currently
   * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),
   * better choice will be the {@link asap} scheduler.
   *
   * @example <caption>Use async scheduler to delay task</caption>
   * const task = () => console.log('it works!');
   *
   * Rx.Scheduler.async.schedule(task, 2000);
   *
   * // After 2 seconds logs:
   * // "it works!"
   *
   *
   * @example <caption>Use async scheduler to repeat task in intervals</caption>
   * function task(state) {
   *   console.log(state);
   *   this.schedule(state + 1, 1000); // `this` references currently executing Action,
   *                                   // which we reschedule with new state and delay
   * }
   *
   * Rx.Scheduler.async.schedule(task, 3000, 0);
   *
   * // Logs:
   * // 0 after 3s
   * // 1 after 4s
   * // 2 after 5s
   * // 3 after 6s
   *
   * @static true
   * @name async
   * @owner Scheduler
   */
  exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
  //# sourceMappingURL=async.js.map
  
  /***/ }),
  
  /***/ "../../../../rxjs/util/isNumeric.js":
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var isArray_1 = __webpack_require__("../../../../rxjs/util/isArray.js");
  function isNumeric(val) {
      // parseFloat NaNs numeric-cast false positives (null|true|false|"")
      // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
      // subtraction forces infinities to NaN
      // adding 1 corrects loss of precision from parseFloat (#15100)
      return !isArray_1.isArray(val) && (val - parseFloat(val) + 1) >= 0;
  }
  exports.isNumeric = isNumeric;
  ;
  //# sourceMappingURL=isNumeric.js.map
  
  /***/ })
  
  });
  //# sourceMappingURL=common.chunk.js.map