{"version":3,"file":"angular-md2-datepicker.mjs","sources":["../../../projects/angular-md/src/lib/core/compatibility/compatibility.ts","../../../projects/angular-md/src/lib/core/common-behaviors/common-module.ts","../../../projects/angular-md/src/lib/core/line/line.ts","../../../projects/angular-md/src/lib/core/rtl/dir.ts","../../../projects/angular-md/src/lib/core/observe-content/observe-content.ts","../../../projects/angular-md/src/lib/core/ripple/ripple-ref.ts","../../../projects/angular-md/src/lib/core/ripple/ripple-renderer.ts","../../../projects/angular-md/src/lib/core/platform/platform.ts","../../../projects/angular-md/src/lib/core/platform/features.ts","../../../projects/angular-md/src/lib/core/platform/index.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/scroll-dispatcher.ts","../../../projects/angular-md/src/lib/core/overlay/position/viewport-ruler.ts","../../../projects/angular-md/src/lib/core/ripple/ripple.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/scrollable.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/scroll-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/close-scroll-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/noop-scroll-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/block-scroll-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/reposition-scroll-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/scroll-strategy-options.ts","../../../projects/angular-md/src/lib/core/overlay/scroll/index.ts","../../../projects/angular-md/src/lib/core/ripple/index.ts","../../../projects/angular-md/src/lib/core/common-behaviors/color.ts","../../../projects/angular-md/src/lib/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../projects/angular-md/src/lib/core/selection/index.ts","../../../projects/angular-md/src/lib/core/keyboard/keycodes.ts","../../../projects/angular-md/src/lib/core/coercion/boolean-property.ts","../../../projects/angular-md/src/lib/core/common-behaviors/disabled.ts","../../../projects/angular-md/src/lib/core/option/optgroup.ts","../../../projects/angular-md/src/lib/core/option/optgroup.html","../../../projects/angular-md/src/lib/core/option/option.ts","../../../projects/angular-md/src/lib/core/option/option.html","../../../projects/angular-md/src/lib/core/option/index.ts","../../../projects/angular-md/src/lib/core/portal/portal-errors.ts","../../../projects/angular-md/src/lib/core/portal/portal.ts","../../../projects/angular-md/src/lib/core/portal/portal-directives.ts","../../../projects/angular-md/src/lib/core/overlay/overlay-state.ts","../../../projects/angular-md/src/lib/core/portal/dom-portal-host.ts","../../../projects/angular-md/src/lib/core/overlay/overlay-ref.ts","../../../projects/angular-md/src/lib/core/overlay/position/connected-position.ts","../../../projects/angular-md/src/lib/core/overlay/position/connected-position-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/position/global-position-strategy.ts","../../../projects/angular-md/src/lib/core/overlay/position/overlay-position-builder.ts","../../../projects/angular-md/src/lib/core/overlay/overlay-container.ts","../../../projects/angular-md/src/lib/core/overlay/overlay.ts","../../../projects/angular-md/src/lib/core/overlay/overlay-directives.ts","../../../projects/angular-md/src/lib/core/a11y/interactivity-checker.ts","../../../projects/angular-md/src/lib/core/a11y/focus-trap.ts","../../../projects/angular-md/src/lib/core/a11y/live-announcer.ts","../../../projects/angular-md/src/lib/core/a11y/index.ts","../../../projects/angular-md/src/lib/core/overlay/fullscreen-overlay-container.ts","../../../projects/angular-md/src/lib/core/gestures/gesture-config.ts","../../../projects/angular-md/src/lib/core/selection/selection.ts","../../../projects/angular-md/src/lib/core/a11y/fake-mousedown.ts","../../../projects/angular-md/src/lib/core/coordination/unique-selection-dispatcher.ts","../../../projects/angular-md/src/lib/core/style/focus-origin-monitor.ts","../../../projects/angular-md/src/lib/core/style/apply-transform.ts","../../../projects/angular-md/src/lib/core/style/index.ts","../../../projects/angular-md/src/lib/core/animation/animation.ts","../../../projects/angular-md/src/lib/core/coercion/number-property.ts","../../../projects/angular-md/src/lib/core/datetime/date-adapter.ts","../../../projects/angular-md/src/lib/core/datetime/native-date-adapter.ts","../../../projects/angular-md/src/lib/core/datetime/date-formats.ts","../../../projects/angular-md/src/lib/core/datetime/native-date-formats.ts","../../../projects/angular-md/src/lib/core/datetime/index.ts","../../../projects/angular-md/src/lib/core/placeholder/placeholder-options.ts","../../../projects/angular-md/src/lib/core/core.ts","../../../projects/angular-md/src/lib/accordion/accordion.ts","../../../projects/angular-md/src/lib/accordion/accordiontab.ts","../../../projects/angular-md/src/lib/accordion/index.ts","../../../projects/angular-md/src/lib/autocomplete/autocomplete-pipe.ts","../../../projects/angular-md/src/lib/autocomplete/autocomplete.ts","../../../projects/angular-md/src/lib/autocomplete/autocomplete.html","../../../projects/angular-md/src/lib/autocomplete/index.ts","../../../projects/angular-md/src/lib/chips/chips.ts","../../../projects/angular-md/src/lib/chips/chips.html","../../../projects/angular-md/src/lib/collapse/collapse.ts","../../../projects/angular-md/src/lib/collapse/index.ts","../../../projects/angular-md/src/lib/colorpicker/color-util.ts","../../../projects/angular-md/src/lib/colorpicker/colorpicker.ts","../../../projects/angular-md/src/lib/colorpicker/colorpicker.html","../../../projects/angular-md/src/lib/colorpicker/index.ts","../../../projects/angular-md/src/lib/select/optgroup.ts","../../../projects/angular-md/src/lib/select/optgroup.html","../../../projects/angular-md/src/lib/select/option.ts","../../../projects/angular-md/src/lib/core/a11y/list-key-manager.ts","../../../projects/angular-md/src/lib/core/a11y/focus-key-manager.ts","../../../projects/angular-md/src/lib/select/select-animations.ts","../../../projects/angular-md/src/lib/select/select-errors.ts","../../../projects/angular-md/src/lib/select/select.ts","../../../projects/angular-md/src/lib/select/select.html","../../../projects/angular-md/src/lib/select/select-header.ts","../../../projects/angular-md/src/lib/select/index.ts","../../../projects/angular-md/src/lib/data-table/data-table.ts","../../../projects/angular-md/src/lib/data-table/sort.html","../../../projects/angular-md/src/lib/data-table/pagination.html","../../../projects/angular-md/src/lib/datepicker/datepicker-animations.ts","../../../projects/angular-md/src/lib/datepicker/date-locale.ts","../../../projects/angular-md/src/lib/datepicker/date-util.ts","../../../projects/angular-md/src/lib/datepicker/calendar-body.ts","../../../projects/angular-md/src/lib/datepicker/calendar-body.html","../../../projects/angular-md/src/lib/datepicker/month-view.ts","../../../projects/angular-md/src/lib/datepicker/month-view.html","../../../projects/angular-md/src/lib/datepicker/year-view.ts","../../../projects/angular-md/src/lib/datepicker/year-view.html","../../../projects/angular-md/src/lib/datepicker/clock.ts","../../../projects/angular-md/src/lib/datepicker/clock.html","../../../projects/angular-md/src/lib/datepicker/calendar.ts","../../../projects/angular-md/src/lib/datepicker/calendar.html","../../../projects/angular-md/src/lib/datepicker/datepicker.ts","../../../projects/angular-md/src/lib/datepicker/datepicker-content.html","../../../projects/angular-md/src/lib/datepicker/datepicker.html","../../../projects/angular-md/src/lib/datepicker/datepicker-toggle.ts","../../../projects/angular-md/src/lib/datepicker/index.ts","../../../projects/angular-md/src/lib/core/util/object-extend.ts","../../../projects/angular-md/src/lib/dialog/dialog.ts","../../../projects/angular-md/src/lib/dialog/dialog.html","../../../projects/angular-md/src/lib/dialog/index.ts","../../../projects/angular-md/src/lib/menu/menu-content.ts","../../../projects/angular-md/src/lib/menu/menu-item.ts","../../../projects/angular-md/src/lib/menu/menu-trigger.ts","../../../projects/angular-md/src/lib/menu/menu.ts","../../../projects/angular-md/src/lib/tabs/tabs.ts","../../../projects/angular-md/src/lib/tabs/tabs.html","../../../projects/angular-md/src/lib/tags/tags.ts","../../../projects/angular-md/src/lib/tags/tags.html","../../../projects/angular-md/src/lib/tags/index.ts","../../../projects/angular-md/src/lib/toast/toast.ts","../../../projects/angular-md/src/lib/toast/toast.html","../../../projects/angular-md/src/lib/toast/index.ts","../../../projects/angular-md/src/lib/tooltip/tooltip.ts","../../../projects/angular-md/src/lib/tooltip/tooltip.html","../../../projects/angular-md/src/lib/tooltip/index.ts","../../../projects/angular-md/src/lib/md.module.ts","../../../projects/angular-md/src/public_api.ts","../../../projects/angular-md/src/angular-md2-datepicker.ts"],"sourcesContent":["import {NgModule, Directive, Inject, Optional, ElementRef, InjectionToken} from '@angular/core';\r\n\r\nexport const MATERIAL_COMPATIBILITY_MODE = new InjectionToken<boolean>('md-compatibility-mode');\r\n\r\n/**\r\n * Returns an exception to be thrown if the consumer has used\r\n * an invalid Material prefix on a component.\r\n * @docs-private\r\n */\r\nexport function getMdCompatibilityInvalidPrefixError(prefix: string, nodeName: string) {\r\n  return Error(`The \"${prefix}-\" prefix cannot be used in ng-material v1 compatibility mode. ` +\r\n                   `It was used on an \"${nodeName.toLowerCase()}\" element.`);\r\n}\r\n\r\n/** Selector that matches all elements that may have style collisions with AngularJS Material. */\r\nexport const MAT_ELEMENTS_SELECTOR = `\r\n  [mat-button],\r\n  [mat-fab],\r\n  [mat-icon-button],\r\n  [mat-mini-fab],\r\n  [mat-raised-button],\r\n  [matCardSubtitle],\r\n  [matCardTitle],\r\n  [matDialogActions],\r\n  [matDialogClose],\r\n  [matDialogContent],\r\n  [matDialogTitle],\r\n  [matLine],\r\n  [matTabLabel],\r\n  [matTabLink],\r\n  [matTabNav],\r\n  [matTooltip],\r\n  mat-autocomplete,\r\n  mat-button-toggle,\r\n  mat-button-toggle,\r\n  mat-button-toggle-group,\r\n  mat-card,\r\n  mat-card-actions,\r\n  mat-card-content,\r\n  mat-card-footer,\r\n  mat-card-header,\r\n  mat-card-subtitle,\r\n  mat-card-title,\r\n  mat-card-title-group,\r\n  mat-checkbox,\r\n  mat-chip,\r\n  mat-dialog-actions,\r\n  mat-dialog-container,\r\n  mat-dialog-content,\r\n  mat-divider,\r\n  mat-error,\r\n  mat-grid-list,\r\n  mat-grid-tile,\r\n  mat-grid-tile-footer,\r\n  mat-grid-tile-header,\r\n  mat-hint,\r\n  mat-icon,\r\n  mat-list,\r\n  mat-list-item,\r\n  mat-menu,\r\n  mat-nav-list,\r\n  mat-option,\r\n  mat-placeholder,\r\n  mat-progress-bar,\r\n  mat-pseudo-checkbox,\r\n  mat-radio-button,\r\n  mat-radio-group,\r\n  mat-select,\r\n  mat-sidenav,\r\n  mat-sidenav-container,\r\n  mat-slider,\r\n  mat-spinner,\r\n  mat-tab,\r\n  mat-tab-group,\r\n  mat-toolbar`;\r\n\r\n/** Selector that matches all elements that may have style collisions with AngularJS Material. */\r\nexport const MD_ELEMENTS_SELECTOR = `\r\n  [md-button],\r\n  [md-fab],\r\n  [md-icon-button],\r\n  [md-mini-fab],\r\n  [md-raised-button],\r\n  [mdCardSubtitle],\r\n  [mdCardTitle],\r\n  [mdDialogActions],\r\n  [mdDialogClose],\r\n  [mdDialogContent],\r\n  [mdDialogTitle],\r\n  [mdLine],\r\n  [mdTabLabel],\r\n  [mdTabLink],\r\n  [mdTabNav],\r\n  [mdTooltip],\r\n  md-autocomplete,\r\n  md-button-toggle,\r\n  md-button-toggle,\r\n  md-button-toggle-group,\r\n  md-card,\r\n  md-card-actions,\r\n  md-card-content,\r\n  md-card-footer,\r\n  md-card-header,\r\n  md-card-subtitle,\r\n  md-card-title,\r\n  md-card-title-group,\r\n  md-checkbox,\r\n  md-chip,\r\n  md-dialog-actions,\r\n  md-dialog-container,\r\n  md-dialog-content,\r\n  md-divider,\r\n  md-error,\r\n  md-grid-list,\r\n  md-grid-tile,\r\n  md-grid-tile-footer,\r\n  md-grid-tile-header,\r\n  md-hint,\r\n  md-icon,\r\n  md-list,\r\n  md-list-item,\r\n  md-menu,\r\n  md-nav-list,\r\n  md-option,\r\n  md-placeholder,\r\n  md-progress-bar,\r\n  md-pseudo-checkbox,\r\n  md-radio-button,\r\n  md-radio-group,\r\n  md-select,\r\n  md-sidenav,\r\n  md-sidenav-container,\r\n  md-slider,\r\n  md-spinner,\r\n  md-tab,\r\n  md-tab-group,\r\n  md-toolbar`;\r\n\r\n/** Directive that enforces that the `mat-` prefix cannot be used. */\r\n@Directive({selector: MAT_ELEMENTS_SELECTOR})\r\nexport class MatPrefixRejector {\r\n  constructor(\r\n    @Optional() @Inject(MATERIAL_COMPATIBILITY_MODE) isCompatibilityMode: boolean,\r\n    elementRef: ElementRef) {\r\n\r\n    if (!isCompatibilityMode) {\r\n      throw getMdCompatibilityInvalidPrefixError('mat', elementRef.nativeElement.nodeName);\r\n    }\r\n  }\r\n}\r\n\r\n/** Directive that enforces that the `md-` prefix cannot be used. */\r\n@Directive({selector: MD_ELEMENTS_SELECTOR})\r\nexport class MdPrefixRejector {\r\n  constructor(\r\n    @Optional() @Inject(MATERIAL_COMPATIBILITY_MODE) isCompatibilityMode: boolean,\r\n    elementRef: ElementRef) {\r\n\r\n    if (isCompatibilityMode) {\r\n      throw getMdCompatibilityInvalidPrefixError('md', elementRef.nativeElement.nodeName);\r\n    }\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Module that enforces the default compatibility mode settings. When this module is loaded\r\n * without NoConflictStyleCompatibilityMode also being imported, it will throw an error if\r\n * there are any uses of the `mat-` prefix.\r\n */\r\n@NgModule({\r\n  declarations: [MatPrefixRejector, MdPrefixRejector],\r\n  exports: [MatPrefixRejector, MdPrefixRejector],\r\n})\r\nexport class CompatibilityModule {}\r\n\r\n\r\n/**\r\n * Module that enforces \"no-conflict\" compatibility mode settings. When this module is loaded,\r\n * it will throw an error if there are any uses of the `md-` prefix.\r\n */\r\n@NgModule({\r\n  providers: [{\r\n    provide: MATERIAL_COMPATIBILITY_MODE, useValue: true,\r\n  }],\r\n})\r\nexport class NoConflictStyleCompatibilityMode {}\r\n","import {NgModule, InjectionToken, Optional, Inject, isDevMode} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {CompatibilityModule} from '../compatibility/compatibility';\r\n\r\n\r\n/** Injection token that configures whether the Material sanity checks are enabled. */\r\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<boolean>('md-sanity-checks');\r\n\r\n\r\n/**\r\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\r\n * components. This includes Bidi, compatibility mode, etc.\r\n *\r\n * This module should be imported to each top-level component module (e.g., MdTabsModule).\r\n */\r\n@NgModule({\r\n  imports: [CompatibilityModule],\r\n  exports: [CompatibilityModule],\r\n  providers: [{\r\n    provide: MATERIAL_SANITY_CHECKS, useValue: true,\r\n  }],\r\n})\r\nexport class MdCommonModule {\r\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\r\n  private _hasDoneGlobalChecks = false;\r\n\r\n  constructor(\r\n    @Optional() @Inject(DOCUMENT) private _document: any,\r\n    @Optional() @Inject(MATERIAL_SANITY_CHECKS) _sanityChecksEnabled: boolean) {\r\n\r\n    if (_sanityChecksEnabled && !this._hasDoneGlobalChecks && _document && isDevMode()) {\r\n      this._checkDoctype();\r\n      this._checkTheme();\r\n      this._hasDoneGlobalChecks = true;\r\n    }\r\n  }\r\n\r\n  private _checkDoctype(): void {\r\n    if (!this._document.doctype) {\r\n      console.warn(\r\n        'Current document does not have a doctype. This may cause ' +\r\n        'some Angular Material components not to behave as expected.'\r\n      );\r\n    }\r\n  }\r\n\r\n  private _checkTheme(): void {\r\n    if (typeof getComputedStyle === 'function') {\r\n      const testElement = this._document.createElement('div');\r\n\r\n      testElement.classList.add('mat-theme-loaded-marker');\r\n      this._document.body.appendChild(testElement);\r\n\r\n      if (getComputedStyle(testElement).display !== 'none') {\r\n        console.warn(\r\n          'Could not find Angular Material core theme. Most Material ' +\r\n          'components may not work as expected. For more info refer ' +\r\n          'to the theming guide: https://material.angular.io/guide/theming'\r\n        );\r\n      }\r\n\r\n      this._document.body.removeChild(testElement);\r\n    }\r\n  }\r\n}\r\n","import {\r\n  NgModule,\r\n  Directive,\r\n  Renderer2,\r\n  ElementRef,\r\n  QueryList,\r\n} from '@angular/core';\r\nimport {MdCommonModule} from '../common-behaviors/common-module';\r\n\r\n\r\n/**\r\n * Shared directive to count lines inside a text area, such as a list item.\r\n * Line elements can be extracted with a @ContentChildren(MdLine) query, then\r\n * counted by checking the query list's length.\r\n */\r\n@Directive({\r\n  selector: '[md-line], [mat-line], [mdLine], [matLine]',\r\n  host: {'class': 'mat-line'}\r\n})\r\nexport class MdLine {}\r\n\r\n/**\r\n * Helper that takes a query list of lines and sets the correct class on the host.\r\n * @docs-private\r\n */\r\nexport class MdLineSetter {\r\n  constructor(private _lines: QueryList<MdLine>, private _renderer: Renderer2,\r\n              private _element: ElementRef) {\r\n    this._setLineClass(this._lines.length);\r\n\r\n    this._lines.changes.subscribe(() => {\r\n      this._setLineClass(this._lines.length);\r\n    });\r\n  }\r\n\r\n  private _setLineClass(count: number): void {\r\n    this._resetClasses();\r\n    if (count === 2 || count === 3) {\r\n      this._setClass(`mat-${count}-line`, true);\r\n    } else if (count > 3) {\r\n      this._setClass(`mat-multi-line`, true);\r\n    }\r\n  }\r\n\r\n  private _resetClasses(): void {\r\n    this._setClass('mat-2-line', false);\r\n    this._setClass('mat-3-line', false);\r\n    this._setClass('mat-multi-line', false);\r\n  }\r\n\r\n  private _setClass(className: string, isAdd: boolean): void {\r\n    if (isAdd) {\r\n      this._renderer.addClass(this._element.nativeElement, className);\r\n    } else {\r\n      this._renderer.removeClass(this._element.nativeElement, className);\r\n    }\r\n  }\r\n\r\n}\r\n\r\n@NgModule({\r\n  imports: [MdCommonModule],\r\n  exports: [MdLine, MdCommonModule],\r\n  declarations: [MdLine],\r\n})\r\nexport class MdLineModule { }\r\n","import {\r\n  NgModule,\r\n  Directive,\r\n  HostBinding,\r\n  Output,\r\n  Input,\r\n  EventEmitter\r\n} from '@angular/core';\r\n\r\nexport type LayoutDirection = 'ltr' | 'rtl';\r\n\r\n/**\r\n * Directive to listen for changes of direction of part of the DOM.\r\n *\r\n * Applications should use this directive instead of the native attribute so that Material\r\n * components can listen on changes of direction.\r\n */\r\n@Directive({\r\n  selector: '[dir]',\r\n  // TODO(hansl): maybe `$implicit` isn't the best option here, but for now that's the best we got.\r\n  exportAs: '$implicit'\r\n})\r\nexport class Dir {\r\n  /** Layout direction of the element. */\r\n  @Input('dir') _dir: LayoutDirection = 'ltr';\r\n\r\n  /** Event emitted when the direction changes. */\r\n  @Output() dirChange = new EventEmitter<void>();\r\n\r\n  /** @docs-private */\r\n  @HostBinding('attr.dir')\r\n  get dir(): LayoutDirection {\r\n    return this._dir;\r\n  }\r\n  set dir(v: LayoutDirection) {\r\n    let old = this._dir;\r\n    this._dir = v;\r\n    if (old != this._dir) {\r\n      this.dirChange.emit();\r\n    }\r\n  }\r\n\r\n  /** Current layout direction of the element. */\r\n  get value(): LayoutDirection { return this.dir; }\r\n  set value(v: LayoutDirection) { this.dir = v; }\r\n}\r\n\r\n\r\n@NgModule({\r\n  exports: [Dir],\r\n  declarations: [Dir]\r\n})\r\nexport class RtlModule {}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  NgModule,\r\n  Output,\r\n  Input,\r\n  EventEmitter,\r\n  OnDestroy,\r\n  AfterContentInit,\r\n  Injectable,\r\n} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {debounceTime} from 'rxjs/operators';\r\n\r\n/**\r\n * Factory that creates a new MutationObserver and allows us to stub it out in unit tests.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport class MdMutationObserverFactory {\r\n  create(callback: any): MutationObserver {\r\n    return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\r\n  }\r\n}\r\n\r\n/**\r\n * Directive that triggers a callback whenever the content of\r\n * its associated element has changed.\r\n */\r\n@Directive({\r\n  selector: '[cdkObserveContent]'\r\n})\r\nexport class ObserveContent implements AfterContentInit, OnDestroy {\r\n  private _observer: MutationObserver;\r\n\r\n  /** Event emitted for each change in the element's content. */\r\n  @Output('cdkObserveContent') event = new EventEmitter<MutationRecord[]>();\r\n\r\n  /** Used for debouncing the emitted values to the observeContent event. */\r\n  private _debouncer = new Subject<MutationRecord[]>();\r\n\r\n  /** Debounce interval for emitting the changes. */\r\n  @Input() debounce: number;\r\n\r\n  constructor(\r\n    private _mutationObserverFactory: MdMutationObserverFactory,\r\n    private _elementRef: ElementRef) { }\r\n\r\n  ngAfterContentInit() {\r\n    if (this.debounce > 0) {\r\n      this._debouncer\r\n        .pipe(debounceTime(this.debounce))\r\n        .subscribe(mutations => this.event.emit(mutations));\r\n    } else {\r\n      this._debouncer.subscribe(mutations => this.event.emit(mutations));\r\n    }\r\n\r\n    this._observer = this._mutationObserverFactory.create((mutations: MutationRecord[]) => {\r\n      this._debouncer.next(mutations);\r\n    });\r\n\r\n    if (this._observer) {\r\n      this._observer.observe(this._elementRef.nativeElement, {\r\n        characterData: true,\r\n        childList: true,\r\n        subtree: true\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this._observer) {\r\n      this._observer.disconnect();\r\n      this._debouncer.complete();\r\n      this._debouncer = this._observer = null;\r\n    }\r\n  }\r\n}\r\n\r\n\r\n@NgModule({\r\n  exports: [ObserveContent],\r\n  declarations: [ObserveContent],\r\n  providers: [MdMutationObserverFactory]\r\n})\r\nexport class ObserveContentModule {}\r\n","import {RippleConfig, RippleRenderer} from './ripple-renderer';\r\n\r\n/** Possible states for a ripple element. */\r\nexport enum RippleState {\r\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\r\n}\r\n\r\n/**\r\n * Reference to a previously launched ripple element.\r\n */\r\nexport class RippleRef {\r\n\r\n  /** Current state of the ripple reference. */\r\n  state: RippleState = RippleState.HIDDEN;\r\n\r\n  constructor(\r\n    private _renderer: RippleRenderer,\r\n    public element: HTMLElement,\r\n    public config: RippleConfig) {\r\n  }\r\n\r\n  /** Fades out the ripple element. */\r\n  fadeOut() {\r\n    this._renderer.fadeOutRipple(this);\r\n  }\r\n}\r\n","import {ElementRef, NgZone} from '@angular/core';\r\nimport {Platform} from '../platform/platform';\r\nimport {ViewportRuler} from '../overlay/position/viewport-ruler';\r\nimport {RippleRef, RippleState} from './ripple-ref';\r\n\r\n\r\n/** Fade-in duration for the ripples. Can be modified with the speedFactor option. */\r\nexport const RIPPLE_FADE_IN_DURATION = 450;\r\n\r\n/** Fade-out duration for the ripples in milliseconds. This can't be modified by the speedFactor. */\r\nexport const RIPPLE_FADE_OUT_DURATION = 400;\r\n\r\nexport type RippleConfig = {\r\n  color?: string;\r\n  centered?: boolean;\r\n  radius?: number;\r\n  speedFactor?: number;\r\n  persistent?: boolean;\r\n};\r\n\r\n/**\r\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\r\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\r\n * event handlers to be installed on the element that triggers ripple animations.\r\n * This will eventually become a custom renderer once Angular support exists.\r\n * @docs-private\r\n */\r\nexport class RippleRenderer {\r\n\r\n  /** Element where the ripples are being added to. */\r\n  private _containerElement: HTMLElement;\r\n\r\n  /** Element which triggers the ripple elements on mouse events. */\r\n  private _triggerElement: HTMLElement;\r\n\r\n  /** Whether the mouse is currently down or not. */\r\n  private _isMousedown: boolean = false;\r\n\r\n  /** Events to be registered on the trigger element. */\r\n  private _triggerEvents = new Map<string, any>();\r\n\r\n  /** Set of currently active ripple references. */\r\n  private _activeRipples = new Set<RippleRef>();\r\n\r\n  /** Ripple config for all ripples created by events. */\r\n  rippleConfig: RippleConfig = {};\r\n\r\n  /** Whether mouse ripples should be created or not. */\r\n  rippleDisabled: boolean = false;\r\n\r\n  constructor(\r\n      elementRef: ElementRef,\r\n      private _ngZone: NgZone,\r\n      private _ruler: ViewportRuler,\r\n      platform: Platform) {\r\n    // Only do anything if we're on the browser.\r\n    if (platform.isBrowser) {\r\n      this._containerElement = elementRef.nativeElement;\r\n\r\n      // Specify events which need to be registered on the trigger.\r\n      this._triggerEvents.set('mousedown', this.onMousedown.bind(this));\r\n      this._triggerEvents.set('mouseup', this.onMouseup.bind(this));\r\n      this._triggerEvents.set('mouseleave', this.onMouseLeave.bind(this));\r\n\r\n      // By default use the host element as trigger element.\r\n      this.setTriggerElement(this._containerElement);\r\n    }\r\n  }\r\n\r\n  /** Fades in a ripple at the given coordinates. */\r\n  fadeInRipple(pageX: number, pageY: number, config: RippleConfig = {}): RippleRef {\r\n    let containerRect = this._containerElement.getBoundingClientRect();\r\n\r\n    if (config.centered) {\r\n      pageX = containerRect.left + containerRect.width / 2;\r\n      pageY = containerRect.top + containerRect.height / 2;\r\n    } else {\r\n      // Subtract scroll values from the coordinates because calculations below\r\n      // are always relative to the viewport rectangle.\r\n      let scrollPosition = this._ruler.getViewportScrollPosition();\r\n      pageX -= scrollPosition.left;\r\n      pageY -= scrollPosition.top;\r\n    }\r\n\r\n    let radius = config.radius || distanceToFurthestCorner(pageX, pageY, containerRect);\r\n    let duration = RIPPLE_FADE_IN_DURATION * (1 / (config.speedFactor || 1));\r\n    let offsetX = pageX - containerRect.left;\r\n    let offsetY = pageY - containerRect.top;\r\n\r\n    let ripple = document.createElement('div');\r\n    ripple.classList.add('mat-ripple-element');\r\n\r\n    ripple.style.left = `${offsetX - radius}px`;\r\n    ripple.style.top = `${offsetY - radius}px`;\r\n    ripple.style.height = `${radius * 2}px`;\r\n    ripple.style.width = `${radius * 2}px`;\r\n\r\n    // If the color is not set, the default CSS color will be used.\r\n    ripple.style.backgroundColor = config.color;\r\n    ripple.style.transitionDuration = `${duration}ms`;\r\n\r\n    this._containerElement.appendChild(ripple);\r\n\r\n    // By default the browser does not recalculate the styles of dynamically created\r\n    // ripple elements. This is critical because then the `scale` would not animate properly.\r\n    enforceStyleRecalculation(ripple);\r\n\r\n    ripple.style.transform = 'scale(1)';\r\n\r\n    // Exposed reference to the ripple that will be returned.\r\n    let rippleRef = new RippleRef(this, ripple, config);\r\n\r\n    rippleRef.state = RippleState.FADING_IN;\r\n\r\n    // Add the ripple reference to the list of all active ripples.\r\n    this._activeRipples.add(rippleRef);\r\n\r\n    // Wait for the ripple element to be completely faded in.\r\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\r\n    this.runTimeoutOutsideZone(() => {\r\n      rippleRef.state = RippleState.VISIBLE;\r\n\r\n      if (!config.persistent && !this._isMousedown) {\r\n        rippleRef.fadeOut();\r\n      }\r\n    }, duration);\r\n\r\n    return rippleRef;\r\n  }\r\n\r\n  /** Fades out a ripple reference. */\r\n  fadeOutRipple(rippleRef: RippleRef) {\r\n    // For ripples that are not active anymore, don't re-un the fade-out animation.\r\n    if (!this._activeRipples.delete(rippleRef)) {\r\n      return;\r\n    }\r\n\r\n    let rippleEl = rippleRef.element;\r\n\r\n    rippleEl.style.transitionDuration = `${RIPPLE_FADE_OUT_DURATION}ms`;\r\n    rippleEl.style.opacity = '0';\r\n\r\n    rippleRef.state = RippleState.FADING_OUT;\r\n\r\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\r\n    this.runTimeoutOutsideZone(() => {\r\n      rippleRef.state = RippleState.HIDDEN;\r\n      rippleEl.parentNode.removeChild(rippleEl);\r\n    }, RIPPLE_FADE_OUT_DURATION);\r\n  }\r\n\r\n  /** Fades out all currently active ripples. */\r\n  fadeOutAll() {\r\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\r\n  }\r\n\r\n  /** Sets the trigger element and registers the mouse events. */\r\n  setTriggerElement(element: HTMLElement) {\r\n    // Remove all previously register event listeners from the trigger element.\r\n    if (this._triggerElement) {\r\n      this._triggerEvents.forEach((fn, type) => this._triggerElement.removeEventListener(type, fn));\r\n    }\r\n\r\n    if (element) {\r\n      // If the element is not null, register all event listeners on the trigger element.\r\n      this._ngZone.runOutsideAngular(() => {\r\n        this._triggerEvents.forEach((fn, type) => element.addEventListener(type, fn));\r\n      });\r\n    }\r\n\r\n    this._triggerElement = element;\r\n  }\r\n\r\n  /** Listener being called on mousedown event. */\r\n  private onMousedown(event: MouseEvent) {\r\n    if (!this.rippleDisabled) {\r\n      this._isMousedown = true;\r\n      this.fadeInRipple(event.pageX, event.pageY, this.rippleConfig);\r\n    }\r\n  }\r\n\r\n  /** Listener being called on mouseup event. */\r\n  private onMouseup() {\r\n    this._isMousedown = false;\r\n\r\n    // Fade-out all ripples that are completely visible and not persistent.\r\n    this._activeRipples.forEach(ripple => {\r\n      if (!ripple.config.persistent && ripple.state === RippleState.VISIBLE) {\r\n        ripple.fadeOut();\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Listener being called on mouseleave event. */\r\n  private onMouseLeave() {\r\n    if (this._isMousedown) {\r\n      this.onMouseup();\r\n    }\r\n  }\r\n\r\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\r\n  private runTimeoutOutsideZone(fn: Function, delay = 0) {\r\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\r\n  }\r\n\r\n}\r\n\r\n/** Enforces a style recalculation of a DOM element by computing its styles. */\r\n// TODO(devversion): Move into global utility function.\r\nfunction enforceStyleRecalculation(element: HTMLElement) {\r\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\r\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\r\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\r\n  window.getComputedStyle(element).getPropertyValue('opacity');\r\n}\r\n\r\n/**\r\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\r\n */\r\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\r\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\r\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\r\n  return Math.sqrt(distX * distX + distY * distY);\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n// Whether the current platform supports the V8 Break Iterator. The V8 check\r\n// is necessary to detect all Blink based browsers.\r\nconst hasV8BreakIterator = (typeof(Intl) !== 'undefined' && (Intl as any).v8BreakIterator);\r\n\r\n/**\r\n * Service to detect the current platform by comparing the userAgent strings and\r\n * checking browser-specific global properties.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport class Platform {\r\n  isBrowser: boolean = typeof document === 'object' && !!document;\r\n\r\n  /** Layout Engines */\r\n  EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);\r\n  TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\r\n\r\n  // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\r\n  BLINK = this.isBrowser &&\r\n      (!!((window as any).chrome || hasV8BreakIterator) && !!CSS && !this.EDGE && !this.TRIDENT);\r\n\r\n  // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\r\n  // ensure that Webkit runs standalone and is not used as another engine's base.\r\n  WEBKIT = this.isBrowser &&\r\n      /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\r\n\r\n  /** Browsers and Platform Types */\r\n  IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream;\r\n\r\n  // It's difficult to detect the plain Gecko engine, because most of the browsers identify\r\n  // them self as Gecko-like browsers and modify the userAgent's according to that.\r\n  // Since we only cover one explicit Firefox case, we can simply check for Firefox\r\n  // instead of having an unstable check for Gecko.\r\n  FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\r\n\r\n  // Trident on mobile adds the android platform to the userAgent to trick detections.\r\n  ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\r\n\r\n  // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\r\n  // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\r\n  // Safari browser should also use Webkit as its layout engine.\r\n  SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\r\n}\r\n","/** Cached result Set of input types support by the current browser. */\r\nlet supportedInputTypes: Set<string>;\r\n\r\n/** Types of <input> that *might* be supported. */\r\nconst candidateInputTypes = [\r\n  // `color` must come first. Chrome 56 shows a warning if we change the type to `color` after\r\n  // first changing it to something else:\r\n  // The specified value \"\" does not conform to the required format.\r\n  // The format is \"#rrggbb\" where rr, gg, bb are two-digit hexadecimal numbers.\r\n  'color',\r\n  'button',\r\n  'checkbox',\r\n  'date',\r\n  'datetime-local',\r\n  'email',\r\n  'file',\r\n  'hidden',\r\n  'image',\r\n  'month',\r\n  'number',\r\n  'password',\r\n  'radio',\r\n  'range',\r\n  'reset',\r\n  'search',\r\n  'submit',\r\n  'tel',\r\n  'text',\r\n  'time',\r\n  'url',\r\n  'week',\r\n];\r\n\r\n/** @returns The input types supported by this browser. */\r\nexport function getSupportedInputTypes(): Set<string> {\r\n  // Result is cached.\r\n  if (supportedInputTypes) {\r\n    return supportedInputTypes;\r\n  }\r\n\r\n  // We can't check if an input type is not supported until we're on the browser, so say that\r\n  // everything is supported when not on the browser. We don't use `Platform` here since it's\r\n  // just a helper function and can't inject it.\r\n  if (typeof document !== 'object' || !document) {\r\n    supportedInputTypes = new Set(candidateInputTypes);\r\n    return supportedInputTypes;\r\n  }\r\n\r\n  let featureTestInput = document.createElement('input');\r\n  supportedInputTypes = new Set(candidateInputTypes.filter(value => {\r\n    featureTestInput.setAttribute('type', value);\r\n    return featureTestInput.type === value;\r\n  }));\r\n\r\n  return supportedInputTypes;\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {Platform} from './platform';\r\n\r\n\r\n@NgModule({\r\n  providers: [Platform]\r\n})\r\nexport class PlatformModule {}\r\n\r\n\r\nexport * from './platform';\r\nexport * from './features';\r\n","import {ElementRef, Injectable, NgZone, Optional, SkipSelf} from '@angular/core';\r\nimport {Platform} from '../../platform/index';\r\nimport {Scrollable} from './scrollable';\r\nimport {Subject} from 'rxjs';\r\nimport {Subscription, merge, fromEvent} from 'rxjs';\r\nimport {auditTime} from 'rxjs/operators';\r\n\r\n\r\n/** Time in ms to throttle the scrolling events by default. */\r\nexport const DEFAULT_SCROLL_TIME = 20;\r\n\r\n/**\r\n * Service contained all registered Scrollable references and emits an event when any one of the\r\n * Scrollable references emit a scrolled event.\r\n */\r\n@Injectable()\r\nexport class ScrollDispatcher {\r\n  constructor(private _ngZone: NgZone, private _platform: Platform) { }\r\n\r\n  /** Subject for notifying that a registered scrollable reference element has been scrolled. */\r\n  _scrolled: Subject<void> = new Subject<void>();\r\n\r\n  /** Keeps track of the global `scroll` and `resize` subscriptions. */\r\n  _globalSubscription: Subscription = null;\r\n\r\n  /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\r\n  private _scrolledCount = 0;\r\n\r\n  /**\r\n   * Map of all the scrollable references that are registered with the service and their\r\n   * scroll event subscriptions.\r\n   */\r\n  scrollableReferences: Map<Scrollable, Subscription> = new Map();\r\n\r\n  /**\r\n   * Registers a Scrollable with the service and listens for its scrolled events. When the\r\n   * scrollable is scrolled, the service emits the event in its scrolled observable.\r\n   * @param scrollable Scrollable instance to be registered.\r\n   */\r\n  register(scrollable: Scrollable): void {\r\n    const scrollSubscription = scrollable.elementScrolled().subscribe(() => this._notify());\r\n\r\n    this.scrollableReferences.set(scrollable, scrollSubscription);\r\n  }\r\n\r\n  /**\r\n   * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.\r\n   * @param scrollable Scrollable instance to be deregistered.\r\n   */\r\n  deregister(scrollable: Scrollable): void {\r\n    if (this.scrollableReferences.has(scrollable)) {\r\n      this.scrollableReferences.get(scrollable).unsubscribe();\r\n      this.scrollableReferences.delete(scrollable);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribes to an observable that emits an event whenever any of the registered Scrollable\r\n   * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\r\n   * to override the default \"throttle\" time.\r\n   */\r\n  scrolled(auditTimeInMs: number = DEFAULT_SCROLL_TIME, callback: () => any): Subscription {\r\n    // Scroll events can only happen on the browser, so do nothing if we're not on the browser.\r\n    if (!this._platform.isBrowser) {\r\n      return Subscription.EMPTY;\r\n    }\r\n\r\n    // In the case of a 0ms delay, use an observable without auditTime\r\n    // since it does add a perceptible delay in processing overhead.\r\n    let observable = auditTimeInMs > 0 ?\r\n      this._scrolled.asObservable().pipe(auditTime(auditTimeInMs)) :\r\n      this._scrolled.asObservable();\r\n\r\n    this._scrolledCount++;\r\n\r\n    if (!this._globalSubscription) {\r\n      this._globalSubscription = this._ngZone.runOutsideAngular(() => {\r\n        return merge(\r\n          fromEvent(window.document, 'scroll'),\r\n          fromEvent(window, 'resize')\r\n        ).subscribe(() => this._notify());\r\n      });\r\n    }\r\n\r\n    // Note that we need to do the subscribing from here, in order to be able to remove\r\n    // the global event listeners once there are no more subscriptions.\r\n    let subscription = observable.subscribe(callback);\r\n\r\n    subscription.add(() => {\r\n      this._scrolledCount--;\r\n\r\n      if (this._globalSubscription && !this.scrollableReferences.size && !this._scrolledCount) {\r\n        this._globalSubscription.unsubscribe();\r\n        this._globalSubscription = null;\r\n      }\r\n    });\r\n\r\n    return subscription;\r\n  }\r\n\r\n  /** Returns all registered Scrollables that contain the provided element. */\r\n  getScrollContainers(elementRef: ElementRef): Scrollable[] {\r\n    const scrollingContainers: Scrollable[] = [];\r\n\r\n    this.scrollableReferences.forEach((_subscription: Subscription, scrollable: Scrollable) => {\r\n      if (this.scrollableContainsElement(scrollable, elementRef)) {\r\n        scrollingContainers.push(scrollable);\r\n      }\r\n    });\r\n\r\n    return scrollingContainers;\r\n  }\r\n\r\n  /** Returns true if the element is contained within the provided Scrollable. */\r\n  scrollableContainsElement(scrollable: Scrollable, elementRef: ElementRef): boolean {\r\n    let element = elementRef.nativeElement;\r\n    let scrollableElement = scrollable.getElementRef().nativeElement;\r\n\r\n    // Traverse through the element parents until we reach null, checking if any of the elements\r\n    // are the scrollable's element.\r\n    do {\r\n      if (element == scrollableElement) { return true; }\r\n    } while (element = element.parentElement);\r\n  }\r\n\r\n  /** Sends a notification that a scroll event has been fired. */\r\n  _notify() {\r\n    this._scrolled.next();\r\n  }\r\n}\r\n\r\nexport function SCROLL_DISPATCHER_PROVIDER_FACTORY(\r\n    parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform) {\r\n  return parentDispatcher || new ScrollDispatcher(ngZone, platform);\r\n}\r\n\r\nexport const SCROLL_DISPATCHER_PROVIDER = {\r\n  // If there is already a ScrollDispatcher available, use that. Otherwise, provide a new one.\r\n  provide: ScrollDispatcher,\r\n  deps: [[new Optional(), new SkipSelf(), ScrollDispatcher], NgZone, Platform],\r\n  useFactory: SCROLL_DISPATCHER_PROVIDER_FACTORY\r\n};\r\n","import {Injectable, Optional, SkipSelf} from '@angular/core';\r\nimport {ScrollDispatcher} from '../scroll/scroll-dispatcher';\r\n\r\n\r\n/**\r\n * Simple utility for getting the bounds of the browser viewport.\r\n * @docs-private\r\n */\r\n@Injectable()\r\nexport class ViewportRuler {\r\n\r\n  /** Cached document client rectangle. */\r\n  private _documentRect?: ClientRect;\r\n\r\n  constructor(scrollDispatcher: ScrollDispatcher) {\r\n    // Subscribe to scroll and resize events and update the document rectangle on changes.\r\n    scrollDispatcher.scrolled(null, () => this._cacheViewportGeometry());\r\n  }\r\n\r\n  /** Gets a ClientRect for the viewport's bounds. */\r\n  getViewportRect(documentRect = this._documentRect): DOMRect {\r\n    // Cache the document bounding rect so that we don't recompute it for multiple calls.\r\n    if (!documentRect) {\r\n      this._cacheViewportGeometry();\r\n      documentRect = this._documentRect;\r\n    }\r\n\r\n    // Use the document element's bounding rect rather than the window scroll properties\r\n    // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\r\n    // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\r\n    // conceptual viewports. Under most circumstances these viewports are equivalent, but they\r\n    // can disagree when the page is pinch-zoomed (on devices that support touch).\r\n    // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\r\n    // We use the documentElement instead of the body because, by default (without a css reset)\r\n    // browsers typically give the document body an 8px margin, which is not included in\r\n    // getBoundingClientRect().\r\n    const scrollPosition = this.getViewportScrollPosition(documentRect);\r\n    const height = window.innerHeight;\r\n    const width = window.innerWidth;\r\n\r\n    return {\r\n      top: scrollPosition.top,\r\n      left: scrollPosition.left,\r\n      bottom: scrollPosition.top + height,\r\n      right: scrollPosition.left + width,\r\n      height,\r\n      width,\r\n    } as DOMRect;\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the (top, left) scroll position of the viewport.\r\n   * @param documentRect\r\n   */\r\n  getViewportScrollPosition(documentRect = this._documentRect) {\r\n    // Cache the document bounding rect so that we don't recompute it for multiple calls.\r\n    if (!documentRect) {\r\n      this._cacheViewportGeometry();\r\n      documentRect = this._documentRect;\r\n    }\r\n\r\n    // The top-left-corner of the viewport is determined by the scroll position of the document\r\n    // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\r\n    // whether `document.body` or `document.documentElement` is the scrolled element, so reading\r\n    // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\r\n    // `document.documentElement` works consistently, where the `top` and `left` values will\r\n    // equal negative the scroll position.\r\n    const top = -documentRect.top || document.body.scrollTop || window.scrollY ||\r\n                  document.documentElement.scrollTop || 0;\r\n\r\n    const left = -documentRect.left || document.body.scrollLeft || window.scrollX ||\r\n                  document.documentElement.scrollLeft || 0;\r\n\r\n    return {top, left};\r\n  }\r\n\r\n  /** Caches the latest client rectangle of the document element. */\r\n  _cacheViewportGeometry() {\r\n    this._documentRect = document.documentElement.getBoundingClientRect();\r\n  }\r\n\r\n}\r\n\r\nexport function VIEWPORT_RULER_PROVIDER_FACTORY(parentRuler: ViewportRuler,\r\n                                                scrollDispatcher: ScrollDispatcher) {\r\n  return parentRuler || new ViewportRuler(scrollDispatcher);\r\n}\r\n\r\nexport const VIEWPORT_RULER_PROVIDER = {\r\n  // If there is already a ViewportRuler available, use that. Otherwise, provide a new one.\r\n  provide: ViewportRuler,\r\n  deps: [[new Optional(), new SkipSelf(), ViewportRuler], ScrollDispatcher],\r\n  useFactory: VIEWPORT_RULER_PROVIDER_FACTORY\r\n};\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  Inject,\r\n  NgZone,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  OnDestroy,\r\n  InjectionToken,\r\n  Optional,\r\n} from '@angular/core';\r\nimport {RippleConfig, RippleRenderer} from './ripple-renderer';\r\nimport {RippleRef} from './ripple-ref';\r\nimport {ViewportRuler} from '../overlay/position/viewport-ruler';\r\nimport {Platform} from '../platform/platform';\r\n\r\nexport interface RippleGlobalOptions {\r\n  disabled?: boolean;\r\n  baseSpeedFactor?: number;\r\n}\r\n\r\n/** Injection token that can be used to specify the global ripple options. */\r\nexport const MD_RIPPLE_GLOBAL_OPTIONS =\r\n    new InjectionToken<RippleGlobalOptions>('md-ripple-global-options');\r\n\r\n@Directive({\r\n  selector: '[md-ripple], [mat-ripple], [mdRipple], [matRipple]',\r\n  exportAs: 'mdRipple',\r\n  host: {\r\n    'class': 'mat-ripple',\r\n    '[class.mat-ripple-unbounded]': 'unbounded'\r\n  }\r\n})\r\nexport class MdRipple implements OnChanges, OnDestroy {\r\n\r\n  /**\r\n   * The element that triggers the ripple when click events are received. Defaults to the\r\n   * directive's host element.\r\n   */\r\n  // Prevent TS metadata emit from referencing HTMLElement in ripple.js\r\n  // Otherwise running this code in a Node environment (e.g Universal) will not work.\r\n  @Input('mdRippleTrigger') trigger: HTMLElement|HTMLElement;\r\n\r\n  /**\r\n   * Whether the ripple always originates from the center of the host element's bounds, rather\r\n   * than originating from the location of the click event.\r\n   */\r\n  @Input('mdRippleCentered') centered: boolean;\r\n\r\n  /**\r\n   * Whether click events will not trigger the ripple. It can still be triggered by manually\r\n   * calling createRipple()\r\n   */\r\n  @Input('mdRippleDisabled') disabled: boolean;\r\n\r\n  /**\r\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\r\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\r\n   * bounding rectangle.\r\n   */\r\n  @Input('mdRippleRadius') radius: number = 0;\r\n\r\n  /**\r\n   * If set, the normal duration of ripple animations is divided by this value. For example,\r\n   * setting it to 0.5 will cause the animations to take twice as long.\r\n   * A changed speedFactor will not modify the fade-out duration of the ripples.\r\n   */\r\n  @Input('mdRippleSpeedFactor') speedFactor: number = 1;\r\n\r\n  /** Custom color for ripples. */\r\n  @Input('mdRippleColor') color: string;\r\n\r\n  /** Whether foreground ripples should be visible outside the component's bounds. */\r\n  @Input('mdRippleUnbounded') unbounded: boolean;\r\n\r\n  /** Renderer for the ripple DOM manipulations. */\r\n  private _rippleRenderer: RippleRenderer;\r\n\r\n  /** Options that are set globally for all ripples. */\r\n  private _globalOptions: RippleGlobalOptions;\r\n\r\n  constructor(\r\n    elementRef: ElementRef,\r\n    ngZone: NgZone,\r\n    ruler: ViewportRuler,\r\n    platform: Platform,\r\n    @Optional() @Inject(MD_RIPPLE_GLOBAL_OPTIONS) globalOptions: RippleGlobalOptions\r\n  ) {\r\n    this._rippleRenderer = new RippleRenderer(elementRef, ngZone, ruler, platform);\r\n    this._globalOptions = globalOptions ? globalOptions : {};\r\n\r\n    this._updateRippleRenderer();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['trigger'] && this.trigger) {\r\n      this._rippleRenderer.setTriggerElement(this.trigger);\r\n    }\r\n\r\n    this._updateRippleRenderer();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    // Set the trigger element to null to cleanup all listeners.\r\n    this._rippleRenderer.setTriggerElement(null);\r\n  }\r\n\r\n  /** Launches a manual ripple at the specified position. */\r\n  launch(pageX: number, pageY: number, config = this.rippleConfig): RippleRef {\r\n    return this._rippleRenderer.fadeInRipple(pageX, pageY, config);\r\n  }\r\n\r\n  /** Fades out all currently showing ripple elements. */\r\n  fadeOutAll() {\r\n    this._rippleRenderer.fadeOutAll();\r\n  }\r\n\r\n  /** Ripple configuration from the directive's input values. */\r\n  get rippleConfig(): RippleConfig {\r\n    return {\r\n      centered: this.centered,\r\n      speedFactor: this.speedFactor * (this._globalOptions.baseSpeedFactor || 1),\r\n      radius: this.radius,\r\n      color: this.color\r\n    };\r\n  }\r\n\r\n  /** Updates the ripple renderer with the latest ripple configuration. */\r\n  private _updateRippleRenderer() {\r\n    this._rippleRenderer.rippleDisabled = this._globalOptions.disabled || this.disabled;\r\n    this._rippleRenderer.rippleConfig = this.rippleConfig;\r\n  }\r\n}\r\n","import {Directive, ElementRef, OnInit, OnDestroy, NgZone, Renderer2} from '@angular/core';\r\nimport {Observable, Subject} from 'rxjs';\r\nimport {ScrollDispatcher} from './scroll-dispatcher';\r\n\r\n\r\n/**\r\n * Sends an event when the directive's element is scrolled. Registers itself with the\r\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\r\n * can be listened to through the service.\r\n */\r\n@Directive({\r\n  selector: '[cdk-scrollable], [cdkScrollable]'\r\n})\r\nexport class Scrollable implements OnInit, OnDestroy {\r\n  private _elementScrolled: Subject<Event> = new Subject();\r\n  private _scrollListener: Function;\r\n\r\n  constructor(private _elementRef: ElementRef,\r\n              private _scroll: ScrollDispatcher,\r\n              private _ngZone: NgZone,\r\n              private _renderer: Renderer2) {}\r\n\r\n  ngOnInit() {\r\n    this._scrollListener = this._ngZone.runOutsideAngular(() => {\r\n      return this._renderer.listen(this.getElementRef().nativeElement, 'scroll', (event: Event) => {\r\n        this._elementScrolled.next(event);\r\n      });\r\n    });\r\n\r\n    this._scroll.register(this);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._scroll.deregister(this);\r\n\r\n    if (this._scrollListener) {\r\n      this._scrollListener();\r\n      this._scrollListener = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns observable that emits when a scroll event is fired on the host element.\r\n   */\r\n  elementScrolled(): Observable<any> {\r\n    return this._elementScrolled.asObservable();\r\n  }\r\n\r\n  getElementRef(): ElementRef {\r\n    return this._elementRef;\r\n  }\r\n}\r\n","import {OverlayRef} from '../overlay-ref';\r\n\r\n/**\r\n * Describes a strategy that will be used by an overlay\r\n * to handle scroll events while it is open.\r\n */\r\nexport interface ScrollStrategy {\r\n  enable: () => void;\r\n  disable: () => void;\r\n  attach: (overlayRef: OverlayRef) => void;\r\n}\r\n\r\n/**\r\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\r\n */\r\nexport function getMdScrollStrategyAlreadyAttachedError(): Error {\r\n  return Error(`Scroll strategy has already been attached.`);\r\n}\r\n","import {ScrollStrategy, getMdScrollStrategyAlreadyAttachedError} from './scroll-strategy';\r\nimport {OverlayRef} from '../overlay-ref';\r\nimport {Subscription} from 'rxjs';\r\nimport {ScrollDispatcher} from './scroll-dispatcher';\r\n\r\n\r\n/**\r\n * Strategy that will close the overlay as soon as the user starts scrolling.\r\n */\r\nexport class CloseScrollStrategy implements ScrollStrategy {\r\n  private _scrollSubscription: Subscription|null = null;\r\n  private _overlayRef: OverlayRef;\r\n\r\n  constructor(private _scrollDispatcher: ScrollDispatcher) { }\r\n\r\n  attach(overlayRef: OverlayRef) {\r\n    if (this._overlayRef) {\r\n      throw getMdScrollStrategyAlreadyAttachedError();\r\n    }\r\n\r\n    this._overlayRef = overlayRef;\r\n  }\r\n\r\n  enable() {\r\n    if (!this._scrollSubscription) {\r\n      this._scrollSubscription = this._scrollDispatcher.scrolled(null, () => {\r\n        if (this._overlayRef.hasAttached()) {\r\n          this._overlayRef.detach();\r\n        }\r\n\r\n        this.disable();\r\n      });\r\n    }\r\n  }\r\n\r\n  disable() {\r\n    if (this._scrollSubscription) {\r\n      this._scrollSubscription.unsubscribe();\r\n      this._scrollSubscription = null;\r\n    }\r\n  }\r\n}\r\n","import {ScrollStrategy} from './scroll-strategy';\r\n\r\n/**\r\n * Scroll strategy that doesn't do anything.\r\n */\r\nexport class NoopScrollStrategy implements ScrollStrategy {\r\n  enable() { }\r\n  disable() { }\r\n  attach() { }\r\n}\r\n","import {ScrollStrategy} from './scroll-strategy';\r\nimport {ViewportRuler} from '../position/viewport-ruler';\r\n\r\n/**\r\n * Strategy that will prevent the user from scrolling while the overlay is visible.\r\n */\r\nexport class BlockScrollStrategy implements ScrollStrategy {\r\n  private _previousHTMLStyles = { top: '', left: '' };\r\n  private _previousScrollPosition: { top: number, left: number };\r\n  private _isEnabled = false;\r\n\r\n  constructor(private _viewportRuler: ViewportRuler) { }\r\n\r\n  attach() { }\r\n\r\n  enable() {\r\n    if (this._canBeEnabled()) {\r\n      const root = document.documentElement;\r\n\r\n      this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\r\n\r\n      // Cache the previous inline styles in case the user had set them.\r\n      this._previousHTMLStyles.left = root.style.left;\r\n      this._previousHTMLStyles.top = root.style.top;\r\n\r\n      // Note: we're using the `html` node, instead of the `body`, because the `body` may\r\n      // have the user agent margin, whereas the `html` is guaranteed not to have one.\r\n      root.style.left = `${-this._previousScrollPosition.left}px`;\r\n      root.style.top = `${-this._previousScrollPosition.top}px`;\r\n      root.classList.add('cdk-global-scrollblock');\r\n      this._isEnabled = true;\r\n    }\r\n  }\r\n\r\n  disable() {\r\n    if (this._isEnabled) {\r\n      this._isEnabled = false;\r\n      document.documentElement.style.left = this._previousHTMLStyles.left;\r\n      document.documentElement.style.top = this._previousHTMLStyles.top;\r\n      document.documentElement.classList.remove('cdk-global-scrollblock');\r\n      window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\r\n    }\r\n  }\r\n\r\n  private _canBeEnabled(): boolean {\r\n    // Since the scroll strategies can't be singletons, we have to use a global CSS class\r\n    // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\r\n    // scrolling multiple times.\r\n    if (document.documentElement.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\r\n      return false;\r\n    }\r\n\r\n    const body = document.body;\r\n    const viewport = this._viewportRuler.getViewportRect();\r\n    return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\r\n  }\r\n}\r\n","import {Subscription} from 'rxjs';\r\nimport {ScrollStrategy, getMdScrollStrategyAlreadyAttachedError} from './scroll-strategy';\r\nimport {OverlayRef} from '../overlay-ref';\r\nimport {ScrollDispatcher} from './scroll-dispatcher';\r\n\r\n/**\r\n * Config options for the RepositionScrollStrategy.\r\n */\r\nexport interface RepositionScrollStrategyConfig {\r\n  scrollThrottle?: number;\r\n}\r\n\r\n/**\r\n * Strategy that will update the element position as the user is scrolling.\r\n */\r\nexport class RepositionScrollStrategy implements ScrollStrategy {\r\n  private _scrollSubscription: Subscription|null = null;\r\n  private _overlayRef: OverlayRef;\r\n\r\n  constructor(\r\n    private _scrollDispatcher: ScrollDispatcher,\r\n    private _config: RepositionScrollStrategyConfig) { }\r\n\r\n  attach(overlayRef: OverlayRef) {\r\n    if (this._overlayRef) {\r\n      throw getMdScrollStrategyAlreadyAttachedError();\r\n    }\r\n\r\n    this._overlayRef = overlayRef;\r\n  }\r\n\r\n  enable() {\r\n    if (!this._scrollSubscription) {\r\n      let throttle = this._config ? this._config.scrollThrottle : 0;\r\n\r\n      this._scrollSubscription = this._scrollDispatcher.scrolled(throttle, () => {\r\n        this._overlayRef.updatePosition();\r\n      });\r\n    }\r\n  }\r\n\r\n  disable() {\r\n    if (this._scrollSubscription) {\r\n      this._scrollSubscription.unsubscribe();\r\n      this._scrollSubscription = null;\r\n    }\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ScrollStrategy} from './scroll-strategy';\r\nimport {CloseScrollStrategy} from './close-scroll-strategy';\r\nimport {NoopScrollStrategy} from './noop-scroll-strategy';\r\nimport {BlockScrollStrategy} from './block-scroll-strategy';\r\nimport {ScrollDispatcher} from './scroll-dispatcher';\r\nimport {ViewportRuler} from '../position/viewport-ruler';\r\nimport {\r\n  RepositionScrollStrategy,\r\n  RepositionScrollStrategyConfig,\r\n} from './reposition-scroll-strategy';\r\n\r\n\r\n/**\r\n * Options for how an overlay will handle scrolling.\r\n *\r\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\r\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\r\n */\r\n@Injectable()\r\nexport class ScrollStrategyOptions {\r\n  constructor(\r\n    private _scrollDispatcher: ScrollDispatcher,\r\n    private _viewportRuler: ViewportRuler) { }\r\n\r\n  /** Do nothing on scroll. */\r\n  noop = () => new NoopScrollStrategy();\r\n\r\n  /** Close the overlay as soon as the user scrolls. */\r\n  close = () => new CloseScrollStrategy(this._scrollDispatcher);\r\n\r\n  /** Block scrolling. */\r\n  block = () => new BlockScrollStrategy(this._viewportRuler);\r\n\r\n  /**\r\n   * Update the overlay's position on scroll.\r\n   * @param config Configuration to be used inside the scroll strategy.\r\n   * Allows debouncing the reposition calls.\r\n   */\r\n  reposition = (config?: RepositionScrollStrategyConfig) =>\r\n      new RepositionScrollStrategy(this._scrollDispatcher, config)\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {SCROLL_DISPATCHER_PROVIDER} from './scroll-dispatcher';\r\nimport {Scrollable} from './scrollable';\r\nimport {PlatformModule} from '../../platform/index';\r\nimport {ScrollStrategyOptions} from './scroll-strategy-options';\r\n\r\nexport {Scrollable} from './scrollable';\r\nexport {ScrollDispatcher} from './scroll-dispatcher';\r\n\r\n// Export pre-defined scroll strategies and interface to build custom ones.\r\nexport {ScrollStrategy} from './scroll-strategy';\r\nexport {ScrollStrategyOptions} from './scroll-strategy-options';\r\nexport {RepositionScrollStrategy} from './reposition-scroll-strategy';\r\nexport {CloseScrollStrategy} from './close-scroll-strategy';\r\nexport {NoopScrollStrategy} from './noop-scroll-strategy';\r\nexport {BlockScrollStrategy} from './block-scroll-strategy';\r\n\r\n@NgModule({\r\n  imports: [PlatformModule],\r\n  exports: [Scrollable],\r\n  declarations: [Scrollable],\r\n  providers: [SCROLL_DISPATCHER_PROVIDER, ScrollStrategyOptions],\r\n})\r\nexport class ScrollDispatchModule { }\r\n","import {NgModule} from '@angular/core';\r\nimport {MdRipple} from './ripple';\r\nimport {MdCommonModule} from '../common-behaviors/common-module';\r\nimport {VIEWPORT_RULER_PROVIDER} from '../overlay/position/viewport-ruler';\r\nimport {ScrollDispatchModule} from '../overlay/scroll/index';\r\nimport {PlatformModule} from '../platform/index';\r\n\r\nexport {MdRipple, RippleGlobalOptions, MD_RIPPLE_GLOBAL_OPTIONS} from './ripple';\r\nexport {RippleRef, RippleState} from './ripple-ref';\r\nexport {RippleConfig, RIPPLE_FADE_IN_DURATION, RIPPLE_FADE_OUT_DURATION} from './ripple-renderer';\r\n\r\n@NgModule({\r\n  imports: [MdCommonModule, PlatformModule, ScrollDispatchModule],\r\n  exports: [MdRipple, MdCommonModule],\r\n  declarations: [MdRipple],\r\n  providers: [VIEWPORT_RULER_PROVIDER],\r\n})\r\nexport class MdRippleModule {}\r\n","import {Constructor} from './constructor';\r\nimport {ElementRef, Renderer2} from '@angular/core';\r\n\r\n/** @docs-private */\r\nexport interface CanColor {\r\n  color: string;\r\n}\r\n\r\n/** @docs-private */\r\nexport interface HasRenderer {\r\n  _renderer: Renderer2;\r\n  _elementRef: ElementRef;\r\n}\r\n\r\n/** Possible color palette values.  */\r\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | null;\r\n\r\n/** Mixin to augment a directive with a `color` property. */\r\nexport function mixinColor<T extends Constructor<HasRenderer>>(base: T, defaultColor?: ThemePalette)\r\n    : Constructor<CanColor> & T {\r\n  return class extends base {\r\n    private _color: ThemePalette = null;\r\n\r\n    get color(): ThemePalette { return this._color; }\r\n    set color(value: ThemePalette) {\r\n      const colorPalette = value || defaultColor;\r\n\r\n      if (colorPalette !== this._color) {\r\n        if (this._color) {\r\n          this._renderer.removeClass(this._elementRef.nativeElement, `mat-${this._color}`);\r\n        }\r\n        if (colorPalette) {\r\n          this._renderer.addClass(this._elementRef.nativeElement, `mat-${colorPalette}`);\r\n        }\r\n\r\n        this._color = colorPalette;\r\n      }\r\n    }\r\n\r\n    constructor(...args: any[]) {\r\n      super(...args);\r\n\r\n      // Set the default color that can be specified from the mixin.\r\n      this.color = defaultColor;\r\n    }\r\n  };\r\n}\r\n\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  Input,\r\n  ElementRef,\r\n  Renderer2,\r\n} from '@angular/core';\r\nimport {CanColor, mixinColor} from '../../common-behaviors/color';\r\n\r\nexport type MdPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\r\n\r\n\r\n// Boilerplate for applying mixins to MdChip.\r\nexport class MdPseudoCheckboxBase {\r\n  constructor(public _renderer: Renderer2, public _elementRef: ElementRef) {}\r\n}\r\nexport const _MdPseudoCheckboxBase = mixinColor(MdPseudoCheckboxBase, 'accent');\r\n\r\n\r\n/**\r\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\r\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\r\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\r\n *\r\n * Note that this component will be completely invisible to screen-reader users. This is *not*\r\n * interchangeable with <md-checkbox> and should *not* be used if the user would directly interact\r\n * with the checkbox. The pseudo-checkbox should only be used as an implementation detail of\r\n * more complex components that appropriately handle selected / checked state.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  encapsulation: ViewEncapsulation.None,\r\n  selector: 'md-pseudo-checkbox, mat-pseudo-checkbox',\r\n  styleUrls: ['pseudo-checkbox.scss'],\r\n  inputs: ['color'],\r\n  template: '',\r\n  host: {\r\n    'class': 'mat-pseudo-checkbox',\r\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\r\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\r\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\r\n  },\r\n})\r\nexport class MdPseudoCheckbox extends _MdPseudoCheckboxBase implements CanColor {\r\n  /** Display state of the checkbox. */\r\n  @Input() state: MdPseudoCheckboxState = 'unchecked';\r\n\r\n  /** Whether the checkbox is disabled. */\r\n  @Input() disabled: boolean = false;\r\n\r\n  constructor(elementRef: ElementRef, renderer: Renderer2) {\r\n    super(renderer, elementRef);\r\n  }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {MdPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\r\n\r\n\r\n@NgModule({\r\n  exports: [MdPseudoCheckbox],\r\n  declarations: [MdPseudoCheckbox]\r\n})\r\nexport class MdSelectionModule { }\r\n\r\n\r\nexport * from './pseudo-checkbox/pseudo-checkbox';\r\n","\r\n// Due to a bug in the ChromeDriver, Angular keyboard events are not triggered by `sendKeys`\r\n// during E2E tests when using dot notation such as `(keydown.rightArrow)`. To get around this,\r\n// we are temporarily using a single (keydown) handler.\r\n// See: https://github.com/angular/angular/issues/9419\r\n\r\nexport const UP_ARROW = 38;\r\nexport const DOWN_ARROW = 40;\r\nexport const RIGHT_ARROW = 39;\r\nexport const LEFT_ARROW = 37;\r\n\r\nexport const PAGE_UP = 33;\r\nexport const PAGE_DOWN = 34;\r\n\r\nexport const HOME = 36;\r\nexport const END = 35;\r\n\r\nexport const ENTER = 13;\r\nexport const SPACE = 32;\r\nexport const TAB = 9;\r\n\r\nexport const ESCAPE = 27;\r\nexport const BACKSPACE = 8;\r\nexport const DELETE = 46;\r\n\r\nexport const COMMA = 188;\r\n","/** Coerces a data-bound value (typically a string) to a boolean. */\r\nexport function coerceBooleanProperty(value: any): boolean {\r\n  return value != null && `${value}` !== 'false';\r\n}\r\n","import {coerceBooleanProperty} from '../coercion/boolean-property';\r\nimport {Constructor} from './constructor';\r\n\r\n/** @docs-private */\r\nexport interface CanDisable {\r\n  disabled: boolean;\r\n}\r\n\r\n/** Mixin to augment a directive with a `disabled` property. */\r\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): Constructor<CanDisable> & T {\r\n  return class extends base {\r\n    private _disabled: boolean = false;\r\n\r\n    get disabled() { return this._disabled; }\r\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n    constructor(...args: any[]) { super(...args); }\r\n  };\r\n}\r\n","import {Component, ViewEncapsulation, ContentChildren, QueryList, Input} from '@angular/core';\r\nimport {mixinDisabled, CanDisable} from '../common-behaviors/disabled';\r\n\r\n// Boilerplate for applying mixins to MdOptgroup.\r\nexport class MdOptgroupBase { }\r\nexport const _MdOptgroupMixinBase = mixinDisabled(MdOptgroupBase);\r\n\r\n// Counter for unique group ids.\r\nlet _uniqueOptgroupIdCounter = 0;\r\n\r\n/**\r\n * Component that is used to group instances of `md-option`.\r\n */\r\n@Component({\r\n  \r\n  selector: 'md-optgroup, mat-optgroup',\r\n  templateUrl: 'optgroup.html',\r\n  encapsulation: ViewEncapsulation.None,\r\n  inputs: ['disabled'],\r\n  host: {\r\n    'class': 'mat-optgroup',\r\n    'role': 'group',\r\n    '[class.mat-optgroup-disabled]': 'disabled',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[attr.aria-labelledby]': '_labelId',\r\n  }\r\n})\r\nexport class MdOptgroup extends _MdOptgroupMixinBase implements CanDisable {\r\n  /** Label for the option group. */\r\n  @Input() label: string;\r\n\r\n  /** Unique id for the underlying label. */\r\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\r\n}\r\n","<label class=\"mat-optgroup-label\" [id]=\"_labelId\">{{ label }}</label>\r\n<ng-content select=\"md-option, mat-option\"></ng-content>\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  NgModule,\r\n  ViewEncapsulation,\r\n  Inject,\r\n  Optional,\r\n} from '@angular/core';\r\nimport {ENTER, SPACE} from '../keyboard/keycodes';\r\nimport {coerceBooleanProperty} from '../coercion/boolean-property';\r\nimport {MATERIAL_COMPATIBILITY_MODE} from '../../core/compatibility/compatibility';\r\nimport {MdOptgroup} from './optgroup';\r\n\r\n/**\r\n * Option IDs need to be unique across components, so this counter exists outside of\r\n * the component definition.\r\n */\r\nlet _uniqueIdCounter = 0;\r\n\r\n/** Event object emitted by MdOption when selected or deselected. */\r\nexport class MdOptionSelectionChange {\r\n  constructor(public source: MdOption, public isUserInput = false) { }\r\n}\r\n\r\n\r\n/**\r\n * Single option inside of a `<md-select>` element.\r\n */\r\n@Component({\r\n  \r\n  selector: 'md-option, mat-option',\r\n  host: {\r\n    'role': 'option',\r\n    '[attr.tabindex]': '_getTabIndex()',\r\n    '[class.mat-selected]': 'selected',\r\n    '[class.mat-option-multiple]': 'multiple',\r\n    '[class.mat-active]': 'active',\r\n    '[id]': 'id',\r\n    '[attr.aria-selected]': 'selected.toString()',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[class.mat-option-disabled]': 'disabled',\r\n    '(click)': '_selectViaInteraction()',\r\n    '(keydown)': '_handleKeydown($event)',\r\n    '[class.mat-option]': 'true',\r\n  },\r\n  templateUrl: 'option.html',\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class MdOption {\r\n  private _selected: boolean = false;\r\n  private _active: boolean = false;\r\n\r\n  /** Whether the option is disabled.  */\r\n  private _disabled: boolean = false;\r\n\r\n  private _id: string = `md-option-${_uniqueIdCounter++}`;\r\n\r\n  /** Whether the wrapping component is in multiple selection mode. */\r\n  multiple: boolean = false;\r\n\r\n  /** The unique ID of the option. */\r\n  get id() { return this._id; }\r\n\r\n  /** Whether or not the option is currently selected. */\r\n  get selected(): boolean { return this._selected; }\r\n\r\n  /** The form value of the option. */\r\n  @Input() value: any;\r\n\r\n  /** Whether the option is disabled. */\r\n  @Input()\r\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\r\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n  /** Event emitted when the option is selected or deselected. */\r\n  @Output() onSelectionChange = new EventEmitter<MdOptionSelectionChange>();\r\n\r\n  constructor(\r\n    private _element: ElementRef,\r\n    @Optional() public readonly group: MdOptgroup,\r\n    @Optional() @Inject(MATERIAL_COMPATIBILITY_MODE) public _isCompatibilityMode: boolean) {}\r\n\r\n  /**\r\n   * Whether or not the option is currently active and ready to be selected.\r\n   * An active option displays styles as if it is focused, but the\r\n   * focus is actually retained somewhere else. This comes in handy\r\n   * for components like autocomplete where focus must remain on the input.\r\n   */\r\n  get active(): boolean {\r\n    return this._active;\r\n  }\r\n\r\n  /**\r\n   * The displayed value of the option. It is necessary to show the selected option in the\r\n   * select's trigger.\r\n   */\r\n  get viewValue(): string {\r\n    // TODO(kara): Add input property alternative for node envs.\r\n    return this._getHostElement().textContent.trim();\r\n  }\r\n\r\n  /** Selects the option. */\r\n  select(): void {\r\n    this._selected = true;\r\n    this._emitSelectionChangeEvent();\r\n  }\r\n\r\n  /** Deselects the option. */\r\n  deselect(): void {\r\n    this._selected = false;\r\n    this._emitSelectionChangeEvent();\r\n  }\r\n\r\n  /** Sets focus onto this option. */\r\n  focus(): void {\r\n    this._getHostElement().focus();\r\n  }\r\n\r\n  /**\r\n   * This method sets display styles on the option to make it appear\r\n   * active. This is used by the ActiveDescendantKeyManager so key\r\n   * events will display the proper options as active on arrow key events.\r\n   */\r\n  setActiveStyles(): void {\r\n    this._active = true;\r\n  }\r\n\r\n  /**\r\n   * This method removes display styles on the option that made it appear\r\n   * active. This is used by the ActiveDescendantKeyManager so key\r\n   * events will display the proper options as active on arrow key events.\r\n   */\r\n  setInactiveStyles(): void {\r\n    this._active = false;\r\n  }\r\n\r\n  /** Ensures the option is selected when activated from the keyboard. */\r\n  _handleKeydown(event: KeyboardEvent): void {\r\n    if (event.keyCode === ENTER || event.keyCode === SPACE) {\r\n      this._selectViaInteraction();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Selects the option while indicating the selection came from the user. Used to\r\n   * determine if the select's view -> model callback should be invoked.\r\n   */\r\n  _selectViaInteraction(): void {\r\n    if (!this.disabled) {\r\n      this._selected = this.multiple ? !this._selected : true;\r\n      this._emitSelectionChangeEvent(true);\r\n    }\r\n  }\r\n\r\n  /** Returns the correct tabindex for the option depending on disabled state. */\r\n  _getTabIndex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  /** Fetches the host DOM element. */\r\n  _getHostElement(): HTMLElement {\r\n    return this._element.nativeElement;\r\n  }\r\n\r\n  /** Emits the selection change event. */\r\n  private _emitSelectionChangeEvent(isUserInput = false): void {\r\n    this.onSelectionChange.emit(new MdOptionSelectionChange(this, isUserInput));\r\n  }\r\n\r\n}\r\n","<span [ngSwitch]=\"_isCompatibilityMode\" *ngIf=\"multiple\">\r\n  <mat-pseudo-checkbox class=\"mat-option-pseudo-checkbox\" *ngSwitchCase=\"true\"\r\n      [state]=\"selected ? 'checked' : ''\" color=\"primary\"></mat-pseudo-checkbox>\r\n  <md-pseudo-checkbox class=\"mat-option-pseudo-checkbox\" *ngSwitchDefault\r\n      [state]=\"selected ? 'checked' : ''\" color=\"primary\"></md-pseudo-checkbox>\r\n</span>\r\n\r\n<ng-content></ng-content>\r\n<div class=\"mat-option-ripple\" *ngIf=\"!disabled\" md-ripple [mdRippleTrigger]=\"_getHostElement()\">\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MdRippleModule} from '../ripple/index';\r\nimport {MdSelectionModule} from '../selection/index';\r\nimport {MdOption} from './option';\r\nimport {MdOptgroup} from './optgroup';\r\n\r\n\r\n@NgModule({\r\n  imports: [MdRippleModule, CommonModule, MdSelectionModule],\r\n  exports: [MdOption, MdOptgroup],\r\n  declarations: [MdOption, MdOptgroup]\r\n})\r\nexport class MdOptionModule {}\r\n\r\n\r\nexport * from './option';\r\nexport * from './optgroup';\r\n","/**\r\n * Throws an exception when attempting to attach a null portal to a host.\r\n * @docs-private\r\n */\r\nexport function throwNullPortalError() {\r\n  throw Error('Must provide a portal to attach');\r\n}\r\n\r\n/**\r\n * Throws an exception when attempting to attach a portal to a host that is already attached.\r\n * @docs-private\r\n */\r\nexport function throwPortalAlreadyAttachedError() {\r\n  throw Error('Host already has a portal attached');\r\n}\r\n\r\n/**\r\n * Throws an exception when attempting to attach a portal to an already-disposed host.\r\n * @docs-private\r\n */\r\nexport function throwPortalHostAlreadyDisposedError() {\r\n  throw Error('This PortalHost has already been disposed');\r\n}\r\n\r\n/**\r\n * Throws an exception when attempting to attach an unknown portal type.\r\n * @docs-private\r\n */\r\nexport function throwUnknownPortalTypeError() {\r\n  throw Error('Attempting to attach an unknown Portal type. BasePortalHost accepts either' +\r\n                  'a ComponentPortal or a TemplatePortal.');\r\n}\r\n\r\n/**\r\n * Throws an exception when attempting to attach a portal to a null host.\r\n * @docs-private\r\n */\r\nexport function throwNullPortalHostError() {\r\n  throw Error('Attempting to attach a portal to a null PortalHost');\r\n}\r\n\r\n/**\r\n * Throws an exception when attempting to detach a portal that is not attached.\r\n * @docs-privatew\r\n */\r\nexport function throwNoPortalAttachedError() {\r\n  throw Error('Attempting to detach a portal that is not attached to a host');\r\n}\r\n","import {\r\n    TemplateRef,\r\n    ViewContainerRef,\r\n    ElementRef,\r\n    ComponentRef,\r\n    Injector\r\n} from '@angular/core';\r\nimport {\r\n    throwNullPortalHostError,\r\n    throwPortalAlreadyAttachedError,\r\n    throwNoPortalAttachedError,\r\n    throwNullPortalError,\r\n    throwPortalHostAlreadyDisposedError,\r\n    throwUnknownPortalTypeError\r\n} from './portal-errors';\r\nimport {ComponentType} from '../overlay/generic-component-type';\r\n\r\n\r\n\r\n/**\r\n * A `Portal` is something that you want to render somewhere else.\r\n * It can be attach to / detached from a `PortalHost`.\r\n */\r\nexport abstract class Portal<T> {\r\n  private _attachedHost: PortalHost;\r\n\r\n  /** Attach this portal to a host. */\r\n  attach(host: PortalHost): T {\r\n    if (host == null) {\r\n      throwNullPortalHostError();\r\n    }\r\n\r\n    if (host.hasAttached()) {\r\n      throwPortalAlreadyAttachedError();\r\n    }\r\n\r\n    this._attachedHost = host;\r\n    return <T> host.attach(this);\r\n  }\r\n\r\n  /** Detach this portal from its host */\r\n  detach(): void {\r\n    let host = this._attachedHost;\r\n    if (host == null) {\r\n      throwNoPortalAttachedError();\r\n    }\r\n\r\n    this._attachedHost = null;\r\n    return host.detach();\r\n  }\r\n\r\n  /** Whether this portal is attached to a host. */\r\n  get isAttached(): boolean {\r\n    return this._attachedHost != null;\r\n  }\r\n\r\n  /**\r\n   * Sets the PortalHost reference without performing `attach()`. This is used directly by\r\n   * the PortalHost when it is performing an `attach()` or `detach()`.\r\n   */\r\n  setAttachedHost(host: PortalHost) {\r\n    this._attachedHost = host;\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\r\n */\r\nexport class ComponentPortal<T> extends Portal<ComponentRef<T>> {\r\n  /** The type of the component that will be instantiated for attachment. */\r\n  component: ComponentType<T>;\r\n\r\n  /**\r\n   * [Optional] Where the attached component should live in Angular's *logical* component tree.\r\n   * This is different from where the component *renders*, which is determined by the PortalHost.\r\n   * The origin is necessary when the host is outside of the Angular application context.\r\n   */\r\n  viewContainerRef: ViewContainerRef;\r\n\r\n  /** [Optional] Injector used for the instantiation of the component. */\r\n  injector: Injector;\r\n\r\n  constructor(\r\n      component: ComponentType<T>,\r\n      viewContainerRef: ViewContainerRef = null,\r\n      injector: Injector = null) {\r\n    super();\r\n    this.component = component;\r\n    this.viewContainerRef = viewContainerRef;\r\n    this.injector = injector;\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\r\n */\r\nexport class TemplatePortal extends Portal<Map<string, any>> {\r\n  /** The embedded template that will be used to instantiate an embedded View in the host. */\r\n  templateRef: TemplateRef<any>;\r\n\r\n  /** Reference to the ViewContainer into which the template will be stamped out. */\r\n  viewContainerRef: ViewContainerRef;\r\n\r\n  /**\r\n   * Additional locals for the instantiated embedded view.\r\n   * These locals can be seen as \"exports\" for the template, such as how ngFor has\r\n   * index / event / odd.\r\n   * See https://angular.io/docs/ts/latest/api/core/EmbeddedViewRef-class.html\r\n   */\r\n  locals: Map<string, any> = new Map<string, any>();\r\n\r\n  constructor(template: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n    super();\r\n    this.templateRef = template;\r\n    this.viewContainerRef = viewContainerRef;\r\n  }\r\n\r\n  get origin(): ElementRef {\r\n    return this.templateRef.elementRef;\r\n  }\r\n\r\n  attach(host: PortalHost, locals?: Map<string, any>): Map<string, any> {\r\n    this.locals = locals == null ? new Map<string, any>() : locals;\r\n    return super.attach(host);\r\n  }\r\n\r\n  detach(): void {\r\n    this.locals = new Map<string, any>();\r\n    return super.detach();\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * A `PortalHost` is an space that can contain a single `Portal`.\r\n */\r\nexport interface PortalHost {\r\n  attach(portal: Portal<any>): any;\r\n\r\n  detach(): any;\r\n\r\n  dispose(): void;\r\n\r\n  hasAttached(): boolean;\r\n}\r\n\r\n\r\n/**\r\n * Partial implementation of PortalHost that only deals with attaching either a\r\n * ComponentPortal or a TemplatePortal.\r\n */\r\nexport abstract class BasePortalHost implements PortalHost {\r\n  /** The portal currently attached to the host. */\r\n  private _attachedPortal: Portal<any>;\r\n\r\n  /** A function that will permanently dispose this host. */\r\n  private _disposeFn: () => void;\r\n\r\n  /** Whether this host has already been permanently disposed. */\r\n  private _isDisposed: boolean = false;\r\n\r\n  /** Whether this host has an attached portal. */\r\n  hasAttached(): boolean {\r\n    return !!this._attachedPortal;\r\n  }\r\n\r\n  attach(portal: Portal<any>): any {\r\n    if (!portal) {\r\n      throwNullPortalError();\r\n    }\r\n\r\n    if (this.hasAttached()) {\r\n      throwPortalAlreadyAttachedError();\r\n    }\r\n\r\n    if (this._isDisposed) {\r\n      throwPortalHostAlreadyDisposedError();\r\n    }\r\n\r\n    if (portal instanceof ComponentPortal) {\r\n      this._attachedPortal = portal;\r\n      return this.attachComponentPortal(portal);\r\n    } else if (portal instanceof TemplatePortal) {\r\n      this._attachedPortal = portal;\r\n      return this.attachTemplatePortal(portal);\r\n    }\r\n\r\n    throwUnknownPortalTypeError();\r\n  }\r\n\r\n  abstract attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\r\n\r\n  abstract attachTemplatePortal(portal: TemplatePortal): Map<string, any>;\r\n\r\n  detach(): void {\r\n    if (this._attachedPortal) {\r\n      this._attachedPortal.setAttachedHost(null);\r\n      this._attachedPortal = null;\r\n    }\r\n\r\n    this._invokeDisposeFn();\r\n  }\r\n\r\n  dispose() {\r\n    if (this.hasAttached()) {\r\n      this.detach();\r\n    }\r\n\r\n    this._invokeDisposeFn();\r\n    this._isDisposed = true;\r\n  }\r\n\r\n  setDisposeFn(fn: () => void) {\r\n    this._disposeFn = fn;\r\n  }\r\n\r\n  private _invokeDisposeFn() {\r\n    if (this._disposeFn) {\r\n      this._disposeFn();\r\n      this._disposeFn = null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n    NgModule,\r\n    ComponentRef,\r\n    Directive,\r\n    TemplateRef,\r\n    ComponentFactoryResolver,\r\n    ViewContainerRef,\r\n    OnDestroy,\r\n    Input,\r\n} from '@angular/core';\r\nimport {Portal, TemplatePortal, ComponentPortal, BasePortalHost} from './portal';\r\n\r\n\r\n/**\r\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\r\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\r\n *\r\n * Usage:\r\n * <ng-template portal #greeting>\r\n *   <p> Hello {{name}} </p>\r\n * </ng-template>\r\n */\r\n@Directive({\r\n  selector: '[cdk-portal], [cdkPortal], [portal]',\r\n  exportAs: 'cdkPortal',\r\n})\r\nexport class TemplatePortalDirective extends TemplatePortal {\r\n  constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n    super(templateRef, viewContainerRef);\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Directive version of a PortalHost. Because the directive *is* a PortalHost, portals can be\r\n * directly attached to it, enabling declarative use.\r\n *\r\n * Usage:\r\n * <ng-template [cdkPortalHost]=\"greeting\"></ng-template>\r\n */\r\n@Directive({\r\n  selector: '[cdkPortalHost], [portalHost]',\r\n  inputs: ['portal: cdkPortalHost']\r\n})\r\nexport class PortalHostDirective extends BasePortalHost implements OnDestroy {\r\n  /** The attached portal. */\r\n  private _portal: Portal<any>;\r\n\r\n  constructor(\r\n      private _componentFactoryResolver: ComponentFactoryResolver,\r\n      private _viewContainerRef: ViewContainerRef) {\r\n    super();\r\n  }\r\n\r\n  /** @deprecated */\r\n  @Input('portalHost')\r\n  get _deprecatedPortal() { return this.portal; }\r\n  set _deprecatedPortal(v) { this.portal = v; }\r\n\r\n  /** Portal associated with the Portal host. */\r\n  get portal(): Portal<any> {\r\n    return this._portal;\r\n  }\r\n\r\n  set portal(portal: Portal<any>) {\r\n    if (this.hasAttached()) {\r\n      super.detach();\r\n    }\r\n\r\n    if (portal) {\r\n      super.attach(portal);\r\n    }\r\n\r\n    this._portal = portal;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    super.dispose();\r\n    this._portal = null;\r\n  }\r\n\r\n  /**\r\n   * Attach the given ComponentPortal to this PortalHost using the ComponentFactoryResolver.\r\n   *\r\n   * @param portal Portal to be attached to the portal host.\r\n   */\r\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\r\n    portal.setAttachedHost(this);\r\n\r\n    // If the portal specifies an origin, use that as the logical location of the component\r\n    // in the application tree. Otherwise use the location of this PortalHost.\r\n    let viewContainerRef = portal.viewContainerRef != null ?\r\n        portal.viewContainerRef :\r\n        this._viewContainerRef;\r\n\r\n    let componentFactory =\r\n        this._componentFactoryResolver.resolveComponentFactory(portal.component);\r\n    let ref = viewContainerRef.createComponent(\r\n        componentFactory, viewContainerRef.length,\r\n        portal.injector || viewContainerRef.parentInjector);\r\n\r\n    super.setDisposeFn(() => ref.destroy());\r\n    this._portal = portal;\r\n\r\n    return ref;\r\n  }\r\n\r\n  /**\r\n   * Attach the given TemplatePortal to this PortlHost as an embedded View.\r\n   * @param portal Portal to be attached.\r\n   */\r\n  attachTemplatePortal(portal: TemplatePortal): Map<string, any> {\r\n    portal.setAttachedHost(this);\r\n\r\n    this._viewContainerRef.createEmbeddedView(portal.templateRef);\r\n    super.setDisposeFn(() => this._viewContainerRef.clear());\r\n\r\n    this._portal = portal;\r\n\r\n    // TODO(jelbourn): return locals from view\r\n    return new Map<string, any>();\r\n  }\r\n}\r\n\r\n\r\n@NgModule({\r\n  exports: [TemplatePortalDirective, PortalHostDirective],\r\n  declarations: [TemplatePortalDirective, PortalHostDirective],\r\n})\r\nexport class PortalModule {}\r\n","import {PositionStrategy} from './position/position-strategy';\r\nimport {LayoutDirection} from '../rtl/dir';\r\nimport {ScrollStrategy} from './scroll/scroll-strategy';\r\n\r\n\r\n/**\r\n * OverlayState is a bag of values for either the initial configuration or current state of an\r\n * overlay.\r\n */\r\nexport class OverlayState {\r\n  /** Strategy with which to position the overlay. */\r\n  positionStrategy: PositionStrategy;\r\n\r\n  /** Strategy to be used when handling scroll events while the overlay is open. */\r\n  scrollStrategy: ScrollStrategy;\r\n\r\n  /** Custom class to add to the overlay pane. */\r\n  panelClass: string = '';\r\n\r\n  /** Whether the overlay has a backdrop. */\r\n  hasBackdrop: boolean = false;\r\n\r\n  /** Custom class to add to the backdrop */\r\n  backdropClass: string = 'cdk-overlay-dark-backdrop';\r\n\r\n  /** The width of the overlay panel. If a number is provided, pixel units are assumed. */\r\n  width: number | string;\r\n\r\n  /** The height of the overlay panel. If a number is provided, pixel units are assumed. */\r\n  height: number | string;\r\n\r\n  /** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */\r\n  minWidth: number | string;\r\n\r\n  /** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */\r\n  minHeight: number | string;\r\n\r\n  /** The direction of the text in the overlay panel. */\r\n  direction: LayoutDirection = 'ltr';\r\n\r\n  // TODO(jelbourn): configuration still to add\r\n  // - focus trap\r\n  // - disable pointer events\r\n  // - z-index\r\n}\r\n","import {\r\n  ComponentFactoryResolver,\r\n  ComponentRef,\r\n  EmbeddedViewRef,\r\n  ApplicationRef,\r\n  Injector,\r\n} from '@angular/core';\r\nimport {BasePortalHost, ComponentPortal, TemplatePortal} from './portal';\r\n\r\n\r\n/**\r\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\r\n * application context.\r\n *\r\n * This is the only part of the portal core that directly touches the DOM.\r\n */\r\nexport class DomPortalHost extends BasePortalHost {\r\n  constructor(\r\n      private _hostDomElement: Element,\r\n      private _componentFactoryResolver: ComponentFactoryResolver,\r\n      private _appRef: ApplicationRef,\r\n      private _defaultInjector: Injector) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\r\n   * @param portal Portal to be attached\r\n   */\r\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\r\n    let componentFactory = this._componentFactoryResolver.resolveComponentFactory(portal.component);\r\n    let componentRef: ComponentRef<T>;\r\n\r\n    // If the portal specifies a ViewContainerRef, we will use that as the attachment point\r\n    // for the component (in terms of Angular's component tree, not rendering).\r\n    // When the ViewContainerRef is missing, we use the factory to create the component directly\r\n    // and then manually attach the view to the application.\r\n    if (portal.viewContainerRef) {\r\n      componentRef = portal.viewContainerRef.createComponent(\r\n          componentFactory,\r\n          portal.viewContainerRef.length,\r\n          portal.injector || portal.viewContainerRef.parentInjector);\r\n\r\n      this.setDisposeFn(() => componentRef.destroy());\r\n    } else {\r\n      componentRef = componentFactory.create(portal.injector || this._defaultInjector);\r\n      this._appRef.attachView(componentRef.hostView);\r\n      this.setDisposeFn(() => {\r\n        this._appRef.detachView(componentRef.hostView);\r\n        componentRef.destroy();\r\n      });\r\n    }\r\n    // At this point the component has been instantiated, so we move it to the location in the DOM\r\n    // where we want it to be rendered.\r\n    this._hostDomElement.appendChild(this._getComponentRootNode(componentRef));\r\n\r\n    return componentRef;\r\n  }\r\n\r\n  /**\r\n   * Attaches a template portal to the DOM as an embedded view.\r\n   * @param portal Portal to be attached.\r\n   */\r\n  attachTemplatePortal(portal: TemplatePortal): Map<string, any> {\r\n    let viewContainer = portal.viewContainerRef;\r\n    let viewRef = viewContainer.createEmbeddedView(portal.templateRef);\r\n    viewRef.detectChanges();\r\n\r\n    // The method `createEmbeddedView` will add the view as a child of the viewContainer.\r\n    // But for the DomPortalHost the view can be added everywhere in the DOM (e.g Overlay Container)\r\n    // To move the view to the specified host element. We just re-append the existing root nodes.\r\n    viewRef.rootNodes.forEach(rootNode => this._hostDomElement.appendChild(rootNode));\r\n\r\n    this.setDisposeFn((() => {\r\n      let index = viewContainer.indexOf(viewRef);\r\n      if (index !== -1) {\r\n        viewContainer.remove(index);\r\n      }\r\n    }));\r\n\r\n    // TODO(jelbourn): Return locals from view.\r\n    return new Map<string, any>();\r\n  }\r\n\r\n  /**\r\n   * Clears out a portal from the DOM.\r\n   */\r\n  dispose(): void {\r\n    super.dispose();\r\n    if (this._hostDomElement.parentNode != null) {\r\n      this._hostDomElement.parentNode.removeChild(this._hostDomElement);\r\n    }\r\n  }\r\n\r\n  /** Gets the root HTMLElement for an instantiated component. */\r\n  private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\r\n    return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n  }\r\n}\r\n","import {NgZone} from '@angular/core';\r\nimport {PortalHost, Portal} from '../portal/portal';\r\nimport {OverlayState} from './overlay-state';\r\nimport {ScrollStrategy} from './scroll/scroll-strategy';\r\nimport {Observable, Subject} from 'rxjs';\r\n\r\n\r\n/**\r\n * Reference to an overlay that has been created with the Overlay service.\r\n * Used to manipulate or dispose of said overlay.\r\n */\r\nexport class OverlayRef implements PortalHost {\r\n  private _backdropElement: HTMLElement = null;\r\n  private _backdropClick: Subject<any> = new Subject();\r\n  private _attachments = new Subject<void>();\r\n  private _detachments = new Subject<void>();\r\n\r\n  constructor(\r\n      private _portalHost: PortalHost,\r\n      private _pane: HTMLElement,\r\n      private _state: OverlayState,\r\n      private _scrollStrategy: ScrollStrategy,\r\n      private _ngZone: NgZone) {\r\n\r\n    _scrollStrategy.attach(this);\r\n  }\r\n\r\n  /** The overlay's HTML element */\r\n  get overlayElement(): HTMLElement {\r\n    return this._pane;\r\n  }\r\n\r\n  /**\r\n   * Attaches the overlay to a portal instance and adds the backdrop.\r\n   * @param portal Portal instance to which to attach the overlay.\r\n   * @returns The portal attachment result.\r\n   */\r\n  attach(portal: Portal<any>): any {\r\n    let attachResult = this._portalHost.attach(portal);\r\n\r\n    // Update the pane element with the given state configuration.\r\n    this._updateStackingOrder();\r\n    this.updateSize();\r\n    this.updateDirection();\r\n    this.updatePosition();\r\n    this._scrollStrategy.enable();\r\n\r\n    // Enable pointer events for the overlay pane element.\r\n    this._togglePointerEvents(true);\r\n\r\n    if (this._state.hasBackdrop) {\r\n      this._attachBackdrop();\r\n    }\r\n\r\n    if (this._state.panelClass) {\r\n      this._pane.classList.add(this._state.panelClass);\r\n    }\r\n\r\n    // Only emit the `attachments` event once all other setup is done.\r\n    this._attachments.next();\r\n\r\n    return attachResult;\r\n  }\r\n\r\n  /**\r\n   * Detaches an overlay from a portal.\r\n   * @returns Resolves when the overlay has been detached.\r\n   */\r\n  detach(): Promise<any> {\r\n    this.detachBackdrop();\r\n\r\n    // When the overlay is detached, the pane element should disable pointer events.\r\n    // This is necessary because otherwise the pane element will cover the page and disable\r\n    // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\r\n    this._togglePointerEvents(false);\r\n    this._scrollStrategy.disable();\r\n\r\n    let detachmentResult = this._portalHost.detach();\r\n\r\n    // Only emit after everything is detached.\r\n    this._detachments.next();\r\n\r\n    return detachmentResult;\r\n  }\r\n\r\n  /**\r\n   * Cleans up the overlay from the DOM.\r\n   */\r\n  dispose(): void {\r\n    if (this._state.positionStrategy) {\r\n      this._state.positionStrategy.dispose();\r\n    }\r\n\r\n    if (this._scrollStrategy) {\r\n      this._scrollStrategy.disable();\r\n      this._scrollStrategy = null;\r\n    }\r\n\r\n    this.detachBackdrop();\r\n    this._portalHost.dispose();\r\n    this._attachments.complete();\r\n    this._backdropClick.complete();\r\n    this._detachments.next();\r\n    this._detachments.complete();\r\n  }\r\n\r\n  /**\r\n   * Checks whether the overlay has been attached.\r\n   */\r\n  hasAttached(): boolean {\r\n    return this._portalHost.hasAttached();\r\n  }\r\n\r\n  /**\r\n   * Returns an observable that emits when the backdrop has been clicked.\r\n   */\r\n  backdropClick(): Observable<void> {\r\n    return this._backdropClick.asObservable();\r\n  }\r\n\r\n  /** Returns an observable that emits when the overlay has been attached. */\r\n  attachments(): Observable<void> {\r\n    return this._attachments.asObservable();\r\n  }\r\n\r\n  /** Returns an observable that emits when the overlay has been detached. */\r\n  detachments(): Observable<void> {\r\n    return this._detachments.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Gets the current state config of the overlay.\r\n   */\r\n  getState(): OverlayState {\r\n    return this._state;\r\n  }\r\n\r\n  /** Updates the position of the overlay based on the position strategy. */\r\n  updatePosition() {\r\n    if (this._state.positionStrategy) {\r\n      this._state.positionStrategy.apply(this._pane);\r\n    }\r\n  }\r\n\r\n  /** Updates the text direction of the overlay panel. */\r\n  private updateDirection() {\r\n    this._pane.setAttribute('dir', this._state.direction);\r\n  }\r\n\r\n  /** Updates the size of the overlay based on the overlay config. */\r\n  updateSize() {\r\n    if (this._state.width || this._state.width === 0) {\r\n      this._pane.style.width = formatCssUnit(this._state.width);\r\n    }\r\n\r\n    if (this._state.height || this._state.height === 0) {\r\n      this._pane.style.height = formatCssUnit(this._state.height);\r\n    }\r\n\r\n    if (this._state.minWidth || this._state.minWidth === 0) {\r\n      this._pane.style.minWidth = formatCssUnit(this._state.minWidth);\r\n    }\r\n\r\n    if (this._state.minHeight || this._state.minHeight === 0) {\r\n      this._pane.style.minHeight = formatCssUnit(this._state.minHeight);\r\n    }\r\n  }\r\n\r\n  /** Toggles the pointer events for the overlay pane element. */\r\n  private _togglePointerEvents(enablePointer: boolean) {\r\n    this._pane.style.pointerEvents = enablePointer ? 'auto' : 'none';\r\n  }\r\n\r\n  /** Attaches a backdrop for this overlay. */\r\n  private _attachBackdrop() {\r\n    this._backdropElement = document.createElement('div');\r\n    this._backdropElement.classList.add('cdk-overlay-backdrop');\r\n    this._backdropElement.classList.add(this._state.backdropClass);\r\n\r\n    // Insert the backdrop before the pane in the DOM order,\r\n    // in order to handle stacked overlays properly.\r\n    this._pane.parentElement.insertBefore(this._backdropElement, this._pane);\r\n\r\n    // Forward backdrop clicks such that the consumer of the overlay can perform whatever\r\n    // action desired when such a click occurs (usually closing the overlay).\r\n    this._backdropElement.addEventListener('click', () => this._backdropClick.next(null));\r\n\r\n    // Add class to fade-in the backdrop after one frame.\r\n    requestAnimationFrame(() => {\r\n      if (this._backdropElement) {\r\n        this._backdropElement.classList.add('cdk-overlay-backdrop-showing');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates the stacking order of the element, moving it to the top if necessary.\r\n   * This is required in cases where one overlay was detached, while another one,\r\n   * that should be behind it, was destroyed. The next time both of them are opened,\r\n   * the stacking will be wrong, because the detached element's pane will still be\r\n   * in its original DOM position.\r\n   */\r\n  private _updateStackingOrder() {\r\n    if (this._pane.nextSibling) {\r\n      this._pane.parentNode.appendChild(this._pane);\r\n    }\r\n  }\r\n\r\n  /** Detaches the backdrop (if any) associated with the overlay. */\r\n  detachBackdrop(): void {\r\n    let backdropToDetach = this._backdropElement;\r\n\r\n    if (backdropToDetach) {\r\n      let finishDetach = () => {\r\n        // It may not be attached to anything in certain cases (e.g. unit tests).\r\n        if (backdropToDetach && backdropToDetach.parentNode) {\r\n          backdropToDetach.parentNode.removeChild(backdropToDetach);\r\n        }\r\n\r\n        // It is possible that a new portal has been attached to this overlay since we started\r\n        // removing the backdrop. If that is the case, only clear the backdrop reference if it\r\n        // is still the same instance that we started to remove.\r\n        if (this._backdropElement == backdropToDetach) {\r\n          this._backdropElement = null;\r\n        }\r\n      };\r\n\r\n      backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\r\n      backdropToDetach.classList.remove(this._state.backdropClass);\r\n      backdropToDetach.addEventListener('transitionend', finishDetach);\r\n\r\n      // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\r\n      // In this case we make it unclickable and we try to remove it after a delay.\r\n      backdropToDetach.style.pointerEvents = 'none';\r\n\r\n      // Run this outside the Angular zone because there's nothing that Angular cares about.\r\n      // If it were to run inside the Angular zone, every test that used Overlay would have to be\r\n      // either async or fakeAsync.\r\n      this._ngZone.runOutsideAngular(() => {\r\n        setTimeout(finishDetach, 500);\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nfunction formatCssUnit(value: number | string) {\r\n  return typeof value === 'string' ? value as string : `${value}px`;\r\n}\r\n","/** Horizontal dimension of a connection point on the perimeter of the origin or overlay element. */\r\nimport {Optional} from '@angular/core';\r\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\r\n\r\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\r\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\r\n\r\n\r\n/** A connection point on the origin element. */\r\nexport interface OriginConnectionPosition {\r\n  originX: HorizontalConnectionPos;\r\n  originY: VerticalConnectionPos;\r\n}\r\n\r\n/** A connection point on the overlay element. */\r\nexport interface OverlayConnectionPosition {\r\n  overlayX: HorizontalConnectionPos;\r\n  overlayY: VerticalConnectionPos;\r\n}\r\n\r\n/** The points of the origin element and the overlay element to connect. */\r\nexport class ConnectionPositionPair {\r\n  originX: HorizontalConnectionPos;\r\n  originY: VerticalConnectionPos;\r\n  overlayX: HorizontalConnectionPos;\r\n  overlayY: VerticalConnectionPos;\r\n\r\n  constructor(origin: OriginConnectionPosition, overlay: OverlayConnectionPosition) {\r\n    this.originX = origin.originX;\r\n    this.originY = origin.originY;\r\n    this.overlayX = overlay.overlayX;\r\n    this.overlayY = overlay.overlayY;\r\n  }\r\n}\r\n\r\n/**\r\n * Set of properties regarding the position of the origin and overlay relative to the viewport\r\n * with respect to the containing Scrollable elements.\r\n *\r\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\r\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\r\n *\r\n * The overlay and origin are outside view if there is no overlap between their bounding client\r\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\r\n *\r\n *       -----------                    -----------\r\n *       | outside |                    | clipped |\r\n *       |  view   |              --------------------------\r\n *       |         |              |     |         |        |\r\n *       ----------               |     -----------        |\r\n *  --------------------------    |                        |\r\n *  |                        |    |      Scrollable        |\r\n *  |                        |    |                        |\r\n *  |                        |     --------------------------\r\n *  |      Scrollable        |\r\n *  |                        |\r\n *  --------------------------\r\n */\r\nexport class ScrollableViewProperties {\r\n  isOriginClipped: boolean;\r\n  isOriginOutsideView: boolean;\r\n  isOverlayClipped: boolean;\r\n  isOverlayOutsideView: boolean;\r\n}\r\n\r\n/** The change event emitted by the strategy when a fallback position is used. */\r\nexport class ConnectedOverlayPositionChange {\r\n  constructor(public connectionPair: ConnectionPositionPair,\r\n              @Optional() public scrollableViewProperties: ScrollableViewProperties) {}\r\n}\r\n","import {PositionStrategy} from './position-strategy';\r\nimport {ElementRef} from '@angular/core';\r\nimport {ViewportRuler} from './viewport-ruler';\r\nimport {\r\n  ConnectionPositionPair,\r\n  OriginConnectionPosition,\r\n  OverlayConnectionPosition,\r\n  ConnectedOverlayPositionChange, ScrollableViewProperties\r\n} from './connected-position';\r\nimport {Subject, Observable} from 'rxjs';\r\nimport {Scrollable} from '../scroll/scrollable';\r\n\r\n/**\r\n * Container to hold the bounding positions of a particular element with respect to the viewport,\r\n * where top and bottom are the y-axis coordinates of the bounding rectangle and left and right are\r\n * the x-axis coordinates.\r\n */\r\ntype ElementBoundingPositions = {\r\n  top: number;\r\n  right: number;\r\n  bottom: number;\r\n  left: number;\r\n};\r\n\r\n/**\r\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\r\n * implicit position relative some origin element. The relative position is defined in terms of\r\n * a point on the origin element that is connected to a point on the overlay element. For example,\r\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\r\n * of the overlay.\r\n */\r\nexport class ConnectedPositionStrategy implements PositionStrategy {\r\n  private _dir = 'ltr';\r\n\r\n  /** The offset in pixels for the overlay connection point on the x-axis */\r\n  private _offsetX: number = 0;\r\n\r\n  /** The offset in pixels for the overlay connection point on the y-axis */\r\n  private _offsetY: number = 0;\r\n\r\n  /** The Scrollable containers used to check scrollable view properties on position change. */\r\n  private scrollables: Scrollable[] = [];\r\n\r\n  /** Whether the we're dealing with an RTL context */\r\n  get _isRtl() {\r\n    return this._dir === 'rtl';\r\n  }\r\n\r\n  /** Ordered list of preferred positions, from most to least desirable. */\r\n  _preferredPositions: ConnectionPositionPair[] = [];\r\n\r\n  /** The origin element against which the overlay will be positioned. */\r\n  private _origin: HTMLElement;\r\n\r\n  /** The overlay pane element. */\r\n  private _pane: HTMLElement;\r\n\r\n  /** The last position to have been calculated as the best fit position. */\r\n  private _lastConnectedPosition: ConnectionPositionPair;\r\n\r\n  _onPositionChange:\r\n      Subject<ConnectedOverlayPositionChange> = new Subject<ConnectedOverlayPositionChange>();\r\n\r\n  /** Emits an event when the connection point changes. */\r\n  get onPositionChange(): Observable<ConnectedOverlayPositionChange> {\r\n    return this._onPositionChange.asObservable();\r\n  }\r\n\r\n  constructor(\r\n      private _connectedTo: ElementRef,\r\n      private _originPos: OriginConnectionPosition,\r\n      private _overlayPos: OverlayConnectionPosition,\r\n      private _viewportRuler: ViewportRuler) {\r\n    this._origin = this._connectedTo.nativeElement;\r\n    this.withFallbackPosition(_originPos, _overlayPos);\r\n  }\r\n\r\n  /** Ordered list of preferred positions, from most to least desirable. */\r\n  get positions() {\r\n    return this._preferredPositions;\r\n  }\r\n\r\n  /**\r\n   * To be used to for any cleanup after the element gets destroyed.\r\n   */\r\n  dispose() { }\r\n\r\n  /**\r\n   * Updates the position of the overlay element, using whichever preferred position relative\r\n   * to the origin fits on-screen.\r\n   * @docs-private\r\n   *\r\n   * @param element Element to which to apply the CSS styles.\r\n   * @returns Resolves when the styles have been applied.\r\n   */\r\n  apply(element: HTMLElement): Promise<void> {\r\n    // Cache the overlay pane element in case re-calculating position is necessary\r\n    this._pane = element;\r\n\r\n    // We need the bounding rects for the origin and the overlay to determine how to position\r\n    // the overlay relative to the origin.\r\n    const originRect = this._origin.getBoundingClientRect();\r\n    const overlayRect = element.getBoundingClientRect();\r\n\r\n    // We use the viewport rect to determine whether a position would go off-screen.\r\n    const viewportRect = this._viewportRuler.getViewportRect();\r\n\r\n    // Fallback point if none of the fallbacks fit into the viewport.\r\n    let fallbackPoint: OverlayPoint = null;\r\n    let fallbackPosition: ConnectionPositionPair = null;\r\n\r\n    // We want to place the overlay in the first of the preferred positions such that the\r\n    // overlay fits on-screen.\r\n    for (let pos of this._preferredPositions) {\r\n      // Get the (x, y) point of connection on the origin, and then use that to get the\r\n      // (top, left) coordinate for the overlay at `pos`.\r\n      let originPoint = this._getOriginConnectionPoint(originRect, pos);\r\n      let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, viewportRect, pos);\r\n\r\n      // If the overlay in the calculated position fits on-screen, put it there and we're done.\r\n      if (overlayPoint.fitsInViewport) {\r\n        this._setElementPosition(element, overlayRect, overlayPoint, pos);\r\n\r\n        // Save the last connected position in case the position needs to be re-calculated.\r\n        this._lastConnectedPosition = pos;\r\n\r\n        // Notify that the position has been changed along with its change properties.\r\n        const scrollableViewProperties = this.getScrollableViewProperties(element);\r\n        const positionChange = new ConnectedOverlayPositionChange(pos, scrollableViewProperties);\r\n        this._onPositionChange.next(positionChange);\r\n\r\n        return Promise.resolve(null);\r\n      } else if (!fallbackPoint || fallbackPoint.visibleArea < overlayPoint.visibleArea) {\r\n        fallbackPoint = overlayPoint;\r\n        fallbackPosition = pos;\r\n      }\r\n    }\r\n\r\n    // If none of the preferred positions were in the viewport, take the one\r\n    // with the largest visible area.\r\n    this._setElementPosition(element, overlayRect, fallbackPoint, fallbackPosition);\r\n\r\n    return Promise.resolve(null);\r\n  }\r\n\r\n  /**\r\n   * This re-aligns the overlay element with the trigger in its last calculated position,\r\n   * even if a position higher in the \"preferred positions\" list would now fit. This\r\n   * allows one to re-align the panel without changing the orientation of the panel.\r\n   */\r\n  recalculateLastPosition(): void {\r\n    const originRect = this._origin.getBoundingClientRect();\r\n    const overlayRect = this._pane.getBoundingClientRect();\r\n    const viewportRect = this._viewportRuler.getViewportRect();\r\n    const lastPosition = this._lastConnectedPosition || this._preferredPositions[0];\r\n\r\n    let originPoint = this._getOriginConnectionPoint(originRect, lastPosition);\r\n    let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, viewportRect, lastPosition);\r\n    this._setElementPosition(this._pane, overlayRect, overlayPoint, lastPosition);\r\n  }\r\n\r\n  /**\r\n   * Sets the list of Scrollable containers that host the origin element so that\r\n   * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\r\n   * Scrollable must be an ancestor element of the strategy's origin element.\r\n   */\r\n  withScrollableContainers(scrollables: Scrollable[]) {\r\n    this.scrollables = scrollables;\r\n  }\r\n\r\n  /**\r\n   * Adds a new preferred fallback position.\r\n   * @param originPos\r\n   * @param overlayPos\r\n   */\r\n  withFallbackPosition(\r\n      originPos: OriginConnectionPosition,\r\n      overlayPos: OverlayConnectionPosition): this {\r\n    this._preferredPositions.push(new ConnectionPositionPair(originPos, overlayPos));\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the layout direction so the overlay's position can be adjusted to match.\r\n   * @param dir New layout direction.\r\n   */\r\n  withDirection(dir: 'ltr' | 'rtl'): this {\r\n    this._dir = dir;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets an offset for the overlay's connection point on the x-axis\r\n   * @param offset New offset in the X axis.\r\n   */\r\n  withOffsetX(offset: number): this {\r\n    this._offsetX = offset;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets an offset for the overlay's connection point on the y-axis\r\n   * @param  offset New offset in the Y axis.\r\n   */\r\n  withOffsetY(offset: number): this {\r\n    this._offsetY = offset;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Gets the horizontal (x) \"start\" dimension based on whether the overlay is in an RTL context.\r\n   * @param rect\r\n   */\r\n  private _getStartX(rect: ClientRect): number {\r\n    return this._isRtl ? rect.right : rect.left;\r\n  }\r\n\r\n  /**\r\n   * Gets the horizontal (x) \"end\" dimension based on whether the overlay is in an RTL context.\r\n   * @param rect\r\n   */\r\n  private _getEndX(rect: ClientRect): number {\r\n    return this._isRtl ? rect.left : rect.right;\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\r\n   * @param originRect\r\n   * @param pos\r\n   */\r\n  private _getOriginConnectionPoint(originRect: ClientRect, pos: ConnectionPositionPair): Point {\r\n    const originStartX = this._getStartX(originRect);\r\n    const originEndX = this._getEndX(originRect);\r\n\r\n    let x: number;\r\n    if (pos.originX == 'center') {\r\n      x = originStartX + (originRect.width / 2);\r\n    } else {\r\n      x = pos.originX == 'start' ? originStartX : originEndX;\r\n    }\r\n\r\n    let y: number;\r\n    if (pos.originY == 'center') {\r\n      y = originRect.top + (originRect.height / 2);\r\n    } else {\r\n      y = pos.originY == 'top' ? originRect.top : originRect.bottom;\r\n    }\r\n\r\n    return {x, y};\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\r\n   * origin point to which the overlay should be connected, as well as how much of the element\r\n   * would be inside the viewport at that position.\r\n   */\r\n  private _getOverlayPoint(\r\n      originPoint: Point,\r\n      overlayRect: ClientRect,\r\n      viewportRect: ClientRect,\r\n      pos: ConnectionPositionPair): OverlayPoint {\r\n    // Calculate the (overlayStartX, overlayStartY), the start of the potential overlay position\r\n    // relative to the origin point.\r\n    let overlayStartX: number;\r\n    if (pos.overlayX == 'center') {\r\n      overlayStartX = -overlayRect.width / 2;\r\n    } else if (pos.overlayX === 'start') {\r\n      overlayStartX = this._isRtl ? -overlayRect.width : 0;\r\n    } else {\r\n      overlayStartX = this._isRtl ? 0 : -overlayRect.width;\r\n    }\r\n\r\n    let overlayStartY: number;\r\n    if (pos.overlayY == 'center') {\r\n      overlayStartY = -overlayRect.height / 2;\r\n    } else {\r\n      overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\r\n    }\r\n\r\n    // The (x, y) coordinates of the overlay.\r\n    let x = originPoint.x + overlayStartX + this._offsetX;\r\n    let y = originPoint.y + overlayStartY + this._offsetY;\r\n\r\n    // How much the overlay would overflow at this position, on each side.\r\n    let leftOverflow = 0 - x;\r\n    let rightOverflow = (x + overlayRect.width) - viewportRect.width;\r\n    let topOverflow = 0 - y;\r\n    let bottomOverflow = (y + overlayRect.height) - viewportRect.height;\r\n\r\n    // Visible parts of the element on each axis.\r\n    let visibleWidth = this._subtractOverflows(overlayRect.width, leftOverflow, rightOverflow);\r\n    let visibleHeight = this._subtractOverflows(overlayRect.height, topOverflow, bottomOverflow);\r\n\r\n    // The area of the element that's within the viewport.\r\n    let visibleArea = visibleWidth * visibleHeight;\r\n    let fitsInViewport = (overlayRect.width * overlayRect.height) === visibleArea;\r\n\r\n    return {x, y, fitsInViewport, visibleArea};\r\n  }\r\n\r\n  /**\r\n   * Gets the view properties of the trigger and overlay, including whether they are clipped\r\n   * or completely outside the view of any of the strategy's scrollables.\r\n   */\r\n  private getScrollableViewProperties(overlay: HTMLElement): ScrollableViewProperties {\r\n    const originBounds = this._getElementBounds(this._origin);\r\n    const overlayBounds = this._getElementBounds(overlay);\r\n    const scrollContainerBounds = this.scrollables.map((scrollable: Scrollable) => {\r\n      return this._getElementBounds(scrollable.getElementRef().nativeElement);\r\n    });\r\n\r\n    return {\r\n      isOriginClipped: this.isElementClipped(originBounds, scrollContainerBounds),\r\n      isOriginOutsideView: this.isElementOutsideView(originBounds, scrollContainerBounds),\r\n      isOverlayClipped: this.isElementClipped(overlayBounds, scrollContainerBounds),\r\n      isOverlayOutsideView: this.isElementOutsideView(overlayBounds, scrollContainerBounds),\r\n    };\r\n  }\r\n\r\n  /** Whether the element is completely out of the view of any of the containers. */\r\n  private isElementOutsideView(\r\n      elementBounds: ElementBoundingPositions,\r\n      containersBounds: ElementBoundingPositions[]): boolean {\r\n    return containersBounds.some((containerBounds: ElementBoundingPositions) => {\r\n      const outsideAbove = elementBounds.bottom < containerBounds.top;\r\n      const outsideBelow = elementBounds.top > containerBounds.bottom;\r\n      const outsideLeft = elementBounds.right < containerBounds.left;\r\n      const outsideRight = elementBounds.left > containerBounds.right;\r\n\r\n      return outsideAbove || outsideBelow || outsideLeft || outsideRight;\r\n    });\r\n  }\r\n\r\n  /** Whether the element is clipped by any of the containers. */\r\n  private isElementClipped(\r\n      elementBounds: ElementBoundingPositions,\r\n      containersBounds: ElementBoundingPositions[]): boolean {\r\n    return containersBounds.some((containerBounds: ElementBoundingPositions) => {\r\n      const clippedAbove = elementBounds.top < containerBounds.top;\r\n      const clippedBelow = elementBounds.bottom > containerBounds.bottom;\r\n      const clippedLeft = elementBounds.left < containerBounds.left;\r\n      const clippedRight = elementBounds.right > containerBounds.right;\r\n\r\n      return clippedAbove || clippedBelow || clippedLeft || clippedRight;\r\n    });\r\n  }\r\n\r\n  /** Physically positions the overlay element to the given coordinate. */\r\n  private _setElementPosition(\r\n      element: HTMLElement,\r\n      overlayRect: ClientRect,\r\n      overlayPoint: Point,\r\n      pos: ConnectionPositionPair) {\r\n\r\n    // We want to set either `top` or `bottom` based on whether the overlay wants to appear above\r\n    // or below the origin and the direction in which the element will expand.\r\n    let verticalStyleProperty: any = pos.overlayY === 'bottom' ? 'bottom' : 'top';\r\n\r\n    // When using `bottom`, we adjust the y position such that it is the distance\r\n    // from the bottom of the viewport rather than the top.\r\n    let y = verticalStyleProperty === 'top' ?\r\n        overlayPoint.y :\r\n        document.documentElement.clientHeight - (overlayPoint.y + overlayRect.height);\r\n\r\n    // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\r\n    // or \"after\" the origin, which determines the direction in which the element will expand.\r\n    // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\r\n    // page is in RTL or LTR.\r\n    let horizontalStyleProperty: any;\r\n    if (this._dir === 'rtl') {\r\n      horizontalStyleProperty = pos.overlayX === 'end' ? 'left' : 'right';\r\n    } else {\r\n      horizontalStyleProperty = pos.overlayX === 'end' ? 'right' : 'left';\r\n    }\r\n\r\n    // When we're setting `right`, we adjust the x position such that it is the distance\r\n    // from the right edge of the viewport rather than the left edge.\r\n    let x = horizontalStyleProperty === 'left' ?\r\n      overlayPoint.x :\r\n      document.documentElement.clientWidth - (overlayPoint.x + overlayRect.width);\r\n\r\n\r\n    // Reset any existing styles. This is necessary in case the preferred position has\r\n    // changed since the last `apply`.\r\n    ['top', 'bottom', 'left', 'right'].forEach((p: any) => element.style[p] = null);\r\n\r\n    element.style[verticalStyleProperty] = `${y}px`;\r\n    element.style[horizontalStyleProperty] = `${x}px`;\r\n  }\r\n\r\n  /** Returns the bounding positions of the provided element with respect to the viewport. */\r\n  private _getElementBounds(element: HTMLElement): ElementBoundingPositions {\r\n    const boundingClientRect = element.getBoundingClientRect();\r\n    return {\r\n      top: boundingClientRect.top,\r\n      right: boundingClientRect.left + boundingClientRect.width,\r\n      bottom: boundingClientRect.top + boundingClientRect.height,\r\n      left: boundingClientRect.left\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Subtracts the amount that an element is overflowing on an axis from it's length.\r\n   */\r\n  private _subtractOverflows(length: number, ...overflows: number[]): number {\r\n    return overflows.reduce((currentValue: number, currentOverflow: number) => {\r\n      return currentValue - Math.max(currentOverflow, 0);\r\n    }, length);\r\n  }\r\n}\r\n\r\n/** A simple (x, y) coordinate. */\r\ninterface Point {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\n/**\r\n * Expands the simple (x, y) coordinate by adding info about whether the\r\n * element would fit inside the viewport at that position, as well as\r\n * how much of the element would be visible.\r\n */\r\ninterface OverlayPoint extends Point {\r\n  visibleArea?: number;\r\n  fitsInViewport?: boolean;\r\n}\r\n","import {PositionStrategy} from './position-strategy';\r\n\r\n\r\n/**\r\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\r\n * explicit position relative to the browser's viewport. We use flexbox, instead of\r\n * transforms, in order to avoid issues with subpixel rendering which can cause the\r\n * element to become blurry.\r\n */\r\nexport class GlobalPositionStrategy implements PositionStrategy {\r\n  private _cssPosition: string = 'static';\r\n  private _topOffset: string = '';\r\n  private _bottomOffset: string = '';\r\n  private _leftOffset: string = '';\r\n  private _rightOffset: string = '';\r\n  private _alignItems: string = '';\r\n  private _justifyContent: string = '';\r\n  private _width: string = '';\r\n  private _height: string = '';\r\n\r\n  /* A lazily-created wrapper for the overlay element that is used as a flex container.  */\r\n  private _wrapper: HTMLElement;\r\n\r\n  /**\r\n   * Sets the top position of the overlay. Clears any previously set vertical position.\r\n   * @param value New top offset.\r\n   */\r\n  top(value: string): this {\r\n    this._bottomOffset = '';\r\n    this._topOffset = value;\r\n    this._alignItems = 'flex-start';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the left position of the overlay. Clears any previously set horizontal position.\r\n   * @param value New left offset.\r\n   */\r\n  left(value: string): this {\r\n    this._rightOffset = '';\r\n    this._leftOffset = value;\r\n    this._justifyContent = 'flex-start';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the bottom position of the overlay. Clears any previously set vertical position.\r\n   * @param value New bottom offset.\r\n   */\r\n  bottom(value: string): this {\r\n    this._topOffset = '';\r\n    this._bottomOffset = value;\r\n    this._alignItems = 'flex-end';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the right position of the overlay. Clears any previously set horizontal position.\r\n   * @param value New right offset.\r\n   */\r\n  right(value: string): this {\r\n    this._leftOffset = '';\r\n    this._rightOffset = value;\r\n    this._justifyContent = 'flex-end';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the overlay width and clears any previously set width.\r\n   * @param value New width for the overlay\r\n   */\r\n  width(value: string): this {\r\n    this._width = value;\r\n\r\n    // When the width is 100%, we should reset the `left` and the offset,\r\n    // in order to ensure that the element is flush against the viewport edge.\r\n    if (value === '100%') {\r\n      this.left('0px');\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the overlay height and clears any previously set height.\r\n   * @param value New height for the overlay\r\n   */\r\n  height(value: string): this {\r\n    this._height = value;\r\n\r\n    // When the height is 100%, we should reset the `top` and the offset,\r\n    // in order to ensure that the element is flush against the viewport edge.\r\n    if (value === '100%') {\r\n      this.top('0px');\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Centers the overlay horizontally with an optional offset.\r\n   * Clears any previously set horizontal position.\r\n   *\r\n   * @param offset Overlay offset from the horizontal center.\r\n   */\r\n  centerHorizontally(offset = ''): this {\r\n    this.left(offset);\r\n    this._justifyContent = 'center';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Centers the overlay vertically with an optional offset.\r\n   * Clears any previously set vertical position.\r\n   *\r\n   * @param offset Overlay offset from the vertical center.\r\n   */\r\n  centerVertically(offset = ''): this {\r\n    this.top(offset);\r\n    this._alignItems = 'center';\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Apply the position to the element.\r\n   * @docs-private\r\n   *\r\n   * @param element Element to which to apply the CSS.\r\n   * @returns Resolved when the styles have been applied.\r\n   */\r\n  apply(element: HTMLElement): Promise<void> {\r\n    if (!this._wrapper) {\r\n      this._wrapper = document.createElement('div');\r\n      this._wrapper.classList.add('cdk-global-overlay-wrapper');\r\n      element.parentNode.insertBefore(this._wrapper, element);\r\n      this._wrapper.appendChild(element);\r\n    }\r\n\r\n    let styles = element.style;\r\n    let parentStyles = (element.parentNode as HTMLElement).style;\r\n\r\n    styles.position = this._cssPosition;\r\n    styles.marginTop = this._topOffset;\r\n    styles.marginLeft = this._leftOffset;\r\n    styles.marginBottom = this._bottomOffset;\r\n    styles.marginRight = this._rightOffset;\r\n    styles.width = this._width;\r\n    styles.height = this._height;\r\n\r\n    parentStyles.justifyContent = this._justifyContent;\r\n    parentStyles.alignItems = this._alignItems;\r\n\r\n    return Promise.resolve(null);\r\n  }\r\n\r\n  /**\r\n   * Removes the wrapper element from the DOM.\r\n   */\r\n  dispose(): void {\r\n    if (this._wrapper && this._wrapper.parentNode) {\r\n      this._wrapper.parentNode.removeChild(this._wrapper);\r\n      this._wrapper = null;\r\n    }\r\n  }\r\n}\r\n","import {ViewportRuler} from './viewport-ruler';\r\nimport {ConnectedPositionStrategy} from './connected-position-strategy';\r\nimport {ElementRef, Injectable} from '@angular/core';\r\nimport {GlobalPositionStrategy} from './global-position-strategy';\r\nimport {OverlayConnectionPosition, OriginConnectionPosition} from './connected-position';\r\n\r\n\r\n\r\n/** Builder for overlay position strategy. */\r\n@Injectable()\r\nexport class OverlayPositionBuilder {\r\n  constructor(private _viewportRuler: ViewportRuler) { }\r\n\r\n  /**\r\n   * Creates a global position strategy.\r\n   */\r\n  global(): GlobalPositionStrategy {\r\n    return new GlobalPositionStrategy();\r\n  }\r\n\r\n  /**\r\n   * Creates a relative position strategy.\r\n   * @param elementRef\r\n   * @param originPos\r\n   * @param overlayPos\r\n   */\r\n  connectedTo(\r\n      elementRef: ElementRef,\r\n      originPos: OriginConnectionPosition,\r\n      overlayPos: OverlayConnectionPosition): ConnectedPositionStrategy {\r\n    return new ConnectedPositionStrategy(elementRef, originPos, overlayPos, this._viewportRuler);\r\n  }\r\n}\r\n","import {Injectable, Optional, SkipSelf} from '@angular/core';\r\n\r\n\r\n/**\r\n * The OverlayContainer is the container in which all overlays will load.\r\n * It should be provided in the root component to ensure it is properly shared.\r\n */\r\n@Injectable()\r\nexport class OverlayContainer {\r\n  protected _containerElement: HTMLElement;\r\n\r\n  private _themeClass: string;\r\n\r\n  /**\r\n   * Base theme to be applied to all overlay-based components.\r\n   */\r\n  get themeClass(): string { return this._themeClass; }\r\n  set themeClass(value: string) {\r\n    if (this._containerElement) {\r\n      this._containerElement.classList.remove(this._themeClass);\r\n\r\n      if (value) {\r\n        this._containerElement.classList.add(value);\r\n      }\r\n    }\r\n\r\n    this._themeClass = value;\r\n  }\r\n\r\n  /**\r\n   * This method returns the overlay container element.  It will lazily\r\n   * create the element the first time  it is called to facilitate using\r\n   * the container in non-browser environments.\r\n   * @returns the container element\r\n   */\r\n  getContainerElement(): HTMLElement {\r\n    if (!this._containerElement) { this._createContainer(); }\r\n    return this._containerElement;\r\n  }\r\n\r\n  /**\r\n   * Create the overlay container element, which is simply a div\r\n   * with the 'cdk-overlay-container' class on the document body.\r\n   */\r\n  protected _createContainer(): void {\r\n    let container = document.createElement('div');\r\n    container.classList.add('cdk-overlay-container');\r\n\r\n    if (this._themeClass) {\r\n      container.classList.add(this._themeClass);\r\n    }\r\n\r\n    document.body.appendChild(container);\r\n    this._containerElement = container;\r\n  }\r\n}\r\n\r\nexport function OVERLAY_CONTAINER_PROVIDER_FACTORY(parentContainer: OverlayContainer) {\r\n  return parentContainer || new OverlayContainer();\r\n}\r\n\r\nexport const OVERLAY_CONTAINER_PROVIDER = {\r\n  // If there is already an OverlayContainer available, use that. Otherwise, provide a new one.\r\n  provide: OverlayContainer,\r\n  deps: [[new Optional(), new SkipSelf(), OverlayContainer]],\r\n  useFactory: OVERLAY_CONTAINER_PROVIDER_FACTORY\r\n};\r\n","import {\r\n  ComponentFactoryResolver,\r\n  Injectable,\r\n  ApplicationRef,\r\n  Injector,\r\n  NgZone,\r\n  Provider,\r\n} from '@angular/core';\r\nimport {OverlayState} from './overlay-state';\r\nimport {DomPortalHost} from '../portal/dom-portal-host';\r\nimport {OverlayRef} from './overlay-ref';\r\nimport {OverlayPositionBuilder} from './position/overlay-position-builder';\r\nimport {VIEWPORT_RULER_PROVIDER} from './position/viewport-ruler';\r\nimport {OverlayContainer, OVERLAY_CONTAINER_PROVIDER} from './overlay-container';\r\nimport {ScrollStrategy, ScrollStrategyOptions} from './scroll/index';\r\n\r\n\r\n/** Next overlay unique ID. */\r\nlet nextUniqueId = 0;\r\n\r\n/** The default state for newly created overlays. */\r\nlet defaultState = new OverlayState();\r\n\r\n\r\n/**\r\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\r\n * used as a low-level building building block for other components. Dialogs, tooltips, menus,\r\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\r\n * of re-usable components rather than developers building end-user applications.\r\n *\r\n * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.\r\n */\r\n@Injectable()\r\nexport class Overlay {\r\n  constructor(public scrollStrategies: ScrollStrategyOptions,\r\n              private _overlayContainer: OverlayContainer,\r\n              private _componentFactoryResolver: ComponentFactoryResolver,\r\n              private _positionBuilder: OverlayPositionBuilder,\r\n              private _appRef: ApplicationRef,\r\n              private _injector: Injector,\r\n              private _ngZone: NgZone) { }\r\n\r\n  /**\r\n   * Creates an overlay.\r\n   * @param state State to apply to the overlay.\r\n   * @returns Reference to the created overlay.\r\n   */\r\n  create(state: OverlayState = defaultState): OverlayRef {\r\n    return this._createOverlayRef(this._createPaneElement(), state);\r\n  }\r\n\r\n  /**\r\n   * Returns a position builder that can be used, via fluent API,\r\n   * to construct and configure a position strategy.\r\n   */\r\n  position(): OverlayPositionBuilder {\r\n    return this._positionBuilder;\r\n  }\r\n\r\n  /**\r\n   * Creates the DOM element for an overlay and appends it to the overlay container.\r\n   * @returns Newly-created pane element\r\n   */\r\n  private _createPaneElement(): HTMLElement {\r\n    let pane = document.createElement('div');\r\n\r\n    pane.id = `cdk-overlay-${nextUniqueId++}`;\r\n    pane.classList.add('cdk-overlay-pane');\r\n    this._overlayContainer.getContainerElement().appendChild(pane);\r\n\r\n    return pane;\r\n  }\r\n\r\n  /**\r\n   * Create a DomPortalHost into which the overlay content can be loaded.\r\n   * @param pane The DOM element to turn into a portal host.\r\n   * @returns A portal host for the given DOM element.\r\n   */\r\n  private _createPortalHost(pane: HTMLElement): DomPortalHost {\r\n    return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef, this._injector);\r\n  }\r\n\r\n  /**\r\n   * Creates an OverlayRef for an overlay in the given DOM element.\r\n   * @param pane DOM element for the overlay\r\n   * @param state\r\n   */\r\n  private _createOverlayRef(pane: HTMLElement, state: OverlayState): OverlayRef {\r\n    let scrollStrategy = state.scrollStrategy || this.scrollStrategies.noop();\r\n    let portalHost = this._createPortalHost(pane);\r\n    return new OverlayRef(portalHost, pane, state, scrollStrategy, this._ngZone);\r\n  }\r\n}\r\n\r\n/** Providers for Overlay and its related injectables. */\r\nexport const OVERLAY_PROVIDERS: Provider[] = [\r\n  Overlay,\r\n  OverlayPositionBuilder,\r\n  VIEWPORT_RULER_PROVIDER,\r\n  OVERLAY_CONTAINER_PROVIDER,\r\n];\r\n","import {\r\n    NgModule,\r\n    Directive,\r\n    EventEmitter,\r\n    TemplateRef,\r\n    ViewContainerRef,\r\n    Optional,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n    ElementRef,\r\n    Renderer2,\r\n    OnChanges,\r\n    SimpleChanges,\r\n} from '@angular/core';\r\nimport {Overlay, OVERLAY_PROVIDERS} from './overlay';\r\nimport {OverlayRef} from './overlay-ref';\r\nimport {TemplatePortal} from '../portal/portal';\r\nimport {OverlayState} from './overlay-state';\r\nimport {\r\n    ConnectionPositionPair,\r\n    ConnectedOverlayPositionChange\r\n} from './position/connected-position';\r\nimport {PortalModule} from '../portal/portal-directives';\r\nimport {ConnectedPositionStrategy} from './position/connected-position-strategy';\r\nimport {Dir, LayoutDirection} from '../rtl/dir';\r\nimport {Scrollable} from './scroll/scrollable';\r\nimport {ScrollStrategy} from './scroll/scroll-strategy';\r\nimport {coerceBooleanProperty} from '../coercion/boolean-property';\r\nimport {ESCAPE} from '../keyboard/keycodes';\r\nimport {Subscription} from 'rxjs';\r\nimport {ScrollDispatchModule} from './scroll/index';\r\n\r\n\r\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\r\nlet defaultPositionList = [\r\n  new ConnectionPositionPair(\r\n      {originX: 'start', originY: 'bottom'},\r\n      {overlayX: 'start', overlayY: 'top'}),\r\n  new ConnectionPositionPair(\r\n      {originX: 'start', originY: 'top'},\r\n      {overlayX: 'start', overlayY: 'bottom'}),\r\n];\r\n\r\n\r\n/**\r\n * Directive applied to an element to make it usable as an origin for an Overlay using a\r\n * ConnectedPositionStrategy.\r\n */\r\n@Directive({\r\n  selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\r\n  exportAs: 'cdkOverlayOrigin',\r\n})\r\nexport class OverlayOrigin {\r\n  constructor(public elementRef: ElementRef) { }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Directive to facilitate declarative creation of an Overlay using a ConnectedPositionStrategy.\r\n */\r\n@Directive({\r\n  selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\r\n  exportAs: 'cdkConnectedOverlay'\r\n})\r\nexport class ConnectedOverlayDirective implements OnDestroy, OnChanges {\r\n  private _overlayRef: OverlayRef;\r\n  private _templatePortal: TemplatePortal;\r\n  private _hasBackdrop = false;\r\n  private _backdropSubscription: Subscription;\r\n  private _positionSubscription: Subscription;\r\n  private _offsetX: number = 0;\r\n  private _offsetY: number = 0;\r\n  private _position: ConnectedPositionStrategy;\r\n  private _escapeListener: Function;\r\n\r\n  /** Origin for the connected overlay. */\r\n  @Input() origin: OverlayOrigin;\r\n\r\n  /** Registered connected position pairs. */\r\n  @Input() positions: ConnectionPositionPair[];\r\n\r\n  /** The offset in pixels for the overlay connection point on the x-axis */\r\n  @Input()\r\n  get offsetX(): number {\r\n    return this._offsetX;\r\n  }\r\n\r\n  set offsetX(offsetX: number) {\r\n    this._offsetX = offsetX;\r\n    if (this._position) {\r\n      this._position.withOffsetX(offsetX);\r\n    }\r\n  }\r\n\r\n  /** The offset in pixels for the overlay connection point on the y-axis */\r\n  @Input()\r\n  get offsetY() {\r\n    return this._offsetY;\r\n  }\r\n\r\n  set offsetY(offsetY: number) {\r\n    this._offsetY = offsetY;\r\n    if (this._position) {\r\n      this._position.withOffsetY(offsetY);\r\n    }\r\n  }\r\n\r\n  /** The width of the overlay panel. */\r\n  @Input() width: number | string;\r\n\r\n  /** The height of the overlay panel. */\r\n  @Input() height: number | string;\r\n\r\n  /** The min width of the overlay panel. */\r\n  @Input() minWidth: number | string;\r\n\r\n  /** The min height of the overlay panel. */\r\n  @Input() minHeight: number | string;\r\n\r\n  /** The custom class to be set on the backdrop element. */\r\n  @Input() backdropClass: string;\r\n\r\n  /** Strategy to be used when handling scroll events while the overlay is open. */\r\n  @Input() scrollStrategy: ScrollStrategy = this._overlay.scrollStrategies.reposition();\r\n\r\n  /** Whether the overlay is open. */\r\n  @Input() open: boolean = false;\r\n\r\n  /** Whether or not the overlay should attach a backdrop. */\r\n  @Input()\r\n  get hasBackdrop() {\r\n    return this._hasBackdrop;\r\n  }\r\n\r\n  set hasBackdrop(value: any) {\r\n    this._hasBackdrop = coerceBooleanProperty(value);\r\n  }\r\n\r\n  /** Event emitted when the backdrop is clicked. */\r\n  @Output() backdropClick = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the position has changed. */\r\n  @Output() positionChange = new EventEmitter<ConnectedOverlayPositionChange>();\r\n\r\n  /** Event emitted when the overlay has been attached. */\r\n  @Output() attach = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the overlay has been detached. */\r\n  @Output() detach = new EventEmitter<void>();\r\n\r\n  // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\r\n\r\n  constructor(\r\n      private _overlay: Overlay,\r\n      private _renderer: Renderer2,\r\n      templateRef: TemplateRef<any>,\r\n      viewContainerRef: ViewContainerRef,\r\n      @Optional() private _dir: Dir) {\r\n    this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\r\n  }\r\n\r\n  /** The associated overlay reference. */\r\n  get overlayRef(): OverlayRef {\r\n    return this._overlayRef;\r\n  }\r\n\r\n  /** The element's layout direction. */\r\n  get dir(): LayoutDirection {\r\n    return this._dir ? this._dir.value : 'ltr';\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._destroyOverlay();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['open']) {\r\n      this.open ? this._attachOverlay() : this._detachOverlay();\r\n    }\r\n  }\r\n\r\n  /** Creates an overlay */\r\n  private _createOverlay() {\r\n    if (!this.positions || !this.positions.length) {\r\n      this.positions = defaultPositionList;\r\n    }\r\n\r\n    this._overlayRef = this._overlay.create(this._buildConfig());\r\n  }\r\n\r\n  /** Builds the overlay config based on the directive's inputs */\r\n  private _buildConfig(): OverlayState {\r\n    let overlayConfig = new OverlayState();\r\n\r\n    if (this.width || this.width === 0) {\r\n      overlayConfig.width = this.width;\r\n    }\r\n\r\n    if (this.height || this.height === 0) {\r\n      overlayConfig.height = this.height;\r\n    }\r\n\r\n    if (this.minWidth || this.minWidth === 0) {\r\n      overlayConfig.minWidth = this.minWidth;\r\n    }\r\n\r\n    if (this.minHeight || this.minHeight === 0) {\r\n      overlayConfig.minHeight = this.minHeight;\r\n    }\r\n\r\n    overlayConfig.hasBackdrop = this.hasBackdrop;\r\n\r\n    if (this.backdropClass) {\r\n      overlayConfig.backdropClass = this.backdropClass;\r\n    }\r\n\r\n    this._position = this._createPositionStrategy() as ConnectedPositionStrategy;\r\n    overlayConfig.positionStrategy = this._position;\r\n    overlayConfig.scrollStrategy = this.scrollStrategy;\r\n\r\n    return overlayConfig;\r\n  }\r\n\r\n  /** Returns the position strategy of the overlay to be set on the overlay config */\r\n  private _createPositionStrategy(): ConnectedPositionStrategy {\r\n    const pos = this.positions[0];\r\n    const originPoint = {originX: pos.originX, originY: pos.originY};\r\n    const overlayPoint = {overlayX: pos.overlayX, overlayY: pos.overlayY};\r\n\r\n    const strategy = this._overlay.position()\r\n      .connectedTo(this.origin.elementRef, originPoint, overlayPoint)\r\n      .withOffsetX(this.offsetX)\r\n      .withOffsetY(this.offsetY);\r\n\r\n    this._handlePositionChanges(strategy);\r\n\r\n    return strategy;\r\n  }\r\n\r\n  private _handlePositionChanges(strategy: ConnectedPositionStrategy): void {\r\n    for (let i = 1; i < this.positions.length; i++) {\r\n      strategy.withFallbackPosition(\r\n          {originX: this.positions[i].originX, originY: this.positions[i].originY},\r\n          {overlayX: this.positions[i].overlayX, overlayY: this.positions[i].overlayY}\r\n      );\r\n    }\r\n\r\n    this._positionSubscription =\r\n        strategy.onPositionChange.subscribe((pos: any) => this.positionChange.emit(pos));\r\n  }\r\n\r\n  /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\r\n  private _attachOverlay() {\r\n    if (!this._overlayRef) {\r\n      this._createOverlay();\r\n    }\r\n\r\n    this._position.withDirection(this.dir);\r\n    this._overlayRef.getState().direction = this.dir;\r\n    this._initEscapeListener();\r\n\r\n    if (!this._overlayRef.hasAttached()) {\r\n      this._overlayRef.attach(this._templatePortal);\r\n      this.attach.emit();\r\n    }\r\n\r\n    if (this.hasBackdrop) {\r\n      this._backdropSubscription = this._overlayRef.backdropClick().subscribe(() => {\r\n        this.backdropClick.emit();\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\r\n  private _detachOverlay() {\r\n    if (this._overlayRef) {\r\n      this._overlayRef.detach();\r\n      this.detach.emit();\r\n    }\r\n\r\n    if (this._backdropSubscription) {\r\n      this._backdropSubscription.unsubscribe();\r\n      this._backdropSubscription = null;\r\n    }\r\n\r\n    if (this._escapeListener) {\r\n      this._escapeListener();\r\n    }\r\n  }\r\n\r\n  /** Destroys the overlay created by this directive. */\r\n  private _destroyOverlay() {\r\n    if (this._overlayRef) {\r\n      this._overlayRef.dispose();\r\n    }\r\n\r\n    if (this._backdropSubscription) {\r\n      this._backdropSubscription.unsubscribe();\r\n    }\r\n\r\n    if (this._positionSubscription) {\r\n      this._positionSubscription.unsubscribe();\r\n    }\r\n\r\n    if (this._escapeListener) {\r\n      this._escapeListener();\r\n    }\r\n  }\r\n\r\n  /** Sets the event listener that closes the overlay when pressing Escape. */\r\n  private _initEscapeListener() {\r\n    this._escapeListener = this._renderer.listen('document', 'keydown', (event: KeyboardEvent) => {\r\n      if (event.keyCode === ESCAPE) {\r\n        this._detachOverlay();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n\r\n@NgModule({\r\n  imports: [PortalModule, ScrollDispatchModule],\r\n  exports: [ConnectedOverlayDirective, OverlayOrigin, ScrollDispatchModule],\r\n  declarations: [ConnectedOverlayDirective, OverlayOrigin],\r\n  providers: [OVERLAY_PROVIDERS],\r\n})\r\nexport class OverlayModule {}\r\n","import {Injectable} from '@angular/core';\r\nimport {Platform} from '../platform/platform';\r\n\r\n/**\r\n * The InteractivityChecker leans heavily on the ally.js accessibility utilities.\r\n * Methods like `isTabbable` are only covering specific edge-cases for the browsers which are\r\n * supported.\r\n */\r\n\r\n/**\r\n * Utility for checking the interactivity of an element, such as whether is is focusable or\r\n * tabbable.\r\n */\r\n@Injectable()\r\nexport class InteractivityChecker {\r\n\r\n  constructor(private _platform: Platform) {}\r\n\r\n  /**\r\n   * Gets whether an element is disabled.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @returns Whether the element is disabled.\r\n   */\r\n  isDisabled(element: HTMLElement): boolean {\r\n    // This does not capture some cases, such as a non-form control with a disabled attribute or\r\n    // a form control inside of a disabled form, but should capture the most common cases.\r\n    return element.hasAttribute('disabled');\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element is visible for the purposes of interactivity.\r\n   *\r\n   * This will capture states like `display: none` and `visibility: hidden`, but not things like\r\n   * being clipped by an `overflow: hidden` parent or being outside the viewport.\r\n   *\r\n   * @returns Whether the element is visible.\r\n   */\r\n  isVisible(element: HTMLElement): boolean {\r\n    return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element can be reached via Tab key.\r\n   * Assumes that the element has already been checked with isFocusable.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @returns Whether the element is tabbable.\r\n   */\r\n  isTabbable(element: HTMLElement): boolean {\r\n    // Nothing is tabbable on the the server 😎\r\n    if (!this._platform.isBrowser) {\r\n      return false;\r\n    }\r\n\r\n    let frameElement = getWindow(element).frameElement as HTMLElement;\r\n\r\n    if (frameElement) {\r\n\r\n      let frameType = frameElement && frameElement.nodeName.toLowerCase();\r\n\r\n      // Frame elements inherit their tabindex onto all child elements.\r\n      if (getTabIndexValue(frameElement) === -1) {\r\n        return false;\r\n      }\r\n\r\n      // Webkit and Blink consider anything inside of an <object> element as non-tabbable.\r\n      if ((this._platform.BLINK || this._platform.WEBKIT) && frameType === 'object') {\r\n        return false;\r\n      }\r\n\r\n      // Webkit and Blink disable tabbing to an element inside of an invisible frame.\r\n      if ((this._platform.BLINK || this._platform.WEBKIT) && !this.isVisible(frameElement)) {\r\n        return false;\r\n      }\r\n\r\n    }\r\n\r\n    let nodeName = element.nodeName.toLowerCase();\r\n    let tabIndexValue = getTabIndexValue(element);\r\n\r\n    if (element.hasAttribute('contenteditable')) {\r\n      return tabIndexValue !== -1;\r\n    }\r\n\r\n    if (nodeName === 'iframe') {\r\n      // The frames may be tabbable depending on content, but it's not possibly to reliably\r\n      // investigate the content of the frames.\r\n      return false;\r\n    }\r\n\r\n    if (nodeName === 'audio') {\r\n      if (!element.hasAttribute('controls')) {\r\n        // By default an <audio> element without the controls enabled is not tabbable.\r\n        return false;\r\n      } else if (this._platform.BLINK) {\r\n        // In Blink <audio controls> elements are always tabbable.\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (nodeName === 'video') {\r\n      if (!element.hasAttribute('controls') && this._platform.TRIDENT) {\r\n        // In Trident a <video> element without the controls enabled is not tabbable.\r\n        return false;\r\n      } else if (this._platform.BLINK || this._platform.FIREFOX) {\r\n        // In Chrome and Firefox <video controls> elements are always tabbable.\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (nodeName === 'object' && (this._platform.BLINK || this._platform.WEBKIT)) {\r\n      // In all Blink and WebKit based browsers <object> elements are never tabbable.\r\n      return false;\r\n    }\r\n\r\n    // In iOS the browser only considers some specific elements as tabbable.\r\n    if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {\r\n      return false;\r\n    }\r\n\r\n    return element.tabIndex >= 0;\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element can be focused by the user.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @returns Whether the element is focusable.\r\n   */\r\n  isFocusable(element: HTMLElement): boolean {\r\n    // Perform checks in order of left to most expensive.\r\n    // Again, naive approach that does not capture many edge cases and browser quirks.\r\n    return isPotentiallyFocusable(element) && !this.isDisabled(element) && this.isVisible(element);\r\n  }\r\n\r\n}\r\n\r\n/** Checks whether the specified element has any geometry / rectangles. */\r\nfunction hasGeometry(element: HTMLElement): boolean {\r\n  // Use logic from jQuery to check for an invisible element.\r\n  // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12\r\n  return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\r\n}\r\n\r\n/** Gets whether an element's  */\r\nfunction isNativeFormElement(element: Node) {\r\n  let nodeName = element.nodeName.toLowerCase();\r\n  return nodeName === 'input' ||\r\n      nodeName === 'select' ||\r\n      nodeName === 'button' ||\r\n      nodeName === 'textarea';\r\n}\r\n\r\n/** Gets whether an element is an <input type=\"hidden\">. */\r\nfunction isHiddenInput(element: HTMLElement): boolean {\r\n  return isInputElement(element) && element.type == 'hidden';\r\n}\r\n\r\n/** Gets whether an element is an anchor that has an href attribute. */\r\nfunction isAnchorWithHref(element: HTMLElement): boolean {\r\n  return isAnchorElement(element) && element.hasAttribute('href');\r\n}\r\n\r\n/** Gets whether an element is an input element. */\r\nfunction isInputElement(element: HTMLElement): element is HTMLInputElement {\r\n  return element.nodeName.toLowerCase() == 'input';\r\n}\r\n\r\n/** Gets whether an element is an anchor element. */\r\nfunction isAnchorElement(element: HTMLElement): element is HTMLAnchorElement {\r\n  return element.nodeName.toLowerCase() == 'a';\r\n}\r\n\r\n/** Gets whether an element has a valid tabindex. */\r\nfunction hasValidTabIndex(element: HTMLElement): boolean {\r\n  if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {\r\n    return false;\r\n  }\r\n\r\n  let tabIndex = element.getAttribute('tabindex');\r\n\r\n  // IE11 parses tabindex=\"\" as the value \"-32768\"\r\n  if (tabIndex == '-32768') {\r\n    return false;\r\n  }\r\n\r\n  return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));\r\n}\r\n\r\n/**\r\n * Returns the parsed tabindex from the element attributes instead of returning the\r\n * evaluated tabindex from the browsers defaults.\r\n */\r\nfunction getTabIndexValue(element: HTMLElement): number {\r\n  if (!hasValidTabIndex(element)) {\r\n    return null;\r\n  }\r\n\r\n  // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\r\n  const tabIndex = parseInt(element.getAttribute('tabindex'), 10);\r\n\r\n  return isNaN(tabIndex) ? -1 : tabIndex;\r\n}\r\n\r\n/** Checks whether the specified element is potentially tabbable on iOS */\r\nfunction isPotentiallyTabbableIOS(element: HTMLElement): boolean {\r\n  let nodeName = element.nodeName.toLowerCase();\r\n  let inputType = nodeName === 'input' && (element as HTMLInputElement).type;\r\n\r\n  return inputType === 'text'\r\n      || inputType === 'password'\r\n      || nodeName === 'select'\r\n      || nodeName === 'textarea';\r\n}\r\n\r\n/**\r\n * Gets whether an element is potentially focusable without taking current visible/disabled state\r\n * into account.\r\n */\r\nfunction isPotentiallyFocusable(element: HTMLElement): boolean {\r\n  // Inputs are potentially focusable *unless* they're type=\"hidden\".\r\n  if (isHiddenInput(element)) {\r\n    return false;\r\n  }\r\n\r\n  return isNativeFormElement(element) ||\r\n      isAnchorWithHref(element) ||\r\n      element.hasAttribute('contenteditable') ||\r\n      hasValidTabIndex(element);\r\n}\r\n\r\n/** Gets the parent window of a DOM node with regards of being inside of an iframe. */\r\nfunction getWindow(node: HTMLElement): Window {\r\n  return node.ownerDocument.defaultView || window;\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  AfterContentInit,\r\n  Injectable,\r\n} from '@angular/core';\r\nimport {InteractivityChecker} from './interactivity-checker';\r\nimport {Platform} from '../platform/platform';\r\nimport {coerceBooleanProperty} from '../coercion/boolean-property';\r\nimport {first} from 'rxjs/operators';\r\n\r\n/**\r\n * Class that allows for trapping focus within a DOM element.\r\n *\r\n * NOTE: This class currently uses a very simple (naive) approach to focus trapping.\r\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\r\n * Things like tabIndex > 0, flex `order`, and shadow roots can cause to two to misalign.\r\n * This will be replaced with a more intelligent solution before the library is considered stable.\r\n */\r\nexport class FocusTrap {\r\n  private _startAnchor: HTMLElement;\r\n  private _endAnchor: HTMLElement;\r\n\r\n  /** Whether the focus trap is active. */\r\n  get enabled(): boolean { return this._enabled; }\r\n  set enabled(val: boolean) {\r\n    this._enabled = val;\r\n\r\n    if (this._startAnchor && this._endAnchor) {\r\n      this._startAnchor.tabIndex = this._endAnchor.tabIndex = this._enabled ? 0 : -1;\r\n    }\r\n  }\r\n  private _enabled: boolean = true;\r\n\r\n  constructor(\r\n    private _element: HTMLElement,\r\n    private _platform: Platform,\r\n    private _checker: InteractivityChecker,\r\n    private _ngZone: NgZone,\r\n    deferAnchors = false) {\r\n\r\n    if (!deferAnchors) {\r\n      this.attachAnchors();\r\n    }\r\n  }\r\n\r\n  /** Destroys the focus trap by cleaning up the anchors. */\r\n  destroy() {\r\n    if (this._startAnchor && this._startAnchor.parentNode) {\r\n      this._startAnchor.parentNode.removeChild(this._startAnchor);\r\n    }\r\n\r\n    if (this._endAnchor && this._endAnchor.parentNode) {\r\n      this._endAnchor.parentNode.removeChild(this._endAnchor);\r\n    }\r\n\r\n    this._startAnchor = this._endAnchor = null;\r\n  }\r\n\r\n  /**\r\n   * Inserts the anchors into the DOM. This is usually done automatically\r\n   * in the constructor, but can be deferred for cases like directives with `*ngIf`.\r\n   */\r\n  attachAnchors(): void {\r\n    // If we're not on the browser, there can be no focus to trap.\r\n    if (!this._platform.isBrowser) {\r\n      return;\r\n    }\r\n\r\n    if (!this._startAnchor) {\r\n      this._startAnchor = this._createAnchor();\r\n    }\r\n\r\n    if (!this._endAnchor) {\r\n      this._endAnchor = this._createAnchor();\r\n    }\r\n\r\n    this._ngZone.runOutsideAngular(() => {\r\n      this._startAnchor.addEventListener('focus', () => this.focusLastTabbableElement());\r\n      this._endAnchor.addEventListener('focus', () => this.focusFirstTabbableElement());\r\n\r\n      this._element.parentNode.insertBefore(this._startAnchor, this._element);\r\n      this._element.parentNode.insertBefore(this._endAnchor, this._element.nextSibling);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then either focuses the first element that the\r\n   * user specified, or the first tabbable element..\r\n   */\r\n  focusInitialElementWhenReady() {\r\n    this._executeOnStable(() => this.focusInitialElement());\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then focuses\r\n   * the first tabbable element within the focus trap region.\r\n   */\r\n  focusFirstTabbableElementWhenReady() {\r\n    this._executeOnStable(() => this.focusFirstTabbableElement());\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then focuses\r\n   * the last tabbable element within the focus trap region.\r\n   */\r\n  focusLastTabbableElementWhenReady() {\r\n    this._executeOnStable(() => this.focusLastTabbableElement());\r\n  }\r\n\r\n  /**\r\n   * Get the specified boundary element of the trapped region.\r\n   * @param bound The boundary to get (start or end of trapped region).\r\n   * @returns The boundary element.\r\n   */\r\n  private _getRegionBoundary(bound: 'start' | 'end'): HTMLElement | null {\r\n    // Contains the deprecated version of selector, for temporary backwards comparability.\r\n    let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` +\r\n                                                 `[cdk-focus-${bound}]`) as NodeListOf<HTMLElement>;\r\n\r\n    for (let i = 0; i < markers.length; i++) {\r\n      if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {\r\n        console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}',` +\r\n                     ` use 'cdk-focus-region-${bound}' instead.`, markers[i]);\r\n      }\r\n    }\r\n\r\n    if (bound == 'start') {\r\n      return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);\r\n    }\r\n    return markers.length ?\r\n        markers[markers.length - 1] : this._getLastTabbableElement(this._element);\r\n  }\r\n\r\n  /** Focuses the element that should be focused when the focus trap is initialized. */\r\n  focusInitialElement() {\r\n    let redirectToElement = this._element.querySelector('[cdk-focus-initial]') as HTMLElement;\r\n    if (redirectToElement) {\r\n      redirectToElement.focus();\r\n    } else {\r\n      this.focusFirstTabbableElement();\r\n    }\r\n  }\r\n\r\n  /** Focuses the first tabbable element within the focus trap region. */\r\n  focusFirstTabbableElement() {\r\n    let redirectToElement = this._getRegionBoundary('start');\r\n    if (redirectToElement) {\r\n      redirectToElement.focus();\r\n    }\r\n  }\r\n\r\n  /** Focuses the last tabbable element within the focus trap region. */\r\n  focusLastTabbableElement() {\r\n    let redirectToElement = this._getRegionBoundary('end');\r\n    if (redirectToElement) {\r\n      redirectToElement.focus();\r\n    }\r\n  }\r\n\r\n  /** Get the first tabbable element from a DOM subtree (inclusive). */\r\n  private _getFirstTabbableElement(root: HTMLElement): HTMLElement {\r\n    if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n      return root;\r\n    }\r\n\r\n    // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall\r\n    // back to `childNodes` which includes text nodes, comments etc.\r\n    let children = root.children || root.childNodes;\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      let tabbableChild = children[i].nodeType === Node.ELEMENT_NODE ?\r\n        this._getFirstTabbableElement(children[i] as HTMLElement) :\r\n        null;\r\n\r\n      if (tabbableChild) {\r\n        return tabbableChild;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /** Get the last tabbable element from a DOM subtree (inclusive). */\r\n  private _getLastTabbableElement(root: HTMLElement): HTMLElement {\r\n    if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n      return root;\r\n    }\r\n\r\n    // Iterate in reverse DOM order.\r\n    let children = root.children || root.childNodes;\r\n\r\n    for (let i = children.length - 1; i >= 0; i--) {\r\n      let tabbableChild = children[i].nodeType === Node.ELEMENT_NODE ?\r\n        this._getLastTabbableElement(children[i] as HTMLElement) :\r\n        null;\r\n\r\n      if (tabbableChild) {\r\n        return tabbableChild;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /** Creates an anchor element. */\r\n  private _createAnchor(): HTMLElement {\r\n    let anchor = document.createElement('div');\r\n    anchor.tabIndex = this._enabled ? 0 : -1;\r\n    anchor.classList.add('cdk-visually-hidden');\r\n    anchor.classList.add('cdk-focus-trap-anchor');\r\n    return anchor;\r\n  }\r\n\r\n  /** Executes a function when the zone is stable. */\r\n  private _executeOnStable(fn: () => any): void {\r\n    if (this._ngZone.isStable) {\r\n      fn();\r\n    } else {\r\n      this._ngZone.onStable.pipe(first()).subscribe(fn);\r\n    }\r\n  }\r\n}\r\n\r\n\r\n/** Factory that allows easy instantiation of focus traps. */\r\n@Injectable()\r\nexport class FocusTrapFactory {\r\n  constructor(\r\n      private _checker: InteractivityChecker,\r\n      private _platform: Platform,\r\n      private _ngZone: NgZone) { }\r\n\r\n  create(element: HTMLElement, deferAnchors = false): FocusTrap {\r\n    return new FocusTrap(element, this._platform, this._checker, this._ngZone, deferAnchors);\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Directive for trapping focus within a region.\r\n * @deprecated\r\n */\r\n@Directive({\r\n  selector: 'cdk-focus-trap',\r\n})\r\nexport class FocusTrapDeprecatedDirective implements OnDestroy, AfterContentInit {\r\n  focusTrap: FocusTrap;\r\n\r\n  /** Whether the focus trap is active. */\r\n  @Input()\r\n  get disabled(): boolean { return !this.focusTrap.enabled; }\r\n  set disabled(val: boolean) {\r\n    this.focusTrap.enabled = !coerceBooleanProperty(val);\r\n  }\r\n\r\n  constructor(private _elementRef: ElementRef, private _focusTrapFactory: FocusTrapFactory) {\r\n    this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.focusTrap.destroy();\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.focusTrap.attachAnchors();\r\n  }\r\n}\r\n\r\n\r\n/** Directive for trapping focus within a region. */\r\n@Directive({\r\n  selector: '[cdkTrapFocus]',\r\n  exportAs: 'cdkTrapFocus',\r\n})\r\nexport class FocusTrapDirective implements OnDestroy, AfterContentInit {\r\n  focusTrap: FocusTrap;\r\n\r\n  /** Whether the focus trap is active. */\r\n  @Input('cdkTrapFocus')\r\n  get enabled(): boolean { return this.focusTrap.enabled; }\r\n  set enabled(value: boolean) { this.focusTrap.enabled = coerceBooleanProperty(value); }\r\n\r\n  constructor(private _elementRef: ElementRef, private _focusTrapFactory: FocusTrapFactory) {\r\n    this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.focusTrap.destroy();\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.focusTrap.attachAnchors();\r\n  }\r\n}\r\n","import {\r\n  Injectable,\r\n  InjectionToken,\r\n  Optional,\r\n  Inject,\r\n  SkipSelf,\r\n} from '@angular/core';\r\nimport {Platform} from '../platform/platform';\r\n\r\n\r\nexport const LIVE_ANNOUNCER_ELEMENT_TOKEN = new InjectionToken<HTMLElement>('liveAnnouncerElement');\r\n\r\n/** Possible politeness levels. */\r\nexport type AriaLivePoliteness = 'off' | 'polite' | 'assertive';\r\n\r\n@Injectable()\r\nexport class LiveAnnouncer {\r\n\r\n  private _liveElement: Element;\r\n\r\n  constructor(\r\n      @Optional() @Inject(LIVE_ANNOUNCER_ELEMENT_TOKEN) elementToken: any,\r\n      platform: Platform) {\r\n    // Only do anything if we're on the browser platform.\r\n    if (platform.isBrowser) {\r\n      // We inject the live element as `any` because the constructor signature cannot reference\r\n      // browser globals (HTMLElement) on non-browser environments, since having a class decorator\r\n      // causes TypeScript to preserve the constructor signature types.\r\n      this._liveElement = elementToken || this._createLiveElement();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Announces a message to screenreaders.\r\n   * @param message Message to be announced to the screenreader\r\n   * @param politeness The politeness of the announcer element\r\n   */\r\n  announce(message: string, politeness: AriaLivePoliteness = 'polite'): void {\r\n    this._liveElement.textContent = '';\r\n\r\n    // TODO: ensure changing the politeness works on all environments we support.\r\n    this._liveElement.setAttribute('aria-live', politeness);\r\n\r\n    // This 100ms timeout is necessary for some browser + screen-reader combinations:\r\n    // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.\r\n    // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a\r\n    //   second time without clearing and then using a non-zero delay.\r\n    // (using JAWS 17 at time of this writing).\r\n    setTimeout(() => this._liveElement.textContent = message, 100);\r\n  }\r\n\r\n  /** Removes the aria-live element from the DOM. */\r\n  _removeLiveElement() {\r\n    if (this._liveElement && this._liveElement.parentNode) {\r\n      this._liveElement.parentNode.removeChild(this._liveElement);\r\n    }\r\n  }\r\n\r\n  private _createLiveElement(): Element {\r\n    let liveEl = document.createElement('div');\r\n\r\n    liveEl.classList.add('cdk-visually-hidden');\r\n    liveEl.setAttribute('aria-atomic', 'true');\r\n    liveEl.setAttribute('aria-live', 'polite');\r\n\r\n    document.body.appendChild(liveEl);\r\n\r\n    return liveEl;\r\n  }\r\n\r\n}\r\n\r\nexport function LIVE_ANNOUNCER_PROVIDER_FACTORY(\r\n    parentDispatcher: LiveAnnouncer, liveElement: any, platform: Platform) {\r\n  return parentDispatcher || new LiveAnnouncer(liveElement, platform);\r\n}\r\n\r\nexport const LIVE_ANNOUNCER_PROVIDER = {\r\n  // If there is already a LiveAnnouncer available, use that. Otherwise, provide a new one.\r\n  provide: LiveAnnouncer,\r\n  deps: [\r\n    [new Optional(), new SkipSelf(), LiveAnnouncer],\r\n    [new Optional(), new Inject(LIVE_ANNOUNCER_ELEMENT_TOKEN)],\r\n    Platform,\r\n  ],\r\n  useFactory: LIVE_ANNOUNCER_PROVIDER_FACTORY\r\n};\r\n","import {NgModule} from '@angular/core';\r\nimport {FocusTrapDirective, FocusTrapDeprecatedDirective, FocusTrapFactory} from './focus-trap';\r\nimport {LIVE_ANNOUNCER_PROVIDER} from './live-announcer';\r\nimport {InteractivityChecker} from './interactivity-checker';\r\nimport {CommonModule} from '@angular/common';\r\nimport {PlatformModule} from '../platform/index';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, PlatformModule],\r\n  declarations: [FocusTrapDirective, FocusTrapDeprecatedDirective],\r\n  exports: [FocusTrapDirective, FocusTrapDeprecatedDirective],\r\n  providers: [InteractivityChecker, FocusTrapFactory, LIVE_ANNOUNCER_PROVIDER]\r\n})\r\nexport class A11yModule {}\r\n","import {Injectable} from '@angular/core';\r\nimport {OverlayContainer} from './overlay-container';\r\n\r\n/**\r\n * The FullscreenOverlayContainer is the alternative to OverlayContainer\r\n * that supports correct displaying of overlay elements in Fullscreen mode\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\r\n * It should be provided in the root component that way:\r\n * providers: [\r\n *   {provide: OverlayContainer, useClass: FullscreenOverlayContainer}\r\n * ],\r\n */\r\n@Injectable()\r\nexport class FullscreenOverlayContainer extends OverlayContainer {\r\n  protected _createContainer(): void {\r\n    super._createContainer();\r\n    this._adjustParentForFullscreenChange();\r\n    this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\r\n  }\r\n\r\n  private _adjustParentForFullscreenChange(): void {\r\n    if (!this._containerElement) {\r\n      return;\r\n    }\r\n    let fullscreenElement = this.getFullscreenElement();\r\n    let parent = fullscreenElement || document.body;\r\n    parent.appendChild(this._containerElement);\r\n  }\r\n\r\n  private _addFullscreenChangeListener(fn: () => void) {\r\n    if (document.fullscreenEnabled) {\r\n      document.addEventListener('fullscreenchange', fn);\r\n    } else if ((document as any).webkitFullscreenEnabled) {\r\n      document.addEventListener('webkitfullscreenchange', fn);\r\n    } else if ((document as any).mozFullScreenEnabled) {\r\n      document.addEventListener('mozfullscreenchange', fn);\r\n    } else if ((document as any).msFullscreenEnabled) {\r\n      document.addEventListener('MSFullscreenChange', fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When the page is put into fullscreen mode, a specific element is specified.\r\n   * Only that element and its children are visible when in fullscreen mode.\r\n  */\r\n  getFullscreenElement(): Element {\r\n    return (document as any).fullscreenElement ||\r\n        (document as any).webkitFullscreenElement ||\r\n        (document as any).mozFullScreenElement ||\r\n        (document as any).msFullscreenElement ||\r\n        null;\r\n  }\r\n}\r\n","import {Injectable, isDevMode} from '@angular/core';\r\nimport {HammerGestureConfig} from '@angular/platform-browser';\r\nimport {HammerStatic, HammerInstance, Recognizer, RecognizerStatic} from './gesture-annotations';\r\n\r\n/* Adjusts configuration of our gesture library, Hammer. */\r\n@Injectable()\r\nexport class GestureConfig extends HammerGestureConfig {\r\n  private _hammer: HammerStatic = typeof window !== 'undefined' ? (window as any).Hammer : null;\r\n\r\n  /* List of new event names to add to the gesture support list */\r\n  events: string[] = this._hammer ? [\r\n    'longpress',\r\n    'slide',\r\n    'slidestart',\r\n    'slideend',\r\n    'slideright',\r\n    'slideleft'\r\n  ] : [];\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    if (!this._hammer && isDevMode()) {\r\n      console.warn(\r\n        'Could not find HammerJS. Certain Angular Material ' +\r\n        'components may not work correctly.'\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Builds Hammer instance manually to add custom recognizers that match the Material Design spec.\r\n   *\r\n   * Our gesture names come from the Material Design gestures spec:\r\n   * https://www.google.com/design/spec/patterns/gestures.html#gestures-touch-mechanics\r\n   *\r\n   * More information on default recognizers can be found in Hammer docs:\r\n   * http://hammerjs.github.io/recognizer-pan/\r\n   * http://hammerjs.github.io/recognizer-press/\r\n   *\r\n   * @param element Element to which to assign the new HammerJS gestures.\r\n   * @returns Newly-created HammerJS instance.\r\n   */\r\n  buildHammer(element: HTMLElement): HammerInstance {\r\n    const mc = new this._hammer(element);\r\n\r\n    // Default Hammer Recognizers.\r\n    let pan = new this._hammer.Pan();\r\n    let swipe = new this._hammer.Swipe();\r\n    let press = new this._hammer.Press();\r\n\r\n    // Notice that a HammerJS recognizer can only depend on one other recognizer once.\r\n    // Otherwise the previous `recognizeWith` will be dropped.\r\n    // TODO: Confirm threshold numbers with Material Design UX Team\r\n    let slide = this._createRecognizer(pan, {event: 'slide', threshold: 0}, swipe);\r\n    let longpress = this._createRecognizer(press, {event: 'longpress', time: 500});\r\n\r\n    // Overwrite the default `pan` event to use the swipe event.\r\n    pan.recognizeWith(swipe);\r\n\r\n    // Add customized gestures to Hammer manager\r\n    mc.add([swipe, press, pan, slide, longpress]);\r\n\r\n    return mc as HammerInstance;\r\n  }\r\n\r\n  /** Creates a new recognizer, without affecting the default recognizers of HammerJS */\r\n  private _createRecognizer(base: Recognizer, options: any, ...inheritances: Recognizer[]) {\r\n    let recognizer = new (base.constructor as RecognizerStatic)(options);\r\n\r\n    inheritances.push(base);\r\n    inheritances.forEach(item => recognizer.recognizeWith(item));\r\n\r\n    return recognizer;\r\n  }\r\n\r\n}\r\n","import {Subject} from 'rxjs';\r\n\r\n\r\n/**\r\n * Class to be used to power selecting one or more options from a list.\r\n * @docs-private\r\n */\r\nexport class SelectionModel<T> {\r\n  /** Currently-selected values. */\r\n  private _selection: Set<T> = new Set();\r\n\r\n  /** Keeps track of the deselected options that haven't been emitted by the change event. */\r\n  private _deselectedToEmit: T[] = [];\r\n\r\n  /** Keeps track of the selected option that haven't been emitted by the change event. */\r\n  private _selectedToEmit: T[] = [];\r\n\r\n  /** Cache for the array value of the selected items. */\r\n  private _selected: T[];\r\n\r\n  /** Selected value(s). */\r\n  get selected(): T[] {\r\n    if (!this._selected) {\r\n      this._selected = Array.from(this._selection.values());\r\n    }\r\n\r\n    return this._selected;\r\n  }\r\n\r\n  /** Event emitted when the value has changed. */\r\n  onChange: Subject<SelectionChange<T>> = this._emitChanges ? new Subject() : null;\r\n\r\n  constructor(\r\n    private _isMulti = false,\r\n    initiallySelectedValues?: T[],\r\n    private _emitChanges = true) {\r\n\r\n    if (initiallySelectedValues) {\r\n      if (_isMulti) {\r\n        initiallySelectedValues.forEach(value => this._markSelected(value));\r\n      } else {\r\n        this._markSelected(initiallySelectedValues[0]);\r\n      }\r\n\r\n      // Clear the array in order to avoid firing the change event for preselected values.\r\n      this._selectedToEmit.length = 0;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Selects a value or an array of values.\r\n   */\r\n  select(value: T): void {\r\n    this._markSelected(value);\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  /**\r\n   * Deselects a value or an array of values.\r\n   */\r\n  deselect(value: T): void {\r\n    this._unmarkSelected(value);\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  /**\r\n   * Toggles a value between selected and deselected.\r\n   */\r\n  toggle(value: T): void {\r\n    this.isSelected(value) ? this.deselect(value) : this.select(value);\r\n  }\r\n\r\n  /**\r\n   * Clears all of the selected values.\r\n   */\r\n  clear(): void {\r\n    this._unmarkAll();\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  /**\r\n   * Determines whether a value is selected.\r\n   */\r\n  isSelected(value: T): boolean {\r\n    return this._selection.has(value);\r\n  }\r\n\r\n  /**\r\n   * Determines whether the model does not have a value.\r\n   */\r\n  isEmpty(): boolean {\r\n    return this._selection.size === 0;\r\n  }\r\n\r\n  /**\r\n   * Determines whether the model has a value.\r\n   */\r\n  hasValue(): boolean {\r\n    return !this.isEmpty();\r\n  }\r\n\r\n  /**\r\n   * Sorts the selected values based on a predicate function.\r\n   */\r\n  sort(predicate?: (a: T, b: T) => number): void {\r\n    if (this._isMulti && this.selected) {\r\n      this._selected.sort(predicate);\r\n    }\r\n  }\r\n\r\n  /** Emits a change event and clears the records of selected and deselected values. */\r\n  private _emitChangeEvent() {\r\n    if (this._selectedToEmit.length || this._deselectedToEmit.length) {\r\n      let eventData = new SelectionChange(this._selectedToEmit, this._deselectedToEmit);\r\n\r\n      this.onChange.next(eventData);\r\n      this._deselectedToEmit = [];\r\n      this._selectedToEmit = [];\r\n    }\r\n\r\n    this._selected = null;\r\n  }\r\n\r\n  /** Selects a value. */\r\n  private _markSelected(value: T) {\r\n    if (!this.isSelected(value)) {\r\n      if (!this._isMulti) {\r\n        this._unmarkAll();\r\n      }\r\n\r\n      this._selection.add(value);\r\n\r\n      if (this._emitChanges) {\r\n        this._selectedToEmit.push(value);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Deselects a value. */\r\n  private _unmarkSelected(value: T) {\r\n    if (this.isSelected(value)) {\r\n      this._selection.delete(value);\r\n\r\n      if (this._emitChanges) {\r\n        this._deselectedToEmit.push(value);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Clears out the selected values. */\r\n  private _unmarkAll() {\r\n    if (!this.isEmpty()) {\r\n      this._selection.forEach(value => this._unmarkSelected(value));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Describes an event emitted when the value of a MdSelectionModel has changed.\r\n * @docs-private\r\n */\r\nexport class SelectionChange<T> {\r\n  constructor(public added?: T[], public removed?: T[]) { }\r\n}\r\n","\r\n/**\r\n * Screenreaders will often fire fake mousedown events when a focusable element\r\n * is activated using the keyboard. We can typically distinguish between these faked\r\n * mousedown events and real mousedown events using the \"buttons\" property. While\r\n * real mousedowns will indicate the mouse button that was pressed (e.g. \"1\" for\r\n * the left mouse button), faked mousedowns will usually set the property value to 0.\r\n */\r\nexport function isFakeMousedownFromScreenReader(event: MouseEvent): boolean {\r\n  return event.buttons === 0;\r\n}\r\n","import {Injectable, Optional, SkipSelf} from '@angular/core';\r\n\r\n\r\n// Users of the Dispatcher never need to see this type, but TypeScript requires it to be exported.\r\nexport type UniqueSelectionDispatcherListener = (id: string, name: string) => void;\r\n\r\n/**\r\n * Class to coordinate unique selection based on name.\r\n * Intended to be consumed as an Angular service.\r\n * This service is needed because native radio change events are only fired on the item currently\r\n * being selected, and we still need to uncheck the previous selection.\r\n *\r\n * This service does not *store* any IDs and names because they may change at any time, so it is\r\n * less error-prone if they are simply passed through when the events occur.\r\n */\r\n@Injectable()\r\nexport class UniqueSelectionDispatcher {\r\n  private _listeners: UniqueSelectionDispatcherListener[] = [];\r\n\r\n  /**\r\n   * Notify other items that selection for the given name has been set.\r\n   * @param id ID of the item.\r\n   * @param name Name of the item.\r\n   */\r\n  notify(id: string, name: string) {\r\n    for (let listener of this._listeners) {\r\n      listener(id, name);\r\n    }\r\n  }\r\n\r\n  /** Listen for future changes to item selection. */\r\n  listen(listener: UniqueSelectionDispatcherListener) {\r\n    this._listeners.push(listener);\r\n  }\r\n}\r\n\r\nexport function UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY(\r\n    parentDispatcher: UniqueSelectionDispatcher) {\r\n  return parentDispatcher || new UniqueSelectionDispatcher();\r\n}\r\n\r\nexport const UNIQUE_SELECTION_DISPATCHER_PROVIDER = {\r\n  // If there is already a dispatcher available, use that. Otherwise, provide a new one.\r\n  provide: UniqueSelectionDispatcher,\r\n  deps: [[new Optional(), new SkipSelf(), UniqueSelectionDispatcher]],\r\n  useFactory: UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY\r\n};\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Injectable,\r\n  NgZone,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  Renderer2,\r\n  SkipSelf,\r\n} from '@angular/core';\r\nimport {Observable, of, Subject} from 'rxjs';\r\nimport {Platform} from '../platform/platform';\r\n\r\n\r\n// This is the value used by AngularJS Material. Through trial and error (on iPhone 6S) they found\r\n// that a value of around 650ms seems appropriate.\r\nexport const TOUCH_BUFFER_MS = 650;\r\n\r\n\r\nexport type FocusOrigin = 'touch' | 'mouse' | 'keyboard' | 'program';\r\n\r\n\r\ntype MonitoredElementInfo = {\r\n  unlisten: Function,\r\n  checkChildren: boolean,\r\n  renderer: Renderer2,\r\n  subject: Subject<FocusOrigin>\r\n};\r\n\r\n\r\n/** Monitors mouse and keyboard events to determine the cause of focus events. */\r\n@Injectable()\r\nexport class FocusOriginMonitor {\r\n  /** The focus origin that the next focus event is a result of. */\r\n  private _origin: FocusOrigin = null;\r\n\r\n  /** The FocusOrigin of the last focus event tracked by the FocusOriginMonitor. */\r\n  private _lastFocusOrigin: FocusOrigin;\r\n\r\n  /** Whether the window has just been focused. */\r\n  private _windowFocused = false;\r\n\r\n  /** The target of the last touch event. */\r\n  private _lastTouchTarget: EventTarget;\r\n\r\n  /** The timeout id of the touch timeout, used to cancel timeout later. */\r\n  private _touchTimeout: any;\r\n\r\n  /** Weak map of elements being monitored to their info. */\r\n  private _elementInfo = new WeakMap<Element, MonitoredElementInfo>();\r\n\r\n  constructor(private _ngZone: NgZone, private _platform: Platform) {\r\n    this._ngZone.runOutsideAngular(() => this._registerDocumentEvents());\r\n  }\r\n\r\n  /**\r\n   * Monitors focus on an element and applies appropriate CSS classes.\r\n   * @param element The element to monitor\r\n   * @param renderer The renderer to use to apply CSS classes to the element.\r\n   * @param checkChildren Whether to count the element as focused when its children are focused.\r\n   * @returns An observable that emits when the focus state of the element changes.\r\n   *     When the element is blurred, null will be emitted.\r\n   */\r\n  monitor(\r\n      element: HTMLElement,\r\n      renderer: Renderer2,\r\n      checkChildren: boolean): Observable<FocusOrigin> {\r\n    // Do nothing if we're not on the browser platform.\r\n    if (!this._platform.isBrowser) {\r\n      return of();\r\n    }\r\n    // Check if we're already monitoring this element.\r\n    if (this._elementInfo.has(element)) {\r\n      let info = this._elementInfo.get(element);\r\n      info.checkChildren = checkChildren;\r\n      return info.subject.asObservable();\r\n    }\r\n\r\n    // Create monitored element info.\r\n    let info: MonitoredElementInfo = {\r\n      unlisten: null,\r\n      checkChildren: checkChildren,\r\n      renderer: renderer,\r\n      subject: new Subject<FocusOrigin>()\r\n    };\r\n    this._elementInfo.set(element, info);\r\n\r\n    // Start listening. We need to listen in capture phase since focus events don't bubble.\r\n    let focusListener = (event: FocusEvent) => this._onFocus(event, element);\r\n    let blurListener = (event: FocusEvent) => this._onBlur(event, element);\r\n    this._ngZone.runOutsideAngular(() => {\r\n      element.addEventListener('focus', focusListener, true);\r\n      element.addEventListener('blur', blurListener, true);\r\n    });\r\n\r\n    // Create an unlisten function for later.\r\n    info.unlisten = () => {\r\n      element.removeEventListener('focus', focusListener, true);\r\n      element.removeEventListener('blur', blurListener, true);\r\n    };\r\n\r\n    return info.subject.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Stops monitoring an element and removes all focus classes.\r\n   * @param element The element to stop monitoring.\r\n   */\r\n  stopMonitoring(element: HTMLElement): void {\r\n    let elementInfo = this._elementInfo.get(element);\r\n\r\n    if (elementInfo) {\r\n      elementInfo.unlisten();\r\n      elementInfo.subject.complete();\r\n\r\n      this._setClasses(element, null);\r\n      this._elementInfo.delete(element);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Focuses the element via the specified focus origin.\r\n   * @param element The element to focus.\r\n   * @param origin The focus origin.\r\n   */\r\n  focusVia(element: HTMLElement, origin: FocusOrigin): void {\r\n    this._setOriginForCurrentEventQueue(origin);\r\n    element.focus();\r\n  }\r\n\r\n  /** Register necessary event listeners on the document and window. */\r\n  private _registerDocumentEvents() {\r\n    // Do nothing if we're not on the browser platform.\r\n    if (!this._platform.isBrowser) {\r\n      return;\r\n    }\r\n\r\n    // Note: we listen to events in the capture phase so we can detect them even if the user stops\r\n    // propagation.\r\n\r\n    // On keydown record the origin and clear any touch event that may be in progress.\r\n    document.addEventListener('keydown', () => {\r\n      this._lastTouchTarget = null;\r\n      this._setOriginForCurrentEventQueue('keyboard');\r\n    }, true);\r\n\r\n    // On mousedown record the origin only if there is not touch target, since a mousedown can\r\n    // happen as a result of a touch event.\r\n    document.addEventListener('mousedown', () => {\r\n      if (!this._lastTouchTarget) {\r\n        this._setOriginForCurrentEventQueue('mouse');\r\n      }\r\n    }, true);\r\n\r\n    // When the touchstart event fires the focus event is not yet in the event queue. This means\r\n    // we can't rely on the trick used above (setting timeout of 0ms). Instead we wait 650ms to\r\n    // see if a focus happens.\r\n    document.addEventListener('touchstart', (event: Event) => {\r\n      if (this._touchTimeout != null) {\r\n        clearTimeout(this._touchTimeout);\r\n      }\r\n      this._lastTouchTarget = event.target;\r\n      this._touchTimeout = setTimeout(() => this._lastTouchTarget = null, TOUCH_BUFFER_MS);\r\n    }, true);\r\n\r\n    // Make a note of when the window regains focus, so we can restore the origin info for the\r\n    // focused element.\r\n    window.addEventListener('focus', () => {\r\n      this._windowFocused = true;\r\n      setTimeout(() => this._windowFocused = false, 0);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Sets the focus classes on the element based on the given focus origin.\r\n   * @param element The element to update the classes on.\r\n   * @param origin The focus origin.\r\n   */\r\n  private _setClasses(element: HTMLElement, origin: FocusOrigin): void {\r\n    let renderer = this._elementInfo.get(element).renderer;\r\n    let toggleClass = (className: string, shouldSet: boolean) => {\r\n      shouldSet ? renderer.addClass(element, className) : renderer.removeClass(element, className);\r\n    };\r\n\r\n    toggleClass('cdk-focused', !!origin);\r\n    toggleClass('cdk-touch-focused', origin === 'touch');\r\n    toggleClass('cdk-keyboard-focused', origin === 'keyboard');\r\n    toggleClass('cdk-mouse-focused', origin === 'mouse');\r\n    toggleClass('cdk-program-focused', origin === 'program');\r\n  }\r\n\r\n  /**\r\n   * Sets the origin and schedules an async function to clear it at the end of the event queue.\r\n   * @param origin The origin to set.\r\n   */\r\n  private _setOriginForCurrentEventQueue(origin: FocusOrigin): void {\r\n    this._origin = origin;\r\n    setTimeout(() => this._origin = null, 0);\r\n  }\r\n\r\n  /**\r\n   * Checks whether the given focus event was caused by a touchstart event.\r\n   * @param event The focus event to check.\r\n   * @returns Whether the event was caused by a touch.\r\n   */\r\n  private _wasCausedByTouch(event: FocusEvent): boolean {\r\n    // Note(mmalerba): This implementation is not quite perfect, there is a small edge case.\r\n    // Consider the following dom structure:\r\n    //\r\n    // <div #parent tabindex=\"0\" cdkFocusClasses>\r\n    //   <div #child (click)=\"#parent.focus()\"></div>\r\n    // </div>\r\n    //\r\n    // If the user touches the #child element and the #parent is programmatically focused as a\r\n    // result, this code will still consider it to have been caused by the touch event and will\r\n    // apply the cdk-touch-focused class rather than the cdk-program-focused class. This is a\r\n    // relatively small edge-case that can be worked around by using\r\n    // focusVia(parentEl, renderer,  'program') to focus the parent element.\r\n    //\r\n    // If we decide that we absolutely must handle this case correctly, we can do so by listening\r\n    // for the first focus event after the touchstart, and then the first blur event after that\r\n    // focus event. When that blur event fires we know that whatever follows is not a result of the\r\n    // touchstart.\r\n    let focusTarget = event.target;\r\n    return this._lastTouchTarget instanceof Node && focusTarget instanceof Node &&\r\n        (focusTarget === this._lastTouchTarget || focusTarget.contains(this._lastTouchTarget));\r\n  }\r\n\r\n  /**\r\n   * Handles focus events on a registered element.\r\n   * @param event The focus event.\r\n   * @param element The monitored element.\r\n   */\r\n  private _onFocus(event: FocusEvent, element: HTMLElement) {\r\n    // NOTE(mmalerba): We currently set the classes based on the focus origin of the most recent\r\n    // focus event affecting the monitored element. If we want to use the origin of the first event\r\n    // instead we should check for the cdk-focused class here and return if the element already has\r\n    // it. (This only matters for elements that have includesChildren = true).\r\n\r\n    // If we are not counting child-element-focus as focused, make sure that the event target is the\r\n    // monitored element itself.\r\n    if (!this._elementInfo.get(element).checkChildren && element !== event.target) {\r\n      return;\r\n    }\r\n\r\n    // If we couldn't detect a cause for the focus event, it's due to one of three reasons:\r\n    // 1) The window has just regained focus, in which case we want to restore the focused state of\r\n    //    the element from before the window blurred.\r\n    // 2) It was caused by a touch event, in which case we mark the origin as 'touch'.\r\n    // 3) The element was programmatically focused, in which case we should mark the origin as\r\n    //    'program'.\r\n    if (!this._origin) {\r\n      if (this._windowFocused && this._lastFocusOrigin) {\r\n        this._origin = this._lastFocusOrigin;\r\n      } else if (this._wasCausedByTouch(event)) {\r\n        this._origin = 'touch';\r\n      } else {\r\n        this._origin = 'program';\r\n      }\r\n    }\r\n\r\n    this._setClasses(element, this._origin);\r\n    this._elementInfo.get(element).subject.next(this._origin);\r\n    this._lastFocusOrigin = this._origin;\r\n    this._origin = null;\r\n  }\r\n\r\n  /**\r\n   * Handles blur events on a registered element.\r\n   * @param event The blur event.\r\n   * @param element The monitored element.\r\n   */\r\n  private _onBlur(event: FocusEvent, element: HTMLElement) {\r\n    // If we are counting child-element-focus as focused, make sure that we aren't just blurring in\r\n    // order to focus another child of the monitored element.\r\n    if (this._elementInfo.get(element).checkChildren && event.relatedTarget instanceof Node &&\r\n        element.contains(event.relatedTarget)) {\r\n      return;\r\n    }\r\n\r\n    this._setClasses(element, null);\r\n    this._elementInfo.get(element).subject.next(null);\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or\r\n * programmatically) and adds corresponding classes to the element.\r\n *\r\n * There are two variants of this directive:\r\n * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is\r\n *    focused.\r\n * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused.\r\n */\r\n@Directive({\r\n  selector: '[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]',\r\n})\r\nexport class CdkMonitorFocus implements OnDestroy {\r\n  @Output() cdkFocusChange = new EventEmitter<FocusOrigin>();\r\n\r\n  constructor(private _elementRef: ElementRef, private _focusOriginMonitor: FocusOriginMonitor,\r\n              renderer: Renderer2) {\r\n    this._focusOriginMonitor.monitor(\r\n        this._elementRef.nativeElement, renderer,\r\n        this._elementRef.nativeElement.hasAttribute('cdkMonitorSubtreeFocus'))\r\n        .subscribe(origin => this.cdkFocusChange.emit(origin));\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._focusOriginMonitor.stopMonitoring(this._elementRef.nativeElement);\r\n  }\r\n}\r\n\r\n\r\nexport function FOCUS_ORIGIN_MONITOR_PROVIDER_FACTORY(\r\n    parentDispatcher: FocusOriginMonitor, ngZone: NgZone, platform: Platform) {\r\n  return parentDispatcher || new FocusOriginMonitor(ngZone, platform);\r\n}\r\n\r\n\r\nexport const FOCUS_ORIGIN_MONITOR_PROVIDER = {\r\n  // If there is already a FocusOriginMonitor available, use that. Otherwise, provide a new one.\r\n  provide: FocusOriginMonitor,\r\n  deps: [[new Optional(), new SkipSelf(), FocusOriginMonitor], NgZone, Platform],\r\n  useFactory: FOCUS_ORIGIN_MONITOR_PROVIDER_FACTORY\r\n};\r\n","/**\r\n * Applies a CSS transform to an element, including browser-prefixed properties.\r\n * @param element\r\n * @param transformValue\r\n */\r\nexport function applyCssTransform(element: HTMLElement, transformValue: string) {\r\n  // It's important to trim the result, because the browser will ignore the set operation\r\n  // if the string contains only whitespace.\r\n  let value = transformValue.trim();\r\n\r\n  element.style.transform = value;\r\n  element.style.webkitTransform = value;\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CdkMonitorFocus, FOCUS_ORIGIN_MONITOR_PROVIDER} from './focus-origin-monitor';\r\nimport {PlatformModule} from '../platform/index';\r\n\r\n\r\n@NgModule({\r\n  imports: [PlatformModule],\r\n  declarations: [CdkMonitorFocus],\r\n  exports: [CdkMonitorFocus],\r\n  providers: [FOCUS_ORIGIN_MONITOR_PROVIDER],\r\n})\r\nexport class StyleModule {}\r\n\r\n\r\nexport * from './focus-origin-monitor';\r\nexport * from './apply-transform';\r\n","/** @docs-private */\r\nexport class AnimationCurves {\r\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\r\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\r\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\r\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\r\n}\r\n\r\n\r\n/** @docs-private */\r\nexport class AnimationDurations {\r\n  static COMPLEX = '375ms';\r\n  static ENTERING = '225ms';\r\n  static EXITING = '195ms';\r\n}\r\n","/** Coerces a data-bound value (typically a string) to a number. */\r\nexport function coerceNumberProperty(value: any, fallbackValue = 0) {\r\n  // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\r\n  // and other non-number values as NaN, where Number just uses 0) but it considers the string\r\n  // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\r\n  return isNaN(parseFloat(value as any)) || isNaN(Number(value)) ? fallbackValue : Number(value);\r\n}\r\n","/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\r\nexport abstract class DateAdapter<D> {\r\n  /** The locale to use for all dates. */\r\n  protected locale: any;\r\n\r\n  /**\r\n   * Gets the year component of the given date.\r\n   * @param date The date to extract the year from.\r\n   * @returns The year component.\r\n   */\r\n  abstract getYear(date: D): number;\r\n\r\n  /**\r\n   * Gets the month component of the given date.\r\n   * @param date The date to extract the month from.\r\n   * @returns The month component (0-indexed, 0 = January).\r\n   */\r\n  abstract getMonth(date: D): number;\r\n\r\n  /**\r\n   * Gets the date of the month component of the given date.\r\n   * @param date The date to extract the date of the month from.\r\n   * @returns The month component (1-indexed, 1 = first of month).\r\n   */\r\n  abstract getDate(date: D): number;\r\n\r\n  /**\r\n   * Gets the day of the week component of the given date.\r\n   * @param date The date to extract the day of the week from.\r\n   * @returns The month component (0-indexed, 0 = Sunday).\r\n   */\r\n  abstract getDayOfWeek(date: D): number;\r\n\r\n  /**\r\n   * Gets a list of names for the months.\r\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\r\n   * @returns An ordered list of all month names, starting with January.\r\n   */\r\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n  /**\r\n   * Gets a list of names for the dates of the month.\r\n   * @returns An ordered list of all date of the month names, starting with '1'.\r\n   */\r\n  abstract getDateNames(): string[];\r\n\r\n  /**\r\n   * Gets a list of names for the days of the week.\r\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\r\n   * @returns An ordered list of all weekday names, starting with Sunday.\r\n   */\r\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\r\n\r\n  /**\r\n   * Gets the name for the year of the given date.\r\n   * @param date The date to get the year name for.\r\n   * @returns The name of the given year (e.g. '2017').\r\n   */\r\n  abstract getYearName(date: D): string;\r\n\r\n  /**\r\n   * Gets the first day of the week.\r\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\r\n   */\r\n  abstract getFirstDayOfWeek(): number;\r\n\r\n  /**\r\n   * Gets the number of days in the month of the given date.\r\n   * @param date The date whose month should be checked.\r\n   * @returns The number of days in the month of the given date.\r\n   */\r\n  abstract getNumDaysInMonth(date: D): number;\r\n\r\n  /**\r\n   * Clones the given date.\r\n   * @param date The date to clone\r\n   * @returns A new date equal to the given date.\r\n   */\r\n  abstract clone(date: D): D;\r\n\r\n  /**\r\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\r\n   * month and date.\r\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\r\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\r\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\r\n   * @returns The new date, or null if invalid.\r\n   */\r\n  abstract createDate(year: number, month: number, date: number): D;\r\n\r\n  /**\r\n   * Gets today's date.\r\n   * @returns Today's date.\r\n   */\r\n  abstract today(): D;\r\n\r\n  /**\r\n   * Parses a date from a value.\r\n   * @param value The value to parse.\r\n   * @param parseFormat The expected format of the value being parsed\r\n   *     (type is implementation-dependent).\r\n   * @returns The parsed date, or null if date could not be parsed.\r\n   */\r\n  abstract parse(value: any, parseFormat: any): D | null;\r\n\r\n  /**\r\n   * Formats a date as a string.\r\n   * @param date The value to parse.\r\n   * @param displayFormat The format to use to display the date as a string.\r\n   * @returns The parsed date, or null if date could not be parsed.\r\n   */\r\n  abstract format(date: D, displayFormat: any): string;\r\n\r\n  /**\r\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\r\n   * calendar for each year and then finding the closest date in the new month. For example when\r\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\r\n   * @param date The date to add years to.\r\n   * @param years The number of years to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of years added.\r\n   */\r\n  abstract addCalendarYears(date: D, years: number): D;\r\n\r\n  /**\r\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\r\n   * calendar for each month and then finding the closest date in the new month. For example when\r\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\r\n   * @param date The date to add months to.\r\n   * @param months The number of months to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of months added.\r\n   */\r\n  abstract addCalendarMonths(date: D, months: number): D;\r\n\r\n  /**\r\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\r\n   * calendar for each day.\r\n   * @param date The date to add days to.\r\n   * @param days The number of days to add (may be negative).\r\n   * @returns A new date equal to the given one with the specified number of days added.\r\n   */\r\n  abstract addCalendarDays(date: D, days: number): D;\r\n\r\n  /**\r\n   * Gets the RFC 3339 compatible date string (https://tools.ietf.org/html/rfc3339)  for the given\r\n   * date.\r\n   * @param date The date to get the ISO date string for.\r\n   * @returns The ISO date string date string.\r\n   */\r\n  abstract getISODateString(date: D): string;\r\n\r\n  /**\r\n   * Sets the locale used for all dates.\r\n   * @param locale The new locale.\r\n   */\r\n  setLocale(locale: any) {\r\n    this.locale = locale;\r\n  }\r\n\r\n  /**\r\n   * Compares two dates.\r\n   * @param first The first date to compare.\r\n   * @param second The second date to compare.\r\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\r\n   *     a number greater than 0 if the first date is later.\r\n   */\r\n  compareDate(first: D, second: D): number {\r\n    return this.getYear(first) - this.getYear(second) ||\r\n        this.getMonth(first) - this.getMonth(second) ||\r\n        this.getDate(first) - this.getDate(second);\r\n  }\r\n\r\n  /**\r\n   * Checks if two dates are equal.\r\n   * @param first The first date to check.\r\n   * @param second The second date to check.\r\n   * @returns Whether the two dates are equal.\r\n   *     Null dates are considered equal to other null dates.\r\n   */\r\n  sameDate(first: D | null, second: D | null): boolean {\r\n    return first && second ? !this.compareDate(first, second) : first == second;\r\n  }\r\n\r\n  /**\r\n   * Clamp the given date between min and max dates.\r\n   * @param date The date to clamp.\r\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\r\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\r\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\r\n   *     otherwise `date`.\r\n   */\r\n  clampDate(date: D, min?: D | null, max?: D | null): D {\r\n    if (min && this.compareDate(date, min) < 0) {\r\n      return min;\r\n    }\r\n    if (max && this.compareDate(date, max) > 0) {\r\n      return max;\r\n    }\r\n    return date;\r\n  }\r\n}\r\n","import {DateAdapter} from './date-adapter';\nimport { Injectable } from \"@angular/core\";\r\n\r\n\r\n// TODO(mmalerba): Remove when we no longer support safari 9.\r\n/** Whether the browser supports the Intl API. */\r\nconst SUPPORTS_INTL_API = typeof Intl != 'undefined';\r\n\r\n\r\n/** The default month names to use if Intl API is not available. */\r\nconst DEFAULT_MONTH_NAMES = {\r\n  'long': [\r\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\r\n    'October', 'November', 'December'\r\n  ],\r\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\r\n};\r\n\r\n\r\n/** The default date names to use if Intl API is not available. */\r\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\r\n\r\n\r\n/** The default day of the week names to use if Intl API is not available. */\r\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\r\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\r\n};\r\n\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\n\r\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\r\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\r\n  getYear(date: Date): number {\r\n    return date.getFullYear();\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return date.getMonth();\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return date.getDay();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, {month: style});\r\n      return range(12, i => this._stripDirectionalityCharacters(dtf.format(new Date(2017, i, 1))));\r\n    }\r\n    return DEFAULT_MONTH_NAMES[style];\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric'});\r\n      return range(31, i => this._stripDirectionalityCharacters(\r\n          dtf.format(new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DATE_NAMES;\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, {weekday: style});\r\n      return range(7, i => this._stripDirectionalityCharacters(\r\n          dtf.format(new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\r\n  }\r\n\r\n  getYearName(date: Date): string {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric'});\r\n      return this._stripDirectionalityCharacters(dtf.format(date));\r\n    }\r\n    return String(this.getYear(date));\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\r\n    return 0;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return this.getDate(this._createDateWithOverflow(\r\n        this.getYear(date), this.getMonth(date) + 1, 0));\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date));\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Date {\r\n    // Check for invalid month and date (except upper bound on date which we have to check after\r\n    // creating the Date).\r\n    if (month < 0 || month > 11 || date < 1) {\r\n      return null;\r\n    }\r\n\r\n    let result = this._createDateWithOverflow(year, month, date);\r\n\r\n    // Check that the date wasn't above the upper bound for the month, causing the month to\r\n    // overflow.\r\n    if (result.getMonth() != month) {\r\n      return null;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any): Date | null {\r\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\r\n    // parameters.\r\n    let timestamp = typeof value == 'number' ? value : Date.parse(value);\r\n    return isNaN(timestamp) ? null : new Date(timestamp);\r\n  }\r\n\r\n  format(date: Date, displayFormat: Object): string {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\r\n      return this._stripDirectionalityCharacters(dtf.format(date));\r\n    }\r\n    return this._stripDirectionalityCharacters(date.toDateString());\r\n  }\r\n\r\n  addCalendarYears(date: Date, years: number): Date {\r\n    return this.addCalendarMonths(date, years * 12);\r\n  }\r\n\r\n  addCalendarMonths(date: Date, months: number): Date {\r\n    let newDate = this._createDateWithOverflow(\r\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\r\n\r\n    // It's possible to wind up in the wrong month if the original month has more days than the new\r\n    // month. In this case we want to go to the last day of the desired month.\r\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\r\n    // guarantee this.\r\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\r\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\r\n    }\r\n\r\n    return newDate;\r\n  }\r\n\r\n  addCalendarDays(date: Date, days: number): Date {\r\n    return this._createDateWithOverflow(\r\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\r\n  }\r\n\r\n  getISODateString(date: Date): string {\r\n    return [\r\n      date.getUTCFullYear(),\r\n      this._2digit(date.getUTCMonth() + 1),\r\n      this._2digit(date.getUTCDate())\r\n    ].join('-');\r\n  }\r\n\r\n  /** Creates a date but allows the month and date to overflow. */\r\n  private _createDateWithOverflow(year: number, month: number, date: number) {\r\n    let result = new Date(year, month, date);\r\n\r\n    // We need to correct for the fact that JS native Date treats years in range [0, 99] as\r\n    // abbreviations for 19xx.\r\n    if (year >= 0 && year < 100) {\r\n      result.setFullYear(this.getYear(result) - 1900);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Pads a number to make it two digits.\r\n   * @param n The number to pad.\r\n   * @returns The padded number.\r\n   */\r\n  private _2digit(n: number) {\r\n    return ('00' + n).slice(-2);\r\n  }\r\n\r\n  /**\r\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\r\n   * other browsers do not. We remove them to make output consistent and because they interfere with\r\n   * date parsing.\r\n   * @param s The string to strip direction characters from.\r\n   * @returns The stripped string.\r\n   */\r\n  private _stripDirectionalityCharacters(s: string) {\r\n    return s.replace(/[\\u200e\\u200f]/g, '');\r\n  }\r\n}\r\n","import {InjectionToken} from '@angular/core';\r\n\r\n\r\nexport type MdDateFormats = {\r\n  parse: {\r\n    dateInput: any\r\n  },\r\n  display: {\r\n    dateInput: any,\r\n    monthYearLabel: any,\r\n    dateA11yLabel: any,\r\n    monthYearA11yLabel: any,\r\n  }\r\n};\r\n\r\n\r\nexport const MD_DATE_FORMATS = new InjectionToken<MdDateFormats>('md-date-formats');\r\n","import {MdDateFormats} from './date-formats';\r\n\r\n\r\nexport const MD_NATIVE_DATE_FORMATS: MdDateFormats = {\r\n  parse: {\r\n    dateInput: null,\r\n  },\r\n  display: {\r\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\r\n    monthYearLabel: {year: 'numeric', month: 'short'},\r\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\r\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\r\n  }\r\n};\r\n","import {NgModule} from '@angular/core';\r\nimport {DateAdapter} from './date-adapter';\r\nimport {NativeDateAdapter} from './native-date-adapter';\r\nimport {MD_DATE_FORMATS} from './date-formats';\r\nimport {MD_NATIVE_DATE_FORMATS} from './native-date-formats';\r\n\r\n\r\nexport * from './date-adapter';\r\nexport * from './date-formats';\r\nexport * from './native-date-adapter';\r\nexport * from './native-date-formats';\r\n\r\n\r\n@NgModule({\r\n  providers: [{provide: DateAdapter, useClass: NativeDateAdapter}],\r\n})\r\nexport class NativeDateModule {}\r\n\r\n\r\n@NgModule({\r\n  imports: [NativeDateModule],\r\n  providers: [{provide: MD_DATE_FORMATS, useValue: MD_NATIVE_DATE_FORMATS}],\r\n})\r\nexport class MdNativeDateModule {}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/** InjectionToken that can be used to specify the global placeholder options. */\r\nexport const MD_PLACEHOLDER_GLOBAL_OPTIONS =\r\n  new InjectionToken<PlaceholderOptions>('md-placeholder-global-options');\r\n\r\n/** Type for the available floatPlaceholder values. */\r\nexport type FloatPlaceholderType = 'always' | 'never' | 'auto';\r\n\r\nexport interface PlaceholderOptions {\r\n  float?: FloatPlaceholderType;\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {MdLineModule} from './line/line';\r\nimport {RtlModule} from './rtl/dir';\r\nimport {ObserveContentModule} from './observe-content/observe-content';\r\nimport {MdOptionModule} from './option/index';\r\nimport {PortalModule} from './portal/portal-directives';\r\nimport {OverlayModule} from './overlay/overlay-directives';\r\nimport {A11yModule} from './a11y/index';\r\nimport {MdSelectionModule} from './selection/index';\r\nimport {MdRippleModule} from './ripple/index';\r\n\r\n\r\n// RTL\r\nexport {Dir, LayoutDirection, RtlModule} from './rtl/dir';\r\n\r\n// Mutation Observer\r\nexport {ObserveContentModule, ObserveContent} from './observe-content/observe-content';\r\n\r\nexport * from './option/index';\r\n\r\n// Portals\r\nexport {\r\n  Portal,\r\n  PortalHost,\r\n  BasePortalHost,\r\n  ComponentPortal,\r\n  TemplatePortal\r\n} from './portal/portal';\r\nexport {\r\n  PortalHostDirective,\r\n  TemplatePortalDirective,\r\n  PortalModule,\r\n} from './portal/portal-directives';\r\nexport {DomPortalHost} from './portal/dom-portal-host';\r\n\r\n// Platform\r\nexport * from './platform/index';\r\n\r\n// Overlay\r\nexport * from './overlay/index';\r\n\r\n// Gestures\r\nexport {GestureConfig} from './gestures/gesture-config';\r\n// Explicitly specify the interfaces which should be re-exported, because if everything\r\n// is re-exported, module bundlers may run into issues with treeshaking.\r\nexport {HammerInput, HammerManager} from './gestures/gesture-annotations';\r\n\r\n// Ripple\r\nexport * from './ripple/index';\r\n\r\n// a11y\r\nexport {\r\n  AriaLivePoliteness,\r\n  LiveAnnouncer,\r\n  LIVE_ANNOUNCER_ELEMENT_TOKEN,\r\n  LIVE_ANNOUNCER_PROVIDER,\r\n} from './a11y/live-announcer';\r\n\r\n// Selection\r\nexport * from './selection/selection';\r\n\r\nexport * from './a11y/focus-trap';\r\nexport {InteractivityChecker} from './a11y/interactivity-checker';\r\nexport {isFakeMousedownFromScreenReader} from './a11y/fake-mousedown';\r\n\r\nexport {A11yModule} from './a11y/index';\r\n\r\nexport {\r\n  UniqueSelectionDispatcher,\r\n  UniqueSelectionDispatcherListener,\r\n  UNIQUE_SELECTION_DISPATCHER_PROVIDER,\r\n} from './coordination/unique-selection-dispatcher';\r\n\r\nexport {MdLineModule, MdLine, MdLineSetter} from './line/line';\r\n\r\n// Style\r\nexport * from './style/index';\r\n\r\n// Misc\r\nexport {ComponentType} from './overlay/generic-component-type';\r\n\r\n// Keybindings\r\nexport * from './keyboard/keycodes';\r\n\r\nexport * from './compatibility/compatibility';\r\n\r\n// Animation\r\nexport * from './animation/animation';\r\n\r\n// Selection\r\nexport * from './selection/index';\r\n\r\n// Coercion\r\nexport {coerceBooleanProperty} from './coercion/boolean-property';\r\nexport {coerceNumberProperty} from './coercion/number-property';\r\n\r\n// Compatibility\r\nexport {CompatibilityModule, NoConflictStyleCompatibilityMode} from './compatibility/compatibility';\r\n\r\n// Common material module\r\nexport {MdCommonModule, MATERIAL_SANITY_CHECKS} from './common-behaviors/common-module';\r\n\r\n// Datetime\r\nexport * from './datetime/index';\r\n\r\n// Placeholder\r\nexport {\r\n  FloatPlaceholderType,\r\n  PlaceholderOptions,\r\n  MD_PLACEHOLDER_GLOBAL_OPTIONS\r\n} from './placeholder/placeholder-options';\r\n\r\n@NgModule({\r\n  imports: [\r\n    MdLineModule,\r\n    RtlModule,\r\n    MdRippleModule,\r\n    ObserveContentModule,\r\n    PortalModule,\r\n    OverlayModule,\r\n    A11yModule,\r\n    MdOptionModule,\r\n    MdSelectionModule,\r\n  ],\r\n  exports: [\r\n    MdLineModule,\r\n    RtlModule,\r\n    MdRippleModule,\r\n    ObserveContentModule,\r\n    PortalModule,\r\n    OverlayModule,\r\n    A11yModule,\r\n    MdOptionModule,\r\n    MdSelectionModule,\r\n  ],\r\n})\r\nexport class MdCoreModule {}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Md2AccordionTab } from './accordiontab';\r\nimport { coerceBooleanProperty } from '../core/core';\r\n\r\n@Component({\r\n  selector: 'md2-accordion',\r\n  template: `<ng-content></ng-content>`,\r\n  styleUrls: ['accordion.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  exportAs: 'md2Accordion'\r\n})\r\nexport class Md2Accordion {\r\n\r\n  private _multiple: boolean;\r\n\r\n  @Input()\r\n  get multiple(): boolean { return this._multiple; }\r\n  set multiple(value) { this._multiple = coerceBooleanProperty(value); }\r\n\r\n  @Output() close: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() open: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  tabs: Md2AccordionTab[] = [];\r\n\r\n  /**\r\n   * Add or append tab in accordion\r\n   * @param tab object of Md2AccordionTab\r\n   */\r\n  addTab(tab: Md2AccordionTab) {\r\n    this.tabs.push(tab);\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Directive,\r\n  Input,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n  animate,\r\n  state,\r\n  style,\r\n  transition,\r\n  trigger,\r\n} from '@angular/animations';\r\nimport { Md2Accordion } from './accordion';\r\nimport { coerceBooleanProperty } from '../core';\r\n\r\n@Directive({ selector: 'md2-accordion-header' })\r\nexport class Md2AccordionHeader { }\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-accordion-tab',\r\n  template: `\r\n    <div class=\"md2-accordion-header\" (click)=\"_handleClick($event)\">\r\n      <span>{{header}}</span>\r\n      <ng-content select=\"md2-accordion-header\"></ng-content>\r\n      <span class=\"md2-accordion-header-icon\"></span>\r\n    </div>\r\n    <div class=\"md2-accordion-tab-body\" [@slide]=\"slide\">\r\n      <div class=\"md2-accordion-tab-content\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styleUrls: ['accordion.scss'],\r\n  animations: [\r\n    trigger('slide', [\r\n      state('up', style({ height: 0 })),\r\n      state('down', style({ height: '*' })),\r\n      transition('down => up', [\r\n        style({ height: '*' }),\r\n        animate(300, style({ height: 0 }))\r\n      ]),\r\n      transition('up => down', [\r\n        style({ height: 0 }),\r\n        animate(300, style({\r\n          height: '*'\r\n        }))\r\n      ])\r\n    ])\r\n  ],\r\n  host: {\r\n    'role': 'accordion-tab',\r\n    '[class.md2-accordion-tab-active]': 'active',\r\n    '[class.md2-accordion-tab-disabled]': 'disabled'\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  exportAs: 'md2AccordionTab'\r\n})\r\nexport class Md2AccordionTab {\r\n\r\n  private _disabled: boolean = false;\r\n  private _active: boolean = false;\r\n\r\n  @Input() header: string;\r\n\r\n  @Input()\r\n  get active(): boolean { return this._active; }\r\n  set active(value) {\r\n    this._active = coerceBooleanProperty(value);\r\n    if (this._active && !this._accordion.multiple) {\r\n      for (let i = 0; i < this._accordion.tabs.length; i++) {\r\n        if (this._accordion.tabs[i] !== this) { this._accordion.tabs[i].active = false; }\r\n      }\r\n    }\r\n  }\r\n\r\n  get slide(): string {\r\n    return this.active ? 'down' : 'up';\r\n  }\r\n\r\n  @Input()\r\n  get disabled(): boolean { return this._disabled; }\r\n  set disabled(value) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n  constructor(private _accordion: Md2Accordion) {\r\n    this._accordion.addTab(this);\r\n  }\r\n\r\n  /**\r\n   * Toggle the accordion\r\n   * @param event\r\n   * @return if it is disabled\r\n   */\r\n  _handleClick(event: Event) {\r\n    if (this.disabled) { return; }\r\n\r\n    let index = this.findTabIndex();\r\n\r\n    if (this.active) {\r\n      this.active = !this.active;\r\n      this._accordion.close.emit({ originalEvent: event, index: index });\r\n    } else if (!this._accordion.multiple) {\r\n      for (let i = 0; i < this._accordion.tabs.length; i++) {\r\n        this._accordion.tabs[i].active = false;\r\n      }\r\n      this._active = true;\r\n      this._accordion.open.emit({ originalEvent: event, index: index });\r\n    } else {\r\n      this._active = true;\r\n      this._accordion.open.emit({ originalEvent: event, index: index });\r\n    }\r\n\r\n    event.preventDefault();\r\n  }\r\n\r\n  /**\r\n   * Find index of specific tab of accordion\r\n   * @return index number of this tab\r\n   */\r\n  findTabIndex() {\r\n    let index = -1;\r\n    for (let i = 0; i < this._accordion.tabs.length; i++) {\r\n      if (this._accordion.tabs[i] === this) {\r\n        index = i;\r\n        break;\r\n      }\r\n    }\r\n    return index;\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Md2Accordion } from './accordion';\r\nimport { Md2AccordionTab, Md2AccordionHeader } from './accordiontab';\r\n\r\nexport * from './accordion';\r\nexport * from './accordiontab';\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  exports: [Md2Accordion, Md2AccordionTab, Md2AccordionHeader],\r\n  declarations: [Md2Accordion, Md2AccordionTab, Md2AccordionHeader],\r\n})\r\nexport class Md2AccordionModule { }\r\n","import {\r\n  Pipe,\r\n  PipeTransform\r\n} from '@angular/core';\r\n\r\n@Pipe({ name: 'highlight' })\r\nexport class HighlightPipe implements PipeTransform {\r\n  /**\r\n   * Transform function\r\n   * @param value string\r\n   * @param query string filter value\r\n   * @return filtered string with markup\r\n   */\r\n  transform(value: string, query: string) {\r\n    if (query.length < 1) { return value; }\r\n    return query ? value.replace(new RegExp(this._escapeRegexp(query), 'gi'),\r\n      '<span class=\"highlight\">$&</span>') : value;\r\n  }\r\n\r\n  /**\r\n   * filter pipe\r\n   * @param queryToEscape\r\n   * @return queryToEscape with replace string\r\n   */\r\n  private _escapeRegexp(queryToEscape: string) {\r\n    return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\r\n  }\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Input,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n  NG_VALUE_ACCESSOR,\r\n  ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport {\r\n  coerceBooleanProperty,\r\n  UP_ARROW,\r\n  DOWN_ARROW,\r\n  ENTER,\r\n  ESCAPE,\r\n  TAB\r\n} from '../core/core';\r\n\r\nexport class Item {\r\n  text: string;\r\n  value: string;\r\n\r\n  constructor(source: any, textKey: string, valueKey: string) {\r\n    if (typeof source === 'string') {\r\n      this.text = this.value = source;\r\n    }\r\n    if (typeof source === 'object') {\r\n      this.text = source[textKey];\r\n      this.value = valueKey ? source[valueKey] : source;\r\n    }\r\n  }\r\n}\r\n\r\nlet nextId = 0;\r\n\r\nexport const MD2_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => Md2Autocomplete),\r\n  multi: true\r\n};\r\n\r\n/** Change event object emitted by Md2Autocomplete. */\r\nexport class Md2AutocompleteChange {\r\n  source: Md2Autocomplete;\r\n  value: any;\r\n}\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-autocomplete',\r\n  templateUrl: 'autocomplete.html',\r\n  styleUrls: ['autocomplete.scss'],\r\n  providers: [MD2_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR],\r\n  host: {\r\n    'role': 'autocomplete',\r\n    '[id]': 'id',\r\n    '[attr.aria-label]': 'placeholder',\r\n    '[attr.aria-required]': 'required.toString()',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[class.md2-autocomplete-disabled]': 'disabled',\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  exportAs: 'md2Autocomplete'\r\n})\r\n\r\nexport class Md2Autocomplete implements AfterContentInit, ControlValueAccessor {\r\n\r\n  constructor(private _element: ElementRef) { }\r\n\r\n  ngAfterContentInit() { this._isInitialized = true; }\r\n\r\n  @Output() change: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() textChange = new EventEmitter();\r\n\r\n  private _value: any = '';\r\n  private _readonly: boolean = false;\r\n  private _required: boolean = false;\r\n  private _disabled: boolean = false;\r\n  private _isInitialized: boolean = false;\r\n\r\n  _onChange: (value: any) => void = () => { };\r\n  _onTouched = () => { };\r\n\r\n  private _items: Array<any> = [];\r\n  _list: Array<Item> = [];\r\n\r\n  private selectedItem: Item = null;\r\n  private noBlur: boolean = false;\r\n  _focusedOption: number = 0;\r\n  _inputValue: string = '';\r\n  _inputFocused: boolean = false;\r\n\r\n  @Input() id: string = 'md2-autocomplete-' + (++nextId);\r\n  @Input() tabindex: number = 0;\r\n  @Input() placeholder: string = '';\r\n  @Input('item-text') textKey: string = 'text';\r\n  @Input('item-value') valueKey: string = null;\r\n  @Input('min-length') minLength: number = 1;\r\n\r\n  @Input()\r\n  get readonly(): boolean { return this._readonly; }\r\n  set readonly(value) { this._readonly = coerceBooleanProperty(value); }\r\n\r\n  @Input()\r\n  get required(): boolean { return this._required; }\r\n  set required(value) { this._required = coerceBooleanProperty(value); }\r\n\r\n  @Input()\r\n  get disabled(): boolean { return this._disabled; }\r\n  set disabled(value) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n  @Input()\r\n  set items(value: Array<any>) { this._items = value; }\r\n\r\n  @Input()\r\n  get value(): any { return this._value; }\r\n  set value(value: any) {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this._inputValue = '';\r\n      if (value) {\r\n        let selItm = this._items.find((i: any) => this.equals(this.valueKey ?\r\n          i[this.valueKey] : i, value));\r\n        this.selectedItem = new Item(selItm, this.textKey, this.valueKey);\r\n        if (this.selectedItem) { this._inputValue = this.selectedItem.text; }\r\n      }\r\n      if (!this._inputValue) { this._inputValue = ''; }\r\n      if (this._isInitialized) {\r\n        this._emitChangeEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Compare two vars or objects\r\n   * @param o1 compare first object\r\n   * @param o2 compare second object\r\n   * @return boolean comparation result\r\n   */\r\n  private equals(o1: any, o2: any) {\r\n    if (o1 === o2) { return true; }\r\n    if (o1 === null || o2 === null) { return false; }\r\n    if (o1 !== o1 && o2 !== o2) { return true; }\r\n    let t1 = typeof o1, t2 = typeof o2, key: any, keySet: any;\r\n    if (t1 === t2 && t1 === 'object') {\r\n      keySet = Object.create(null);\r\n      for (key in o1) {\r\n        if (!this.equals(o1[key], o2[key])) { return false; }\r\n        keySet[key] = true;\r\n      }\r\n      for (key in o2) {\r\n        if (!(key in keySet) && key.charAt(0) !== '$' && o2[key]) { return false; }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  get isMenuVisible(): boolean {\r\n    return ((this._inputFocused || this.noBlur) && this._list && this._list.length &&\r\n      !this.selectedItem) && !this.readonly ? true : false;\r\n  }\r\n\r\n  /**\r\n   * update scroll of suggestion menu\r\n   */\r\n  private updateScroll() {\r\n    if (this._focusedOption < 0) { return; }\r\n    let menuContainer = this._element.nativeElement.querySelector('.md2-autocomplete-menu');\r\n    if (!menuContainer) { return; }\r\n\r\n    let choices = menuContainer.querySelectorAll('.md2-option');\r\n    if (choices.length < 1) { return; }\r\n\r\n    let highlighted: any = choices[this._focusedOption];\r\n    if (!highlighted) { return; }\r\n\r\n    let top: number = highlighted.offsetTop + highlighted.clientHeight - menuContainer.scrollTop;\r\n    let height: number = menuContainer.offsetHeight;\r\n\r\n    if (top > height) {\r\n      menuContainer.scrollTop += top - height;\r\n    } else if (top < highlighted.clientHeight) {\r\n      menuContainer.scrollTop -= highlighted.clientHeight - top;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * input event listner\r\n   * @param event\r\n   */\r\n  _handleKeyup(event: KeyboardEvent) {\r\n    this.textChange.emit(this._inputValue);\r\n  }\r\n\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    if (this.disabled) { return; }\r\n    switch (event.keyCode) {\r\n      case TAB: this._handleMouseLeave(); break;\r\n      case ESCAPE:\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n        if (this._inputValue) {\r\n          this._onClear();\r\n        }\r\n        break;\r\n\r\n      case ENTER:\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        if (this.isMenuVisible) {\r\n          this._selectOption(event, this._focusedOption);\r\n        }\r\n        break;\r\n\r\n      case DOWN_ARROW:\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        if (this.isMenuVisible) {\r\n          this._focusedOption = (this._focusedOption === this._list.length - 1) ? 0 :\r\n            Math.min(this._focusedOption + 1, this._list.length - 1);\r\n          this.updateScroll();\r\n        }\r\n        break;\r\n      case UP_ARROW:\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        if (this.isMenuVisible) {\r\n          this._focusedOption = (this._focusedOption === 0) ? this._list.length - 1 :\r\n            Math.max(0, this._focusedOption - 1);\r\n          this.updateScroll();\r\n        }\r\n        break;\r\n      default:\r\n        setTimeout(() => {\r\n          this.updateItems();\r\n        }, 10);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * select option\r\n   * @param event\r\n   * @param index of selected item\r\n   */\r\n  _selectOption(event: Event, index: number) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    this.selectedItem = this._list[index];\r\n    this._inputValue = this._list[index].text;\r\n    this.updateValue();\r\n    this._handleMouseLeave();\r\n  }\r\n\r\n  /**\r\n   * clear selected suggestion\r\n   */\r\n  _onClear() {\r\n    if (this.disabled) { return; }\r\n    this._inputValue = '';\r\n    this.selectedItem = null;\r\n    this.updateItems();\r\n    this._value = this.selectedItem ? this.selectedItem.value : this.selectedItem;\r\n    this.updateValue();\r\n  }\r\n\r\n  /**\r\n   * update value\r\n   */\r\n  private updateValue() {\r\n    this._value = this.selectedItem ? this.selectedItem.value : this.selectedItem;\r\n    this._emitChangeEvent();\r\n    this.onFocus();\r\n  }\r\n\r\n  /**\r\n   * component focus listener\r\n   */\r\n  private onFocus() {\r\n    if (this.disabled) { return; }\r\n    this._element.nativeElement.querySelector('input').focus();\r\n  }\r\n\r\n  /**\r\n   * input focus listener\r\n   */\r\n  _handleFocus() {\r\n    this._inputFocused = true;\r\n    this.updateItems();\r\n    this._focusedOption = 0;\r\n  }\r\n\r\n  /**\r\n   * input blur listener\r\n   */\r\n  _handleBlur() {\r\n    this._inputFocused = false;\r\n    this._onTouched();\r\n  }\r\n\r\n  /**\r\n   * suggestion menu mouse enter listener\r\n   */\r\n  _handleMouseEnter() { this.noBlur = true; }\r\n\r\n  /**\r\n   * suggestion menu mouse leave listener\r\n   */\r\n  _handleMouseLeave() { this.noBlur = false; }\r\n\r\n  /**\r\n   * Update suggestion to filter the query\r\n   * @param query\r\n   */\r\n  private updateItems() {\r\n    if (this._inputValue.length < this.minLength) {\r\n      this._list = [];\r\n    } else {\r\n      this._list = this._items.map((i: any) => new Item(i, this.textKey,\r\n        this.valueKey)).filter(i => new RegExp(this._inputValue.trim(), 'ig').test(i.text));\r\n      if (this._list.length && this._list[0].text !== this._inputValue) {\r\n        this.selectedItem = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  _emitChangeEvent(): void {\r\n    let event = new Md2AutocompleteChange();\r\n    event.source = this;\r\n    event.value = this._value;\r\n    this._onChange(event.value);\r\n    this.change.emit(event);\r\n  }\r\n\r\n  writeValue(value: any): void {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this._inputValue = '';\r\n      if (value) {\r\n        let selItm = this._items.find((i: any) => this.equals(this.valueKey ?\r\n          i[this.valueKey] : i, value));\r\n        this.selectedItem = new Item(selItm, this.textKey, this.valueKey);\r\n        if (this.selectedItem) { this._inputValue = this.selectedItem.text; }\r\n      }\r\n      if (!this._inputValue) { this._inputValue = ''; }\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: (value: any) => void): void { this._onChange = fn; }\r\n\r\n  registerOnTouched(fn: () => {}): void { this._onTouched = fn; }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n}\r\n","<div class=\"md2-autocomplete-trigger\" [class.is-focused]=\"_inputFocused || isMenuVisible\">\r\n  <input [(ngModel)]=\"_inputValue\" type=\"text\" autocomplete=\"off\" [readonly]=\"readonly\" [tabindex]=\"disabled ? -1 : tabindex\" [disabled]=\"disabled\" class=\"md2-autocomplete-input\" (focus)=\"_handleFocus()\" (blur)=\"_handleBlur()\" (keydown)=\"_handleKeydown($event)\" (keyup)=\"_handleKeyup($event)\" (change)=\"$event.stopPropagation()\" />\r\n  <span class=\"md2-autocomplete-placeholder\" [class.has-value]=\"_inputValue\"> {{ placeholder }} </span>\r\n  <svg *ngIf=\"_inputValue && !required && !disabled\" (click)=\"_onClear()\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n  </svg>\r\n</div>\r\n<ul *ngIf=\"isMenuVisible\" class=\"md2-autocomplete-menu\" (mouseenter)=\"_handleMouseEnter()\" (mouseleave)=\"_handleMouseLeave()\">\r\n  <li class=\"md2-option\" *ngFor=\"let l of _list; let i = index;\" [class.focus]=\"_focusedOption === i\" (click)=\"_selectOption($event, i)\">\r\n    <div class=\"md2-text\" [innerHtml]=\"l.text | highlight:_inputValue\"></div>\r\n  </li>\r\n</ul>\r\n","import { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HighlightPipe } from './autocomplete-pipe';\r\nimport { Md2Autocomplete } from './autocomplete';\r\n\r\nexport * from './autocomplete';\r\nexport * from './autocomplete-pipe';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, FormsModule],\r\n  exports: [Md2Autocomplete, HighlightPipe],\r\n  declarations: [Md2Autocomplete, HighlightPipe],\r\n})\r\nexport class Md2AutocompleteModule { }\r\n","import {\r\n  Component,\r\n  Input,\r\n  forwardRef,\r\n  Output,\r\n  ViewChild,\r\n  NgModule,\r\n  ElementRef,\r\n  EventEmitter,\r\n  AfterContentInit,\r\n  HostListener,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  NG_VALUE_ACCESSOR,\r\n  NgForm,\r\n  FormsModule\r\n} from '@angular/forms';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { Md2AutocompleteModule } from '../autocomplete/index';\r\nimport {\r\n  ENTER,\r\n  SPACE,\r\n  BACKSPACE,\r\n  DELETE,\r\n  COMMA,\r\n  LEFT_ARROW,\r\n  RIGHT_ARROW\r\n} from '../core/keyboard/keycodes';\r\n\r\nexport class Chip {\r\n  public text: string;\r\n  public value: string;\r\n\r\n  constructor(source: any, textKey: string, valueKey: string) {\r\n    if (typeof source === 'string') {\r\n      this.text = this.value = source;\r\n    }\r\n    if (typeof source === 'object') {\r\n      this.text = source[textKey];\r\n      this.value = valueKey ? source[valueKey] : source;\r\n    }\r\n  }\r\n}\r\n\r\nlet nextId = 0;\r\nexport const MD2_CHIPS_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => Md2Chips),\r\n  multi: true\r\n};\r\n\r\n/** Change event object emitted by Md2Chips. */\r\nexport class Md2ChipsChange {\r\n  source: Md2Chips;\r\n  value: any;\r\n}\r\n\r\n@Component({\r\n  selector: 'md2-chips',\r\n  templateUrl: 'chips.html',\r\n  styleUrls: ['chips.scss'],\r\n  providers: [MD2_CHIPS_CONTROL_VALUE_ACCESSOR],\r\n\r\n  host: {\r\n    'role': 'chips',\r\n    '[id]': 'id',\r\n    '[tabindex]': 'disabled ? -1 : tabindex',\r\n    '[class.chip-input-focus]': 'inputFocused || selectedChip >= 0',\r\n  },\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class Md2Chips implements ControlValueAccessor, AfterContentInit {\r\n  @Input() tabindex: number = 0;\r\n  @Input() addOnComma: boolean = true;\r\n  @Input() addOnEnter: boolean = true;\r\n  @Input() addOnPaste: boolean = true;\r\n  @Input() addOnSpace: boolean = false;\r\n  @Input() allowedPattern: RegExp = /.+/;\r\n  @Input() ngModel: string[];\r\n  @Input() pasteSplitPattern: string = ',';\r\n  @Input() placeholder: string = '';\r\n  @Input() autocompleteDataList: string[];\r\n  @Input() isAutoComplete: boolean = false;\r\n  @Input() isRemovable: boolean = true;\r\n  @Input() disabled: boolean = false;\r\n  @Input() minChips: number = 0;\r\n  @Input() maxChips: number = 10000;\r\n  @Input() type: string = 'text';\r\n  @Input() id: string = 'md2-chips-' + (++nextId);\r\n  @Input('autocomplete-item-text') autocompleteItemText: string = 'text';\r\n  @Input('autocomplete-item-value') autocompleteItemValue: string = 'value';\r\n  @Input('item-text') textKey: string = 'text';\r\n  @Input('item-value') valueKey: string = null;\r\n\r\n  @Output() change: EventEmitter<any> = new EventEmitter<any>();\r\n  @ViewChild('chipInputForm') chipInputForm: NgForm;\r\n\r\n  _onChange: (value: any) => void = () => { };\r\n  _onTouched = () => { };\r\n\r\n  chipItemList: Array<Chip> = [];\r\n  inputValue: string = '';\r\n  selectedChip: number = -1;\r\n  inputFocused: boolean = false;\r\n  autoCompleteFocued: boolean = false;\r\n\r\n  private _value: any = '';\r\n  private splitRegExp: RegExp;\r\n  templateHtmlString: any;\r\n  item: any;\r\n  private isEmptyAutoComplete: boolean = true;\r\n\r\n  constructor(private elementRef: ElementRef) { }\r\n\r\n  get element() {\r\n    const elements: any = { root: this.elementRef.nativeElement, mainDiv: null, template: null };\r\n    elements.mainDiv = elements.root.querySelector('.md2-chips-container');\r\n    elements.template = elements.mainDiv.querySelector('.md2-template');\r\n    return elements;\r\n  }\r\n  @Input()\r\n  get value(): any { return this._value; }\r\n  set value(value: any) { this.setValue(value); }\r\n\r\n  /**\r\n   * set value\r\n   * @param value\r\n   */\r\n  set setValue(value: any) {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this.chipItemList = [];\r\n      if (value) {\r\n        if (value && value.length && Array.isArray(value)) {\r\n          for (let i = 0; i < value.length; i++) {\r\n            this.chipItemList.push(new Chip(value[i], this.textKey, this.valueKey));\r\n          }\r\n        }\r\n      }\r\n    }\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  getFocusAutocomplete() {\r\n    this._onTouched();\r\n  }\r\n\r\n  changeAutocomplete(value: any) {\r\n    if (value) {\r\n      this.addNewChip(value.value);\r\n      this.item = null;\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    let elements = this.element;\r\n    this.splitRegExp = new RegExp(this.pasteSplitPattern);\r\n    if (elements.template) {\r\n      this.templateHtmlString = elements.template.innerHTML;\r\n    }\r\n  }\r\n\r\n  // check autocomplete input is empty or not\r\n  valueupdate(evt: Event) {\r\n    this.isEmptyAutoComplete = evt ? false : true;\r\n  }\r\n\r\n  /**\r\n   * input key listener\r\n   * @param event\r\n   */\r\n  inputChanged(event: KeyboardEvent): void {\r\n    let key = event.keyCode;\r\n    switch (key) {\r\n      // back space\r\n      case BACKSPACE:\r\n        this.backspaceEvent();\r\n        break;\r\n      // delete\r\n      case DELETE:\r\n        this.backspaceEvent();\r\n        break;\r\n      // left arrow\r\n      case LEFT_ARROW:\r\n        if (this.isAutoComplete && this.isEmptyAutoComplete) {\r\n          this.leftArrowKeyEvents();\r\n        } else if (!this.isAutoComplete && !this.inputValue) {\r\n          this.leftArrowKeyEvents();\r\n        }\r\n        break;\r\n      // right arrow\r\n      case RIGHT_ARROW:\r\n        if (this.isAutoComplete && this.isEmptyAutoComplete) {\r\n          this.rightArrowKeyEvents();\r\n        } else if (!this.isAutoComplete && !this.inputValue) {\r\n          this.rightArrowKeyEvents();\r\n        }\r\n        break;\r\n      // enter\r\n      case ENTER:\r\n        if (this.addOnEnter) {\r\n          this.addNewChip(this.inputValue);\r\n          event.preventDefault();\r\n        }\r\n        break;\r\n      // comma\r\n      case COMMA:\r\n        if (this.addOnComma) {\r\n          this.addNewChip(this.inputValue);\r\n          event.preventDefault();\r\n        }\r\n        break;\r\n      // space\r\n      case SPACE:\r\n        if (this.addOnSpace) {\r\n          this.addNewChip(this.inputValue);\r\n          event.preventDefault();\r\n        }\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  @HostListener('focus')\r\n  _handleFocus() {\r\n    if (this.disabled) { return; }\r\n    if (!this.isAutoComplete) {\r\n      this.elementRef.nativeElement.querySelector('input.chip-input').focus();\r\n    } else {\r\n      this.autoCompleteFocued = true;\r\n      this._onTouched();\r\n    }\r\n    this._resetSelected();\r\n  }\r\n\r\n  inputBlurred(): void {\r\n    this.inputFocused = false;\r\n    if (this.inputValue) {\r\n      this.addNewChip(this.inputValue);\r\n    }\r\n    this._onTouched();\r\n  }\r\n\r\n  inputFocus(): void {\r\n    if (this.disabled) { return; }\r\n    this.inputFocused = true;\r\n  }\r\n\r\n  inputPaste(event: any): void {\r\n    let clipboardData = event.clipboardData ||\r\n      (event.originalEvent && event.originalEvent.clipboardData);\r\n    let pastedString = clipboardData.getData('text/plain').trim();\r\n    this.addNewChip(pastedString);\r\n    setTimeout(() => this._resetInput());\r\n  }\r\n\r\n  leftArrowKeyEvents() {\r\n    event.preventDefault();\r\n    if (this.selectedChip) {\r\n      if (this.selectedChip < 0) {\r\n        this.selectedChip = this.chipItemList.length - 1;\r\n      } else {\r\n        this.selectedChip = this.selectedChip - 1;\r\n      }\r\n    }\r\n  }\r\n  rightArrowKeyEvents() {\r\n    event.preventDefault();\r\n    if (this.selectedChip != -1) {\r\n      if (this.selectedChip >= this.chipItemList.length) {\r\n        this.selectedChip = 0;\r\n      } else {\r\n        this.selectedChip = this.selectedChip + 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _isValid(chipString: any): boolean {\r\n    let typeString = typeof chipString;\r\n    let isExist: any;\r\n    if (typeString === 'string') {\r\n      chipString = chipString.trim();\r\n      isExist = this.chipItemList.filter((chip) => chip.text === chipString);\r\n    } else {\r\n      isExist = this.chipItemList.filter((chip) => chip.text === chipString.text);\r\n    }\r\n    if (this.chipItemList.indexOf(chipString) === -1 && (isExist.length ? false : true)) {\r\n      return this.allowedPattern.test(chipString);\r\n    }\r\n  }\r\n  /**\r\n  * add new chip\r\n  * @param chips\r\n  */\r\n  private addNewChip(chips: any): void {\r\n    let validInput = this._isValid(chips);\r\n    if (validInput) {\r\n      if (this.maxChips && this.maxChips < this.chipItemList.length - 1) {\r\n        return;\r\n      } else {\r\n        this.chipItemList.push(new Chip(chips, this.autocompleteItemText, this.autocompleteItemValue));\r\n        this.item = null;\r\n      }\r\n    }\r\n    this._resetSelected();\r\n    this._resetInput();\r\n    this.updateValue();\r\n  }\r\n\r\n  /**\r\n * remove selected chip\r\n * @param chipIndexToRemove index of selected chip\r\n */\r\n  removeSelectedChip(chipIndexToRemove: number): void {\r\n    this.chipItemList.splice(chipIndexToRemove, 1);\r\n    this._resetSelected();\r\n    this.updateValue();\r\n  }\r\n\r\n  private backspaceEvent(): void {\r\n    if (!this.inputValue.length && this.chipItemList.length &&\r\n      this.isRemovable && this.isEmptyAutoComplete) {\r\n      if (this.selectedChip != -1) {\r\n        this.removeSelectedChip(this.selectedChip);\r\n        this.selectedChip = this.chipItemList.length - 1;\r\n      } else {\r\n        this.selectedChip = this.chipItemList.length - 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  private _resetSelected(): void {\r\n    this.selectedChip = -1;\r\n  }\r\n\r\n  private _resetInput(): void {\r\n    if (this.isAutoComplete) {\r\n      this.chipInputForm.controls['autocomplete'].setValue('');\r\n    } else {\r\n      this.chipInputForm.controls['chipInput'].setValue('');\r\n    }\r\n  }\r\n  /**\r\n   * update value\r\n   */\r\n  private updateValue() {\r\n    this._value = new Array<any>();\r\n    this._value = this.chipItemList.map((chip: any) => {\r\n      if (this.valueKey) {\r\n        let c: any = {};\r\n        c[this.textKey] = chip.text;\r\n        c[this.valueKey] = chip.value;\r\n        return c;\r\n      } else {\r\n        return chip.value;\r\n      }\r\n    });\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  /** Emits an event when the user selects a color. */\r\n  _emitChangeEvent(): void {\r\n    let event = new Md2ChipsChange();\r\n    event.source = this;\r\n    event.value = this._value;\r\n    this._onChange(event.value);\r\n    this.change.emit(event);\r\n  }\r\n\r\n  writeValue(value: any): void {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this.chipItemList = [];\r\n      if (value) {\r\n        if (value && value.length && Array.isArray(value)) {\r\n          for (let i = 0; i < value.length; i++) {\r\n            this.chipItemList.push(new Chip(value[i], this.textKey, this.valueKey));\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  registerOnChange(fn: (value: any) => void): void { this._onChange = fn; }\r\n  registerOnTouched(fn: () => {}): void { this._onTouched = fn; }\r\n}\r\n\r\nexport const MD2_CHIPS_DIRECTIVES: any[] = [Md2Chips];\r\n\r\n@NgModule({\r\n  imports: [CommonModule, FormsModule, Md2AutocompleteModule],\r\n  declarations: MD2_CHIPS_DIRECTIVES,\r\n  exports: MD2_CHIPS_DIRECTIVES\r\n})\r\nexport class Md2ChipsModule { }\r\n","<div class=\"md2-chips-container\" [class.md2-chip-disabled]=\"disabled\" [class.md2-chip-remove]=\"!isRemovable\">\r\n  <span *ngFor=\"let chip of chipItemList; let i = index\" class=\"md2-chip\" [class.active]=\"selectedChip === i\">\r\n    <span>{{chip.text}}</span>\r\n    <span [innerHTML]=\"templateHtmlString\"></span>\r\n    <svg (click)=\"removeSelectedChip(i)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" *ngIf=\"isRemovable\">\r\n      <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n    </svg>\r\n  </span>\r\n  <ng-content select=\".md2-template\"></ng-content>\r\n  <form #chipInputForm=\"ngForm\" class=\"chip-input-form\">\r\n    <input *ngIf=\"!isAutoComplete\" class=\"chip-input\" [disabled]=\"disabled\" [type]=\"type\" [(ngModel)]=\"inputValue\" name=\"chipInput\" [placeholder]=\"placeholder\" (paste)=\"inputPaste($event)\" (keydown)=\"inputChanged($event)\" (blur)=\"inputBlurred()\" (focus)=\"inputFocus()\" />\r\n    <div *ngIf=\"isAutoComplete\">\r\n      <md2-autocomplete name=\"autocomplete\"\r\n                        [placeholder]=\"placeholder\"\r\n                        [disabled]=\"disabled\"\r\n                        [(ngModel)]=\"item\"\r\n                        [items]=\"autocompleteDataList\"\r\n                        [item-text]=\"autocompleteItemText\"\r\n                        (textChange)=\"valueupdate($event)\"\r\n                        (change)=\"changeAutocomplete($event)\"\r\n                        (keydown)=\"inputChanged($event)\"\r\n                        (click)=\"getFocusAutocomplete()\">\r\n      </md2-autocomplete>\r\n    </div>\r\n  </form>\r\n</div>\r\n<div class=\"chip-error\" *ngIf=\"this.chipItemList.length<this.minChips\">Minimum {{minChips}} chip required.</div>\r\n<div class=\"chip-error\" *ngIf=\"this.chipItemList.length>=this.maxChips\">You are able to add Maximum {{maxChips}} chip.</div>\r\n","import {\r\n  Directive,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[collapse]',\r\n  host: {\r\n    'role': 'collapse',\r\n    '[class.in]': '_collapse',\r\n    '[class.collapse]': 'true',\r\n    '[class.collapsing]': '_collapsing',\r\n    '[attr.aria-expanded]': '_collapse',\r\n    '[attr.aria-hidden]': '!_collapse'\r\n  },\r\n  exportAs: 'md2Collapse'\r\n})\r\nexport class Md2Collapse {\r\n  _collapse: boolean = true;\r\n  _collapsing: boolean = false;\r\n\r\n  @Output() collapsed: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() expanded: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @Input()\r\n  get collapse(): boolean { return this._collapse; }\r\n  set collapse(value: boolean) {\r\n    this._collapse = value;\r\n    this.toggle();\r\n  }\r\n\r\n  /**\r\n   * toggle collapse\r\n   */\r\n  toggle() {\r\n    if (this._collapse) { this.hide(); } else { this.show(); }\r\n  }\r\n\r\n  /**\r\n  * show collapse\r\n  */\r\n  show() {\r\n    this._collapsing = true;\r\n    this._collapse = true;\r\n    setTimeout(() => {\r\n      this._collapsing = false;\r\n    }, 4);\r\n    this.expanded.emit();\r\n  }\r\n\r\n  /**\r\n   * hide collapse\r\n   */\r\n  hide() {\r\n    this._collapsing = true;\r\n    this._collapse = false;\r\n    setTimeout(() => {\r\n      this._collapsing = false;\r\n    }, 4);\r\n    this.collapsed.emit();\r\n  }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Md2Collapse } from './collapse';\r\n\r\nexport * from './collapse';\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  exports: [Md2Collapse],\r\n  declarations: [Md2Collapse],\r\n})\r\nexport class Md2CollapseModule { }\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport const COLOR_RGB = /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/;\r\nexport const COLOR_HSL = /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/;\r\n\r\nexport class Hsva {\r\n  constructor(public h: number, public s: number, public v: number, public a: number) { }\r\n}\r\nexport class Hsla {\r\n  constructor(public h: number, public s: number, public l: number, public a: number) { }\r\n}\r\nexport class Rgba {\r\n  constructor(public r: number, public g: number, public b: number, public a: number) { }\r\n}\r\n\r\n@Injectable()\r\nexport class ColorUtil {\r\n  /**\r\n* hsla to hsva\r\n* @param hsla\r\n*/\r\n  hsla2hsva(hsla: Hsla) {\r\n    let h: number = Math.min(hsla.h, 1), s = Math.min(hsla.s, 1), l = Math.min(hsla.l, 1);\r\n    let a = Math.min(hsla.a, 1);\r\n    if (l === 0) {\r\n      return { h: h, s: 0, v: 0, a: a };\r\n    } else {\r\n      let v: number = l + s * (1 - Math.abs(2 * l - 1)) / 2;\r\n      return { h: h, s: 2 * (v - l) / v, v: v, a: a };\r\n    }\r\n  }\r\n\r\n  /**\r\n  * hsva to hsla\r\n  * @param hsva\r\n  */\r\n  hsva2hsla(hsva: Hsva) {\r\n    let h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\r\n    if (v === 0) {\r\n      return new Hsla(h, 0, 0, a);\r\n    } else if (s === 0 && v === 1) {\r\n      return new Hsla(h, 1, 1, a);\r\n    } else {\r\n      let l: number = v * (2 - s) / 2;\r\n      return new Hsla(h, v * s / (1 - Math.abs(2 * l - 1)), l, a);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * rgba to hsva\r\n   * @param rgba\r\n   */\r\n  rgbaToHsva(rgba: Rgba) {\r\n    let r: number = Math.min(rgba.r, 1), g = Math.min(rgba.g, 1), b = Math.min(rgba.b, 1);\r\n    let a = Math.min(rgba.a, 1);\r\n    let max: number = Math.max(r, g, b), min = Math.min(r, g, b);\r\n    let h: number, s: number, v: number = max;\r\n    let d: number = max - min;\r\n    s = max === 0 ? 0 : d / max;\r\n\r\n    if (max === min) {\r\n      h = 0;\r\n    } else {\r\n      switch (max) {\r\n        case r:\r\n          h = (g - b) / d + (g < b ? 6 : 0);\r\n          break;\r\n        case g:\r\n          h = (b - r) / d + 2;\r\n          break;\r\n        case b:\r\n          h = (r - g) / d + 4;\r\n          break;\r\n      }\r\n      h /= 6;\r\n    }\r\n\r\n    return new Hsva(h, s, v, a);\r\n  }\r\n\r\n  /**\r\n   * hsva to rgba\r\n   * @param hsva\r\n   */\r\n  hsvaToRgba(hsva: Hsva) {\r\n    let h: number = hsva.h, s: number = hsva.s, v: number = hsva.v, a: number = hsva.a;\r\n    let r: number, g: number, b: number;\r\n\r\n    let i: number = Math.floor(h * 6);\r\n    let f: number = h * 6 - i;\r\n    let p: number = v * (1 - s);\r\n    let q: number = v * (1 - f * s);\r\n    let t: number = v * (1 - (1 - f) * s);\r\n\r\n    switch (i % 6) {\r\n      case 0:\r\n        r = v; g = t; b = p;\r\n        break;\r\n      case 1:\r\n        r = q; g = v; b = p;\r\n        break;\r\n      case 2:\r\n        r = p; g = v; b = t;\r\n        break;\r\n      case 3:\r\n        r = p; g = q; b = v;\r\n        break;\r\n      case 4:\r\n        r = t; g = p; b = v;\r\n        break;\r\n      case 5:\r\n        r = v; g = p; b = q;\r\n        break;\r\n    }\r\n\r\n    return new Rgba(r, g, b, a);\r\n  }\r\n\r\n  /**\r\n   * string to hsva\r\n   * @param colorString\r\n   */\r\n  stringToHsva(colorString: string) {\r\n    let stringParsers = [\r\n      {\r\n        re: COLOR_RGB,\r\n        parse: function (execResult: Array<string>) {\r\n          return new Rgba(parseInt(execResult[2]) / 255,\r\n            parseInt(execResult[3]) / 255,\r\n            parseInt(execResult[4]) / 255,\r\n            isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\r\n        }\r\n      },\r\n      {\r\n        re: COLOR_HSL,\r\n        parse: function (execResult: Array<string>) {\r\n          return new Hsla(parseInt(execResult[2]) / 360,\r\n            parseInt(execResult[3]) / 100,\r\n            parseInt(execResult[4]) / 100,\r\n            isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\r\n        }\r\n      },\r\n      {\r\n        re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\r\n        parse: function (execResult: Array<string>) {\r\n          return new Rgba(parseInt(execResult[1], 16) / 255,\r\n            parseInt(execResult[2], 16) / 255,\r\n            parseInt(execResult[3], 16) / 255,\r\n            1);\r\n        }\r\n      },\r\n      {\r\n        re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\r\n        parse: function (execResult: Array<string>) {\r\n          return new Rgba(parseInt(execResult[1] + execResult[1], 16) / 255,\r\n            parseInt(execResult[2] + execResult[2], 16) / 255,\r\n            parseInt(execResult[3] + execResult[3], 16) / 255,\r\n            1);\r\n        }\r\n      }\r\n    ];\r\n    colorString = colorString.toLowerCase();\r\n    let hsva: any = null;\r\n    for (let key in stringParsers) {\r\n      if (stringParsers.hasOwnProperty(key)) {\r\n        let parser = stringParsers[key];\r\n        let match: Array<string> = parser.re.exec(colorString);\r\n        let color = match && parser.parse(match);\r\n        if (color) {\r\n          if (color instanceof Rgba) {\r\n            hsva = this.rgbaToHsva(color);\r\n          } else if (color instanceof Hsla) {\r\n            hsva = this.hsla2hsva(color);\r\n          }\r\n          return hsva;\r\n        }\r\n      }\r\n    }\r\n    return hsva;\r\n  }\r\n\r\n  /**\r\n   * output formate of color\r\n   * @param hsva\r\n   * @param outputFormat\r\n   */\r\n  outputFormat(hsva: Hsva, outputFormat: string) {\r\n    if (hsva.a < 1) {\r\n      switch (outputFormat) {\r\n        case 'hsl':\r\n          let hsla = this.hsva2hsla(hsva);\r\n          let hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100),\r\n            Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100\r\n          );\r\n          return 'hsla(' + hslaText.h + ',' + hslaText.s + '%,' +\r\n            hslaText.l + '%,' + hslaText.a + ')';\r\n        default:\r\n          let rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\r\n          return 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b +\r\n            ',' + Math.round(rgba.a * 100) / 100 + ')';\r\n      }\r\n    } else {\r\n      switch (outputFormat) {\r\n        case 'hsl':\r\n          let hsla = this.hsva2hsla(hsva);\r\n          let hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100),\r\n            Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\r\n          return 'hsl(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%)';\r\n        case 'rgb':\r\n          let rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\r\n          return 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\r\n        default:\r\n          return this.hexText(this.denormalizeRGBA(this.hsvaToRgba(hsva)));\r\n      }\r\n    }\r\n  }\r\n  hexText(rgba: Rgba) {\r\n    let mainText = ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b).toString(16);\r\n    let hexText = '#' + mainText.substr(1);\r\n    return hexText.toLowerCase();\r\n  }\r\n\r\n  denormalizeRGBA(rgba: Rgba) {\r\n    return new Rgba(Math.round(rgba.r * 255), Math.round(rgba.g * 255),\r\n      Math.round(rgba.b * 255), rgba.a);\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ElementRef,\r\n  ViewEncapsulation,\r\n  Directive,\r\n  OnDestroy,\r\n  Optional,\r\n  Renderer2,\r\n  Self,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  NgControl\r\n} from '@angular/forms';\r\nimport { coerceBooleanProperty } from '../core/coercion/boolean-property';\r\nimport { Overlay } from '../core/overlay/overlay';\r\nimport { OverlayRef } from '../core/overlay/overlay-ref';\r\nimport { OverlayState } from '../core/overlay/overlay-state';\r\nimport { PositionStrategy } from '../core/overlay/position/position-strategy';\r\nimport { TemplatePortal } from '../core/portal/portal';\r\nimport { Subscription } from 'rxjs';\r\nimport { ColorUtil, Rgba, Hsla, Hsva } from './color-util';\r\n\r\nexport class SliderPosition {\r\n  constructor(public h: number, public s: number, public v: number, public a: number) { }\r\n}\r\nexport class SliderDimension {\r\n  constructor(public h: number, public s: number, public v: number, public a: number) { }\r\n}\r\n\r\nexport type Container = 'inline' | 'dialog';\r\n\r\nlet nextId = 0;\r\n\r\n@Directive({\r\n  selector: '[text]',\r\n  host: {\r\n    '(input)': 'changeInput($event)'\r\n  }\r\n})\r\nexport class TextDirective {\r\n  @Output('newValue') newValue = new EventEmitter<any>();\r\n  @Input('text') text: any;\r\n  @Input('rg') rg: number;\r\n  changeInput(event: any) {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n    let value = event.target.value;\r\n    if (this.rg === undefined) {\r\n      this.newValue.emit(value);\r\n    } else {\r\n      let numeric = parseFloat(value);\r\n      if (!isNaN(numeric) && numeric >= 0 && numeric <= this.rg) {\r\n        this.newValue.emit({ v: numeric, rg: this.rg });\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n@Directive({\r\n  selector: '[colorpicker-slider]',\r\n  host: {\r\n    '(mousedown)': 'start($event)',\r\n    '(touchstart)': 'start($event)'\r\n  }\r\n})\r\nexport class ColorpickerSliderDirective {\r\n  @Input('colorpicker-slider') slider: string;\r\n  @Input('point-x') pointX: number;\r\n  @Input('point-y') pointY: number;\r\n  @Output('change') change = new EventEmitter<any>();\r\n  private listenerMove: any;\r\n  private listenerStop: any;\r\n\r\n  constructor(private _element: ElementRef) {\r\n    this.listenerMove = (event: any) => { this.move(event); };\r\n    this.listenerStop = () => { this.stop(); };\r\n  }\r\n\r\n  /**\r\n   * set cursor position\r\n   * @param event\r\n   */\r\n  setCursor(event: any) {\r\n    let height = this._getNativeElement().offsetHeight;\r\n    let width = this._getNativeElement().offsetWidth;\r\n    let x = Math.max(0, Math.min(this.getX(event), width));\r\n    let y = Math.max(0, Math.min(this.getY(event), height));\r\n\r\n    if (this.pointX !== undefined && this.pointY !== undefined) {\r\n      this.change.emit({\r\n        s: x / width, v: (1 - y / height),\r\n        pointX: this.pointX, pointY: this.pointY\r\n      });\r\n    } else if (this.pointX === undefined && this.pointY !== undefined) {\r\n      this.change.emit({ v: y / height, rg: this.pointY });\r\n    } else {\r\n      this.change.emit({ v: x / width, rg: this.pointX });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * input event listner\r\n   * @param event\r\n   */\r\n  move(event: any) {\r\n    event.preventDefault();\r\n    this.setCursor(event);\r\n  }\r\n\r\n  /**\r\n   * input event listner\r\n   * @param event\r\n   */\r\n  start(event: any) {\r\n    this.setCursor(event);\r\n    document.addEventListener('mousemove', this.listenerMove);\r\n    document.addEventListener('touchmove', this.listenerMove);\r\n    document.addEventListener('mouseup', this.listenerStop);\r\n    document.addEventListener('touchend', this.listenerStop);\r\n  }\r\n\r\n  /**\r\n   * stop mouse event\r\n   */\r\n  stop() {\r\n    document.removeEventListener('mousemove', this.listenerMove);\r\n    document.removeEventListener('touchmove', this.listenerMove);\r\n    document.removeEventListener('mouseup', this.listenerStop);\r\n    document.removeEventListener('touchend', this.listenerStop);\r\n  }\r\n\r\n  /**\r\n   * get x\r\n   * @param event\r\n   */\r\n  getX(event: any) {\r\n    let boundingClientRect = this._getNativeElement().getBoundingClientRect();\r\n    return (event.pageX !== undefined ? event.pageX : event.touches[0].pageX) -\r\n      boundingClientRect.left - window.pageXOffset;\r\n  }\r\n\r\n  /**\r\n   * get y\r\n   * @param event\r\n   */\r\n  getY(event: any) {\r\n    let boundingClientRect = this._getNativeElement().getBoundingClientRect();\r\n    return (event.pageY !== undefined ? event.pageY : event.touches[0].pageY) -\r\n      boundingClientRect.top - window.pageYOffset;\r\n  }\r\n\r\n  _getNativeElement(): HTMLElement {\r\n    return this._element.nativeElement;\r\n  }\r\n}\r\n\r\n/**\r\n * Change event object emitted by Md2Colorpicker.\r\n */\r\nexport class Md2ColorChange {\r\n  constructor(public source: Md2Colorpicker, public color: string) { }\r\n}\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-colorpicker',\r\n  templateUrl: 'colorpicker.html',\r\n  styleUrls: ['colorpicker.scss'],\r\n  host: {\r\n    'role': 'colorpicker',\r\n    '[id]': 'id',\r\n    '[class.md2-colorpicker-disabled]': 'disabled',\r\n    '[attr.aria-label]': 'placeholder',\r\n    '[attr.aria-required]': 'required.toString()',\r\n  },\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2Colorpicker implements OnDestroy, ControlValueAccessor {\r\n\r\n  private _portal: TemplatePortal;\r\n  private _overlayRef: OverlayRef;\r\n  private _backdropSubscription: Subscription;\r\n  private _positionSubscription: Subscription;\r\n\r\n  _innerValue: string = '';\r\n  _isColorpickerVisible: boolean;\r\n  _hueSliderColor: string;\r\n  slider: SliderPosition;\r\n  sliderDim: SliderDimension;\r\n  hsva: Hsva;\r\n  rgbaText: Rgba;\r\n  hslaText: Hsla;\r\n  outputColor: string;\r\n  alphaColor: string;\r\n  hexText: string;\r\n  format: number;\r\n  backColor: boolean = true;\r\n\r\n  private _created: boolean;\r\n  private _defalutColor: string = '#000000';\r\n  private _initialColor: string;\r\n\r\n  /** Whether or not the overlay panel is open. */\r\n  private _panelOpen = false;\r\n  private _color: string = null;\r\n\r\n  /** Whether filling out the select is required in the form.  */\r\n  _required: boolean = false;\r\n\r\n  /** Whether the select is disabled.  */\r\n  private _disabled: boolean = false;\r\n  isInputFocus: boolean = false;\r\n\r\n  /** The placeholder displayed in the trigger of the select. */\r\n  private _placeholder: string;\r\n  private _container: Container = 'inline';\r\n\r\n  fontColor: string;\r\n  _isDark: boolean;\r\n  isInputValidColor: boolean = false;\r\n\r\n  _onChange: (value: any) => void = () => { };\r\n  _onTouched = () => { };\r\n\r\n  @Input()\r\n  get color() { return this._color; }\r\n  set color(value: string) { this._color = value; }\r\n\r\n  /** Placeholder to be shown if no value has been selected. */\r\n  @Input()\r\n  get placeholder() { return this._placeholder; }\r\n  set placeholder(value: string) { this._placeholder = value; }\r\n\r\n  @Input()\r\n  get required(): boolean { return this._required; }\r\n  set required(value) { this._required = coerceBooleanProperty(value); }\r\n\r\n  /** Whether the component is disabled. */\r\n  @Input()\r\n  get disabled() { return this._disabled; }\r\n  set disabled(value: any) {\r\n    this._disabled = coerceBooleanProperty(value);\r\n  }\r\n  @Input('format') cFormat: string = 'hex';\r\n  @Output('colorpickerChange') colorpickerChange = new EventEmitter<string>();\r\n  /** Event emitted when the selected date has been changed by the user. */\r\n  @Output() change: EventEmitter<Md2ColorChange> = new EventEmitter<Md2ColorChange>();\r\n  @Input() tabindex: number = 0;\r\n  @Input() id: string = 'md2-colorpicker-' + (++nextId);\r\n\r\n  get value(): any {\r\n    return this._innerValue;\r\n\r\n  }\r\n  /**\r\n  * set accessor including call the onchange callback\r\n  */\r\n  set value(v: any) {\r\n    if (v !== this._innerValue) {\r\n      if (v) {\r\n        this.hsva = this._util.stringToHsva(v);\r\n      }\r\n      this._innerValue = v;\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get container() { return this._container; }\r\n  set container(value: Container) {\r\n    if (this._container !== value) {\r\n      this._container = value || 'inline';\r\n      this.destroyPanel();\r\n    }\r\n  }\r\n\r\n  get setGradient() {\r\n    return {\r\n      'background-image': 'linear-gradient(to right, transparent, transparent),' +\r\n      'linear-gradient(to left, ' + this.hexText + ', rgba(255, 255, 255, 0))'\r\n    };\r\n\r\n  }\r\n\r\n  /** Event emitted when the select has been opened. */\r\n  @Output() onOpen: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the select has been closed. */\r\n  @Output() onClose: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @ViewChild('portal') _templatePortal: TemplateRef<any>;\r\n\r\n  constructor(private _element: ElementRef, private _overlay: Overlay,\r\n    private _viewContainerRef: ViewContainerRef, private _renderer: Renderer2,\r\n    private _util: ColorUtil, @Self() @Optional() public _control: NgControl) {\r\n    this._created = false;\r\n    if (this._control) {\r\n      this._control.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() { this.destroyPanel(); }\r\n\r\n  /** Whether or not the overlay panel is open. */\r\n  get panelOpen(): boolean {\r\n    return this._panelOpen;\r\n  }\r\n\r\n  /** Toggles the overlay panel open or closed. */\r\n  toggle(): void {\r\n    this.panelOpen ? this.close() : this.open();\r\n  }\r\n\r\n  /** Opens the overlay panel. */\r\n  open(): void {\r\n    let hsva = this._util.stringToHsva(this.color + '');\r\n    this.isInputFocus = true;\r\n    if (hsva) {\r\n      this.hsva = hsva;\r\n    } else {\r\n      this.hsva = this._util.stringToHsva(this._defalutColor);\r\n    }\r\n\r\n    this.sliderDim = new SliderDimension(245, 250, 130, 245);\r\n    this.slider = new SliderPosition(0, 0, 0, 0);\r\n    if (this.cFormat === 'rgb') {\r\n      this.format = 1;\r\n    } else if (this.cFormat === 'hsl') {\r\n      this.format = 2;\r\n    } else {\r\n      this.format = 0;\r\n    }\r\n\r\n    this.update();\r\n    if (this.disabled) { return; }\r\n    if (!this._isColorpickerVisible) {\r\n      this._initialColor = this.color;\r\n      this.update();\r\n      this._isColorpickerVisible = true;\r\n    } else {\r\n      this._isColorpickerVisible = false;\r\n    }\r\n\r\n    this._createOverlay();\r\n\r\n    if (!this._portal) {\r\n      this._portal = new TemplatePortal(this._templatePortal, this._viewContainerRef);\r\n    }\r\n\r\n    this._overlayRef.attach(this._portal);\r\n    this._subscribeToBackdrop();\r\n    this._panelOpen = true;\r\n    this.onOpen.emit();\r\n  }\r\n\r\n  /** Closes the overlay panel and focuses the host element. */\r\n  close(): void {\r\n    this._panelOpen = false;\r\n    this.isInputFocus = false;\r\n    if (this._overlayRef) {\r\n      this._overlayRef.detach();\r\n      this._backdropSubscription.unsubscribe();\r\n    }\r\n    this._isColorpickerVisible = false;\r\n    if (this._innerValue) {\r\n      this.setColorFromString(this._innerValue);\r\n    }\r\n  }\r\n\r\n  /** Removes the panel from the DOM. */\r\n  destroyPanel(): void {\r\n    if (this._overlayRef) {\r\n      this._overlayRef.dispose();\r\n      this._overlayRef = null;\r\n\r\n      this._cleanUpSubscriptions();\r\n    }\r\n  }\r\n\r\n  _onBlur() {\r\n    if (!this.panelOpen) {\r\n      this._onTouched();\r\n    }\r\n  }\r\n  /**\r\n    * input event listner\r\n    * @param event\r\n    */\r\n  changeInput(event: any) {\r\n    let value = event.target.value;\r\n    this.colorpickerChange.emit(value);\r\n  }\r\n\r\n  /**\r\n  * set saturation,lightness,hue,alpha,RGB value\r\n  * @param val\r\n  * @param rg\r\n  */\r\n  setSaturation(val: { v: number, rg: number }) {\r\n    let hsla = this._util.hsva2hsla(this.hsva);\r\n    hsla.s = val.v / val.rg;\r\n    this.hsva = this._util.hsla2hsva(hsla);\r\n    this.update();\r\n  }\r\n\r\n  setLightness(val: { v: number, rg: number }) {\r\n    let hsla = this._util.hsva2hsla(this.hsva);\r\n    hsla.l = val.v / val.rg;\r\n    this.hsva = this._util.hsla2hsva(hsla);\r\n    this.update();\r\n  }\r\n\r\n  setHue(val: { v: number, rg: number }) {\r\n    this.hsva.h = val.v / val.rg;\r\n    this.update();\r\n  }\r\n\r\n  setAlpha(val: { v: number, rg: number }) {\r\n    this.hsva.a = val.v / val.rg;\r\n    this.update();\r\n  }\r\n\r\n  setR(val: { v: number, rg: number }) {\r\n    let rgba = this._util.hsvaToRgba(this.hsva);\r\n    rgba.r = val.v / val.rg;\r\n    this.hsva = this._util.rgbaToHsva(rgba);\r\n    this.update();\r\n  }\r\n  setG(val: { v: number, rg: number }) {\r\n    let rgba = this._util.hsvaToRgba(this.hsva);\r\n    rgba.g = val.v / val.rg;\r\n    this.hsva = this._util.rgbaToHsva(rgba);\r\n    this.update();\r\n  }\r\n  setB(val: { v: number, rg: number }) {\r\n    let rgba = this._util.hsvaToRgba(this.hsva);\r\n    rgba.b = val.v / val.rg;\r\n    this.hsva = this._util.rgbaToHsva(rgba);\r\n    this.update();\r\n  }\r\n  setSaturationAndBrightness(val: { s: number, v: number, pointX: number, pointY: number }) {\r\n    this.hsva.s = val.s / val.pointX;\r\n    this.hsva.v = val.v / val.pointY;\r\n    this.update();\r\n  }\r\n  clickOk() {\r\n    this._isColorpickerVisible = false;\r\n    this.isInputValidColor = false;\r\n    this.color = this._innerValue;\r\n\r\n    if (this._innerValue != this._initialColor) {\r\n      this._emitChangeEvent();\r\n    }\r\n    this.close();\r\n  }\r\n\r\n  /**\r\n  * deselect recent color and close popup\r\n  */\r\n  cancelColor() {\r\n    this._innerValue = this._initialColor;\r\n    this.close();\r\n  }\r\n  isValidColor(str: string) {\r\n    return str.match(/^#[a-f0-9]{6}$/i) !== null;\r\n  }\r\n  /**\r\n     * set color\r\n     * @param value\r\n     */\r\n  setColorFromString(value: string) {\r\n    if (!this.isValidColor(value)) {\r\n      value = '#000000';\r\n      this.backColor = false;\r\n    }\r\n    let hsva = this._util.stringToHsva(value);\r\n    if (hsva !== null) {\r\n      this.hsva = hsva;\r\n    }\r\n    this.update();\r\n  }\r\n\r\n  formatPolicy(value: number) {\r\n    this.format = value;\r\n    if (this.format === 0 && this.hsva.a < 1) {\r\n      this.format++;\r\n    }\r\n    return this.format;\r\n  }\r\n\r\n  /**\r\n   * update color\r\n   */\r\n  update() {\r\n    let hsla = this._util.hsva2hsla(this.hsva);\r\n    let rgba = this._util.denormalizeRGBA(this._util.hsvaToRgba(this.hsva));\r\n    let hueRgba = this._util.denormalizeRGBA(this._util.hsvaToRgba(\r\n      new Hsva(this.hsva.h, 1, 1, 1)));\r\n\r\n    this.alphaColor = 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\r\n    this._hueSliderColor = 'rgb(' + hueRgba.r + ',' + hueRgba.g + ',' + hueRgba.b + ')';\r\n    this.hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100),\r\n      Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\r\n    this.rgbaText = new Rgba(rgba.r, rgba.g, rgba.b, Math.round(rgba.a * 100) / 100);\r\n    if (this.backColor) {\r\n      this.hexText = this._util.hexText(rgba);\r\n    }\r\n    this.backColor = true;\r\n    let colorCode = Math.round((this.rgbaText.r * 299 + this.rgbaText.g * 587 +\r\n      this.rgbaText.b * 114) / 1000);\r\n    if (colorCode >= 128 || this.hsva.a < 0.35) {\r\n      this.fontColor = 'black';\r\n      this._isDark = true;\r\n    } else {\r\n      this.fontColor = 'white';\r\n      this._isDark = false;\r\n    }\r\n\r\n    if (this.format === 0 && this.hsva.a < 1) {\r\n      this.format++;\r\n    }\r\n    this.outputColor = this._util.outputFormat(this.hsva, this.cFormat);\r\n    this.slider = new SliderPosition((this.hsva.h) * this.sliderDim.h,\r\n      this.hsva.s * this.sliderDim.s - 7, (1 - this.hsva.v) * this.sliderDim.v - 7,\r\n      this.hsva.a * this.sliderDim.a);\r\n    this._innerValue = this.outputColor;\r\n  }\r\n\r\n  clearColor(event: Event) {\r\n    event.stopPropagation();\r\n    this.color = '';\r\n    this._emitChangeEvent();\r\n  }\r\n\r\n  isDescendant(parent: any, child: any) {\r\n    let node = child.parentNode;\r\n    while (node !== null) {\r\n      if (node === parent) {\r\n        return true;\r\n      }\r\n      node = node.parentNode;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  checkInputVal(): void {\r\n    this.hsva = this._util.stringToHsva(this.color + '');\r\n    this.isInputFocus = false;\r\n    if (this.hsva) {\r\n      if (this._innerValue !== this.color) {\r\n        this._emitChangeEvent();\r\n      }\r\n      this.isInputValidColor = false;\r\n    } else {\r\n      this.isInputValidColor = true;\r\n    }\r\n    this._onTouched();\r\n  }\r\n\r\n  /** Emits an event when the user selects a color. */\r\n  _emitChangeEvent(): void {\r\n    this._onChange(this.color);\r\n    this.change.emit(new Md2ColorChange(this, this.color));\r\n    this._innerValue = this.color;\r\n  }\r\n  writeValue(value: any): void {\r\n    this._innerValue = value;\r\n    this.color = value;\r\n  }\r\n\r\n  registerOnChange(fn: (value: any) => void): void { this._onChange = fn; }\r\n\r\n  registerOnTouched(fn: () => {}): void { this._onTouched = fn; }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  private _subscribeToBackdrop(): void {\r\n    this._backdropSubscription = this._overlayRef.backdropClick().subscribe(() => {\r\n      this._innerValue = this._initialColor;\r\n      this.close();\r\n    });\r\n  }\r\n\r\n  /**\r\n   *  This method creates the overlay from the provided panel's template and saves its\r\n   *  OverlayRef so that it can be attached to the DOM when open is called.\r\n   */\r\n  private _createOverlay(): void {\r\n    if (!this._overlayRef) {\r\n      let config = new OverlayState();\r\n      if (this.container === 'inline') {\r\n        config.positionStrategy = this._createPickerPositionStrategy();\r\n        config.hasBackdrop = true;\r\n        config.backdropClass = 'cdk-overlay-transparent-backdrop';\r\n        config.scrollStrategy = this._overlay.scrollStrategies.reposition();\r\n      } else {\r\n        config.positionStrategy = this._overlay.position()\r\n          .global()\r\n          .centerHorizontally()\r\n          .centerVertically();\r\n        config.hasBackdrop = true;\r\n      }\r\n      this._overlayRef = this._overlay.create(config);\r\n    }\r\n  }\r\n\r\n  /** Create the popup PositionStrategy. */\r\n  private _createPickerPositionStrategy(): PositionStrategy {\r\n    return this._overlay.position()\r\n      .connectedTo(this._element,\r\n      { originX: 'start', originY: 'top' },\r\n      { overlayX: 'start', overlayY: 'top' })\r\n      .withFallbackPosition(\r\n      { originX: 'end', originY: 'top' },\r\n      { overlayX: 'end', overlayY: 'top' })\r\n      .withFallbackPosition(\r\n      { originX: 'start', originY: 'bottom' },\r\n      { overlayX: 'start', overlayY: 'bottom' })\r\n      .withFallbackPosition(\r\n      { originX: 'end', originY: 'bottom' },\r\n      { overlayX: 'end', overlayY: 'bottom' });\r\n  }\r\n\r\n  private _cleanUpSubscriptions(): void {\r\n    if (this._backdropSubscription) {\r\n      this._backdropSubscription.unsubscribe();\r\n    }\r\n    if (this._positionSubscription) {\r\n      this._positionSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n}\r\n","\r\n<div class=\"md2-colorpicker-trigger\">\r\n  <div class=\"color-picker-selector\" [class.color-error]=\"isInputValidColor && required\">\r\n    <div class=\"md2-colorpicker-preview\" (click)=\"toggle()\">\r\n      <div class=\"color-fill\" [style.background-color]=\"color\"> </div>\r\n    </div>\r\n    <div class=\"md2-colorpicker-input\" [class.input-focused]=\"isInputFocus\">\r\n      <span class=\"md2-colorpicker-placeholder\" [class.has-value]=\"color\">{{ placeholder }}</span>\r\n      <input class=\"md2-colorpicker-value\" autocomplete=\"off\" value=\"color\" [tabindex]=\"tabindex\" [disabled]=\"disabled\" [(ngModel)]=\"color\" (focus)=\"isInputFocus=true\" (blur)=\"checkInputVal()\" />\r\n      <span *ngIf=\"color && !required && !disabled\" class=\"color-clear\" (click)=\"clearColor($event)\">\r\n        <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\">\r\n          <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n        </svg>\r\n      </span>\r\n    </div>\r\n  </div>\r\n</div>\r\n<ng-template #portal>\r\n  <div class=\"md2-colorpicker-panel\" tabindex=\"0\" [attr.container]=\"container\">\r\n    <div class=\"md2-colorpicker-content\">\r\n      <div class=\"md2-colorpicker-wrapper\">\r\n        <div class=\"md2-color-picker\">\r\n          <div class=\"selected-color\">\r\n            <div class=\"selected-color-bg\" [style.background]=\"outputColor\">\r\n              <div class=\"color-input\">\r\n                <div [hidden]=\"format!=2\" class=\"hsla-text\">\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"360\" [rg]=\"360\" (newValue)=\"setHue($event)\" [value]=\"hslaText.h\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"100\" [rg]=\"100\" (newValue)=\"setSaturation($event)\" [value]=\"hslaText.s\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"100\" [rg]=\"100\" (newValue)=\"setLightness($event)\" [value]=\"hslaText.l\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]+([\\.,][0-9]{1,2})?\" min=\"0\" max=\"1\" step=\"0.1\" [rg]=\"1\" (newValue)=\"setAlpha($event)\" [value]=\"hslaText.a\" />\r\n                </div>\r\n                <div [hidden]=\"format!=1\" class=\"rgba-text\">\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"255\" [rg]=\"255\" (newValue)=\"setR($event)\" [value]=\"rgbaText.r\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"255\" [rg]=\"255\" (newValue)=\"setG($event)\" [value]=\"rgbaText.g\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]*\" min=\"0\" max=\"255\" [rg]=\"255\" (newValue)=\"setB($event)\" [value]=\"rgbaText.b\" />\r\n                  <input [text] type=\"number\" [style.color]=\"fontColor\" pattern=\"[0-9]+([\\.,][0-9]{1,2})?\" min=\"0\" max=\"1\" step=\"0.1\" [rg]=\"1\" (newValue)=\"setAlpha($event)\" [value]=\"rgbaText.a\" />\r\n                </div>\r\n                <div [hidden]=\"format!=0\" class=\"hex-text\">\r\n                  <input [text] (newValue)=\"setColorFromString($event)\" [style.color]=\"fontColor\" [value]=\"hexText\" />\r\n                </div>\r\n              </div>\r\n              <div class=\"color-bar\" [class.dark]=\"_isDark\">\r\n                <div [style.color]=\"fontColor\" class=\"clearfix\">\r\n                  <div class=\"type-policy\" [class.active]=\"format==0\" (click)=\"formatPolicy(0)\">HEX</div>\r\n                  <div class=\"type-policy\" [class.active]=\"format==1\" (click)=\"formatPolicy(1)\">RGBA</div>\r\n                  <div class=\"type-policy\" [class.active]=\"format==2\" (click)=\"formatPolicy(2)\">HSLA</div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div class=\"input-color-content\">\r\n            <div [colorpicker-slider] [style.background-color]=\"_hueSliderColor\" [point-x]=\"1\" [point-y]=\"1\" (change)=\"setSaturationAndBrightness($event)\" class=\"saturation-lightness\">\r\n              <div [style.left.px]=\"slider.s\" [style.top.px]=\"slider.v\" class=\"cursor\"></div>\r\n            </div>\r\n            <div [colorpicker-slider] [point-x]=\"1\" (change)=\"setHue($event)\" class=\"hue\">\r\n              <div [style.left.px]=\"slider.h\" class=\"color-picker-marker\"></div>\r\n            </div>\r\n            <div [colorpicker-slider] [point-x]=\"1\" (change)=\"setAlpha($event)\" class=\"alpha\">\r\n              <div class=\"alpha-main\" [ngStyle]=\"setGradient\">\r\n                <div [style.left.px]=\"slider.a\" class=\"color-picker-marker\"></div>\r\n              </div>\r\n\r\n            </div>\r\n          </div>\r\n          <div class=\"md2-color-picker-actions\">\r\n            <div class=\"md2-button\" (click)=\"cancelColor()\">Cancel</div>\r\n            <div class=\"md2-button\" (click)=\"clickOk()\">Ok</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { StyleModule, OverlayModule, PortalModule, A11yModule } from '../core/index';\r\nimport { Md2Colorpicker, ColorpickerSliderDirective, TextDirective } from './colorpicker';\r\nimport { ColorUtil } from './color-util';\r\n\r\n\r\nexport * from './colorpicker';\r\nexport * from './color-util';\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    OverlayModule,\r\n    PortalModule,\r\n    StyleModule,\r\n    A11yModule,\r\n  ],\r\n  exports: [\r\n    Md2Colorpicker,\r\n    ColorpickerSliderDirective,\r\n    TextDirective\r\n  ],\r\n  declarations: [\r\n    Md2Colorpicker,\r\n    ColorpickerSliderDirective,\r\n    TextDirective\r\n  ],\r\n  providers: [ColorUtil]\r\n})\r\nexport class Md2ColorpickerModule { }\r\n","import {Component, ViewEncapsulation, ContentChildren, QueryList, Input} from '@angular/core';\r\nimport {mixinDisabled, CanDisable} from '../core/common-behaviors/disabled';\r\n\r\n// Boilerplate for applying mixins to Md2Optgroup.\r\nexport class Md2OptgroupBase { }\r\nexport const _Md2OptgroupMixinBase = mixinDisabled(Md2OptgroupBase);\r\n\r\n// Counter for unique group ids.\r\nlet nextId = 0;\r\n\r\n/**\r\n * Component that is used to group instances of `md2-option`.\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-optgroup',\r\n  templateUrl: 'optgroup.html',\r\n  styleUrls: ['optgroup.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  inputs: ['disabled'],\r\n  host: {\r\n    'class': 'md2-optgroup',\r\n    'role': 'group',\r\n    '[class.md2-optgroup-disabled]': 'disabled',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[attr.aria-labelledby]': '_labelId',\r\n  }\r\n})\r\nexport class Md2Optgroup extends _Md2OptgroupMixinBase implements CanDisable {\r\n  /** Label for the option group. */\r\n  @Input() label: string;\r\n\r\n  /** Unique id for the underlying label. */\r\n  _labelId: string = `md2-optgroup-label-${nextId++}`;\r\n}\r\n","<label class=\"md2-optgroup-label\" [id]=\"_labelId\">{{ label }}</label>\r\n<ng-content select=\"md2-option\"></ng-content>\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  Optional,\r\n  NgModule,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ENTER, SPACE } from '../core/keyboard/keycodes';\r\nimport { coerceBooleanProperty } from '../core/coercion/boolean-property';\r\nimport { MdSelectionModule } from '../core/selection/index';\r\nimport { Md2Optgroup } from './optgroup';\r\n\r\n/**\r\n * Option IDs need to be unique across components, so this counter exists outside of\r\n * the component definition.\r\n */\r\nlet _uniqueIdCounter = 0;\r\n\r\n/** Event object emitted by MdOption when selected or deselected. */\r\nexport class Md2OptionSelectionChange {\r\n  constructor(public source: Md2Option, public isUserInput = false) { }\r\n}\r\n\r\n\r\n/**\r\n * Single option inside of a `<md2-select>` element.\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-option',\r\n  host: {\r\n    'role': 'option',\r\n    '[attr.tabindex]': '_getTabIndex()',\r\n    '[class.md2-selected]': 'selected',\r\n    '[class.md2-option-multiple]': 'multiple',\r\n    '[class.md2-active]': 'active',\r\n    '[id]': 'id',\r\n    '[attr.aria-selected]': 'selected.toString()',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[class.md2-option-disabled]': 'disabled',\r\n    '(click)': '_selectViaInteraction()',\r\n    '(keydown)': '_handleKeydown($event)',\r\n    '[class.md2-option]': 'true',\r\n  },\r\n  template: '<ng-content></ng-content>',\r\n  styleUrls: ['option.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2Option {\r\n  private _selected: boolean = false;\r\n  private _active: boolean = false;\r\n\r\n  /** Whether the option is disabled.  */\r\n  private _disabled: boolean = false;\r\n\r\n  private _id: string = `md2-option-${_uniqueIdCounter++}`;\r\n\r\n  /** Whether the wrapping component is in multiple selection mode. */\r\n  multiple: boolean = false;\r\n\r\n  /** The unique ID of the option. */\r\n  get id() { return this._id; }\r\n\r\n  /** Whether or not the option is currently selected. */\r\n  get selected(): boolean { return this._selected; }\r\n\r\n  /** The form value of the option. */\r\n  @Input() value: any;\r\n\r\n  /** Whether the option is disabled. */\r\n  @Input()\r\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\r\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n  /** Event emitted when the option is selected or deselected. */\r\n  @Output() onSelectionChange = new EventEmitter<Md2OptionSelectionChange>();\r\n\r\n  constructor(\r\n    @Optional() public readonly group: Md2Optgroup,\r\n    private _element: ElementRef) { }\r\n\r\n  /**\r\n   * Whether or not the option is currently active and ready to be selected.\r\n   * An active option displays styles as if it is focused, but the\r\n   * focus is actually retained somewhere else. This comes in handy\r\n   * for components like autocomplete where focus must remain on the input.\r\n   */\r\n  get active(): boolean {\r\n    return this._active;\r\n  }\r\n\r\n  /**\r\n   * The displayed value of the option. It is necessary to show the selected option in the\r\n   * select's trigger.\r\n   */\r\n  get viewValue(): string {\r\n    return this._getHostElement().textContent.trim();\r\n  }\r\n\r\n  /** Selects the option. */\r\n  select(): void {\r\n    this._selected = true;\r\n    this._emitSelectionChangeEvent();\r\n  }\r\n\r\n  /** Deselects the option. */\r\n  deselect(): void {\r\n    this._selected = false;\r\n    this._emitSelectionChangeEvent();\r\n  }\r\n\r\n  /** Sets focus onto this option. */\r\n  focus(): void {\r\n    this._getHostElement().focus();\r\n  }\r\n\r\n  /**\r\n   * This method sets display styles on the option to make it appear\r\n   * active. This is used by the ActiveDescendantKeyManager so key\r\n   * events will display the proper options as active on arrow key events.\r\n   */\r\n  setActiveStyles(): void {\r\n    this._active = true;\r\n  }\r\n\r\n  /**\r\n   * This method removes display styles on the option that made it appear\r\n   * active. This is used by the ActiveDescendantKeyManager so key\r\n   * events will display the proper options as active on arrow key events.\r\n   */\r\n  setInactiveStyles(): void {\r\n    this._active = false;\r\n  }\r\n\r\n  /** Ensures the option is selected when activated from the keyboard. */\r\n  _handleKeydown(event: KeyboardEvent): void {\r\n    if (event.keyCode === ENTER || event.keyCode === SPACE) {\r\n      this._selectViaInteraction();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Selects the option while indicating the selection came from the user. Used to\r\n   * determine if the select's view -> model callback should be invoked.\r\n   */\r\n  _selectViaInteraction(): void {\r\n    if (!this.disabled) {\r\n      this._selected = this.multiple ? !this._selected : true;\r\n      this._emitSelectionChangeEvent(true);\r\n    }\r\n  }\r\n\r\n  /** Returns the correct tabindex for the option depending on disabled state. */\r\n  _getTabIndex(): string {\r\n    return this.disabled ? '-1' : '0';\r\n  }\r\n\r\n  /** Fetches the host DOM element. */\r\n  _getHostElement(): HTMLElement {\r\n    return this._element.nativeElement;\r\n  }\r\n\r\n  /** Emits the selection change event. */\r\n  private _emitSelectionChangeEvent(isUserInput = false): void {\r\n    this.onSelectionChange.emit(new Md2OptionSelectionChange(this, isUserInput));\r\n  }\r\n\r\n}\r\n\r\n@NgModule({\r\n  imports: [CommonModule, MdSelectionModule],\r\n  exports: [Md2Option, Md2Optgroup],\r\n  declarations: [Md2Option, Md2Optgroup]\r\n})\r\nexport class Md2OptionModule { }\r\n","import {QueryList} from '@angular/core';\r\nimport {UP_ARROW, DOWN_ARROW, TAB} from '../core';\r\nimport {Observable, Subject} from 'rxjs';\r\n\r\n/**\r\n * This interface is for items that can be disabled. The type passed into\r\n * ListKeyManager must extend this interface.\r\n */\r\nexport interface CanDisable {\r\n  disabled?: boolean;\r\n}\r\n\r\n/**\r\n * This class manages keyboard events for selectable lists. If you pass it a query list\r\n * of items, it will set the active item correctly when arrow events occur.\r\n */\r\nexport class ListKeyManager<T extends CanDisable> {\r\n  private _activeItemIndex: number = null;\r\n  private _activeItem: T;\r\n  private _tabOut = new Subject<void>();\r\n  private _wrap: boolean = false;\r\n\r\n  constructor(private _items: QueryList<T>) {\r\n  }\r\n\r\n  /**\r\n   * Turns on wrapping mode, which ensures that the active item will wrap to\r\n   * the other end of list when there are no more items in the given direction.\r\n   *\r\n   * @returns The ListKeyManager that the method was called on.\r\n   */\r\n  withWrap(): this {\r\n    this._wrap = true;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Sets the active item to the item at the index specified.\r\n   *\r\n   * @param index The index of the item to be set as active.\r\n   */\r\n  setActiveItem(index: number): void {\r\n    this._activeItemIndex = index;\r\n    this._activeItem = this._items.toArray()[index];\r\n  }\r\n\r\n  /**\r\n   * Sets the active item depending on the key event passed in.\r\n   * @param event Keyboard event to be used for determining which element should be active.\r\n   */\r\n  onKeydown(event: KeyboardEvent): void {\r\n    switch (event.keyCode) {\r\n      case DOWN_ARROW:\r\n        this.setNextItemActive();\r\n        break;\r\n      case UP_ARROW:\r\n        this.setPreviousItemActive();\r\n        break;\r\n      case TAB:\r\n        // Note that we shouldn't prevent the default action on tab.\r\n        this._tabOut.next(null);\r\n        return;\r\n      default:\r\n        return;\r\n    }\r\n\r\n    event.preventDefault();\r\n  }\r\n\r\n  /** Returns the index of the currently active item. */\r\n  get activeItemIndex(): number {\r\n    return this._activeItemIndex;\r\n  }\r\n\r\n  /** Returns the currently active item. */\r\n  get activeItem(): T {\r\n    return this._activeItem;\r\n  }\r\n\r\n  /** Sets the active item to the first enabled item in the list. */\r\n  setFirstItemActive(): void {\r\n    this._setActiveItemByIndex(0, 1);\r\n  }\r\n\r\n  /** Sets the active item to the last enabled item in the list. */\r\n  setLastItemActive(): void {\r\n    this._setActiveItemByIndex(this._items.length - 1, -1);\r\n  }\r\n\r\n  /** Sets the active item to the next enabled item in the list. */\r\n  setNextItemActive(): void {\r\n    this._activeItemIndex === null ? this.setFirstItemActive() : this._setActiveItemByDelta(1);\r\n  }\r\n\r\n  /** Sets the active item to a previous enabled item in the list. */\r\n  setPreviousItemActive(): void {\r\n    this._activeItemIndex === null && this._wrap ? this.setLastItemActive()\r\n                                                 : this._setActiveItemByDelta(-1);\r\n  }\r\n\r\n  /**\r\n   * Allows setting of the activeItemIndex without any other effects.\r\n   * @param index The new activeItemIndex.\r\n   */\r\n  updateActiveItemIndex(index: number) {\r\n    this._activeItemIndex = index;\r\n  }\r\n\r\n  /**\r\n   * Observable that emits any time the TAB key is pressed, so components can react\r\n   * when focus is shifted off of the list.\r\n   */\r\n  get tabOut(): Observable<void> {\r\n    return this._tabOut.asObservable();\r\n  }\r\n\r\n  /**\r\n   * This method sets the active item, given a list of items and the delta between the\r\n   * currently active item and the new active item. It will calculate differently\r\n   * depending on whether wrap mode is turned on.\r\n   */\r\n  private _setActiveItemByDelta(delta: number, items = this._items.toArray()): void {\r\n    this._wrap ? this._setActiveInWrapMode(delta, items)\r\n               : this._setActiveInDefaultMode(delta, items);\r\n  }\r\n\r\n  /**\r\n   * Sets the active item properly given \"wrap\" mode. In other words, it will continue to move\r\n   * down the list until it finds an item that is not disabled, and it will wrap if it\r\n   * encounters either end of the list.\r\n   */\r\n  private _setActiveInWrapMode(delta: number, items: T[]): void {\r\n    // when active item would leave menu, wrap to beginning or end\r\n    this._activeItemIndex =\r\n      (this._activeItemIndex + delta + items.length) % items.length;\r\n\r\n    // skip all disabled menu items recursively until an enabled one is reached\r\n    if (items[this._activeItemIndex].disabled) {\r\n      this._setActiveInWrapMode(delta, items);\r\n    } else {\r\n      this.setActiveItem(this._activeItemIndex);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the active item properly given the default mode. In other words, it will\r\n   * continue to move down the list until it finds an item that is not disabled. If\r\n   * it encounters either end of the list, it will stop and not wrap.\r\n   */\r\n  private _setActiveInDefaultMode(delta: number, items: T[]): void {\r\n    this._setActiveItemByIndex(this._activeItemIndex + delta, delta, items);\r\n  }\r\n\r\n  /**\r\n   * Sets the active item to the first enabled item starting at the index specified. If the\r\n   * item is disabled, it will move in the fallbackDelta direction until it either\r\n   * finds an enabled item or encounters the end of the list.\r\n   */\r\n  private _setActiveItemByIndex(index: number, fallbackDelta: number,\r\n                                  items = this._items.toArray()): void {\r\n    if (!items[index]) { return; }\r\n    while (items[index].disabled) {\r\n      index += fallbackDelta;\r\n      if (!items[index]) { return; }\r\n    }\r\n    this.setActiveItem(index);\r\n  }\r\n\r\n}\r\n","\r\nimport {QueryList} from '@angular/core';\r\nimport {ListKeyManager, CanDisable} from './list-key-manager';\r\n\r\n/**\r\n * This is the interface for focusable items (used by the FocusKeyManager).\r\n * Each item must know how to focus itself and whether or not it is currently disabled.\r\n */\r\nexport interface Focusable extends CanDisable {\r\n  focus(): void;\r\n}\r\n\r\n\r\nexport class FocusKeyManager extends ListKeyManager<Focusable> {\r\n\r\n  constructor(items: QueryList<Focusable>) {\r\n    super(items);\r\n  }\r\n\r\n  /**\r\n   * This method sets the active item to the item at the specified index.\r\n   * It also adds focuses the newly active item.\r\n   */\r\n  setActiveItem(index: number): void {\r\n    super.setActiveItem(index);\r\n\r\n    if (this.activeItem) {\r\n      this.activeItem.focus();\r\n    }\r\n  }\r\n\r\n}\r\n","import {\r\n  animate,\r\n  AnimationTriggerMetadata,\r\n  state,\r\n  style,\r\n  transition,\r\n  trigger,\r\n} from '@angular/animations';\r\n\r\n/**\r\n * The following are all the animations for the md2-select component, with each\r\n * const containing the metadata for one animation.\r\n *\r\n * The values below match the implementation of the AngularJS Material md2-select animation.\r\n */\r\n\r\n/**\r\n * This animation shrinks the placeholder text to 75% of its normal size and translates\r\n * it to either the top left corner (ltr) or top right corner (rtl) of the trigger,\r\n * depending on the text direction of the application.\r\n */\r\nexport const transformPlaceholder: AnimationTriggerMetadata = trigger('transformPlaceholder', [\r\n  state('floating-ltr', style({\r\n    top: '-22px',\r\n    left: '-2px',\r\n    transform: `scale(0.75)`\r\n  })),\r\n  state('floating-rtl', style({\r\n    top: '-22px',\r\n    left: '2px',\r\n    transform: `scale(0.75)`\r\n  })),\r\n  transition('* => *', animate(`400ms cubic-bezier(0.25, 0.8, 0.25, 1)`))\r\n]);\r\n\r\n/**\r\n * This animation transforms the select's overlay panel on and off the page.\r\n *\r\n * When the panel is attached to the DOM, it expands its width 32px, scales it up to\r\n * 100% on the Y axis, fades in its border, and translates slightly up and to the\r\n * side to ensure the option text correctly overlaps the trigger text.\r\n *\r\n * When the panel is removed from the DOM, it simply fades out linearly.\r\n */\r\nexport const transformPanel: AnimationTriggerMetadata = trigger('transformPanel', [\r\n  state('showing', style({\r\n    opacity: 1,\r\n    minWidth: 'calc(100% + 32px)',\r\n    transform: `scaleY(1)`\r\n  })),\r\n  transition('void => *', [\r\n    style({\r\n      opacity: 0,\r\n      minWidth: '100%',\r\n      transform: `scaleY(0)`\r\n    }),\r\n    animate(`150ms cubic-bezier(0.25, 0.8, 0.25, 1)`)\r\n  ]),\r\n  transition('* => void', [\r\n    animate('250ms 100ms linear', style({opacity: 0}))\r\n  ])\r\n]);\r\n\r\n/**\r\n * This animation fades in the background color and text content of the\r\n * select's options. It is time delayed to occur 100ms after the overlay\r\n * panel has transformed in.\r\n */\r\nexport const fadeInContent: AnimationTriggerMetadata  =  trigger('fadeInContent', [\r\n  state('showing', style({opacity: 1})),\r\n  transition('void => showing', [\r\n    style({opacity: 0}),\r\n    animate(`150ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)`)\r\n  ])\r\n]);\r\n","/**\r\n * Returns an exception to be thrown when attempting to change a s\r\n * elect's `multiple` option after initialization.\r\n * @docs-private\r\n */\r\nexport function getMdSelectDynamicMultipleError(): Error {\r\n  return new Error('Cannot change `multiple` mode of select after initialization.');\r\n}\r\n\r\n/**\r\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\r\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\r\n * resetting the value.\r\n * @docs-private\r\n */\r\nexport function getMdSelectNonArrayValueError(): Error {\r\n  return new Error('Cannot assign truthy non-array value to select in `multiple` mode.');\r\n}\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  QueryList,\r\n  Renderer2,\r\n  Self,\r\n  ViewEncapsulation,\r\n  ViewChild,\r\n  ChangeDetectorRef,\r\n  Attribute,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { Md2Option, Md2OptionSelectionChange } from './option';\r\nimport { Md2Optgroup } from './optgroup';\r\nimport { ENTER, SPACE, UP_ARROW, DOWN_ARROW, HOME, END } from '../core/keyboard/keycodes';\r\nimport { FocusKeyManager } from '../core/a11y/focus-key-manager';\r\nimport { Dir } from '../core/rtl/dir';\r\nimport { Observable, merge, Subscription } from 'rxjs';\r\nimport { transformPlaceholder, transformPanel, fadeInContent } from './select-animations';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { coerceBooleanProperty } from '../core/coercion/boolean-property';\r\nimport { ConnectedOverlayDirective } from '../core/overlay/overlay-directives';\r\nimport { ViewportRuler } from '../core/overlay/position/viewport-ruler';\r\nimport { SelectionModel } from '../core/selection/selection';\r\nimport { getMdSelectDynamicMultipleError, getMdSelectNonArrayValueError } from './select-errors';\r\nimport { startWith, filter } from 'rxjs/operators';\r\n\r\n/**\r\n * The following style constants are necessary to save here in order\r\n * to properly calculate the alignment of the selected option over\r\n * the trigger element.\r\n */\r\n\r\n/** The fixed height of every option element (option, group header etc.). */\r\nexport const SELECT_ITEM_HEIGHT = 48;\r\n\r\n/** The max height of the select's overlay panel */\r\nexport const SELECT_PANEL_MAX_HEIGHT = 256;\r\n\r\n/** The max number of options visible at once in the select panel. */\r\nexport const SELECT_MAX_OPTIONS_DISPLAYED =\r\n  Math.floor(SELECT_PANEL_MAX_HEIGHT / SELECT_ITEM_HEIGHT);\r\n\r\n/** The fixed height of the select's trigger element. */\r\nexport const SELECT_TRIGGER_HEIGHT = 30;\r\n\r\n/**\r\n * Must adjust for the difference in height between the option and the trigger,\r\n * so the text will align on the y axis.\r\n */\r\nexport const SELECT_ITEM_HEIGHT_ADJUSTMENT = (SELECT_ITEM_HEIGHT - SELECT_TRIGGER_HEIGHT) / 2;\r\n\r\n/** The panel's padding on the x-axis */\r\nexport const SELECT_PANEL_PADDING_X = 16;\r\n\r\n/** The panel's x axis padding if it is indented (e.g. there is an option group). */\r\nexport const SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;\r\n\r\n/**\r\n * Distance between the panel edge and the option text in\r\n * multi-selection mode.\r\n *\r\n * (SELECT_PADDING * 1.75) + 20 = 48\r\n * The padding is multiplied by 1.75 because the checkbox's margin is half the padding, and\r\n * the browser adds ~4px, because we're using inline elements.\r\n * The checkbox width is 20px.\r\n */\r\nexport const SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.25 + 20;\r\n\r\n/**\r\n * The panel's padding on the y-axis. This padding indicates there are more\r\n * options available if you scroll.\r\n */\r\nexport const SELECT_PANEL_PADDING_Y = 16;\r\n\r\n/**\r\n * The select panel will only \"fit\" inside the viewport if it is positioned at\r\n * this value or more away from the viewport boundary.\r\n */\r\nexport const SELECT_PANEL_VIEWPORT_PADDING = 8;\r\n\r\n/** Change event object that is emitted when the select value has changed. */\r\nexport class Md2SelectChange {\r\n  constructor(public source: Md2Select, public value: any) { }\r\n}\r\n\r\n/** Allowed values for the floatPlaceholder option. */\r\nexport type Md2SelectFloatPlaceholderType = 'always' | 'never' | 'auto';\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-select',\r\n  templateUrl: 'select.html',\r\n  styleUrls: ['select.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  host: {\r\n    'role': 'listbox',\r\n    '[attr.tabindex]': 'tabIndex',\r\n    '[attr.aria-label]': '_ariaLabel',\r\n    '[attr.aria-labelledby]': 'ariaLabelledby',\r\n    '[attr.aria-required]': 'required.toString()',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[attr.aria-invalid]': '_control?.invalid || \"false\"',\r\n    '[attr.aria-owns]': '_optionIds',\r\n    '[class.md2-select-disabled]': 'disabled',\r\n    '[class.md2-select]': 'true',\r\n    '(keydown)': '_handleClosedKeydown($event)',\r\n    '(blur)': '_onBlur()',\r\n  },\r\n  animations: [\r\n    transformPlaceholder,\r\n    transformPanel,\r\n    fadeInContent\r\n  ],\r\n  exportAs: 'md2Select',\r\n})\r\nexport class Md2Select implements AfterContentInit, OnDestroy, OnInit, ControlValueAccessor {\r\n  /** Whether or not the overlay panel is open. */\r\n  private _panelOpen = false;\r\n\r\n  /** Subscriptions to option events. */\r\n  private _optionSubscription: Subscription;\r\n\r\n  /** Subscription to changes in the option list. */\r\n  private _changeSubscription: Subscription;\r\n\r\n  /** Subscription to tab events while overlay is focused. */\r\n  private _tabSubscription: Subscription;\r\n\r\n  /** Whether filling out the select is required in the form.  */\r\n  private _required: boolean = false;\r\n\r\n  /** Whether the select is disabled.  */\r\n  private _disabled: boolean = false;\r\n\r\n  /** The scroll position of the overlay panel, calculated to center the selected option. */\r\n  private _scrollTop = 0;\r\n\r\n  /** The placeholder displayed in the trigger of the select. */\r\n  private _placeholder: string;\r\n\r\n  /** Whether the component is in multiple selection mode. */\r\n  private _multiple: boolean = false;\r\n\r\n  /** Deals with the selection logic. */\r\n  _selectionModel: SelectionModel<Md2Option>;\r\n\r\n  /** The animation state of the placeholder. */\r\n  private _placeholderState = '';\r\n\r\n  /** Tab index for the element. */\r\n  private _tabIndex: number;\r\n\r\n  /** Theme color for the component. */\r\n  private _color: string;\r\n\r\n  /**\r\n   * The width of the trigger. Must be saved to set the min width of the overlay panel\r\n   * and the width of the selected value.\r\n   */\r\n  _triggerWidth: number;\r\n\r\n  /** Manages keyboard events for options in the panel. */\r\n  _keyManager: FocusKeyManager;\r\n\r\n  /**\r\n   * The width of the selected option's value. Must be set programmatically\r\n   * to ensure its overflow is clipped, as it's absolutely positioned.\r\n   */\r\n  _selectedValueWidth: number;\r\n\r\n  /** View -> model callback called when value changes */\r\n  _onChange: (value: any) => void = () => { };\r\n\r\n  /** View -> model callback called when select has been touched */\r\n  _onTouched = () => { };\r\n\r\n  /** The IDs of child options to be passed to the aria-owns attribute. */\r\n  _optionIds: string = '';\r\n\r\n  /** The value of the select panel's transform-origin property. */\r\n  _transformOrigin: string = 'top';\r\n\r\n  /** Whether the panel's animation is done. */\r\n  _panelDoneAnimating: boolean = false;\r\n\r\n  /**\r\n   * The y-offset of the overlay panel in relation to the trigger's top start corner.\r\n   * This must be adjusted to align the selected option text over the trigger text.\r\n   * when the panel opens. Will change based on the y-position of the selected option.\r\n   */\r\n  _offsetY = 0;\r\n\r\n  /**\r\n   * This position config ensures that the top \"start\" corner of the overlay\r\n   * is aligned with with the top \"start\" of the origin by default (overlapping\r\n   * the trigger completely). If the panel cannot fit below the trigger, it\r\n   * will fall back to a position above the trigger.\r\n   */\r\n  _positions = [\r\n    {\r\n      originX: 'start',\r\n      originY: 'top',\r\n      overlayX: 'start',\r\n      overlayY: 'top',\r\n    },\r\n    {\r\n      originX: 'start',\r\n      originY: 'bottom',\r\n      overlayX: 'start',\r\n      overlayY: 'bottom',\r\n    },\r\n  ];\r\n\r\n  /** Trigger that opens the select. */\r\n  @ViewChild('trigger') trigger: ElementRef;\r\n\r\n  /** Overlay pane containing the options. */\r\n  @ViewChild(ConnectedOverlayDirective) overlayDir: ConnectedOverlayDirective;\r\n\r\n  /** All of the defined select options. */\r\n  @ContentChildren(Md2Option, { descendants: true }) options: QueryList<Md2Option>;\r\n\r\n  /** All of the defined groups of options. */\r\n  @ContentChildren(Md2Optgroup) optionGroups: QueryList<Md2Optgroup>;\r\n\r\n  /** Placeholder to be shown if no value has been selected. */\r\n  @Input()\r\n  get placeholder() { return this._placeholder; }\r\n  set placeholder(value: string) {\r\n    this._placeholder = value;\r\n\r\n    // Must wait to record the trigger width to ensure placeholder width is included.\r\n    Promise.resolve(null).then(() => this._setTriggerWidth());\r\n  }\r\n\r\n  /** Whether the component is disabled. */\r\n  @Input()\r\n  get disabled() { return this._disabled; }\r\n  set disabled(value: any) {\r\n    this._disabled = coerceBooleanProperty(value);\r\n  }\r\n\r\n  /** Whether the component is required. */\r\n  @Input()\r\n  get required() { return this._required; }\r\n  set required(value: any) { this._required = coerceBooleanProperty(value); }\r\n\r\n  /** Whether the user should be allowed to select multiple options. */\r\n  @Input()\r\n  get multiple(): boolean { return this._multiple; }\r\n  set multiple(value: boolean) {\r\n    if (this._selectionModel) {\r\n      throw getMdSelectDynamicMultipleError();\r\n    }\r\n\r\n    this._multiple = coerceBooleanProperty(value);\r\n  }\r\n\r\n  /** Whether to float the placeholder text. */\r\n  @Input()\r\n  get floatPlaceholder(): Md2SelectFloatPlaceholderType { return this._floatPlaceholder; }\r\n  set floatPlaceholder(value: Md2SelectFloatPlaceholderType) {\r\n    this._floatPlaceholder = value || 'auto';\r\n  }\r\n  private _floatPlaceholder: Md2SelectFloatPlaceholderType = 'auto';\r\n\r\n  /** Tab index for the select element. */\r\n  @Input()\r\n  get tabIndex(): number { return this._disabled ? -1 : this._tabIndex; }\r\n  set tabIndex(value: number) {\r\n    if (typeof value !== 'undefined') {\r\n      this._tabIndex = value;\r\n    }\r\n  }\r\n\r\n  /** Aria label of the select. If not specified, the placeholder will be used as label. */\r\n  @Input('aria-label') ariaLabel: string = '';\r\n\r\n  /** Input that can be used to specify the `aria-labelledby` attribute. */\r\n  @Input('aria-labelledby') ariaLabelledby: string = '';\r\n\r\n  /** Combined stream of all of the child options' change events. */\r\n  get optionSelectionChanges(): Observable<Md2OptionSelectionChange> {\r\n    return merge(...this.options.map(option => option.onSelectionChange));\r\n  }\r\n\r\n  /** Event emitted when the select has been opened. */\r\n  @Output() onOpen: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the select has been closed. */\r\n  @Output() onClose: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the selected value has been changed by the user. */\r\n  @Output() change: EventEmitter<Md2SelectChange> = new EventEmitter<Md2SelectChange>();\r\n\r\n  constructor(private _element: ElementRef, private _renderer: Renderer2,\r\n    private _viewportRuler: ViewportRuler, private _changeDetectorRef: ChangeDetectorRef,\r\n    @Optional() private _dir: Dir, @Self() @Optional() public _control: NgControl,\r\n    @Attribute('tabindex') tabIndex: string) {\r\n\r\n    if (this._control) {\r\n      this._control.valueAccessor = this;\r\n    }\r\n\r\n    this._tabIndex = parseInt(tabIndex) || 0;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._selectionModel = new SelectionModel<Md2Option>(this.multiple, null, false);\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._initKeyManager();\r\n\r\n    this._changeSubscription = this.options.changes.pipe(startWith(null)).subscribe(() => {\r\n      this._resetOptions();\r\n\r\n      if (this._control) {\r\n        // Defer setting the value in order to avoid the \"Expression\r\n        // has changed after it was checked\" errors from Angular.\r\n        Promise.resolve(null).then(() => this._setSelectionByValue(this._control.value));\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._dropSubscriptions();\r\n\r\n    if (this._changeSubscription) {\r\n      this._changeSubscription.unsubscribe();\r\n    }\r\n\r\n    if (this._tabSubscription) {\r\n      this._tabSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  /** Toggles the overlay panel open or closed. */\r\n  toggle(): void {\r\n    this.panelOpen ? this.close() : this.open();\r\n  }\r\n\r\n  /** Opens the overlay panel. */\r\n  open(): void {\r\n    if (this.disabled || !this.options.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this._triggerWidth) {\r\n      this._setTriggerWidth();\r\n    }\r\n\r\n    this._calculateOverlayPosition();\r\n    this._placeholderState = this._floatPlaceholderState();\r\n    this._panelOpen = true;\r\n  }\r\n\r\n  /** Closes the overlay panel and focuses the host element. */\r\n  close(): void {\r\n    if (this._panelOpen) {\r\n      this._panelOpen = false;\r\n\r\n      if (this._selectionModel.isEmpty()) {\r\n        this._placeholderState = '';\r\n      }\r\n\r\n      this._focusHost();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the select's value. Part of the ControlValueAccessor interface\r\n   * required to integrate with Angular's core forms API.\r\n   *\r\n   * @param value New value to be written to the model.\r\n   */\r\n  writeValue(value: any): void {\r\n    if (this.options) {\r\n      this._setSelectionByValue(value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Saves a callback function to be invoked when the select's value\r\n   * changes from user input. Part of the ControlValueAccessor interface\r\n   * required to integrate with Angular's core forms API.\r\n   *\r\n   * @param fn Callback to be triggered when the value changes.\r\n   */\r\n  registerOnChange(fn: (value: any) => void): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  /**\r\n   * Saves a callback function to be invoked when the select is blurred\r\n   * by the user. Part of the ControlValueAccessor interface required\r\n   * to integrate with Angular's core forms API.\r\n   *\r\n   * @param fn Callback to be triggered when the component has been touched.\r\n   */\r\n  registerOnTouched(fn: () => {}): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * Disables the select. Part of the ControlValueAccessor interface required\r\n   * to integrate with Angular's core forms API.\r\n   *\r\n   * @param isDisabled Sets whether the component is disabled.\r\n   */\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /** Whether or not the overlay panel is open. */\r\n  get panelOpen(): boolean {\r\n    return this._panelOpen;\r\n  }\r\n\r\n  /** The currently selected option. */\r\n  get selected(): Md2Option | Md2Option[] {\r\n    return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\r\n  }\r\n\r\n  /** The value displayed in the trigger. */\r\n  get triggerValue(): string {\r\n    if (this._multiple) {\r\n      let selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\r\n\r\n      if (this._isRtl()) {\r\n        selectedOptions.reverse();\r\n      }\r\n\r\n      // TODO(crisbeto): delimiter should be configurable for proper localization.\r\n      return selectedOptions.join(', ');\r\n    }\r\n\r\n    return this._selectionModel.selected[0].viewValue;\r\n  }\r\n\r\n  /** Whether the element is in RTL mode. */\r\n  _isRtl(): boolean {\r\n    return this._dir ? this._dir.value === 'rtl' : false;\r\n  }\r\n\r\n  /**\r\n   * Sets the width of the trigger element. This is necessary to match\r\n   * the overlay width to the trigger width.\r\n   */\r\n  private _setTriggerWidth(): void {\r\n    this._triggerWidth = this._getTriggerRect().width;\r\n  }\r\n\r\n  /** Handles the keyboard interactions of a closed select. */\r\n  _handleClosedKeydown(event: KeyboardEvent): void {\r\n    if (!this.disabled) {\r\n      if (event.keyCode === ENTER || event.keyCode === SPACE) {\r\n        event.preventDefault(); // prevents the page from scrolling down when pressing space\r\n        this.open();\r\n      } else if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\r\n        this._handleArrowKey(event);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Handles keypresses inside the panel. */\r\n  _handlePanelKeydown(event: KeyboardEvent): void {\r\n    if (event.keyCode === HOME || event.keyCode === END) {\r\n      event.preventDefault();\r\n      event.keyCode === HOME ? this._keyManager.setFirstItemActive() :\r\n        this._keyManager.setLastItemActive();\r\n    } else {\r\n      this._keyManager.onKeydown(event);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When the panel element is finished transforming in (though not fading in), it\r\n   * emits an event and focuses an option if the panel is open.\r\n   */\r\n  _onPanelDone(): void {\r\n    if (this.panelOpen) {\r\n      this._focusCorrectOption();\r\n      this.onOpen.emit();\r\n    } else {\r\n      this.onClose.emit();\r\n      this._panelDoneAnimating = false;\r\n      this.overlayDir.offsetX = 0;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * When the panel content is done fading in, the _panelDoneAnimating property is\r\n   * set so the proper class can be added to the panel.\r\n   */\r\n  _onFadeInDone(): void {\r\n    this._panelDoneAnimating = this.panelOpen;\r\n  }\r\n\r\n  /**\r\n   * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\r\n   * \"blur\" to the panel when it opens, causing a false positive.\r\n   */\r\n  _onBlur() {\r\n    if (!this.panelOpen) {\r\n      this._onTouched();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Callback that is invoked when the overlay panel has been attached.\r\n   */\r\n  _onAttached(): void {\r\n    this._calculateOverlayOffsetX();\r\n    this._setScrollTop();\r\n  }\r\n\r\n  /**\r\n   * Sets the scroll position of the scroll container. This must be called after\r\n   * the overlay pane is attached or the scroll container element will not yet be\r\n   * present in the DOM.\r\n   */\r\n  private _setScrollTop(): void {\r\n    const scrollContainer =\r\n      this.overlayDir.overlayRef.overlayElement.querySelector('.md2-select-panel');\r\n    scrollContainer.scrollTop = this._scrollTop;\r\n  }\r\n\r\n  /**\r\n   * Sets the selected option based on a value. If no option can be\r\n   * found with the designated value, the select trigger is cleared.\r\n   */\r\n  private _setSelectionByValue(value: any | any[]): void {\r\n    const isArray = Array.isArray(value);\r\n\r\n    if (this.multiple && value && !isArray) {\r\n      throw getMdSelectNonArrayValueError();\r\n    }\r\n\r\n    this._clearSelection();\r\n\r\n    if (isArray) {\r\n      value.forEach((currentValue: any) => this._selectValue(currentValue));\r\n      this._sortValues();\r\n    } else {\r\n      this._selectValue(value);\r\n    }\r\n\r\n    this._setValueWidth();\r\n\r\n    if (this._selectionModel.isEmpty()) {\r\n      this._placeholderState = '';\r\n    }\r\n\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Finds and selects and option based on its value.\r\n   * @returns Option that has the corresponding value.\r\n   */\r\n  private _selectValue(value: any): Md2Option {\r\n    let optionsArray = this.options.toArray();\r\n    let correspondingOption = optionsArray.find(option => option.value != null\r\n      && option.value != undefined && this.equals(option.value, value));\r\n\r\n    if (correspondingOption) {\r\n      correspondingOption.select();\r\n      this._selectionModel.select(correspondingOption);\r\n      this._keyManager.setActiveItem(optionsArray.indexOf(correspondingOption));\r\n    }\r\n\r\n    return correspondingOption;\r\n  }\r\n\r\n  /**\r\n   * Compare two vars or objects\r\n   * @param o1 compare first object\r\n   * @param o2 compare second object\r\n   * @return boolean comparation result\r\n   */\r\n  private equals(o1: any, o2: any) {\r\n    if (o1 === o2) { return true; }\r\n    if (o1 === null || o2 === null) { return false; }\r\n    if (o1 !== o1 && o2 !== o2) { return true; }\r\n    let t1 = typeof o1, t2 = typeof o2, key: any, keySet: any;\r\n    if (t1 === t2 && t1 === 'object') {\r\n      keySet = Object.create(null);\r\n      for (key in o1) {\r\n        if (!this.equals(o1[key], o2[key])) { return false; }\r\n        keySet[key] = true;\r\n      }\r\n      for (key in o2) {\r\n        if (!(key in keySet) && key.charAt(0) !== '$' && o2[key]) { return false; }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Clears the select trigger and deselects every option in the list.\r\n   * @param skip Option that should not be deselected.\r\n   */\r\n  private _clearSelection(skip?: Md2Option): void {\r\n    this._selectionModel.clear();\r\n    this.options.forEach(option => {\r\n      if (option !== skip) {\r\n        option.deselect();\r\n      }\r\n    });\r\n  }\r\n\r\n  private _getTriggerRect(): ClientRect {\r\n    return this.trigger.nativeElement.getBoundingClientRect();\r\n  }\r\n\r\n  /** Sets up a key manager to listen to keyboard events on the overlay panel. */\r\n  private _initKeyManager() {\r\n    this._keyManager = new FocusKeyManager(this.options);\r\n    this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.close());\r\n  }\r\n\r\n  /** Drops current option subscriptions and IDs and resets from scratch. */\r\n  private _resetOptions(): void {\r\n    this._dropSubscriptions();\r\n    this._listenToOptions();\r\n    this._setOptionIds();\r\n    this._setOptionMultiple();\r\n  }\r\n\r\n  /** Listens to user-generated selection events on each option. */\r\n  private _listenToOptions(): void {\r\n    this._optionSubscription = this.optionSelectionChanges\r\n      .pipe(filter(event => event.isUserInput))\r\n      .subscribe(event => {\r\n        this._onSelect(event.source);\r\n        this._setValueWidth();\r\n\r\n        if (!this.multiple) {\r\n          this.close();\r\n        }\r\n      });\r\n  }\r\n\r\n  /** Invoked when an option is clicked. */\r\n  private _onSelect(option: Md2Option): void {\r\n    const wasSelected = this._selectionModel.isSelected(option);\r\n\r\n    if (this.multiple) {\r\n      this._selectionModel.toggle(option);\r\n      wasSelected ? option.deselect() : option.select();\r\n      this._sortValues();\r\n    } else {\r\n      this._clearSelection(option.value == null ? null : option);\r\n\r\n      if (option.value == null) {\r\n        this._propagateChanges(option.value);\r\n      } else {\r\n        this._selectionModel.select(option);\r\n      }\r\n    }\r\n\r\n    if (wasSelected !== this._selectionModel.isSelected(option)) {\r\n      this._propagateChanges();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sorts the model values, ensuring that they keep the same\r\n   * order that they have in the panel.\r\n   */\r\n  private _sortValues(): void {\r\n    if (this._multiple) {\r\n      this._selectionModel.clear();\r\n\r\n      this.options.forEach(option => {\r\n        if (option.selected) {\r\n          this._selectionModel.select(option);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Unsubscribes from all option subscriptions. */\r\n  private _dropSubscriptions(): void {\r\n    if (this._optionSubscription) {\r\n      this._optionSubscription.unsubscribe();\r\n      this._optionSubscription = null;\r\n    }\r\n  }\r\n\r\n  /** Emits change event to set the model value. */\r\n  private _propagateChanges(fallbackValue?: any): void {\r\n    let valueToEmit = null;\r\n\r\n    if (Array.isArray(this.selected)) {\r\n      valueToEmit = this.selected.map(option => option.value);\r\n    } else {\r\n      valueToEmit = this.selected ? this.selected.value : fallbackValue;\r\n    }\r\n\r\n    this._onChange(valueToEmit);\r\n    this.change.emit(new Md2SelectChange(this, valueToEmit));\r\n  }\r\n\r\n  /** Records option IDs to pass to the aria-owns property. */\r\n  private _setOptionIds() {\r\n    this._optionIds = this.options.map(option => option.id).join(' ');\r\n  }\r\n\r\n  /**\r\n   * Sets the `multiple` property on each option. The promise is necessary\r\n   * in order to avoid Angular errors when modifying the property after init.\r\n   */\r\n  private _setOptionMultiple() {\r\n    if (this.multiple) {\r\n      Promise.resolve(null).then(() => {\r\n        this.options.forEach(option => option.multiple = this.multiple);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Must set the width of the selected option's value programmatically\r\n   * because it is absolutely positioned and otherwise will not clip\r\n   * overflow. The selection arrow is 9px wide, add 4px of padding = 13\r\n   */\r\n  private _setValueWidth() {\r\n    this._selectedValueWidth = this._triggerWidth - 13;\r\n  }\r\n\r\n  /**\r\n   * Focuses the selected item. If no option is selected, it will focus\r\n   * the first item instead.\r\n   */\r\n  private _focusCorrectOption(): void {\r\n    if (this._selectionModel.isEmpty()) {\r\n      this._keyManager.setFirstItemActive();\r\n    } else {\r\n      this._keyManager.setActiveItem(this._getOptionIndex(this._selectionModel.selected[0]));\r\n    }\r\n  }\r\n\r\n  /** Focuses the host element when the panel closes. */\r\n  private _focusHost(): void {\r\n    this._element.nativeElement.focus();\r\n  }\r\n\r\n  /** Gets the index of the provided option in the option list. */\r\n  private _getOptionIndex(option: Md2Option): number {\r\n    return this.options.reduce((result: number, current: Md2Option, index: number) => {\r\n      return result === undefined ? (option === current ? index : undefined) : result;\r\n    }, undefined);\r\n  }\r\n\r\n  /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\r\n  private _calculateOverlayPosition(): void {\r\n    const items = this._getItemCount();\r\n    const panelHeight = Math.min(items * SELECT_ITEM_HEIGHT, SELECT_PANEL_MAX_HEIGHT);\r\n    const scrollContainerHeight = items * SELECT_ITEM_HEIGHT;\r\n\r\n    // The farthest the panel can be scrolled before it hits the bottom\r\n    const maxScroll = scrollContainerHeight - panelHeight;\r\n\r\n    if (this._selectionModel.hasValue()) {\r\n      let selectedIndex = this._getOptionIndex(this._selectionModel.selected[0]);\r\n\r\n      selectedIndex += this._getLabelCountBeforeOption(selectedIndex);\r\n\r\n      // We must maintain a scroll buffer so the selected option will be scrolled to the\r\n      // center of the overlay panel rather than the top.\r\n      const scrollBuffer = panelHeight / 2;\r\n      this._scrollTop = this._calculateOverlayScroll(selectedIndex, scrollBuffer, maxScroll);\r\n      this._offsetY = this._calculateOverlayOffsetY(selectedIndex, scrollBuffer, maxScroll);\r\n    } else {\r\n      // If no option is selected, the panel centers on the first option. In this case,\r\n      // we must only adjust for the height difference between the option element\r\n      // and the trigger element, then multiply it by -1 to ensure the panel moves\r\n      // in the correct direction up the page.\r\n      this._offsetY = (SELECT_ITEM_HEIGHT - SELECT_TRIGGER_HEIGHT) / 2 * -1;\r\n    }\r\n\r\n    this._checkOverlayWithinViewport(maxScroll);\r\n  }\r\n\r\n  /**\r\n   * Calculates the scroll position of the select's overlay panel.\r\n   *\r\n   * Attempts to center the selected option in the panel. If the option is\r\n   * too high or too low in the panel to be scrolled to the center, it clamps the\r\n   * scroll position to the min or max scroll positions respectively.\r\n   */\r\n  _calculateOverlayScroll(selectedIndex: number, scrollBuffer: number,\r\n    maxScroll: number): number {\r\n    const optionOffsetFromScrollTop = SELECT_ITEM_HEIGHT * selectedIndex;\r\n    const halfOptionHeight = SELECT_ITEM_HEIGHT / 2;\r\n\r\n    // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\r\n    // scroll container, then subtracts the scroll buffer to scroll the option down to\r\n    // the center of the overlay panel. Half the option height must be re-added to the\r\n    // scrollTop so the option is centered based on its middle, not its top edge.\r\n    const optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\r\n    return clampValue(0, optimalScrollPosition, maxScroll);\r\n  }\r\n\r\n  /**\r\n   * Figures out the appropriate animation state for the placeholder.\r\n   */\r\n  _getPlaceholderAnimationState(): string {\r\n    if (this.floatPlaceholder === 'never') {\r\n      return '';\r\n    }\r\n\r\n    if (this.floatPlaceholder === 'always') {\r\n      return this._floatPlaceholderState();\r\n    }\r\n\r\n    return this._placeholderState;\r\n  }\r\n\r\n  /**\r\n   * Determines the CSS `opacity` of the placeholder element.\r\n   */\r\n  _getPlaceholderOpacity(): string {\r\n    return (this.floatPlaceholder !== 'never' || this._selectionModel.isEmpty()) ?\r\n      '1' : '0';\r\n  }\r\n\r\n  /** Returns the aria-label of the select component. */\r\n  get _ariaLabel(): string {\r\n    // If an ariaLabelledby value has been set, the select should not overwrite the\r\n    // `aria-labelledby` value by setting the ariaLabel to the placeholder.\r\n    return this.ariaLabelledby ? null : this.ariaLabel || this.placeholder;\r\n  }\r\n\r\n  /**\r\n   * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\r\n   * This must be adjusted to align the selected option text over the trigger text when\r\n   * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\r\n   * can't be calculated until the panel has been attached, because we need to know the\r\n   * content width in order to constrain the panel within the viewport.\r\n   */\r\n  private _calculateOverlayOffsetX(): void {\r\n    const overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\r\n    const viewportRect = this._viewportRuler.getViewportRect();\r\n    const isRtl = this._isRtl();\r\n    let offsetX: number;\r\n\r\n    // Adjust the offset, depending on the option padding.\r\n    if (this.multiple) {\r\n      offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;\r\n    } else {\r\n      let selected = this._selectionModel.selected[0];\r\n      offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;\r\n    }\r\n\r\n    // Invert the offset in LTR.\r\n    if (!isRtl) {\r\n      offsetX *= -1;\r\n    }\r\n\r\n    // Determine how much the select overflows on each side.\r\n    const leftOverflow = 0 - (overlayRect.left + offsetX\r\n      - (isRtl ? SELECT_PANEL_PADDING_X * 2 : 0));\r\n    const rightOverflow = overlayRect.right + offsetX - viewportRect.width\r\n      + (isRtl ? 0 : SELECT_PANEL_PADDING_X * 2);\r\n\r\n    // If the element overflows on either side, reduce the offset to allow it to fit.\r\n    if (leftOverflow > 0) {\r\n      offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;\r\n    } else if (rightOverflow > 0) {\r\n      offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;\r\n    }\r\n\r\n    // Set the offset directly in order to avoid having to go through change detection and\r\n    // potentially triggering \"changed after it was checked\" errors.\r\n    this.overlayDir.offsetX = offsetX;\r\n    this.overlayDir.overlayRef.updatePosition();\r\n  }\r\n\r\n  /**\r\n   * Calculates the y-offset of the select's overlay panel in relation to the\r\n   * top start corner of the trigger. It has to be adjusted in order for the\r\n   * selected option to be aligned over the trigger when the panel opens.\r\n   */\r\n  private _calculateOverlayOffsetY(selectedIndex: number, scrollBuffer: number,\r\n    maxScroll: number): number {\r\n    let optionOffsetFromPanelTop: number;\r\n\r\n    if (this._scrollTop === 0) {\r\n      optionOffsetFromPanelTop = selectedIndex * SELECT_ITEM_HEIGHT;\r\n    } else if (this._scrollTop === maxScroll) {\r\n      const firstDisplayedIndex = this._getItemCount() - SELECT_MAX_OPTIONS_DISPLAYED;\r\n      const selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\r\n\r\n      // Because the panel height is longer than the height of the options alone,\r\n      // there is always extra padding at the top or bottom of the panel. When\r\n      // scrolled to the very bottom, this padding is at the top of the panel and\r\n      // must be added to the offset.\r\n      optionOffsetFromPanelTop =\r\n        selectedDisplayIndex * SELECT_ITEM_HEIGHT + SELECT_PANEL_PADDING_Y;\r\n    } else {\r\n      // If the option was scrolled to the middle of the panel using a scroll buffer,\r\n      // its offset will be the scroll buffer minus the half height that was added to\r\n      // center it.\r\n      optionOffsetFromPanelTop = scrollBuffer - SELECT_ITEM_HEIGHT / 2;\r\n    }\r\n\r\n    // The final offset is the option's offset from the top, adjusted for the height\r\n    // difference, multiplied by -1 to ensure that the overlay moves in the correct\r\n    // direction up the page.\r\n    return optionOffsetFromPanelTop * -1 - SELECT_ITEM_HEIGHT_ADJUSTMENT;\r\n  }\r\n\r\n  /**\r\n   * Checks that the attempted overlay position will fit within the viewport.\r\n   * If it will not fit, tries to adjust the scroll position and the associated\r\n   * y-offset so the panel can open fully on-screen. If it still won't fit,\r\n   * sets the offset back to 0 to allow the fallback position to take over.\r\n   */\r\n  private _checkOverlayWithinViewport(maxScroll: number): void {\r\n    const viewportRect = this._viewportRuler.getViewportRect();\r\n    const triggerRect = this._getTriggerRect();\r\n\r\n    const topSpaceAvailable = triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;\r\n    const bottomSpaceAvailable =\r\n      viewportRect.height - triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;\r\n\r\n    const panelHeightTop = Math.abs(this._offsetY);\r\n    const totalPanelHeight =\r\n      Math.min(this._getItemCount() * SELECT_ITEM_HEIGHT, SELECT_PANEL_MAX_HEIGHT);\r\n    const panelHeightBottom = totalPanelHeight - panelHeightTop - triggerRect.height;\r\n\r\n    if (panelHeightBottom > bottomSpaceAvailable) {\r\n      this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\r\n    } else if (panelHeightTop > topSpaceAvailable) {\r\n      this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\r\n    } else {\r\n      this._transformOrigin = this._getOriginBasedOnOption();\r\n    }\r\n  }\r\n\r\n  /** Adjusts the overlay panel up to fit in the viewport. */\r\n  private _adjustPanelUp(panelHeightBottom: number, bottomSpaceAvailable: number) {\r\n    const distanceBelowViewport = panelHeightBottom - bottomSpaceAvailable;\r\n\r\n    // Scrolls the panel up by the distance it was extending past the boundary, then\r\n    // adjusts the offset by that amount to move the panel up into the viewport.\r\n    this._scrollTop -= distanceBelowViewport;\r\n    this._offsetY -= distanceBelowViewport;\r\n    this._transformOrigin = this._getOriginBasedOnOption();\r\n\r\n    // If the panel is scrolled to the very top, it won't be able to fit the panel\r\n    // by scrolling, so set the offset to 0 to allow the fallback position to take\r\n    // effect.\r\n    if (this._scrollTop <= 0) {\r\n      this._scrollTop = 0;\r\n      this._offsetY = 0;\r\n      this._transformOrigin = `50% bottom 0px`;\r\n    }\r\n  }\r\n\r\n  /** Adjusts the overlay panel down to fit in the viewport. */\r\n  private _adjustPanelDown(panelHeightTop: number, topSpaceAvailable: number,\r\n    maxScroll: number) {\r\n    const distanceAboveViewport = panelHeightTop - topSpaceAvailable;\r\n\r\n    // Scrolls the panel down by the distance it was extending past the boundary, then\r\n    // adjusts the offset by that amount to move the panel down into the viewport.\r\n    this._scrollTop += distanceAboveViewport;\r\n    this._offsetY += distanceAboveViewport;\r\n    this._transformOrigin = this._getOriginBasedOnOption();\r\n\r\n    // If the panel is scrolled to the very bottom, it won't be able to fit the\r\n    // panel by scrolling, so set the offset to 0 to allow the fallback position\r\n    // to take effect.\r\n    if (this._scrollTop >= maxScroll) {\r\n      this._scrollTop = maxScroll;\r\n      this._offsetY = 0;\r\n      this._transformOrigin = `50% top 0px`;\r\n      return;\r\n    }\r\n  }\r\n\r\n  /** Sets the transform origin point based on the selected option. */\r\n  private _getOriginBasedOnOption(): string {\r\n    const originY =\r\n      Math.abs(this._offsetY) - SELECT_ITEM_HEIGHT_ADJUSTMENT + SELECT_ITEM_HEIGHT / 2;\r\n    return `50% ${originY}px 0px`;\r\n  }\r\n\r\n  /** Figures out the floating placeholder state value. */\r\n  private _floatPlaceholderState(): string {\r\n    return this._isRtl() ? 'floating-rtl' : 'floating-ltr';\r\n  }\r\n\r\n  /** Handles the user pressing the arrow keys on a closed select.  */\r\n  private _handleArrowKey(event: KeyboardEvent): void {\r\n    if (this._multiple) {\r\n      event.preventDefault();\r\n      this.open();\r\n    } else {\r\n      const prevActiveItem = this._keyManager.activeItem;\r\n\r\n      // Cycle though the select options even when the select is closed,\r\n      // matching the behavior of the native select element.\r\n      // TODO(crisbeto): native selects also cycle through the options with left/right arrows,\r\n      // however the key manager only supports up/down at the moment.\r\n      this._keyManager.onKeydown(event);\r\n\r\n      const currentActiveItem = this._keyManager.activeItem as Md2Option;\r\n\r\n      if (currentActiveItem !== prevActiveItem) {\r\n        this._clearSelection();\r\n        this._setSelectionByValue(currentActiveItem.value);\r\n        this._propagateChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Calculates the amount of items in the select. This includes options and group labels. */\r\n  private _getItemCount(): number {\r\n    return this.options.length + this.optionGroups.length;\r\n  }\r\n\r\n  /**\r\n   * Calculates the amount of option group labels that precede the specified option.\r\n   * Useful when positioning the panel, because the labels will offset the index of the\r\n   * currently-selected option.\r\n   */\r\n  private _getLabelCountBeforeOption(optionIndex: number): number {\r\n    if (this.optionGroups.length) {\r\n      let options = this.options.toArray();\r\n      let groups = this.optionGroups.toArray();\r\n      let groupCounter = 0;\r\n\r\n      for (let i = 0; i < optionIndex + 1; i++) {\r\n        if (options[i].group && options[i].group === groups[groupCounter]) {\r\n          groupCounter++;\r\n        }\r\n      }\r\n\r\n      return groupCounter;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n}\r\n\r\n/** Clamps a value n between min and max values. */\r\nfunction clampValue(min: number, n: number, max: number): number {\r\n  return Math.min(Math.max(min, n), max);\r\n}\r\n","<div class=\"md2-select-trigger\" cdk-overlay-origin (click)=\"toggle()\" #origin=\"cdkOverlayOrigin\" #trigger>\r\n  <span class=\"md2-select-placeholder\"\r\n        [class.md2-floating-placeholder]=\"_selectionModel.hasValue()\"\r\n        [@transformPlaceholder]=\"_getPlaceholderAnimationState()\"\r\n        [style.opacity]=\"_getPlaceholderOpacity()\"\r\n        [style.width.px]=\"_selectedValueWidth\">{{ placeholder }}</span>\r\n  <span class=\"md2-select-value\" *ngIf=\"_selectionModel.hasValue()\">\r\n    <span class=\"md2-select-value-text\">{{ triggerValue }}</span>\r\n  </span>\r\n  <span class=\"md2-select-arrow\"></span>\r\n  <span class=\"md2-select-underline\"></span>\r\n</div>\r\n<ng-template cdk-connected-overlay [origin]=\"origin\" [open]=\"panelOpen\" hasBackdrop (backdropClick)=\"close()\"\r\n             backdropClass=\"cdk-overlay-transparent-backdrop\" [positions]=\"_positions\" [minWidth]=\"_triggerWidth\"\r\n             [offsetY]=\"_offsetY\" (attach)=\"_onAttached()\" (detach)=\"close()\">\r\n  <div class=\"md2-select-panel\" [@transformPanel]=\"'showing'\" (@transformPanel.done)=\"_onPanelDone()\"\r\n       (keydown)=\"_keyManager.onKeydown($event)\" [style.transformOrigin]=\"_transformOrigin\"\r\n       [class.md2-select-panel-done-animating]=\"_panelDoneAnimating\">\r\n    <div class=\"md2-select-content\" [@fadeInContent]=\"'showing'\" (@fadeInContent.done)=\"_onFadeInDone()\">\r\n      <ng-content select=\"md2-select-header\"></ng-content>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import { Directive } from '@angular/core';\r\n\r\n\r\n/**\r\n * Fixed header that will be rendered above a select's options.\r\n */\r\n@Directive({\r\n  selector: 'md2-select-header',\r\n  host: {\r\n    'class': 'md2-select-header',\r\n  }\r\n})\r\nexport class Md2SelectHeader { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Md2Select } from './select';\r\nimport { Md2SelectHeader } from './select-header';\r\nimport { Md2OptionModule } from './option';\r\nimport { MdCommonModule, OverlayModule } from '../core/index';\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    OverlayModule,\r\n    Md2OptionModule,\r\n    MdCommonModule,\r\n  ],\r\n  exports: [Md2Select, Md2SelectHeader, Md2OptionModule, MdCommonModule],\r\n  declarations: [Md2Select, Md2SelectHeader],\r\n})\r\nexport class Md2SelectModule { }\r\n\r\n\r\nexport * from './select';\r\nexport * from './select-header';\r\nexport * from './option';\r\nexport * from './optgroup';\r\nexport { fadeInContent, transformPanel, transformPlaceholder } from './select-animations';\r\n","import {\r\n  Component,\r\n  Directive,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  OnInit,\r\n  Optional,\r\n  DoCheck,\r\n  IterableDiffers,\r\n  IterableDiffer,\r\n  ViewEncapsulation,\r\n  NgModule,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Md2SelectModule } from '../select/index';\r\n\r\nexport class Md2PaginationChange {\r\n  source: Md2Pagination;\r\n  activePage: number;\r\n}\r\n\r\nexport interface SortEvent {\r\n  sortBy: string | string[];\r\n  sortOrder: string;\r\n}\r\n\r\nexport interface PageEvent {\r\n  activePage: number;\r\n  rowsPerPage: number;\r\n  dataLength: number;\r\n}\r\n\r\nexport interface DataEvent {\r\n  length: number;\r\n}\r\n\r\n@Directive({\r\n  selector: 'table[md2Data]',\r\n  exportAs: 'md2DataTable'\r\n})\r\nexport class Md2DataTable implements DoCheck {\r\n\r\n  private diff: IterableDiffer<any>;\r\n  private isDataChanged = false;\r\n  private _data: Array<any> = [];\r\n  private _activePage: number = 1;\r\n  private _rowsPerPage: number = 1000;\r\n  private _sortBy: string | Array<string> = '';\r\n  private _sortOrder: string = 'asc';\r\n\r\n  data: Array<any>;\r\n\r\n  @Input()\r\n  get md2Data() { return this._data; }\r\n  set md2Data(value: Array<any>) {\r\n    if (this._data !== value) {\r\n      this._data = value || [];\r\n      this.recalculatePage();\r\n      this.isDataChanged = true;\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get activePage() { return this._activePage; }\r\n  set activePage(value: number) {\r\n    if (this._activePage !== value) {\r\n      this._activePage = value;\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get rowsPerPage() { return this._rowsPerPage; }\r\n  set rowsPerPage(value: number) {\r\n    if (this._rowsPerPage !== value) {\r\n      this._rowsPerPage = value;\r\n      this.setPage(this.activePage, value);\r\n      this.isDataChanged = true;\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get sortBy() { return this._sortBy; }\r\n  set sortBy(value: string | Array<string>) {\r\n    if (this._sortBy !== value) {\r\n      this._sortBy = value;\r\n      if (value) {\r\n        this.onSortChange.next({ sortBy: this.sortBy, sortOrder: this.sortOrder });\r\n      }\r\n      this.isDataChanged = true;\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get sortOrder() { return this._sortOrder; }\r\n  set sortOrder(value: string) {\r\n    if (!(value === 'asc' || value === 'desc')) {\r\n      console.warn('sortOrder value must be one of [\"asc\", \"desc\"], but is:', value);\r\n      value = 'asc';\r\n    }\r\n    if (this._sortOrder !== value) {\r\n      this._sortOrder = value;\r\n      this.isDataChanged = true;\r\n    }\r\n  }\r\n\r\n  @Output() activePageChange = new EventEmitter<number>();\r\n  @Output() rowsPerPageChange = new EventEmitter<number>();\r\n  @Output() sortByChange = new EventEmitter<string | string[]>();\r\n  @Output() sortOrderChange = new EventEmitter<string>();\r\n\r\n  onSortChange = new EventEmitter<SortEvent>();\r\n  onPageChange = new EventEmitter<PageEvent>();\r\n\r\n  constructor(private differs: IterableDiffers) {\r\n    this.diff = differs.find([]).create(null);\r\n  }\r\n\r\n  ngDoCheck(): any {\r\n    let changes = this.diff.diff(this.md2Data);\r\n    if (changes) {\r\n      this.recalculatePage();\r\n      this.isDataChanged = true;\r\n    }\r\n    if (this.isDataChanged) {\r\n      this.fillData();\r\n      this.diff.diff(this.md2Data);\r\n      this.isDataChanged = false;\r\n    }\r\n  }\r\n\r\n  getSort(): SortEvent {\r\n    return { sortBy: this.sortBy, sortOrder: this.sortOrder };\r\n  }\r\n\r\n  setSort(sortBy: string | string[], sortOrder: string) {\r\n    if (this.sortBy !== sortBy || this.sortOrder !== sortOrder) {\r\n      this.sortBy = sortBy;\r\n      this.sortOrder = sortOrder;\r\n      this.isDataChanged = true;\r\n      this.onSortChange.next({ sortBy: sortBy, sortOrder: sortOrder });\r\n      this.sortByChange.emit(this.sortBy);\r\n      this.sortOrderChange.emit(this.sortOrder);\r\n    }\r\n  }\r\n\r\n  getPage(): PageEvent {\r\n    return {\r\n      activePage: this.activePage,\r\n      rowsPerPage: this.rowsPerPage,\r\n      dataLength: this.md2Data.length\r\n    };\r\n  }\r\n\r\n  setPage(activePage: number, rowsPerPage: number): void {\r\n    if (this.rowsPerPage !== rowsPerPage || this.activePage !== activePage) {\r\n      this.activePage = this.activePage !== activePage ?\r\n        activePage : this.calculateNewActivePage(this.rowsPerPage, rowsPerPage);\r\n      if (this.rowsPerPage !== rowsPerPage) {\r\n        this._rowsPerPage = rowsPerPage;\r\n        this.rowsPerPageChange.emit(this.rowsPerPage);\r\n      }\r\n      this.isDataChanged = true;\r\n      this.onPageChange.emit({\r\n        activePage: this.activePage,\r\n        rowsPerPage: this.rowsPerPage,\r\n        dataLength: this.md2Data ? this.md2Data.length : 0\r\n      });\r\n      this.activePageChange.emit(this.activePage);\r\n    }\r\n  }\r\n\r\n  private calculateNewActivePage(previousRowsPerPage: number, currentRowsPerPage: number): number {\r\n    let firstRowOnPage = (this.activePage - 1) * previousRowsPerPage + 1;\r\n    let newActivePage = Math.ceil(firstRowOnPage / currentRowsPerPage);\r\n    return newActivePage;\r\n  }\r\n\r\n  private recalculatePage() {\r\n    let lastPage = Math.ceil(this.md2Data.length / this.rowsPerPage);\r\n    if (lastPage < this.activePage) {\r\n      this._activePage = lastPage || 1;\r\n      setTimeout(() => {\r\n        this.activePageChange.emit(this.activePage);\r\n      }, 10);\r\n    } else { }\r\n\r\n    this.onPageChange.emit({\r\n      activePage: this.activePage,\r\n      rowsPerPage: this.rowsPerPage,\r\n      dataLength: this.md2Data.length\r\n    });\r\n  }\r\n\r\n  private fillData() {\r\n    let offset = (this.activePage - 1) * this.rowsPerPage;\r\n    let data = this.md2Data;\r\n    let sortInt = this.sortOrder === 'desc' ? -1 : 1;\r\n    if (this.sortBy) {\r\n      data = data.sort((a: any, b: any) => {\r\n        let x = this.caseInsensitiveIteratee(a);\r\n        let y = this.caseInsensitiveIteratee(b);\r\n        return ((x > y) ? 1 : (y > x) ? -1 : 0) * sortInt;\r\n      });\r\n    }\r\n    this.data = data.slice(offset, offset + this.rowsPerPage);\r\n  }\r\n\r\n  private caseInsensitiveIteratee(value: any) {\r\n    if (typeof this.sortBy === 'string' || this.sortBy instanceof String) {\r\n      for (let sortByProperty of this.sortBy.split('.')) {\r\n        value = value[sortByProperty];\r\n      }\r\n    } else {\r\n      value = value[this.sortBy + ''];\r\n    }\r\n    if (value && typeof value === 'string' || value instanceof String) {\r\n      return value.toLowerCase();\r\n    }\r\n    return value;\r\n  }\r\n\r\n}\r\n\r\n@Component({\r\n  selector: '[md2SortBy]',\r\n  templateUrl: 'sort.html',\r\n  styleUrls: ['data-table.scss'],\r\n  host: {\r\n    '[class.md2-sort-active]': '_isAsc || _isDesc',\r\n    '(click)': '_sort()'\r\n  },\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2DataTableSortBy implements OnInit {\r\n\r\n  @Input() md2SortBy: string;\r\n\r\n  _isAsc: boolean = false;\r\n  _isDesc: boolean = false;\r\n\r\n  constructor(private _md2Table: Md2DataTable) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._md2Table.onSortChange.subscribe((event: SortEvent) => {\r\n      this._isAsc = (event.sortBy === this.md2SortBy && event.sortOrder === 'asc');\r\n      this._isDesc = (event.sortBy === this.md2SortBy && event.sortOrder === 'desc');\r\n    });\r\n  }\r\n\r\n  _sort() {\r\n    if (this._isAsc) {\r\n      this._md2Table.setSort(this.md2SortBy, 'desc');\r\n    } else {\r\n      this._md2Table.setSort(this.md2SortBy, 'asc');\r\n    }\r\n  }\r\n\r\n}\r\n\r\n@Component({\r\n  selector: 'md2-pagination',\r\n  templateUrl: 'pagination.html',\r\n  styleUrls: ['data-table.scss'],\r\n  exportAs: 'md2Pagination',\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2Pagination {\r\n\r\n  _activePage: number = 1;\r\n\r\n  @Input() rowsPerPageSet: any = [];\r\n  @Input() md2Table: Md2DataTable;\r\n  @Input() paginationLabel: string = 'Rows per page:';\r\n\r\n  _rowsPerPage: number;\r\n  _dataLength: number = 0;\r\n  _lastPage: number;\r\n\r\n  constructor( @Optional() private _dataTable: Md2DataTable) { }\r\n\r\n  ngDoCheck() {\r\n    this.md2Table = this.md2Table || this._dataTable;\r\n    this.onPageChangeSubscriber(this.md2Table.getPage());\r\n    this.md2Table.onPageChange.subscribe(this.onPageChangeSubscriber);\r\n  }\r\n\r\n  _setPage(pageNumber: number): void {\r\n    this.md2Table.setPage(pageNumber, this._rowsPerPage);\r\n  }\r\n\r\n  _setRows(event: any): void {\r\n    this.md2Table.setPage(this._activePage, parseInt(event.value));\r\n  }\r\n\r\n  private onPageChangeSubscriber = (event: PageEvent) => {\r\n    this._activePage = event.activePage;\r\n    this._rowsPerPage = event.rowsPerPage;\r\n    this._dataLength = event.dataLength;\r\n    this._lastPage = Math.ceil(this._dataLength / this._rowsPerPage);\r\n  }\r\n\r\n}\r\n\r\nexport const MD2_DATA_TABLE_DIRECTIVES: any[] = [\r\n  Md2DataTable,\r\n  Md2DataTableSortBy,\r\n  Md2Pagination\r\n];\r\n\r\n@NgModule({\r\n  imports: [CommonModule, FormsModule, Md2SelectModule],\r\n  exports: MD2_DATA_TABLE_DIRECTIVES,\r\n  declarations: MD2_DATA_TABLE_DIRECTIVES,\r\n})\r\nexport class Md2DataTableModule { }\r\n","<ng-content></ng-content>\r\n&nbsp;\r\n<svg *ngIf=\"!_isDesc\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\">\r\n  <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\r\n</svg>\r\n<svg *ngIf=\"_isDesc\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\">\r\n  <path d=\"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\" />\r\n</svg>\r\n","<ul class=\"md2-pagination\" *ngIf=\"_dataLength > _rowsPerPage\">\r\n  <li [class.disabled]=\"_activePage <= 1\" (click)=\"_setPage(_activePage - 1)\">\r\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\r\n    </svg>\r\n  </li>\r\n  <li *ngIf=\"_activePage > 4 && _activePage + 1 > _lastPage\" (click)=\"_setPage(_activePage - 4)\">\r\n    {{_activePage-4}}\r\n  </li>\r\n  <li *ngIf=\"_activePage > 3 && _activePage + 2 > _lastPage\" (click)=\"_setPage(_activePage - 3)\">\r\n    {{_activePage-3}}\r\n  </li>\r\n  <li *ngIf=\"_activePage > 2\" (click)=\"_setPage(_activePage - 2)\">\r\n    {{_activePage-2}}\r\n  </li>\r\n  <li *ngIf=\"_activePage > 1\" (click)=\"_setPage(_activePage - 1)\">\r\n    {{_activePage-1}}\r\n  </li>\r\n  <li class=\"active\">{{_activePage}}</li>\r\n  <li *ngIf=\"_activePage + 1 <= _lastPage\" (click)=\"_setPage(_activePage + 1)\">\r\n    {{_activePage+1}}\r\n  </li>\r\n  <li *ngIf=\"_activePage + 2 <= _lastPage\" (click)=\"_setPage(_activePage + 2)\">\r\n    {{_activePage+2}}\r\n  </li>\r\n  <li *ngIf=\"_activePage + 3 <= _lastPage && _activePage < 3\" (click)=\"_setPage(_activePage + 3)\">\r\n    {{_activePage+3}}\r\n  </li>\r\n  <li *ngIf=\"_activePage + 4 <= _lastPage && _activePage < 2\" (click)=\"_setPage(_activePage + 4)\">\r\n    {{_activePage+4}}\r\n  </li>\r\n  <li [class.disabled]=\"_activePage >= _lastPage\" (click)=\"_setPage(_activePage + 1)\">\r\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\r\n    </svg>\r\n  </li>\r\n</ul>\r\n<div class=\"md2-rows-select\" *ngIf=\"rowsPerPageSet.length && _dataLength > 0\">\r\n  <label>{{paginationLabel}}</label>\r\n  <md2-select [(ngModel)]=\"_rowsPerPage\" (change)=\"_setRows($event)\">\r\n    <md2-option *ngFor=\"let row of rowsPerPageSet\" [value]=\"row\">{{row}}</md2-option>\r\n  </md2-select>\r\n</div>\r\n","import {\r\n  animate,\r\n  AnimationTriggerMetadata,\r\n  keyframes,\r\n  state,\r\n  style,\r\n  transition,\r\n  trigger,\r\n} from '@angular/animations';\r\n\r\n/**\r\n * This animation fades in the background color and text content of the\r\n * select's options. It is time delayed to occur 100ms after the overlay\r\n * panel has transformed in.\r\n */\r\nexport const fadeInContent: AnimationTriggerMetadata = trigger('fadeInContent', [\r\n  state('showing', style({ opacity: 1 })),\r\n  transition('void => showing', [\r\n    style({ opacity: 0 }),\r\n    animate(`150ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)`)\r\n  ])\r\n]);\r\n\r\nexport const slideCalendar: AnimationTriggerMetadata = trigger('slideCalendar', [\r\n  transition('* => left', [\r\n    animate(180, keyframes([\r\n      style({ transform: 'translateX(100%)', offset: 0.5 }),\r\n      style({ transform: 'translateX(-100%)', offset: 0.51 }),\r\n      style({ transform: 'translateX(0)', offset: 1 })\r\n    ]))\r\n  ]),\r\n  transition('* => right', [\r\n    animate(180, keyframes([\r\n      style({ transform: 'translateX(-100%)', offset: 0.5 }),\r\n      style({ transform: 'translateX(100%)', offset: 0.51 }),\r\n      style({ transform: 'translateX(0)', offset: 1 })\r\n    ]))\r\n  ])\r\n]);\r\n","import { Injectable } from '@angular/core';\r\n\r\nconst SUPPORTS_INTL_API = false; // typeof Intl != 'undefined';\r\n\r\n\r\n/** The default month names to use if Intl API is not available. */\r\nconst DEFAULT_MONTH_NAMES = {\r\n  'long': [\r\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\r\n    'October', 'November', 'December'\r\n  ],\r\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\r\n};\r\n\r\n\r\n/** The default date names to use if Intl API is not available. */\r\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\r\n\r\n/** The default hour names to use if Intl API is not available. */\r\nconst DEFAULT_HOUR_NAMES = range(24, i => String(i));\r\n\r\n/** The default minute names to use if Intl API is not available. */\r\nconst DEFAULT_MINUTE_NAMES = range(60, i => String(i));\r\n\r\n\r\n/** The default day of the week names to use if Intl API is not available. */\r\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\r\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\r\n};\r\n\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\nexport interface Months {\r\n  long: Array<string>;\r\n  short: Array<string>;\r\n  narrow: Array<string>;\r\n}\r\n\r\nexport interface DaysOfWeek {\r\n  long: Array<string>;\r\n  short: Array<string>;\r\n  narrow: Array<string>;\r\n}\r\n\r\n@Injectable()\r\nexport class DateLocale {\r\n\r\n  locale: any;\r\n  months: Months;\r\n  daysOfWeek: DaysOfWeek;\r\n  dates: Array<string>;\r\n  hours: Array<string>;\r\n  minutes: Array<string>;\r\n  firstDayOfWeek: number = 0;\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return date.getDay();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (this.months) { return this.months[style]; }\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { month: style });\r\n      return range(12, i => this._stripDirectionalityCharacters(dtf.format(new Date(2017, i, 1))));\r\n    }\r\n    return DEFAULT_MONTH_NAMES[style];\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    if (this.dates) { return this.dates; }\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { day: 'numeric' });\r\n      return range(31, i => this._stripDirectionalityCharacters(\r\n        dtf.format(new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DATE_NAMES;\r\n  }\r\n\r\n  getHourNames(): string[] {\r\n    if (this.hours) { return this.hours; }\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { hour: 'numeric' });\r\n      return range(24, i => this._stripDirectionalityCharacters(\r\n        dtf.format(new Date(2017, 0, 0, i))));\r\n    }\r\n    return DEFAULT_HOUR_NAMES;\r\n  }\r\n\r\n  getMinuteNames(): string[] {\r\n    if (this.minutes) { return this.minutes; }\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { minute: 'numeric' });\r\n      return range(60, i => this._stripDirectionalityCharacters(\r\n        dtf.format(new Date(2017, 0, 0, 0, i))));\r\n    }\r\n    return DEFAULT_MINUTE_NAMES;\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (this.daysOfWeek) { return this.daysOfWeek[style]; }\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { weekday: style });\r\n      return range(7, i => this._stripDirectionalityCharacters(\r\n        dtf.format(new Date(2017, 0, i + 1))));\r\n    }\r\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\r\n  }\r\n\r\n  getYearName(date: Date): string {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\r\n      return this._stripDirectionalityCharacters(dtf.format(date));\r\n    }\r\n    return String(date.getFullYear());\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\r\n    return this.firstDayOfWeek;\r\n  }\r\n\r\n  format(date: Date, displayFormat: Object): string {\r\n    if (SUPPORTS_INTL_API) {\r\n      let dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\r\n      return this._stripDirectionalityCharacters(dtf.format(date));\r\n    }\r\n    return this._stripDirectionalityCharacters(date.toDateString());\r\n  }\r\n\r\n  getDateLabel(d: Date): string {\r\n    let day: string = this.getDayOfWeekNames('short')[d.getDay()];\r\n    let date: string = this.getDateNames()[d.getDate() - 1];\r\n    let month: string = this.getMonthNames('short')[d.getMonth()];\r\n    return `${day}, ${month} ${date}`;\r\n  }\r\n\r\n  getHoursLabel(d: Date): string { return `${this.getHourNames()[d.getHours()]}`; }\r\n\r\n  getMinutesLabel(d: Date): string { return `${this.getMinuteNames()[d.getMinutes()]}`; }\r\n\r\n  getMonthLabel(d: Date): string {\r\n    return `${this.getMonthNames('long')[d.getMonth()]} ${this.getYearName(d)}`;\r\n  }\r\n\r\n  /**\r\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\r\n   * other browsers do not. We remove them to make output consistent and because they interfere with\r\n   * date parsing.\r\n   * @param s The string to strip direction characters from.\r\n   * @returns The stripped string.\r\n   */\r\n  private _stripDirectionalityCharacters(s: string) {\r\n    return s.replace(/[\\u200e\\u200f]/g, '');\r\n  }\r\n}\r\n","import { DateLocale } from './date-locale';\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\nexport class DateUtil {\r\n\r\n  _locale: DateLocale = new DateLocale();\r\n\r\n  parseDateMap: any = {\r\n    'y': 0,      // placeholder -> ctorIndex\r\n    'Y': [0, -2000],\r\n    'M': [1, 1], // placeholder -> [ctorIndex, offset|value array]\r\n    'n': [1, this._locale.getMonthNames('short')],\r\n    'N': [1, this._locale.getMonthNames('long')],\r\n    'd': 2,\r\n    'm': 4,\r\n    'H': 3,\r\n    'h': 3,\r\n    'K': [3, 1],\r\n    'k': [3, 1],\r\n    's': 5,\r\n    'S': 6,\r\n    'a': [3, ['am', 'pm']],\r\n    'A': [3, ['AM', 'PM']]\r\n  };\r\n\r\n  replace(s: string, regexp: any, sub?: string) {\r\n    return (s != null ? '' + s : '').replace(regexp, sub != null ? sub : '');\r\n  }\r\n\r\n  startsWith(base: any, start: any) {\r\n    return start != null && base.substr(0, start.length) == start;\r\n  }\r\n\r\n  isType(s: any, o: any) {\r\n    return typeof s == o;\r\n  }\r\n\r\n  isFunction(f: any) {\r\n    return this.isType(f, 'function');\r\n  }\r\n\r\n  isList(v: any) {\r\n    return !!v && v.length != null && !this.isString(v) && !this.isNode(v) && !this.isFunction(v);\r\n  }\r\n\r\n  isString(s: any) {\r\n    return this.isType(s, 'string');\r\n  }\r\n\r\n  isObject(f: any) {\r\n    return !!f && this.isType(f, 'object');\r\n  }\r\n\r\n  isNode(n: any) {\r\n    return n && n['nodeType'];\r\n  }\r\n\r\n  isNumber(n: any) {\r\n    return this.isType(n, 'number');\r\n  }\r\n\r\n  getFindFunc(findFunc: any) {\r\n    return this.isFunction(findFunc) ? findFunc : (obj: any, index: any) => {\r\n      if (findFunc === obj) {\r\n        return index;\r\n      }\r\n    };\r\n  }\r\n\r\n  getFindIndex(list: any, index: any, defaultIndex: any) {\r\n    return index == null ? defaultIndex :\r\n      index < 0 ? Math.max(list.length + index, 0) : Math.min(list.length, index);\r\n  }\r\n\r\n  find(list: any, findFunc: any, startIndex?: any, endIndex?: any) {\r\n    let f = this.getFindFunc(findFunc);\r\n    let e = this.getFindIndex(list, endIndex, list.length);\r\n    let r: any;\r\n    for (let i = this.getFindIndex(list, startIndex, 0); i < e; i++) {\r\n      if ((r = f.call(list, list[i], i)) != null) {\r\n        return r;\r\n      }\r\n    }\r\n  }\r\n\r\n  parseDate(date: string, fmt: string) {\r\n    let indexMap: any = {}; // contains reGroupPosition -> typeLetter or [typeLetter, value array]\r\n    let reIndex = 1;\r\n    let timezoneOffsetMatch: any;\r\n    let timezoneIndex: any;\r\n    let match: any;\r\n\r\n    let format = this.replace(fmt, /^\\?/);\r\n    if (format != fmt && !this.replace(date, /^\\s+|\\s+$/g)) {\r\n      return null;\r\n    }\r\n\r\n    if (match = /^\\[([+-])(\\d\\d)(\\d\\d)\\]\\s*(.*)/.exec(format)) {\r\n      timezoneOffsetMatch = match;\r\n      format = match[4];\r\n    }\r\n\r\n    let parser = new RegExp(format.replace(/(.)(\\1*)(?:\\[([^\\]]*)\\])?/g,\r\n      (wholeMatch, placeholderChar, placeholderDigits, param) => {\r\n        if (/[dmhkys]/i.test(placeholderChar)) {\r\n          indexMap[reIndex++] = placeholderChar;\r\n          let plen = placeholderDigits.length + 1;\r\n          return '(\\\\d' + (plen < 2 ? '+' : ('{1,' + plen + '}')) + ')';\r\n        } else if (placeholderChar == 'z') {\r\n          timezoneIndex = reIndex;\r\n          reIndex += 3;\r\n          return '([+-])(\\\\d\\\\d)(\\\\d\\\\d)';\r\n        } else if (/[NnaA]/.test(placeholderChar)) {\r\n          indexMap[reIndex++] = [placeholderChar, param && param.split(',')];\r\n          return '([a-zA-Z\\\\u0080-\\\\u1fff]+)';\r\n        } else if (placeholderChar == '{') {\r\n          return '(?:';\r\n        } else if (placeholderChar == '}') {\r\n          return ')?';\r\n        } else if (/w/i.test(placeholderChar)) {\r\n          return '[a-zA-Z\\\\u0080-\\\\u1fff]+';\r\n        } else if (/\\s/.test(placeholderChar)) {\r\n          return '\\\\s+';\r\n        } else {\r\n          return this.replace(wholeMatch, /[\\\\\\[\\]\\/{}()*+?.$|^-]/g, '\\\\$&');\r\n        }\r\n      }));\r\n\r\n    if (!(match = parser.exec(date))) {\r\n      return undefined;\r\n    }\r\n\r\n    let ctorArgs = [0, 0, 0, 0, 0, 0, 0];\r\n    for (let i = 1; i < reIndex; i++) {\r\n      let matchVal = match[i];\r\n      let indexEntry: any = indexMap[i];\r\n      if (this.isList(indexEntry)) { // for a, n or N\r\n        let placeholderChar = indexEntry[0];\r\n        let mapEntry = this.parseDateMap[placeholderChar];\r\n        let ctorIndex = mapEntry[0];\r\n        let valList = indexEntry[1] || mapEntry[1];\r\n        let listValue = this.find(valList,\r\n          (v: any, index: any) => {\r\n            if (this.startsWith(matchVal.toLowerCase(), v.toLowerCase())) {\r\n              return index;\r\n            }\r\n          });\r\n        if (listValue == null) {\r\n          return undefined;\r\n        }\r\n        if (placeholderChar == 'a' || placeholderChar == 'A') {\r\n          ctorArgs[ctorIndex] += listValue * 12;\r\n        } else {\r\n          ctorArgs[ctorIndex] = listValue;\r\n        }\r\n      } else if (indexEntry) { // for numeric values (yHmMs)\r\n        let value = parseFloat(matchVal);\r\n        let mapEntry = this.parseDateMap[indexEntry];\r\n        if (this.isList(mapEntry)) {\r\n          ctorArgs[mapEntry[0]] += value - mapEntry[1];\r\n        } else {\r\n          ctorArgs[mapEntry] += value;\r\n        }\r\n      }\r\n    }\r\n\r\n    let d = new Date(ctorArgs[0] || 0, ctorArgs[1] || 0, ctorArgs[2] || 0, ctorArgs[3] || 0, ctorArgs[4] || 0,\r\n      ctorArgs[5] || 0, ctorArgs[6] || 0);\r\n    return d;\r\n  }\r\n\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any): Date | null {\r\n    let timestamp = typeof value == 'number' ? value : Date.parse(value);\r\n    return isNaN(timestamp) ? null : new Date(timestamp);\r\n  }\r\n\r\n  getYear(date: Date): number {\r\n    return date.getFullYear();\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return date.getMonth();\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  getHours(date: Date): number {\r\n    return date.getHours();\r\n  }\r\n\r\n  getMinutes(date: Date): number {\r\n    return date.getMinutes();\r\n  }\r\n\r\n  getSeconds(date: Date): number {\r\n    return date.getSeconds();\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number,\r\n    hours: number, minutes: number, seconds: number): Date {\r\n    // Check for invalid month and date (except upper bound on date which we have to check after\r\n    // creating the Date).\r\n    if (month < 0 || month > 11 || date < 1) {\r\n      return null;\r\n    }\r\n\r\n    let result = this._createDateWithOverflow(year, month, date, hours, minutes, seconds);\r\n\r\n    // Check that the date wasn't above the upper bound for the month, causing the month to\r\n    // overflow.\r\n    if (result.getMonth() != month) {\r\n      return null;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date),\r\n      this.getHours(date), this.getMinutes(date), this.getSeconds(date));\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return this.getDate(this._createDateWithOverflow(\r\n      this.getYear(date), this.getMonth(date) + 1, 0, 0, 0, 0));\r\n  }\r\n\r\n  addCalendarYears(date: Date, years: number): Date {\r\n    return this.addCalendarMonths(date, years * 12);\r\n  }\r\n\r\n  addCalendarMonths(date: Date, months: number): Date {\r\n    let newDate = this._createDateWithOverflow(\r\n      this.getYear(date), this.getMonth(date) + months, this.getDate(date), this.getHours(date),\r\n      this.getMinutes(date), this.getSeconds(date));\r\n\r\n    // It's possible to wind up in the wrong month if the original month has more days than the new\r\n    // month. In this case we want to go to the last day of the desired month.\r\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\r\n    // guarantee this.\r\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\r\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0,\r\n        this.getHours(newDate), this.getMinutes(newDate), this.getSeconds(newDate));\r\n    }\r\n\r\n    return newDate;\r\n  }\r\n\r\n  addCalendarDays(date: Date, days: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date), this.getMonth(date), this.getDate(date) + days,\r\n      this.getHours(date), this.getMinutes(date), this.getSeconds(date));\r\n  }\r\n\r\n  addCalendarHours(date: Date, hours: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date), this.getMonth(date), this.getDate(date),\r\n      this.getHours(date) + hours, this.getMinutes(date), this.getSeconds(date));\r\n  }\r\n\r\n  addCalendarMinutes(date: Date, minutes: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date), this.getMonth(date), this.getDate(date),\r\n      this.getHours(date), this.getMinutes(date) + minutes, this.getSeconds(date));\r\n  }\r\n  getISODateString(date: Date): string {\r\n    return [\r\n      date.getUTCFullYear(),\r\n      this._2digit(date.getUTCMonth() + 1),\r\n      this._2digit(date.getUTCDate())\r\n    ].join('-');\r\n  }\r\n\r\n  /** Creates a date but allows the month and date to overflow. */\r\n  private _createDateWithOverflow(year: number, month: number, date: number,\r\n    hours: number, minutes: number, seconds: number) {\r\n    let result = new Date(year, month, date, hours, minutes, seconds);\r\n\r\n    // We need to correct for the fact that JS native Date treats years in range [0, 99] as\r\n    // abbreviations for 19xx.\r\n    if (year >= 0 && year < 100) {\r\n      result.setFullYear(this.getYear(result) - 1900);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Pads a number to make it two digits.\r\n   * @param n The number to pad.\r\n   * @returns The padded number.\r\n   */\r\n  private _2digit(n: number) {\r\n    return ('00' + n).slice(-2);\r\n  }\r\n\r\n  compareDate(first: Date, second: Date): number {\r\n    return this.getYear(first) - this.getYear(second) ||\r\n      this.getMonth(first) - this.getMonth(second) ||\r\n      this.getDate(first) - this.getDate(second);\r\n  }\r\n\r\n  /**\r\n   * Gets the first day of the month for the given date's month.\r\n   */\r\n  getFirstDateOfWeek(date: Date, firstDayOfWeek: number) {\r\n    let day: number = date.getDate() - ((7 + date.getDay() - firstDayOfWeek) % 7);\r\n    return new Date(date.getFullYear(), date.getMonth(), day, date.getHours(), date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Gets the first day of the month for the given date's month.\r\n   */\r\n  getFirstDateOfMonth(date: Date) {\r\n    return new Date(date.getFullYear(), date.getMonth(), 1);\r\n  }\r\n\r\n  /**\r\n   * Gets the number of days in the month for the given date's month.\r\n   */\r\n  getNumberOfDaysInMonth(date: Date) {\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n  }\r\n\r\n  /**\r\n   * Get an arbitrary date in the month after the given date's month.\r\n   */\r\n  getDateInNextMonth(date: Date) {\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 1,\r\n      date.getHours(), date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Get an arbitrary date in the month before the given date's month.\r\n   */\r\n  getDateInPreviousMonth(date: Date) {\r\n    return new Date(date.getFullYear(), date.getMonth() - 1, 1,\r\n      date.getHours(), date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Gets whether two dates have the same year.\r\n   */\r\n  isSameYear(d1: Date, d2: Date) {\r\n    return d1 && d2 && d1.getFullYear() === d2.getFullYear();\r\n  }\r\n\r\n  /**\r\n   * Gets whether two dates have the same month and year.\r\n   */\r\n  isSameMonthAndYear(d1: Date, d2: Date) {\r\n    return d1 && d2 && d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth();\r\n  }\r\n\r\n  /**\r\n   * Gets whether two dates are the same day (not not necesarily the same time).\r\n   */\r\n  isSameDay(d1: Date, d2: Date) {\r\n    return d1 && d2 && d1.getDate() == d2.getDate() && this.isSameMonthAndYear(d1, d2);\r\n  }\r\n\r\n  /**\r\n   * Gets whether two dates are the same hours.\r\n   */\r\n  isSameHour(d1: Date, d2: Date) {\r\n    return d1 && d2 && d1.getHours() == d2.getHours() && this.isSameDay(d1, d2);\r\n  }\r\n\r\n  /**\r\n   * Gets whether two dates are the same minutes.\r\n   */\r\n  isSameMinute(d1: Date, d2: Date) {\r\n    return d1 && d2 && d1.getMinutes() == d2.getMinutes() && this.isSameHour(d1, d2);\r\n  }\r\n\r\n  /**\r\n   * Gets whether a date is in the month immediately after some date.\r\n   * @param startDate The date from which to compare.\r\n   * @param endDate The date to check.\r\n   * @returns \r\n   */\r\n  isInNextMonth(startDate: Date, endDate: Date) {\r\n    let nextMonth = this.getDateInNextMonth(startDate);\r\n    return this.isSameMonthAndYear(nextMonth, endDate);\r\n  }\r\n\r\n  /**\r\n   * Gets whether a date is in the month immediately before some date.\r\n   * @param startDate The date from which to compare.\r\n   * @param endDate The date to check.\r\n   * @returns \r\n   */\r\n  isInPreviousMonth(startDate: Date, endDate: Date) {\r\n    let previousMonth = this.getDateInPreviousMonth(startDate);\r\n    return this.isSameMonthAndYear(endDate, previousMonth);\r\n  }\r\n\r\n  /**\r\n   * Gets the midpoint between two dates.\r\n   * @param d1\r\n   * @param d2\r\n   * @returns \r\n   */\r\n  getDateMidpoint(d1: Date, d2: Date) {\r\n    return this.createDateAtMidnight((d1.getTime() + d2.getTime()) / 2);\r\n  }\r\n\r\n  /**\r\n   * Gets the week of the month that a given date occurs in.\r\n   * @param date\r\n   * @returns Index of the week of the month (zero-based).\r\n   */\r\n  getWeekOfMonth(date: Date) {\r\n    let firstDayOfMonth = this.getFirstDateOfMonth(date);\r\n    return Math.floor((firstDayOfMonth.getDay() + date.getDate() - 1) / 7);\r\n  }\r\n\r\n  /**\r\n   * Gets the week of the year that a given date occurs in.\r\n   * @param date\r\n   * @returns Index of the week according to ISO-8601.\r\n   */\r\n  getWeekOfYear(date: Date) {\r\n    // Copy date so don't modify original\r\n    const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n    // Set to nearest Thursday: current date + 4 - current day number\r\n    // Make Sunday's day number 7\r\n    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));\r\n    // Get first day of year\r\n    const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n    // Calculate full weeks to nearest Thursday and return weekNo\r\n    return Math.ceil(( ( (+d - +yearStart) / 86400000) + 1) / 7);\r\n  }\r\n\r\n  /**\r\n   * Gets a new date incremented by the given number of minutes. Number of minutes can be negative.\r\n   * @param date\r\n   * @param numberOfMinutes\r\n   * @returns \r\n   */\r\n  incrementMinutes(date: Date, numberOfMinutes: number) {\r\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate(),\r\n      date.getHours(), date.getMinutes() + numberOfMinutes);\r\n  }\r\n\r\n  /**\r\n   * Gets a new date incremented by the given number of hours. Number of hours can be negative.\r\n   * @param date\r\n   * @param numberOfHours\r\n   * @returns \r\n   */\r\n  incrementHours(date: Date, numberOfHours: number) {\r\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate(),\r\n      date.getHours() + numberOfHours, date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Gets a new date incremented by the given number of days. Number of days can be negative.\r\n   * @param date\r\n   * @param numberOfDays\r\n   * @returns \r\n   */\r\n  incrementDays(date: Date, numberOfDays: number) {\r\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate() + numberOfDays,\r\n      date.getHours(), date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Gets a new date incremented by the given number of months. Number of months can be negative.\r\n   * If the date of the given month does not match the target month, the date will be set to the\r\n   * last day of the month.\r\n   * @param date\r\n   * @param numberOfMonths\r\n   * @returns \r\n   */\r\n  incrementMonths(date: Date, numberOfMonths: number) {\r\n    // If the same date in the target month does not actually exist, the Date object will\r\n    // automatically advance *another* month by the number of missing days.\r\n    // For example, if you try to go from Jan. 30 to Feb. 30, you'll end up on March 2.\r\n    // So, we check if the month overflowed and go to the last day of the target month instead.\r\n    let dateInTargetMonth = new Date(date.getFullYear(), date.getMonth() + numberOfMonths, 1,\r\n      date.getHours(), date.getMinutes());\r\n    let numberOfDaysInMonth = this.getNumberOfDaysInMonth(dateInTargetMonth);\r\n    if (numberOfDaysInMonth < date.getDate()) {\r\n      dateInTargetMonth.setDate(numberOfDaysInMonth);\r\n    } else {\r\n      dateInTargetMonth.setDate(date.getDate());\r\n    }\r\n\r\n    return dateInTargetMonth;\r\n  }\r\n\r\n  /**\r\n   * Get the integer distance between two months. This *only* considers the month and year\r\n   * portion of the Date instances.\r\n   *\r\n   * @param start\r\n   * @param end\r\n   * @returns Number of months between `start` and `end`. If `end` is before `start`\r\n   *     chronologically, this number will be negative.\r\n   */\r\n  getMonthDistance(start: Date, end: Date) {\r\n    return (12 * (end.getFullYear() - start.getFullYear())) + (end.getMonth() - start.getMonth());\r\n  }\r\n\r\n  /**\r\n   * Gets the last day of the month for the given date.\r\n   * @param date\r\n   * @returns \r\n   */\r\n  getLastDateOfMonth(date: Date) {\r\n    return new Date(date.getFullYear(), date.getMonth(), this.getNumberOfDaysInMonth(date),\r\n      date.getHours(), date.getMinutes());\r\n  }\r\n\r\n  /**\r\n   * Checks whether a date is valid.\r\n   * @param date\r\n   * @return  Whether the date is a valid Date.\r\n   */\r\n  isValidDate(date: Date) {\r\n    return date != null && date.getTime && !isNaN(date.getTime());\r\n  }\r\n\r\n  /**\r\n   * Sets a date's time to midnight.\r\n   * @param date\r\n   */\r\n  setDateTimeToMidnight(date: Date) {\r\n    if (this.isValidDate(date)) {\r\n      date.setHours(0, 0, 0, 0);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates a date with the time set to midnight.\r\n   * Drop-in replacement for two forms of the Date constructor:\r\n   * 1. No argument for Date representing now.\r\n   * 2. Single-argument value representing number of seconds since Unix Epoch\r\n   * or a Date object.\r\n   * @param value\r\n   * @return New date with time set to midnight.\r\n   */\r\n  createDateAtMidnight(value: any) {\r\n    let date: Date;\r\n    if (!value) {\r\n      date = new Date();\r\n    } else {\r\n      date = new Date(value);\r\n    }\r\n    this.setDateTimeToMidnight(date);\r\n    return date;\r\n  }\r\n\r\n  /**\r\n   * Checks if a date is within a min and max range, ignoring the time component.\r\n   * If minDate or maxDate are not dates, they are ignored.\r\n   * @param date\r\n   * @param minDate\r\n   * @param maxDate\r\n   */\r\n  isDateWithinRange(date: Date, minDate: Date, maxDate: Date) {\r\n    let dateAtMidnight = this.createDateAtMidnight(date);\r\n    let minDateAtMidnight = this.isValidDate(minDate) ? this.createDateAtMidnight(minDate) : null;\r\n    let maxDateAtMidnight = this.isValidDate(maxDate) ? this.createDateAtMidnight(maxDate) : null;\r\n    return (!minDateAtMidnight || minDateAtMidnight <= dateAtMidnight) &&\r\n      (!maxDateAtMidnight || maxDateAtMidnight >= dateAtMidnight);\r\n  }\r\n\r\n  /**\r\n   * Checks if a date is within a min and max range.\r\n   * If minDate or maxDate are not dates, they are ignored.\r\n   * @param date\r\n   * @param minDate\r\n   * @param maxDate\r\n   */\r\n  isFullDateWithinRange(date: Date, minDate: Date, maxDate: Date) {\r\n    minDate = this.isValidDate(minDate) ? minDate : null;\r\n    maxDate = this.isValidDate(maxDate) ? maxDate : null;\r\n    return (!minDate || minDate <= date) &&\r\n      (!maxDate || maxDate >= date);\r\n  }\r\n\r\n  /**\r\n   * Gets a new date incremented by the given number of years. Number of years can be negative.\r\n   * See `incrementMonths` for notes on overflow for specific dates.\r\n   * @param date\r\n   * @param numberOfYears\r\n   * @returns \r\n   */\r\n  incrementYears(date: Date, numberOfYears: number) {\r\n    return this.incrementMonths(date, numberOfYears * 12);\r\n  }\r\n\r\n  /**\r\n   * Get the integer distance between two years. This *only* considers the year portion of the\r\n   * Date instances.\r\n   *\r\n   * @param start\r\n   * @param end\r\n   * @returns Number of months between `start` and `end`. If `end` is before `start`\r\n   *     chronologically, this number will be negative.\r\n   */\r\n  getYearDistance(start: Date, end: Date) {\r\n    return end.getFullYear() - start.getFullYear();\r\n  }\r\n\r\n  /**\r\n   * Clamps a date between a minimum and a maximum date.\r\n   * @param date Date to be clamped\r\n   * @param minDate Minimum date\r\n   * @param maxDate Maximum date\r\n   * @return\r\n   */\r\n  clampDate(date: Date, minDate: Date, maxDate: Date) {\r\n    let boundDate = date;\r\n    if (minDate && date < minDate) {\r\n      boundDate = new Date(minDate.getTime());\r\n    }\r\n    if (maxDate && date > maxDate) {\r\n      boundDate = new Date(maxDate.getTime());\r\n    }\r\n    return boundDate;\r\n  }\r\n\r\n  /**\r\n   * Extracts and parses the timestamp from a DOM node.\r\n   * @param node Node from which the timestamp will be extracted.\r\n   * @return Time since epoch.\r\n   */\r\n  getTimestampFromNode(node: any) {\r\n    if (node && node.hasAttribute('data-timestamp')) {\r\n      return Number(node.getAttribute('data-timestamp'));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if a month is within a min and max range, ignoring the date and time components.\r\n   * If minDate or maxDate are not dates, they are ignored.\r\n   * @param date\r\n   * @param minDate\r\n   * @param maxDate\r\n   */\r\n  isMonthWithinRange(date: Date, minDate: Date, maxDate: Date) {\r\n    let month = date.getMonth();\r\n    let year = date.getFullYear();\r\n\r\n    return (!minDate || minDate.getFullYear() < year || minDate.getMonth() <= month) &&\r\n      (!maxDate || maxDate.getFullYear() > year || maxDate.getMonth() >= month);\r\n  }\r\n\r\n  /**\r\n   * Compares two dates.\r\n   * @param first The first date to compare.\r\n   * @param second The second date to compare.\r\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\r\n   *     a number greater than 0 if the first date is later.\r\n   */\r\n  compareDateAndTime(first: Date, second: Date): number {\r\n    return this.getYear(first) - this.getYear(second) ||\r\n      this.getMonth(first) - this.getMonth(second) ||\r\n      this.getDate(first) - this.getDate(second) ||\r\n      this.getHours(first) - this.getDate(second) ||\r\n      this.getMinutes(first) - this.getDate(second) ||\r\n      this.getSeconds(first) - this.getDate(second);\r\n  }\r\n\r\n  /**\r\n   * Checks if two dates are equal.\r\n   * @param first The first date to check.\r\n   * @param second The second date to check.\r\n   * @returns Whether the two dates are equal.\r\n   *     Null dates are considered equal to other null dates.\r\n   */\r\n  sameDate(first: Date | null, second: Date | null): boolean {\r\n    return first && second ? !this.compareDate(first, second) : first == second;\r\n  }\r\n\r\n  /**\r\n   * Checks if two dates are equal.\r\n   * @param first The first date to check.\r\n   * @param second The second date to check.\r\n   * @returns Whether the two dates are equal.\r\n   *     Null dates are considered equal to other null dates.\r\n   */\r\n  sameDateAndTime(first: Date | null, second: Date | null): boolean {\r\n    return first && second ? !this.compareDateAndTime(first, second) : first == second;\r\n  }\r\n\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\n\r\n\r\n/**\r\n * An internal class that represents the data corresponding to a single calendar cell.\r\n * @docs-private\r\n */\r\nexport class Md2CalendarCell {\r\n  constructor(public value: number,\r\n              public displayValue: string,\r\n              public ariaLabel: string,\r\n              public enabled: boolean,\r\n              public header?: string) {}\r\n}\r\n\r\n\r\n/**\r\n * An internal component used to display calendar data in a table.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: '[md2-calendar-body]',\r\n  templateUrl: 'calendar-body.html',\r\n  styleUrls: ['calendar-body.scss'],\r\n  host: {\r\n    'class': 'md2-calendar-body',\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2CalendarBody {\r\n  /** The label for the table. (e.g. \"Jan 2017\"). */\r\n  @Input() label: string;\r\n\r\n  /** The cells to display in the table. */\r\n  @Input() rows: Md2CalendarCell[][];\r\n\r\n  /** The value in the table that corresponds to today. */\r\n  @Input() todayValue: number;\r\n\r\n  /** The value in the table that is currently selected. */\r\n  @Input() selectedValue: number;\r\n\r\n  /** The minimum number of free cells needed to fit the label in the first row. */\r\n  @Input() labelMinRequiredCells: number;\r\n\r\n  /** The number of columns in the table. */\r\n  @Input() numCols = 7;\r\n\r\n  /** Whether to allow selection of disabled cells. */\r\n  @Input() allowDisabledSelection = false;\r\n\r\n  /** The cell number of the active cell in the table. */\r\n  @Input() activeCell = 0;\r\n\r\n  /** Whether the Week-number should be displayed */\r\n  @Input() displayWeek: boolean;\r\n\r\n  /** Emits when a new value is selected. */\r\n  @Output() selectedValueChange = new EventEmitter<number>();\r\n\r\n  _cellClicked(cell: Md2CalendarCell): void {\r\n    if (!this.allowDisabledSelection && !cell.enabled) {\r\n      return;\r\n    }\r\n    this.selectedValueChange.emit(cell.value);\r\n  }\r\n\r\n  /** The number of blank cells to put at the beginning for the first row. */\r\n  get _firstRowOffset(): number {\r\n    return this.rows && this.rows.length && this.rows[0].length ?\r\n        this.numCols - this.rows[0].length : 0;\r\n  }\r\n\r\n  _isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n    let cellNumber = rowIndex * this.numCols + colIndex;\r\n\r\n    // Account for the fact that the first row may not have as many cells.\r\n    if (rowIndex) {\r\n      cellNumber -= this._firstRowOffset;\r\n    }\r\n\r\n    return cellNumber == this.activeCell;\r\n  }\r\n}\r\n","<!--\r\n  If there's not enough space in the first row, create a separate label row. We mark this row as\r\n  aria-hidden because we don't want it to be read out as one of the weeks in the month.\r\n-->\r\n<tr *ngIf=\"_firstRowOffset < labelMinRequiredCells\" aria-hidden=\"true\">\r\n  <td class=\"md2-calendar-body-label\" [attr.colspan]=\"numCols\" >{{label}}</td>\r\n</tr>\r\n\r\n<!-- Create the first row separately so we can include a special spacer cell. -->\r\n<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\r\n  <!--\r\n    We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\r\n  -->\r\n  <th *ngIf=\"displayWeek\"\r\n      scope=\"row\"\r\n      class=\"md2-calendar-table-header\"\r\n      aria-hidden=\"true\">\r\n    {{row[0].header}}\r\n  </th>\r\n  <td *ngIf=\"rowIndex === 0 && _firstRowOffset\"\r\n      aria-hidden=\"true\"\r\n      class=\"md2-calendar-body-label\"\r\n      [attr.colspan]=\"_firstRowOffset\">\r\n    {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\r\n  </td>\r\n  <td *ngFor=\"let item of row; let colIndex = index\"\r\n      role=\"gridcell\"\r\n      class=\"md2-calendar-body-cell\"\r\n      [class.md2-calendar-body-disabled]=\"!item.enabled\"\r\n      [class.md2-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\r\n      [attr.aria-label]=\"item.ariaLabel\"\r\n      [attr.aria-disabled]=\"!item.enabled || null\"\r\n      (click)=\"_cellClicked(item)\">\r\n    <div class=\"md2-calendar-body-cell-content\"\r\n         [class.md2-calendar-body-selected]=\"selectedValue === item.value\"\r\n         [class.md2-calendar-body-today]=\"todayValue === item.value\">\r\n      {{item.displayValue}}\r\n    </div>\r\n  </td>\r\n</tr>\r\n","import {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { DateLocale } from './date-locale';\r\nimport { DateUtil } from './date-util';\r\nimport { Md2CalendarCell } from './calendar-body';\r\nimport { MD_DATE_FORMATS, MdDateFormats } from '../core/datetime/date-formats';\r\nimport { slideCalendar } from './datepicker-animations';\r\n\r\n\r\nconst DAYS_PER_WEEK = 7;\r\n\r\n\r\n/**\r\n * An internal component used to display a single month in the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-month-view',\r\n  templateUrl: 'month-view.html',\r\n  animations: [slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2MonthView implements AfterContentInit {\r\n  /** Whether the Week-number should be displayed */\r\n  @Input() displayWeek: boolean;\r\n\r\n  /**\r\n   * The date to display in this month view (everything other than the month and year is ignored).\r\n   */\r\n  @Input()\r\n  get activeDate(): Date { return this._activeDate; }\r\n  set activeDate(value: Date) {\r\n    let oldActiveDate = this._activeDate;\r\n    this._activeDate = value || this._util.today();\r\n    if (oldActiveDate && this._activeDate &&\r\n      !this._util.isSameMonthAndYear(oldActiveDate, this._activeDate)) {\r\n      this._init();\r\n      if (this._util.isInNextMonth(oldActiveDate, this._activeDate)) {\r\n        this.calendarState('right');\r\n      } else {\r\n        this.calendarState('left');\r\n      }\r\n    }\r\n  }\r\n  private _activeDate: Date;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): Date { return this._selected; }\r\n  set selected(value: Date) {\r\n    this._selected = value;\r\n    this._selectedDate = this._getDateInCurrentMonth(this.selected);\r\n  }\r\n  private _selected: Date;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input() dateFilter: (date: Date) => boolean;\r\n\r\n  /** Emits when a new date is selected. */\r\n  @Output() selectedChange = new EventEmitter<Date>();\r\n\r\n  /** Grid of calendar cells representing the dates of the month. */\r\n  _weeks: Md2CalendarCell[][];\r\n\r\n  /** The number of blank cells in the first row before the 1st of the month. */\r\n  _firstWeekOffset: number;\r\n\r\n  /**\r\n   * The date of the month that the currently selected Date falls on.\r\n   * Null if the currently selected Date is in another month.\r\n   */\r\n  _selectedDate: number;\r\n\r\n  /** The date of the month that today falls on. Null if today is in another month. */\r\n  _todayDate: number;\r\n\r\n  /** The names of the weekdays. */\r\n  _weekdays: { long: string, narrow: string }[];\r\n\r\n  _calendarState: string;\r\n\r\n  constructor(private _locale: DateLocale, public _util: DateUtil,\r\n    @Optional() @Inject(MD_DATE_FORMATS) private _dateFormats: MdDateFormats) {\r\n    if (!this._dateFormats) {\r\n      throw Error('MD_DATE_FORMATS');\r\n    }\r\n\r\n    const firstDayOfWeek = this._locale.getFirstDayOfWeek();\r\n    const narrowWeekdays = this._locale.getDayOfWeekNames('narrow');\r\n    const longWeekdays = this._locale.getDayOfWeekNames('long');\r\n\r\n    // Rotate the labels for days of the week based on the configured first day of the week.\r\n    let weekdays = longWeekdays.map((long, i) => {\r\n      return { long, narrow: narrowWeekdays[i] };\r\n    });\r\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\r\n\r\n    this._activeDate = this._util.today();\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._init();\r\n  }\r\n\r\n  /** Handles when a new date is selected. */\r\n  _dateSelected(date: number) {\r\n    this.selectedChange.emit(this._util.createDate(\r\n      this._util.getYear(this.activeDate), this._util.getMonth(this.activeDate),\r\n      date, this._util.getHours(this.activeDate),\r\n      this._util.getMinutes(this.activeDate),\r\n      this._util.getSeconds(this.activeDate)));\r\n  }\r\n\r\n  /** Initializes this month view. */\r\n  private _init() {\r\n    this._selectedDate = this._getDateInCurrentMonth(this.selected);\r\n    this._todayDate = this._getDateInCurrentMonth(this._util.today());\r\n\r\n    let firstOfMonth = this._util.createDate(this._util.getYear(this.activeDate),\r\n      this._util.getMonth(this.activeDate), 1,\r\n      this._util.getHours(this.activeDate),\r\n      this._util.getMinutes(this.activeDate),\r\n      this._util.getSeconds(this.activeDate));\r\n    this._firstWeekOffset =\r\n      (DAYS_PER_WEEK + this._locale.getDayOfWeek(firstOfMonth) -\r\n        this._locale.getFirstDayOfWeek()) % DAYS_PER_WEEK;\r\n\r\n    this._createWeekCells();\r\n  }\r\n\r\n  /** Creates MdCalendarCells for the dates in this month. */\r\n  private _createWeekCells() {\r\n    let daysInMonth = this._util.getNumDaysInMonth(this.activeDate);\r\n    let dateNames = this._locale.getDateNames();\r\n    this._weeks = [[]];\r\n    for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++ , cell++) {\r\n      let date = this._util.createDate(\r\n        this._util.getYear(this.activeDate),\r\n        this._util.getMonth(this.activeDate), i + 1,\r\n        this._util.getHours(this.activeDate),\r\n        this._util.getMinutes(this.activeDate),\r\n        this._util.getSeconds(this.activeDate));\r\n      let enabled = !this.dateFilter ||\r\n        this.dateFilter(date);\r\n      let ariaLabel = this._locale.format(date, this._dateFormats.display.dateA11yLabel);\r\n      let newWeek = this._util.getWeekOfYear(date);\r\n      const offset = cell % 7;\r\n      if (offset === 0 && i > 0) {\r\n        this._weeks.push([]);\r\n      }\r\n      this._weeks[this._weeks.length - 1]\r\n        .push(new Md2CalendarCell(i + 1, dateNames[i], ariaLabel, enabled, newWeek.toString()));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the date in this month that the given Date falls on.\r\n   * Returns null if the given Date is in another month.\r\n   */\r\n  private _getDateInCurrentMonth(date: Date): number {\r\n    return this._util.isSameMonthAndYear(date, this.activeDate) ?\r\n      this._util.getDate(date) : null;\r\n  }\r\n\r\n  private calendarState(direction: string): void {\r\n    this._calendarState = direction;\r\n  }\r\n\r\n  _calendarStateDone() {\r\n    this._calendarState = '';\r\n  }\r\n\r\n}\r\n","<table class=\"md2-calendar-table\">\r\n  <thead class=\"md2-calendar-table-header\">\r\n    <tr>\r\n      <th *ngIf=\"displayWeek\">#</th>\r\n      <th *ngFor=\"let day of _weekdays\" [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody [@slideCalendar]=\"_calendarState\"\r\n         (@slideCalendar.done)=\"_calendarStateDone()\"\r\n         md2-calendar-body\r\n         role=\"grid\"\r\n         [rows]=\"_weeks\"\r\n         [todayValue]=\"_todayDate\"\r\n         [selectedValue]=\"_selectedDate\"\r\n         [displayWeek]=\"displayWeek\"\r\n         [activeCell]=\"_util.getDate(activeDate) - 1\"\r\n         (selectedValueChange)=\"_dateSelected($event)\"></tbody>\r\n</table>\r\n","import {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { DateLocale } from './date-locale';\r\nimport { DateUtil } from './date-util';\r\nimport { Md2CalendarCell } from './calendar-body';\r\nimport { MD_DATE_FORMATS, MdDateFormats } from '../core/datetime/date-formats';\r\nimport { slideCalendar } from './datepicker-animations';\r\n\r\n\r\n/**\r\n * An internal component used to display a single year in the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-year-view',\r\n  templateUrl: 'year-view.html',\r\n  animations: [slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2YearView implements AfterContentInit {\r\n  /** The date to display in this year view (everything other than the year is ignored). */\r\n  @Input()\r\n  get activeDate(): Date { return this._activeDate; }\r\n  set activeDate(value: Date) {\r\n    let oldActiveDate = this._activeDate;\r\n    this._activeDate = value || this._util.today();\r\n    if (oldActiveDate && this._activeDate &&\r\n      !this._util.isSameYear(oldActiveDate, this._activeDate)) {\r\n      this._init();\r\n      // if (oldActiveDate < this._activeDate) {\r\n      //  this.calendarState('right');\r\n      // } else {\r\n      //  this.calendarState('left');\r\n      // }\r\n    }\r\n  }\r\n  private _activeDate: Date;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): Date { return this._selected; }\r\n  set selected(value: Date) {\r\n    this._selected = value;\r\n    this._selectedMonth = this._getMonthInCurrentYear(this.selected);\r\n  }\r\n  private _selected: Date;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input() dateFilter: (date: Date) => boolean;\r\n\r\n  /** Emits when a new month is selected. */\r\n  @Output() selectedChange = new EventEmitter<Date>();\r\n\r\n  /** Grid of calendar cells representing the months of the year. */\r\n  _months: Md2CalendarCell[][];\r\n\r\n  /** The label for this year (e.g. \"2017\"). */\r\n  _yearLabel: string;\r\n\r\n  /** The month in this year that today falls on. Null if today is in a different year. */\r\n  _todayMonth: number;\r\n\r\n  /**\r\n   * The month in this year that the selected Date falls on.\r\n   * Null if the selected Date is in a different year.\r\n   */\r\n  _selectedMonth: number;\r\n\r\n  _calendarState: string;\r\n\r\n  constructor(private _locale: DateLocale, public _util: DateUtil,\r\n    @Optional() @Inject(MD_DATE_FORMATS) private _dateFormats: MdDateFormats) {\r\n    if (!this._dateFormats) {\r\n      throw Error('MD_DATE_FORMATS');\r\n    }\r\n\r\n    this._activeDate = this._util.today();\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._init();\r\n  }\r\n\r\n  /** Handles when a new month is selected. */\r\n  _monthSelected(month: number) {\r\n    this.selectedChange.emit(this._util.createDate(\r\n      this._util.getYear(this.activeDate), month,\r\n      this._util.getDate(this.activeDate),\r\n      this._util.getHours(this.activeDate),\r\n      this._util.getMinutes(this.activeDate),\r\n      this._util.getSeconds(this.activeDate)));\r\n  }\r\n\r\n  /** Initializes this month view. */\r\n  private _init() {\r\n    this._selectedMonth = this._getMonthInCurrentYear(this.selected);\r\n    this._todayMonth = this._getMonthInCurrentYear(this._util.today());\r\n    this._yearLabel = this._locale.getYearName(this.activeDate);\r\n\r\n    let monthNames = this._locale.getMonthNames('short');\r\n    // First row of months only contains 5 elements so we can fit the year label on the same row.\r\n    this._months = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11]].map(row => row.map(\r\n      month => this._createCellForMonth(month, monthNames[month])));\r\n  }\r\n\r\n  /**\r\n   * Gets the month in this year that the given Date falls on.\r\n   * Returns null if the given Date is in another year.\r\n   */\r\n  private _getMonthInCurrentYear(date: Date) {\r\n    return this._util.isSameYear(date, this.activeDate) ?\r\n      this._util.getMonth(date) : null;\r\n  }\r\n\r\n  /** Creates an MdCalendarCell for the given month. */\r\n  private _createCellForMonth(month: number, monthName: string) {\r\n    let ariaLabel = this._locale.format(\r\n      this._util.createDate(this._util.getYear(this.activeDate), month, 1,\r\n        this._util.getHours(this.activeDate),\r\n        this._util.getMinutes(this.activeDate),\r\n        this._util.getSeconds(this.activeDate)),\r\n      this._dateFormats.display.monthYearA11yLabel);\r\n    return new Md2CalendarCell(\r\n      month, monthName.toLocaleUpperCase(), ariaLabel, this._isMonthEnabled(month));\r\n  }\r\n\r\n  /** Whether the given month is enabled. */\r\n  private _isMonthEnabled(month: number) {\r\n    if (!this.dateFilter) {\r\n      return true;\r\n    }\r\n\r\n    let firstOfMonth = this._util.createDate(\r\n      this._util.getYear(this.activeDate), month, 1,\r\n      this._util.getHours(this.activeDate),\r\n      this._util.getMinutes(this.activeDate),\r\n      this._util.getSeconds(this.activeDate));\r\n\r\n    // If any date in the month is enabled count the month as enabled.\r\n    for (let date = firstOfMonth; this._util.getMonth(date) == month;\r\n      date = this._util.addCalendarDays(date, 1)) {\r\n      if (this.dateFilter(date)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private calendarState(direction: string): void {\r\n    this._calendarState = direction;\r\n  }\r\n\r\n  _calendarStateDone() {\r\n    this._calendarState = '';\r\n  }\r\n\r\n}\r\n","<table class=\"md2-calendar-table\">\r\n  <thead class=\"md2-calendar-table-header\"></thead>\r\n  <tbody [@slideCalendar]=\"_calendarState\"\r\n         (@slideCalendar.done)=\"_calendarStateDone()\"\r\n         md2-calendar-body\r\n         role=\"grid\"\r\n         allowDisabledSelection=\"true\"\r\n         [label]=\"_yearLabel\"\r\n         [rows]=\"_months\"\r\n         [todayValue]=\"_todayMonth\"\r\n         [selectedValue]=\"_selectedMonth\"\r\n         [labelMinRequiredCells]=\"2\"\r\n         [activeCell]=\"_util.getMonth(activeDate)\"\r\n         (selectedValueChange)=\"_monthSelected($event)\"></tbody>\r\n</table>\r\n","import {\r\n  AfterContentInit,\r\n  // ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  // ViewEncapsulation\r\n} from '@angular/core';\r\nimport { DateUtil } from './date-util';\r\nimport { DateLocale } from './date-locale';\r\n\r\nexport const CLOCK_RADIUS = 50;\r\nexport const CLOCK_INNER_RADIUS = 27.5;\r\nexport const CLOCK_OUTER_RADIUS = 41.25;\r\nexport const CLOCK_TICK_RADIUS = 7.0833;\r\n\r\nexport type ClockView = 'hour' | 'minute';\r\n\r\n/**\r\n * A clock that is used as part of the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-clock',\r\n  templateUrl: 'clock.html',\r\n  styleUrls: ['clock.scss'],\r\n  host: {\r\n    'role': 'clock',\r\n    '(mousedown)': '_handleMousedown($event)',\r\n  },\r\n  // encapsulation: ViewEncapsulation.None,\r\n  // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2Clock implements AfterContentInit {\r\n  /**\r\n   * The date to display in this clock view.\r\n   */\r\n  @Input()\r\n  get activeDate(): Date { return this._activeDate; }\r\n  set activeDate(value: Date) {\r\n    let oldActiveDate = this._activeDate;\r\n    this._activeDate = this._util.clampDate(value, this.min, this.max);\r\n    if (!this._util.isSameMinute(oldActiveDate, this._activeDate)) {\r\n      this._init();\r\n    }\r\n  }\r\n  private _activeDate: Date;\r\n\r\n  /** The currently selected date. */\r\n  @Input()\r\n  get selected(): Date { return this._selected; }\r\n  set selected(value: Date) {\r\n    this._selected = this._util.parse(value);\r\n    if (this._selected) { this.activeDate = this._selected; }\r\n  }\r\n  private _selected: Date;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input()\r\n  get min(): Date { return this._min; }\r\n  set min(date: Date) { this._min = this._util.parse(date); }\r\n  private _min: Date;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input()\r\n  get max(): Date { return this._max; }\r\n  set max(date: Date) { this._max = this._util.parse(date); }\r\n  private _max: Date;\r\n\r\n  /** Whether the clock should be started in hour or minute view. */\r\n  @Input()\r\n  set startView(value: ClockView) {\r\n    this._hourView = value != 'minute';\r\n  }\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input() dateFilter: (date: Date) => boolean;\r\n\r\n  @Input() interval: number = 1;\r\n\r\n  @Input() twelvehour: boolean = false;\r\n\r\n  /** Emits when the currently selected date changes. */\r\n  @Output() selectedChange = new EventEmitter<Date>();\r\n\r\n  @Output() activeDateChange = new EventEmitter<Date>();\r\n\r\n  /** Hours and Minutes representing the clock view. */\r\n  _hours: Array<Object> = [];\r\n  _minutes: Array<Object> = [];\r\n\r\n  /** Whether the clock is in hour view. */\r\n  _hourView: boolean = true;\r\n\r\n  _selectedHour: number;\r\n  _selectedMinute: number;\r\n\r\n  get _hand(): any {\r\n    this._selectedHour = this._util.getHours(this.activeDate);\r\n    this._selectedMinute = this._util.getMinutes(this.activeDate);\r\n    let deg = 0;\r\n    let radius = CLOCK_OUTER_RADIUS;\r\n    if (this._hourView) {\r\n      let outer = this.activeDate.getHours() > 0 && this.activeDate.getHours() < 13;\r\n      radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\r\n      if (this.twelvehour) {\r\n        radius = CLOCK_OUTER_RADIUS;\r\n      }\r\n      deg = Math.round(this.activeDate.getHours() * (360 / (24 / 2)));\r\n    } else {\r\n      deg = Math.round(this.activeDate.getMinutes() * (360 / 60));\r\n    }\r\n    return {\r\n      'transform': `rotate(${deg}deg)`,\r\n      'height': `${radius}%`,\r\n      'margin-top': `${50 - radius}%`\r\n    };\r\n  }\r\n\r\n  private mouseMoveListener: any;\r\n  private mouseUpListener: any;\r\n\r\n  constructor(private _element: ElementRef,\r\n    private _locale: DateLocale, private _util: DateUtil) {\r\n    this.mouseMoveListener = (event: any) => { this._handleMousemove(event); };\r\n    this.mouseUpListener = () => { this._handleMouseup(); };\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.activeDate = this._activeDate || this._util.today();\r\n    this._init();\r\n  }\r\n\r\n  /** Handles mousedown events on the clock body. */\r\n  _handleMousedown(event: any) {\r\n    this.setTime(event);\r\n    document.addEventListener('mousemove', this.mouseMoveListener);\r\n    document.addEventListener('touchmove', this.mouseMoveListener);\r\n    document.addEventListener('mouseup', this.mouseUpListener);\r\n    document.addEventListener('touchend', this.mouseUpListener);\r\n  }\r\n\r\n  _handleMousemove(event: any) {\r\n    event.preventDefault();\r\n    this.setTime(event);\r\n  }\r\n\r\n  _handleMouseup() {\r\n    document.removeEventListener('mousemove', this.mouseMoveListener);\r\n    document.removeEventListener('touchmove', this.mouseMoveListener);\r\n    document.removeEventListener('mouseup', this.mouseUpListener);\r\n    document.removeEventListener('touchend', this.mouseUpListener);\r\n    this.selectedChange.emit(this.activeDate);\r\n  }\r\n\r\n  /** Initializes this clock view. */\r\n  private _init() {\r\n    this._hours.length = 0;\r\n    this._minutes.length = 0;\r\n\r\n    let hourNames = this._locale.getHourNames();\r\n    let minuteNames = this._locale.getMinuteNames();\r\n\r\n    if (this.twelvehour) {\r\n      for (let i = 1; i < (hourNames.length / 2) + 1; i++) {\r\n        let radian = i / 6 * Math.PI;\r\n        let radius = CLOCK_OUTER_RADIUS;\r\n        let date = new Date(this.activeDate.getTime());\r\n        date.setHours(i + 1, 0, 0, 0);\r\n        let enabled = this._util.isFullDateWithinRange(date, this.min, this.max);\r\n        this._hours.push({\r\n          value: i,\r\n          displayValue: i === 0 ? '00' : hourNames[i],\r\n          enabled: enabled,\r\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\r\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\r\n        });\r\n      }\r\n    } else {\r\n      for (let i = 0; i < hourNames.length; i++) {\r\n        let radian = i / 6 * Math.PI;\r\n        let outer = i > 0 && i < 13,\r\n          radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\r\n        let date = new Date(this.activeDate.getTime());\r\n        date.setHours(i + 1, 0, 0, 0);\r\n        let enabled = this._util.isFullDateWithinRange(date, this.min, this.max);\r\n        this._hours.push({\r\n          value: i,\r\n          displayValue: i === 0 ? '00' : hourNames[i],\r\n          enabled: enabled,\r\n          top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\r\n          left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\r\n          fontSize: i > 0 && i < 13 ? '' : '80%'\r\n        });\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < minuteNames.length; i += 5) {\r\n      let radian = i / 30 * Math.PI;\r\n      let date = new Date(this.activeDate.getTime());\r\n      date.setMinutes(i, 0, 0);\r\n      let enabled = this._util.isFullDateWithinRange(date, this.min, this.max);\r\n      this._minutes.push({\r\n        value: i,\r\n        displayValue: i === 0 ? '00' : minuteNames[i],\r\n        enabled: enabled,\r\n        top: CLOCK_RADIUS - Math.cos(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\r\n        left: CLOCK_RADIUS + Math.sin(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set Time\r\n   * @param event\r\n   */\r\n  private setTime(event: any) {\r\n    let trigger = this._element.nativeElement;\r\n    let triggerRect = trigger.getBoundingClientRect();\r\n    let width = trigger.offsetWidth;\r\n    let height = trigger.offsetHeight;\r\n    let pageX = event.pageX !== undefined ? event.pageX : event.touches[0].pageX;\r\n    let pageY = event.pageY !== undefined ? event.pageY : event.touches[0].pageY;\r\n    let x = (width / 2) - (pageX - triggerRect.left - window.pageXOffset);\r\n    let y = (height / 2) - (pageY - triggerRect.top - window.pageYOffset);\r\n    let radian = Math.atan2(-x, y);\r\n    let unit = Math.PI / (this._hourView ? 6 : (this.interval ? (30 / this.interval) : 30));\r\n    let z = Math.sqrt(x * x + y * y);\r\n    let outer = this._hourView && z > ((width * (CLOCK_OUTER_RADIUS / 100)) +\r\n      (width * (CLOCK_INNER_RADIUS / 100))) / 2;\r\n    let value = 0;\r\n\r\n    if (radian < 0) { radian = Math.PI * 2 + radian; }\r\n    value = Math.round(radian / unit);\r\n    radian = value * unit;\r\n\r\n    let date = new Date(this.activeDate.getTime());\r\n    if (this._hourView) {\r\n      if (this.twelvehour) {\r\n        value = value === 0 ? 12 : value;\r\n      } else {\r\n        if (value === 12) { value = 0; }\r\n        value = outer ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\r\n      }\r\n      date.setHours(value);\r\n    } else {\r\n      if (this.interval) { value *= this.interval; }\r\n      if (value === 60) { value = 0; }\r\n      date.setMinutes(value);\r\n    }\r\n    this.activeDate = this._util.clampDate(date, this.min, this.max);\r\n    this.activeDateChange.emit(this.activeDate);\r\n  }\r\n\r\n}\r\n","<div class=\"md2-clock\">\r\n  <div class=\"md2-clock-center\"></div>\r\n  <div class=\"md2-clock-hand\" [ngStyle]=\"_hand\"></div>\r\n  <div class=\"md2-clock-hours\" [class.active]=\"_hourView\">\r\n    <div *ngFor=\"let item of _hours\"\r\n         class=\"md2-clock-cell\"\r\n         [class.md2-clock-cell-selected]=\"_selectedHour == item.value\"\r\n         [class.md2-clock-cell-disabled]=\"!item.enabled\"\r\n         [style.top]=\"item.top+'%'\"\r\n         [style.left]=\"item.left+'%'\"\r\n         [style.fontSize]=\"item.fontSize\">{{ item.displayValue }}</div>\r\n  </div>\r\n  <div class=\"md2-clock-minutes\" [class.active]=\"!_hourView\">\r\n    <div *ngFor=\"let item of _minutes\"\r\n         class=\"md2-clock-cell\"\r\n         [class.md2-clock-cell-selected]=\"_selectedMinute == item.value\"\r\n         [class.md2-clock-cell-disabled]=\"!item.enabled\"\r\n         [style.top]=\"item.top+'%'\"\r\n         [style.left]=\"item.left+'%'\">{{ item.displayValue }}</div>\r\n  </div>\r\n</div>","import {\r\n  AfterContentInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  NgZone,\r\n  Optional,\r\n  Output,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n  DOWN_ARROW,\r\n  END,\r\n  ENTER,\r\n  HOME,\r\n  LEFT_ARROW,\r\n  PAGE_DOWN,\r\n  PAGE_UP,\r\n  RIGHT_ARROW,\r\n  UP_ARROW\r\n} from '../core/keyboard/keycodes';\r\nimport { DateLocale } from './date-locale';\r\nimport { DateUtil } from './date-util';\r\nimport { slideCalendar } from './datepicker-animations';\r\nimport { MATERIAL_COMPATIBILITY_MODE } from '../core';\r\n\r\n\r\n/**\r\n * A calendar that is used as part of the datepicker.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-calendar',\r\n  templateUrl: 'calendar.html',\r\n  styleUrls: ['calendar.scss'],\r\n  host: {\r\n    '[class.md2-calendar]': 'true',\r\n    'tabindex': '0',\r\n    '(keydown)': '_handleCalendarBodyKeydown($event)',\r\n  },\r\n  animations: [slideCalendar],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2Calendar implements AfterContentInit {\r\n\r\n  /** Whether the Week-number should be displayed */\r\n  @Input() displayWeek: boolean;\r\n\r\n  @Input() type: 'date' | 'time' | 'month' | 'datetime' = 'date';\r\n\r\n  /** A date representing the period (month or year) to start the calendar in. */\r\n  @Input() startAt: Date;\r\n\r\n  /** Whether the calendar should be started in month or year view. */\r\n  @Input() startView: 'clock' | 'month' | 'year' = 'month';\r\n\r\n  /** The currently selected date. */\r\n  @Input() selected: Date;\r\n\r\n  /** The minimum selectable date. */\r\n  @Input() minDate: Date;\r\n\r\n  /** The maximum selectable date. */\r\n  @Input() maxDate: Date;\r\n\r\n  @Input() timeInterval: number = 1;\r\n\r\n  /** A function used to filter which dates are selectable. */\r\n  @Input() dateFilter: (date: Date) => boolean;\r\n\r\n  /** Emits when the currently selected date changes. */\r\n  @Output() selectedChange = new EventEmitter<Date>();\r\n\r\n  /** Date filter for the month and year views. */\r\n  _dateFilterForViews = (date: Date) => {\r\n    return !!date &&\r\n      (!this.dateFilter || this.dateFilter(date)) &&\r\n      (!this.minDate || this._util.compareDate(date, this.minDate) >= 0) &&\r\n      (!this.maxDate || this._util.compareDate(date, this.maxDate) <= 0);\r\n  }\r\n\r\n  /**\r\n   * The current active date. This determines which time period is shown and which date is\r\n   * highlighted when using keyboard navigation.\r\n   */\r\n  get _activeDate(): Date { return this._clampedActiveDate; }\r\n  set _activeDate(value: Date) {\r\n    let oldActiveDate = this._clampedActiveDate;\r\n    this._clampedActiveDate = this._util.clampDate(value, this.minDate, this.maxDate);\r\n    if (oldActiveDate && this._clampedActiveDate && this._currentView === 'month' &&\r\n      !this._util.isSameMonthAndYear(oldActiveDate, this._clampedActiveDate)) {\r\n      if (this._util.isInNextMonth(oldActiveDate, this._clampedActiveDate)) {\r\n        this.calendarState('right');\r\n      } else {\r\n        this.calendarState('left');\r\n      }\r\n    }\r\n  }\r\n  private _clampedActiveDate: Date;\r\n\r\n  /** Whether the calendar is in month view. */\r\n  _currentView: 'clock' | 'month' | 'year' = 'month';\r\n  _clockView: 'hour' | 'minute' = 'hour';\r\n\r\n  /** The label for the current calendar view. */\r\n  get _yearLabel(): string {\r\n    return this._locale.getYearName(this._activeDate);\r\n  }\r\n\r\n  get _monthYearLabel(): string {\r\n    return this._currentView === 'month' ? this._locale.getMonthLabel(this._activeDate) :\r\n      this._locale.getYearName(this._activeDate);\r\n  }\r\n\r\n  get _dateLabel(): string {\r\n    return this._locale.getDateLabel(this._activeDate);\r\n  }\r\n\r\n  get _hoursLabel(): string {\r\n    return ('0' + this._locale.getHoursLabel(this._activeDate)).slice(-2);\r\n  }\r\n\r\n  get _minutesLabel(): string {\r\n    return ('0' + this._locale.getMinutesLabel(this._activeDate)).slice(-2);\r\n  }\r\n\r\n  _calendarState: string;\r\n\r\n  constructor(private _elementRef: ElementRef, private _ngZone: NgZone,\r\n    private _locale: DateLocale, private _util: DateUtil) {\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this._activeDate = this.startAt || this._util.today();\r\n    this._elementRef.nativeElement.focus();\r\n    if (this.type === 'month') {\r\n      this._currentView = 'year';\r\n    } else if (this.type === 'time') {\r\n      this._currentView = 'clock';\r\n    } else {\r\n      this._currentView = this.startView || 'month';\r\n    }\r\n  }\r\n\r\n  /** Handles date selection in the month view. */\r\n  _dateSelected(date: Date): void {\r\n    if (this.type == 'date') {\r\n      if (!this._util.sameDate(date, this.selected)) {\r\n        this.selectedChange.emit(date);\r\n      }\r\n    } else {\r\n      this._activeDate = date;\r\n      this._currentView = 'clock';\r\n    }\r\n  }\r\n\r\n  /** Handles month selection in the year view. */\r\n  _monthSelected(month: Date): void {\r\n    if (this.type == 'month') {\r\n      if (!this._util.isSameMonthAndYear(month, this.selected)) {\r\n        this.selectedChange.emit(this._util.getFirstDateOfMonth(month));\r\n      }\r\n    } else {\r\n      this._activeDate = month;\r\n      this._currentView = 'month';\r\n      this._clockView = 'hour';\r\n    }\r\n  }\r\n\r\n  _timeSelected(date: Date): void {\r\n    if (this._clockView !== 'minute') {\r\n      this._activeDate = date;\r\n      this._clockView = 'minute';\r\n    } else {\r\n      if (!this._util.sameDateAndTime(date, this.selected)) {\r\n        this.selectedChange.emit(date);\r\n      }\r\n    }\r\n  }\r\n\r\n  _onActiveDateChange(date: Date) {\r\n    this._activeDate = date;\r\n  }\r\n\r\n  _yearClicked(): void {\r\n    this._currentView = 'year';\r\n  }\r\n  _dateClicked(): void {\r\n    this._currentView = 'month';\r\n  }\r\n\r\n  _hoursClicked(): void {\r\n    this._currentView = 'clock';\r\n    this._clockView = 'hour';\r\n  }\r\n  _minutesClicked(): void {\r\n    this._currentView = 'clock';\r\n    this._clockView = 'minute';\r\n  }\r\n\r\n  /** Handles user clicks on the previous button. */\r\n  _previousClicked(): void {\r\n    this._activeDate = this._currentView === 'month' ?\r\n      this._util.addCalendarMonths(this._activeDate, -1) :\r\n      this._util.addCalendarYears(this._activeDate, -1);\r\n  }\r\n\r\n  /** Handles user clicks on the next button. */\r\n  _nextClicked(): void {\r\n    this._activeDate = this._currentView === 'month' ?\r\n      this._util.addCalendarMonths(this._activeDate, 1) :\r\n      this._util.addCalendarYears(this._activeDate, 1);\r\n  }\r\n\r\n  /** Whether the previous period button is enabled. */\r\n  _previousEnabled(): boolean {\r\n    if (!this.minDate) {\r\n      return true;\r\n    }\r\n    return !this.minDate || !this._isSameView(this._activeDate, this.minDate);\r\n  }\r\n\r\n  /** Whether the next period button is enabled. */\r\n  _nextEnabled(): boolean {\r\n    return !this.maxDate || !this._isSameView(this._activeDate, this.maxDate);\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body. */\r\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n    // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\r\n    // disabled ones from being selected. This may not be ideal, we should look into whether\r\n    // navigation should skip over disabled dates, and if so, how to implement that efficiently.\r\n    if (this._currentView === 'month') {\r\n      this._handleCalendarBodyKeydownInMonthView(event);\r\n    } else if (this._currentView === 'year') {\r\n      this._handleCalendarBodyKeydownInYearView(event);\r\n    } else {\r\n      this._handleCalendarBodyKeydownInClockView(event);\r\n    }\r\n  }\r\n\r\n  /** Whether the two dates represent the same view in the current view mode (month or year). */\r\n  private _isSameView(date1: Date, date2: Date): boolean {\r\n    return this._currentView === 'month' ?\r\n      this._util.getYear(date1) == this._util.getYear(date2) &&\r\n      this._util.getMonth(date1) == this._util.getMonth(date2) :\r\n      this._util.getYear(date1) == this._util.getYear(date2);\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in month view. */\r\n  private _handleCalendarBodyKeydownInMonthView(event: KeyboardEvent): void {\r\n    switch (event.keyCode) {\r\n      case LEFT_ARROW:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate, -1);\r\n        break;\r\n      case RIGHT_ARROW:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate, 1);\r\n        break;\r\n      case UP_ARROW:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate, -7);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate, 7);\r\n        break;\r\n      case HOME:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate,\r\n          1 - this._util.getDate(this._activeDate));\r\n        break;\r\n      case END:\r\n        this._activeDate = this._util.addCalendarDays(this._activeDate,\r\n          (this._util.getNumDaysInMonth(this._activeDate) -\r\n            this._util.getDate(this._activeDate)));\r\n        break;\r\n      case PAGE_UP:\r\n        this._activeDate = event.altKey ?\r\n          this._util.addCalendarYears(this._activeDate, -1) :\r\n          this._util.addCalendarMonths(this._activeDate, -1);\r\n        break;\r\n      case PAGE_DOWN:\r\n        this._activeDate = event.altKey ?\r\n          this._util.addCalendarYears(this._activeDate, 1) :\r\n          this._util.addCalendarMonths(this._activeDate, 1);\r\n        break;\r\n      case ENTER:\r\n        if (this._dateFilterForViews(this._activeDate)) {\r\n          this._dateSelected(this._activeDate);\r\n          // Prevent unexpected default actions such as form submission.\r\n          event.preventDefault();\r\n        }\r\n        return;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in year view. */\r\n  private _handleCalendarBodyKeydownInYearView(event: KeyboardEvent): void {\r\n    switch (event.keyCode) {\r\n      case LEFT_ARROW:\r\n        this._activeDate = this._util.addCalendarMonths(this._activeDate, -1);\r\n        break;\r\n      case RIGHT_ARROW:\r\n        this._activeDate = this._util.addCalendarMonths(this._activeDate, 1);\r\n        break;\r\n      case UP_ARROW:\r\n        this._activeDate = this._prevMonthInSameCol(this._activeDate);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this._activeDate = this._nextMonthInSameCol(this._activeDate);\r\n        break;\r\n      case HOME:\r\n        this._activeDate = this._util.addCalendarMonths(this._activeDate,\r\n          -this._util.getMonth(this._activeDate));\r\n        break;\r\n      case END:\r\n        this._activeDate = this._util.addCalendarMonths(this._activeDate,\r\n          11 - this._util.getMonth(this._activeDate));\r\n        break;\r\n      case PAGE_UP:\r\n        this._activeDate =\r\n          this._util.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\r\n        break;\r\n      case PAGE_DOWN:\r\n        this._activeDate =\r\n          this._util.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\r\n        break;\r\n      case ENTER:\r\n        this._monthSelected(this._activeDate);\r\n        break;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  /** Handles keydown events on the calendar body when calendar is in month view. */\r\n  private _handleCalendarBodyKeydownInClockView(event: KeyboardEvent): void {\r\n    switch (event.keyCode) {\r\n      case UP_ARROW:\r\n        this._activeDate = this._clockView == 'hour' ?\r\n          this._util.addCalendarHours(this._activeDate, 1) :\r\n          this._util.addCalendarMinutes(this._activeDate, 1);\r\n        break;\r\n      case DOWN_ARROW:\r\n        this._activeDate = this._clockView == 'hour' ?\r\n          this._util.addCalendarHours(this._activeDate, -1) :\r\n          this._util.addCalendarMinutes(this._activeDate, -1);\r\n        break;\r\n      case ENTER:\r\n        this._timeSelected(this._activeDate);\r\n        return;\r\n      default:\r\n        // Don't prevent default or focus active cell on keys that we don't explicitly handle.\r\n        return;\r\n    }\r\n\r\n    // Prevent unexpected default actions such as form submission.\r\n    event.preventDefault();\r\n  }\r\n\r\n  /**\r\n   * Determine the date for the month that comes before the given month in the same column in the\r\n   * calendar table.\r\n   */\r\n  private _prevMonthInSameCol(date: Date): Date {\r\n    // Determine how many months to jump forward given that there are 2 empty slots at the beginning\r\n    // of each year.\r\n    let increment = this._util.getMonth(date) <= 4 ? -5 :\r\n      (this._util.getMonth(date) >= 7 ? -7 : -12);\r\n    return this._util.addCalendarMonths(date, increment);\r\n  }\r\n\r\n  /**\r\n   * Determine the date for the month that comes after the given month in the same column in the\r\n   * calendar table.\r\n   */\r\n  private _nextMonthInSameCol(date: Date): Date {\r\n    // Determine how many months to jump forward given that there are 2 empty slots at the beginning\r\n    // of each year.\r\n    let increment = this._util.getMonth(date) <= 4 ? 7 :\r\n      (this._util.getMonth(date) >= 7 ? 5 : 12);\r\n    return this._util.addCalendarMonths(date, increment);\r\n  }\r\n\r\n  private calendarState(direction: string): void {\r\n    this._calendarState = direction;\r\n  }\r\n\r\n  _calendarStateDone() {\r\n    this._calendarState = '';\r\n  }\r\n\r\n}\r\n","<div class=\"md2-calendar-header\">\r\n  <div *ngIf=\"type!=='time'\"\r\n       class=\"md2-calendar-header-year\"\r\n       [class.active]=\"_currentView == 'year'\"\r\n       (click)=\"_yearClicked()\">{{ _yearLabel }}</div>\r\n  <div class=\"md2-calendar-header-date-time\">\r\n    <span *ngIf=\"type!=='time'\"\r\n          class=\"md2-calendar-header-date\"\r\n          [class.active]=\"_currentView == 'month'\"\r\n          (click)=\"_dateClicked()\">{{ _dateLabel }}</span>\r\n    <span *ngIf=\"type!=='date'\"\r\n          class=\"md2-calendar-header-time\"\r\n          [class.active]=\"_currentView == 'clock'\">\r\n      <span class=\"md2-calendar-header-hours\"\r\n            [class.active]=\"_clockView == 'hour'\"\r\n            (click)=\"_hoursClicked()\">{{ _hoursLabel }}</span>:<span class=\"md2-calendar-header-minutes\"\r\n                                                                     [class.active]=\"_clockView == 'minute'\"\r\n                                                                     (click)=\"_minutesClicked()\">{{ _minutesLabel }}</span>\r\n    </span>\r\n  </div>\r\n</div>\r\n<div class=\"md2-calendar-content\" [ngSwitch]=\"_currentView\">\r\n  <div class=\"md2-month-content\" *ngIf=\"_currentView === 'month' || _currentView === 'year'\">\r\n    <div class=\"md2-calendar-controls\">\r\n      <div class=\"md2-calendar-previous-button\"\r\n           [class.disabled]=\"!_previousEnabled()\" (click)=\"_previousClicked()\"\r\n           aria-label=\"Previous month\">\r\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n          <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n        </svg>\r\n      </div>\r\n      <div class=\"md2-calendar-period-button\" [@slideCalendar]=\"_calendarState\" (@slideCalendar.done)=\"_calendarStateDone()\">\r\n        <strong>{{ _monthYearLabel }}</strong>\r\n      </div>\r\n      <div class=\"md2-calendar-next-button\"\r\n           [class.disabled]=\"!_nextEnabled()\" (click)=\"_nextClicked()\"\r\n           aria-label=\"Next month\">\r\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n          <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n        </svg>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <md2-month-view *ngSwitchCase=\"'month'\"\r\n                  [activeDate]=\"_activeDate\"\r\n                  [selected]=\"selected\"\r\n                  [displayWeek]=\"displayWeek\"\r\n                  [dateFilter]=\"_dateFilterForViews\"\r\n                  (selectedChange)=\"_dateSelected($event)\">\r\n  </md2-month-view>\r\n  <md2-year-view *ngSwitchCase=\"'year'\"\r\n                 [activeDate]=\"_activeDate\"\r\n                 [selected]=\"selected\"\r\n                 [dateFilter]=\"_dateFilterForViews\"\r\n                 (selectedChange)=\"_monthSelected($event)\">\r\n  </md2-year-view>\r\n  <md2-clock *ngSwitchDefault\r\n             [startView]=\"_clockView\"\r\n             [interval]=\"timeInterval\"\r\n             [min]=\"minDate\"\r\n             [max]=\"maxDate\"\r\n             [selected]=\"_activeDate\"\r\n             (activeDateChange)=\"_onActiveDateChange($event)\"\r\n             (selectedChange)=\"_timeSelected($event)\"></md2-clock>\r\n</div>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ComponentRef,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Input,\r\n  OnDestroy,\r\n  Optional,\r\n  Output,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n  NgZone,\r\n  Self,\r\n} from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NG_VALIDATORS,\r\n  NG_VALUE_ACCESSOR,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { coerceBooleanProperty } from '../core/coercion/boolean-property';\r\nimport { Overlay } from '../core/overlay/overlay';\r\nimport { OverlayRef } from '../core/overlay/overlay-ref';\r\nimport { ComponentPortal } from '../core/portal/portal';\r\nimport { OverlayState } from '../core/overlay/overlay-state';\r\nimport { Dir } from '../core/rtl/dir';\r\nimport { PositionStrategy } from '../core/overlay/position/position-strategy';\r\nimport { Subscription } from 'rxjs';\r\nimport { ESCAPE } from '../core/keyboard/keycodes';\r\nimport { Md2Calendar } from './calendar';\r\nimport { DateLocale } from './date-locale';\r\nimport { DateUtil } from './date-util';\r\nimport { first } from 'rxjs/operators';\r\n\r\n/** Change event object emitted by Md2Select. */\r\nexport class Md2DateChange {\r\n  constructor(public source: Md2Datepicker, public value: Date) { }\r\n}\r\n\r\n/** Used to generate a unique ID for each datepicker instance. */\r\nlet datepickerUid = 0;\r\n\r\n\r\n/**\r\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\r\n * Md2Calendar directly as the content so we can control the initial focus. This also gives us a\r\n * place to put additional features of the popup that are not part of the calendar itself in the\r\n * future. (e.g. confirmation buttons).\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-datepicker-content',\r\n  templateUrl: 'datepicker-content.html',\r\n  styleUrls: ['datepicker-content.scss'],\r\n  host: {\r\n    'class': 'md2-datepicker-content',\r\n    '[class.md2-datepicker-content-touch]': 'datepicker?.touchUi',\r\n    '(keydown)': '_handleKeydown($event)',\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2DatepickerContent {\r\n  datepicker: Md2Datepicker;\r\n\r\n  @ViewChild(Md2Calendar) _calendar: Md2Calendar;\r\n\r\n  /**\r\n   * Handles keydown event on datepicker content.\r\n   * @param event The event.\r\n   */\r\n  _handleKeydown(event: KeyboardEvent): void {\r\n    switch (event.keyCode) {\r\n      case ESCAPE:\r\n        this.datepicker.close();\r\n        break;\r\n      default:\r\n        /* Return so that we don't preventDefault on keys that are not explicitly handled. */\r\n        return;\r\n    }\r\n\r\n    event.preventDefault();\r\n  }\r\n}\r\n\r\n\r\nexport const MD2_DATEPICKER_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => Md2Datepicker),\r\n  multi: true\r\n};\r\n\r\nexport const MD2_DATEPICKER_VALIDATORS: any = {\r\n  provide: NG_VALIDATORS,\r\n  useExisting: forwardRef(() => Md2Datepicker),\r\n  multi: true\r\n};\r\n\r\n/* Component responsible for managing the datepicker popup/dialog. */\r\n@Component({\r\n  \r\n  selector: 'md2-datepicker',\r\n  templateUrl: 'datepicker.html',\r\n  styleUrls: ['datepicker.scss'],\r\n  providers: [MD2_DATEPICKER_VALUE_ACCESSOR, MD2_DATEPICKER_VALIDATORS],\r\n  host: {\r\n    'role': 'datepicker',\r\n    '[class.md2-datepicker-disabled]': 'disabled',\r\n    '[class.md2-datepicker-opened]': 'opened',\r\n    '[attr.aria-label]': 'placeholder',\r\n    '[attr.aria-required]': 'required.toString()',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class Md2Datepicker implements OnDestroy, ControlValueAccessor {\r\n\r\n  _onChange: (value: any) => void = () => { };\r\n  _onTouched = () => { };\r\n  _validatorOnChange = () => { };\r\n\r\n  _inputFocused: boolean = false;\r\n\r\n  /** The date to open the calendar to initially. */\r\n  @Input() startAt: Date;\r\n\r\n  /** The view that the calendar should start in. */\r\n  @Input() startView: 'clock' | 'month' | 'year' = 'month';\r\n\r\n  /**\r\n   * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\r\n   * than a popup and elements have more padding to allow for bigger touch targets.\r\n   */\r\n  @Input() touchUi = false;\r\n\r\n  /** Whether the Week-number should be displayed */\r\n  @Input() displayWeek: boolean;\r\n\r\n  @Input() tabindex: number = 0;\r\n  @Input() mode: 'auto' | 'portrait' | 'landscape' = 'auto';\r\n  @Input() placeholder: string;\r\n  @Input() timeInterval: number = 1;\r\n  @Input() id: string;\r\n\r\n  @Input()\r\n  get type() { return this._type; }\r\n  set type(value: 'date' | 'time' | 'month' | 'datetime') {\r\n    this._type = value || 'date';\r\n    this._inputValue = this._formatDate(this._value);\r\n  }\r\n  private _type: 'date' | 'time' | 'month' | 'datetime' = 'date';\r\n\r\n  @Input()\r\n  get format() {\r\n    return this._format || (this.type === 'month' ? 'MMMM y' : this.type === 'date' ?\r\n      'dd/MM/y' : this.type === 'time' ? 'HH:mm' : this.type === 'datetime' ?\r\n        'dd/MM/y HH:mm' : 'dd/MM/y');\r\n  }\r\n  set format(value: string) {\r\n    if (this._format !== value) {\r\n      this._format = value;\r\n      this._inputValue = this._formatDate(this._value);\r\n    }\r\n  }\r\n  private _format: string;\r\n\r\n  /** The minimum valid date. */\r\n  @Input()\r\n  get min(): Date { return this._minDate; }\r\n  set min(value: Date) {\r\n    this._minDate = value;\r\n    this._validatorOnChange();\r\n  }\r\n  _minDate: Date;\r\n\r\n  /** The maximum valid date. */\r\n  @Input()\r\n  get max(): Date { return this._maxDate; }\r\n  set max(value: Date) {\r\n    this._maxDate = value;\r\n    this._validatorOnChange();\r\n  }\r\n  _maxDate: Date;\r\n\r\n  @Input() set dateFilter(filter: (date: Date | null) => boolean) {\r\n    this._dateFilter = filter;\r\n    this._validatorOnChange();\r\n  }\r\n  _dateFilter: (date: Date | null) => boolean;\r\n\r\n  @Input()\r\n  get required(): boolean { return this._required; }\r\n  set required(value) { this._required = coerceBooleanProperty(value); }\r\n  private _required: boolean = false;\r\n\r\n  @Input()\r\n  get disabled(): boolean { return this._disabled; }\r\n  set disabled(value) { this._disabled = coerceBooleanProperty(value); }\r\n  private _disabled: boolean = false;\r\n\r\n  @Input()\r\n  get value() { return this._value; }\r\n  set value(value: Date) {\r\n    this._value = this.coerceDateProperty(value);\r\n    this._selected = this._value;\r\n    this.startAt = this._value;\r\n    setTimeout(() => {\r\n      this._inputValue = this._formatDate(this._value);\r\n    });\r\n  }\r\n  private _value: Date;\r\n\r\n  _inputValue: string = '';\r\n\r\n  @Input()\r\n  get openOnFocus(): boolean { return this._openOnFocus; }\r\n  set openOnFocus(value: boolean) { this._openOnFocus = coerceBooleanProperty(value); }\r\n  private _openOnFocus: boolean;\r\n\r\n  @Input()\r\n  set isOpen(value: boolean) {\r\n    if (value && !this.opened) { this.open(); }\r\n  }\r\n\r\n  /** Event emitted when the select has been opened. */\r\n  @Output() onOpen: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the select has been closed. */\r\n  @Output() onClose: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  /** Event emitted when the selected date has been changed by the user. */\r\n  @Output() change: EventEmitter<Md2DateChange> = new EventEmitter<Md2DateChange>();\r\n\r\n  /** Emits new selected date when selected date changes. */\r\n  @Output() selectedChanged = new EventEmitter<Date>();\r\n\r\n  /** Whether the calendar is open. */\r\n  opened = false;\r\n\r\n  /** The currently selected date. */\r\n  _selected: Date = null;\r\n\r\n  /** A reference to the overlay when the calendar is opened as a popup. */\r\n  private _popupRef: OverlayRef;\r\n\r\n  /** A reference to the overlay when the calendar is opened as a dialog. */\r\n  private _dialogRef: OverlayRef;\r\n\r\n  /** A portal containing the calendar for this datepicker. */\r\n  private _calendarPortal: ComponentPortal<Md2DatepickerContent>;\r\n\r\n  private _inputSubscription: Subscription;\r\n\r\n  /** The form control validator for the min date. */\r\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    return (!this.min || !control.value ||\r\n      this._util.compareDate(this.min, control.value) <= 0) ?\r\n      null : { 'md2DatepickerMin': { 'min': this.min, 'actual': control.value } };\r\n  }\r\n\r\n  /** The form control validator for the max date. */\r\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    return (!this.max || !control.value ||\r\n      this._util.compareDate(this.max, control.value) >= 0) ?\r\n      null : { 'md2DatepickerMax': { 'max': this.max, 'actual': control.value } };\r\n  }\r\n\r\n  /** The form control validator for the date filter. */\r\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    return !this._dateFilter || !control.value || this._dateFilter(control.value) ?\r\n      null : { 'md2DatepickerFilter': true };\r\n  }\r\n\r\n  /** The combined form control validator for this input. */\r\n  private _validator: ValidatorFn =\r\n  Validators.compose([this._minValidator, this._maxValidator, this._filterValidator]);\r\n\r\n  constructor(private _element: ElementRef,\r\n    private _overlay: Overlay,\r\n    private _ngZone: NgZone,\r\n    private _viewContainerRef: ViewContainerRef,\r\n    private _locale: DateLocale,\r\n    private _util: DateUtil,\r\n    @Optional() private _dir: Dir) {\r\n    this.id = (this.id) ? this.id : `md2-datepicker-${datepickerUid++}`;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.close();\r\n    if (this._popupRef) {\r\n      this._popupRef.dispose();\r\n    }\r\n    if (this._dialogRef) {\r\n      this._dialogRef.dispose();\r\n    }\r\n    if (this._inputSubscription) {\r\n      this._inputSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  registerOnValidatorChange(fn: () => void): void {\r\n    this._validatorOnChange = fn;\r\n  }\r\n\r\n  validate(c: AbstractControl): ValidationErrors | null {\r\n    return this._validator ? this._validator(c) : null;\r\n  }\r\n\r\n  writeValue(value: any): void {\r\n    this.value = value;\r\n  }\r\n\r\n  registerOnChange(fn: (value: any) => void): void { this._onChange = fn; }\r\n\r\n  registerOnTouched(fn: () => {}): void { this._onTouched = fn; }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  _handleFocus() {\r\n    this._inputFocused = true;\r\n    if (!this.opened && this.openOnFocus) {\r\n      this.open();\r\n    }\r\n  }\r\n\r\n  _handleBlur(event: Event) {\r\n    this._inputFocused = false;\r\n    if (!this.opened) {\r\n      this._onTouched();\r\n    }\r\n    let el: any = event.target;\r\n    let date: Date = this._util.parseDate(el.value, this.format);\r\n    if (!date) {\r\n      date = this._util.parse(el.value);\r\n    }\r\n    if (date != null && date.getTime && !isNaN(date.getTime())) {\r\n\r\n      let d: Date = new Date(this.value);\r\n      if (this.type !== 'time') {\r\n        d.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n      }\r\n      if (this.type !== 'date') {\r\n        d.setHours(date.getHours(), date.getMinutes());\r\n      }\r\n      if (!this._util.isSameMinute(this.value, d)) {\r\n        this.value = this._util.createDate(d.getFullYear(),\r\n          d.getMonth(),\r\n          d.getDate(),\r\n          d.getHours(),\r\n          d.getMinutes(),\r\n          d.getSeconds());\r\n        this._emitChangeEvent();\r\n      }\r\n    } else {\r\n      if (this.value) {\r\n        this.value = null;\r\n        this._emitChangeEvent();\r\n      }\r\n      el.value = null;\r\n    }\r\n  }\r\n\r\n  private coerceDateProperty(value: any): Date {\r\n    let v: Date = null;\r\n    if (value != null && value.getTime && !isNaN(value.getTime())) {\r\n      v = value;\r\n    } else {\r\n      if (value && this.type === 'time') {\r\n        let t = value + '';\r\n        v = new Date();\r\n        v.setHours(parseInt(t.substring(0, 2)));\r\n        v.setMinutes(parseInt(t.substring(3, 5)));\r\n      } else {\r\n        let timestamp = Date.parse(value);\r\n        v = isNaN(timestamp) ? null : new Date(timestamp);\r\n      }\r\n    }\r\n    let d: Date = v ? this._util.createDate(v.getFullYear(),\r\n      v.getMonth(),\r\n      v.getDate(),\r\n      v.getHours(),\r\n      v.getMinutes(),\r\n      v.getSeconds()) : null;\r\n    return d;\r\n  }\r\n\r\n  /**\r\n   * format date\r\n   * @param date Date Object\r\n   * @return string with formatted date\r\n   */\r\n  private _formatDate(date: Date): string {\r\n    if (!this.format || !date) { return ''; }\r\n\r\n    let format = this.format;\r\n\r\n    /* Special Optional Character */\r\n    if (format.indexOf('{') > -1) {\r\n      format = format.replace('{', '');\r\n    }\r\n    if (format.indexOf('}') > -1) {\r\n      format = format.replace('}', '');\r\n    }\r\n\r\n    /* Years */\r\n    if (format.indexOf('yy') > -1) {\r\n      format = format.replace('yy', ('00' + this._util.getYear(date)).slice(-2));\r\n    } else if (format.indexOf('y') > -1) {\r\n      format = format.replace('y', '' + this._util.getYear(date));\r\n    }\r\n\r\n    /* Days */\r\n    if (format.indexOf('dd') > -1) {\r\n      format = format.replace('dd', ('0' + this._util.getDate(date)).slice(-2));\r\n    } else if (format.indexOf('d') > -1) {\r\n      format = format.replace('d', '' + this._util.getDate(date));\r\n    }\r\n\r\n    /* Hours */\r\n    if (/[aA]/.test(format)) {\r\n      /* 12-hour */\r\n      if (format.indexOf('HH') > -1) {\r\n        format = format.replace('HH',\r\n          ('0' + this._getHours12(this._util.getHours(date))).slice(-2));\r\n      } else if (format.indexOf('H') > -1) {\r\n        format = format.replace('H',\r\n          '' + this._getHours12(this._util.getHours(date)));\r\n      }\r\n      format = format.replace('A', ((this._util.getHours(date) < 12) ? 'AM' : 'PM'))\r\n        .replace('a', ((this._util.getHours(date) < 12) ? 'am' : 'pm'));\r\n    } else {\r\n      /* 24-hour */\r\n      if (format.indexOf('HH') > -1) {\r\n        format = format.replace('HH', ('0' + this._util.getHours(date)).slice(-2));\r\n      } else if (format.indexOf('H') > -1) {\r\n        format = format.replace('H', '' + this._util.getHours(date));\r\n      }\r\n    }\r\n\r\n    /* Minutes */\r\n    if (format.indexOf('mm') > -1) {\r\n      format = format.replace('mm', ('0' + this._util.getMinutes(date)).slice(-2));\r\n    } else if (format.indexOf('m') > -1) {\r\n      format = format.replace('m', '' + this._util.getMinutes(date));\r\n    }\r\n\r\n    /* Seconds */\r\n    if (format.indexOf('ss') > -1) {\r\n      format = format.replace('ss', ('0' + this._util.getSeconds(date)).slice(-2));\r\n    } else if (format.indexOf('s') > -1) {\r\n      format = format.replace('s', '' + this._util.getSeconds(date));\r\n    }\r\n\r\n    /* Months */\r\n    if (format.indexOf('MMMM') > -1) {\r\n      format = format.replace('MMMM',\r\n        this._locale.getMonthNames('long')[this._util.getMonth(date)]);\r\n    } else if (format.indexOf('MMM') > -1) {\r\n      format = format.replace('MMM',\r\n        this._locale.getMonthNames('short')[this._util.getMonth(date)]);\r\n    } else if (format.indexOf('MM') > -1) {\r\n      format = format.replace('MM', ('0' + (this._util.getMonth(date) + 1)).slice(-2));\r\n    } else if (format.indexOf('M') > -1) {\r\n      format = format.replace('M', '' + (this._util.getMonth(date) + 1));\r\n    }\r\n\r\n    return format;\r\n  }\r\n\r\n  /**\r\n   * Get an hour of the date in the 12-hour format\r\n   * @param date Date Object\r\n   * @return hour of the date in the 12-hour format\r\n   */\r\n  private _getHours12(hours: number): number {\r\n    if (hours == 0) {\r\n      hours = 12;\r\n    } else if (hours > 12) {\r\n      hours -= 12;\r\n    }\r\n    return hours;\r\n  }\r\n\r\n  /** Selects the given date and closes the currently open popup or dialog. */\r\n  _selectAndClose(date: Date): void {\r\n    let oldValue = this._selected;\r\n    this.value = date;\r\n    if (!this._util.sameDateAndTime(oldValue, this._selected)) {\r\n      this._emitChangeEvent();\r\n    }\r\n    this.close();\r\n  }\r\n\r\n  /** Emits an event when the user selects a date. */\r\n  _emitChangeEvent(): void {\r\n    this._onChange(this.value);\r\n    this.change.emit(new Md2DateChange(this, this.value));\r\n  }\r\n\r\n  /** Open the calendar. */\r\n  open(): void {\r\n    if (this.opened) { return; }\r\n\r\n    if (!this._calendarPortal) {\r\n      this._calendarPortal = new ComponentPortal(Md2DatepickerContent, this._viewContainerRef);\r\n    }\r\n\r\n    this.touchUi ? this._openAsDialog() : this._openAsPopup();\r\n    this.opened = true;\r\n    this.onOpen.emit();\r\n  }\r\n\r\n  /** Close the calendar. */\r\n  close(): void {\r\n    if (!this.opened) {\r\n      return;\r\n    }\r\n    if (this._popupRef && this._popupRef.hasAttached()) {\r\n      this._popupRef.detach();\r\n    }\r\n    if (this._dialogRef && this._dialogRef.hasAttached()) {\r\n      this._dialogRef.detach();\r\n    }\r\n    if (this._calendarPortal && this._calendarPortal.isAttached) {\r\n      this._calendarPortal.detach();\r\n    }\r\n    this.opened = false;\r\n    this.onClose.emit();\r\n  }\r\n\r\n  /** Open the calendar as a dialog. */\r\n  private _openAsDialog(): void {\r\n    if (!this._dialogRef) {\r\n      this._createDialog();\r\n    }\r\n\r\n    if (!this._dialogRef.hasAttached()) {\r\n      let componentRef: ComponentRef<Md2DatepickerContent> =\r\n        this._dialogRef.attach(this._calendarPortal);\r\n      componentRef.instance.datepicker = this;\r\n    }\r\n\r\n    this._dialogRef.backdropClick().subscribe(() => this.close());\r\n  }\r\n\r\n  /** Open the calendar as a popup. */\r\n  private _openAsPopup(): void {\r\n    if (!this._popupRef) {\r\n      this._createPopup();\r\n    }\r\n\r\n    if (!this._popupRef.hasAttached()) {\r\n      let componentRef: ComponentRef<Md2DatepickerContent> =\r\n        this._popupRef.attach(this._calendarPortal);\r\n      componentRef.instance.datepicker = this;\r\n\r\n      /* Update the position once the calendar has rendered. */\r\n      this._ngZone.onStable.pipe(first()).subscribe(() => this._popupRef.updatePosition());\r\n    }\r\n\r\n    this._popupRef.backdropClick().subscribe(() => this.close());\r\n  }\r\n\r\n  /** Create the dialog. */\r\n  private _createDialog(): void {\r\n    const overlayState = new OverlayState();\r\n    overlayState.positionStrategy = this._overlay.position().global()\r\n      .centerHorizontally()\r\n      .centerVertically();\r\n    overlayState.hasBackdrop = true;\r\n    overlayState.backdropClass = 'cdk-overlay-dark-backdrop';\r\n    overlayState.direction = this._dir ? this._dir.value : 'ltr';\r\n    this._dialogRef = this._overlay.create(overlayState);\r\n  }\r\n\r\n  /** Create the popup. */\r\n  private _createPopup(): void {\r\n    const overlayState = new OverlayState();\r\n    overlayState.positionStrategy = this._createPopupPositionStrategy();\r\n    overlayState.hasBackdrop = true;\r\n    overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';\r\n    overlayState.direction = this._dir ? this._dir.value : 'ltr';\r\n    overlayState.scrollStrategy = this._overlay.scrollStrategies.reposition();\r\n\r\n    this._popupRef = this._overlay.create(overlayState);\r\n  }\r\n\r\n  /** Create the popup PositionStrategy. */\r\n  private _createPopupPositionStrategy(): PositionStrategy {\r\n    return this._overlay.position()\r\n      .connectedTo(this._element,\r\n      { originX: 'start', originY: 'bottom' },\r\n      { overlayX: 'start', overlayY: 'top' })\r\n      .withFallbackPosition(\r\n      { originX: 'start', originY: 'top' },\r\n      { overlayX: 'start', overlayY: 'bottom' })\r\n      .withFallbackPosition(\r\n      { originX: 'end', originY: 'bottom' },\r\n      { overlayX: 'end', overlayY: 'top' })\r\n      .withFallbackPosition(\r\n      { originX: 'end', originY: 'top' },\r\n      { overlayX: 'end', overlayY: 'bottom' });\r\n  }\r\n}\r\n","<md2-calendar cdkTrapFocus\r\n              [id]=\"datepicker.id\"\r\n              [attr.mode]=\"datepicker.mode\"\r\n              [startAt]=\"datepicker.startAt\"\r\n              [startView]=\"datepicker.startView\"\r\n              [type]=\"datepicker.type\"\r\n              [timeInterval]=\"datepicker.timeInterval\"\r\n              [minDate]=\"datepicker._minDate\"\r\n              [maxDate]=\"datepicker._maxDate\"\r\n              [dateFilter]=\"datepicker._dateFilter\"\r\n              [selected]=\"datepicker._selected\"\r\n              [displayWeek]=\"datepicker.displayWeek\"\r\n              (selectedChange)=\"datepicker._selectAndClose($event)\">\r\n</md2-calendar>\r\n","<div class=\"md2-datepicker-trigger\">\r\n  <button type=\"button\"\r\n          class=\"md2-datepicker-button\"\r\n          tabindex=\"-1\"\r\n          (click)=\"open()\"\r\n          [ngSwitch]=\"type\">\r\n    <svg *ngSwitchCase=\"'time'\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\"></path>\r\n    </svg>\r\n    <svg *ngSwitchCase=\"'datetime'\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\"></path>\r\n    </svg>\r\n    <svg *ngSwitchDefault width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"></path>\r\n    </svg>\r\n  </button>\r\n  <div class=\"md2-datepicker-input\" [class.md2-datepicker-input-focused]=\"_inputFocused\">\r\n    <span class=\"md2-datepicker-placeholder\" [class.md2-floating-placeholder]=\"value || _inputFocused\">{{ placeholder }}</span>\r\n    <input #input\r\n           type=\"text\"\r\n           class=\"md2-datepicker-value\"\r\n           [tabindex]=\"tabindex\"\r\n           [disabled]=\"disabled\"\r\n           autocomplete=\"off\"\r\n           [value]=\"_inputValue\"\r\n           (change)=\"$event.stopPropagation()\"\r\n           (click)=\"_handleFocus()\"\r\n           (focus)=\"_handleFocus()\"\r\n           (blur)=\"_handleBlur($event)\" />\r\n    <span class=\"md2-datepicker-arrow\" (click)=\"open()\"></span>\r\n  </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { Md2Datepicker } from './datepicker';\r\n\r\n\r\n@Component({\r\n  \r\n  selector: 'button[md2DatepickerToggle]',\r\n  template: '',\r\n  styleUrls: ['datepicker-toggle.scss'],\r\n  host: {\r\n    'type': 'button',\r\n    'class': 'md2-datepicker-toggle',\r\n    'aria-label': 'Open calendar',\r\n    '(click)': '_open($event)',\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Md2DatepickerToggle<D> {\r\n  /** Datepicker instance that the button will toggle. */\r\n  @Input('md2DatepickerToggle') datepicker: Md2Datepicker;\r\n\r\n  _open(event: Event): void {\r\n    if (this.datepicker) {\r\n      this.datepicker.open();\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StyleModule, OverlayModule, PortalModule, A11yModule } from '../core/index';\r\nimport { Md2Datepicker, Md2DatepickerContent } from './datepicker';\r\nimport { Md2DatepickerToggle } from './datepicker-toggle';\r\nimport { Md2Calendar } from './calendar';\r\nimport { Md2MonthView } from './month-view';\r\nimport { Md2YearView } from './year-view';\r\nimport { Md2CalendarBody } from './calendar-body';\r\nimport { Md2Clock } from './clock';\r\nimport { DateLocale } from './date-locale';\r\nimport { DateUtil } from './date-util';\r\n\r\n\r\nexport * from './datepicker';\r\nexport * from './month-view';\r\nexport * from './year-view';\r\nexport * from './calendar-body';\r\nexport * from './clock';\r\nexport * from './date-locale';\r\nexport * from './date-util';\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    OverlayModule,\r\n    PortalModule,\r\n    StyleModule,\r\n    A11yModule,\r\n  ],\r\n  exports: [\r\n    Md2Datepicker,\r\n    Md2DatepickerToggle,\r\n    Md2Calendar,\r\n    Md2CalendarBody,\r\n    Md2Calendar,\r\n    Md2MonthView,\r\n    Md2YearView,\r\n    Md2CalendarBody,\r\n    Md2Clock,\r\n  ],\r\n  declarations: [\r\n    Md2Datepicker,\r\n    Md2DatepickerContent,\r\n    Md2DatepickerToggle,\r\n    Md2Calendar,\r\n    Md2MonthView,\r\n    Md2YearView,\r\n    Md2CalendarBody,\r\n    Md2Clock,\r\n  ],\r\n  providers: [DateLocale, DateUtil],\r\n})\r\nexport class Md2DatepickerModule { }\r\n","/**\r\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\r\n * similar to Object.assign.\r\n *\r\n * @param dest The object which will have properties copied to it.\r\n * @param sources The source objects from which properties will be copied.\r\n */\r\nexport function extendObject(dest: any, ...sources: any[]): any {\r\n  if (dest == null) {\r\n    throw TypeError('Cannot convert undefined or null to object');\r\n  }\r\n\r\n  for (let source of sources) {\r\n    if (source != null) {\r\n      for (let key in source) {\r\n        if (source.hasOwnProperty(key)) {\r\n          dest[key] = source[key];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return dest;\r\n}\r\n","import {\r\n  Component,\r\n  Output,\r\n  Input,\r\n  EventEmitter,\r\n  Optional,\r\n  SkipSelf,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n  OnDestroy,\r\n  Directive,\r\n  ViewContainerRef,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n  style,\r\n  trigger,\r\n  state,\r\n  transition,\r\n  animate,\r\n} from '@angular/animations';\r\nimport {\r\n  ESCAPE,\r\n  Overlay,\r\n  OverlayState,\r\n  OverlayRef,\r\n  TemplatePortalDirective\r\n} from '../core/index';\r\nimport { extendObject } from '../core/util/object-extend';\r\nimport { Subscription } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\n\r\nexport type DialogVisibility = 'initial' | 'visible' | 'hidden';\r\nexport type DialogRole = 'dialog' | 'alertdialog';\r\n\r\nexport class Md2DialogConfig {\r\n  role?: DialogRole = 'dialog';\r\n  disableClose?: boolean = false;\r\n}\r\n\r\n@Directive({ selector: '[md2DialogPortal]' })\r\nexport class Md2DialogPortal extends TemplatePortalDirective {\r\n  constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n    super(templateRef, viewContainerRef);\r\n  }\r\n}\r\n\r\n/**\r\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\r\n */\r\n@Directive({ selector: 'md2-dialog-title' })\r\nexport class Md2DialogTitle { }\r\n\r\n/**\r\n * Scrollable content container of a dialog.\r\n */\r\n@Directive({ selector: 'md2-dialog-content' })\r\nexport class Md2DialogContent { }\r\n\r\n/**\r\n * Container for the bottom action buttons in a dialog.\r\n * Stays fixed to the bottom when scrolling.\r\n */\r\n@Directive({ selector: 'md2-dialog-footer, md2-dialog-actions' })\r\nexport class Md2DialogActions { }\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-dialog',\r\n  templateUrl: 'dialog.html',\r\n  styleUrls: ['dialog.scss'],\r\n  host: {\r\n    'tabindex': '0',\r\n    '[attr.role]': 'config?.role',\r\n  },\r\n  animations: [\r\n    trigger('state', [\r\n      state('void', style({ transform: 'scale(0.3)' })),\r\n      state('initial', style({ transform: 'scale(0.3)' })),\r\n      state('visible', style({ transform: 'scale(1)' })),\r\n      state('hidden', style({ transform: 'scale(0.3)' })),\r\n      transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')),\r\n      transition('* => hidden', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')),\r\n    ])\r\n  ],\r\n  encapsulation: ViewEncapsulation.None,\r\n  exportAs: 'md2Dialog'\r\n})\r\nexport class Md2Dialog implements OnDestroy {\r\n\r\n  private _openDialogsAtThisLevel: Array<any> = [];\r\n  private _boundKeydown = this._handleKeydown.bind(this);\r\n  private _panelOpen = false;\r\n  private _overlayRef: OverlayRef = null;\r\n  private _backdropSubscription: Subscription;\r\n  config: Md2DialogConfig;\r\n\r\n  /** Property watched by the animation framework to show or hide the dialog */\r\n  _visibility: DialogVisibility = 'initial';\r\n\r\n  constructor(private _overlay: Overlay,\r\n    @Optional() @SkipSelf() private _parentDialog: Md2Dialog) { }\r\n\r\n  @Output() onOpen: EventEmitter<Md2Dialog> = new EventEmitter<Md2Dialog>();\r\n  @Output() onClose: EventEmitter<Md2Dialog> = new EventEmitter<Md2Dialog>();\r\n\r\n  /** The portal to send the dialog content through */\r\n  @ViewChild(Md2DialogPortal) _portal: Md2DialogPortal;\r\n\r\n  @Input('title') dialogTitle: string;\r\n\r\n  ngOnDestroy() { this.destroyPanel(); }\r\n\r\n  get _openDialogs(): Array<any> {\r\n    return this._parentDialog ? this._parentDialog._openDialogs : this._openDialogsAtThisLevel;\r\n  }\r\n\r\n  /** Open the dialog */\r\n  open(config?: Md2DialogConfig): Promise<Md2Dialog> {\r\n    this.config = _applyConfigDefaults(config);\r\n    if (this._panelOpen) {\r\n      return Promise.resolve<Md2Dialog>(this);\r\n    }\r\n    this._createOverlay();\r\n    this._overlayRef.attach(this._portal);\r\n    this._subscribeToBackdrop();\r\n\r\n    if (!this._openDialogs.length && !this._parentDialog) {\r\n      document.addEventListener('keydown', this._boundKeydown);\r\n    }\r\n\r\n    this._openDialogs.push(this);\r\n    this._panelOpen = true;\r\n    this._visibility = 'visible';\r\n    return Promise.resolve<Md2Dialog>(this);\r\n  }\r\n\r\n  /** Close the dialog */\r\n  close(): Promise<Md2Dialog> {\r\n    this._visibility = 'hidden';\r\n    this._panelOpen = false;\r\n    if (this._overlayRef) {\r\n      this._overlayRef.detach();\r\n      if (this._backdropSubscription) {\r\n        this._backdropSubscription.unsubscribe();\r\n      }\r\n    }\r\n\r\n    let index = this._openDialogs.indexOf(this);\r\n\r\n    if (index > -1) {\r\n      this._openDialogs.splice(index, 1);\r\n\r\n      // no open dialogs are left, call next on afterAllClosed Subject\r\n      if (!this._openDialogs.length) {\r\n        document.removeEventListener('keydown', this._boundKeydown);\r\n      }\r\n    }\r\n    return Promise.resolve<Md2Dialog>(this);\r\n  }\r\n\r\n  /** Removes the panel from the DOM. */\r\n  destroyPanel(): void {\r\n    if (this._overlayRef) {\r\n      this._overlayRef.dispose();\r\n      this._overlayRef = null;\r\n\r\n      this._cleanUpSubscriptions();\r\n    }\r\n  }\r\n\r\n  _onPanelDone(): void {\r\n    if (this._panelOpen) {\r\n      this.onOpen.emit(this);\r\n    } else {\r\n      this.onClose.emit(this);\r\n    }\r\n  }\r\n\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    let topDialog = this._openDialogs[this._openDialogs.length - 1];\r\n\r\n    if (event.keyCode === ESCAPE && topDialog &&\r\n      !topDialog.config.disableClose) {\r\n      topDialog.close();\r\n    }\r\n  }\r\n\r\n  private _subscribeToBackdrop(): void {\r\n    if (!this.config.disableClose) {\r\n      this._backdropSubscription = this._overlayRef.backdropClick().pipe(first()).subscribe(() =>\r\n        this.close());\r\n    }\r\n  }\r\n\r\n  private _createOverlay(): void {\r\n    if (!this._overlayRef) {\r\n      let config = new OverlayState();\r\n      config.positionStrategy = this._overlay.position()\r\n        .global()\r\n        .centerHorizontally()\r\n        .centerVertically();\r\n      config.hasBackdrop = true;\r\n\r\n      this._overlayRef = this._overlay.create(config);\r\n    }\r\n  }\r\n\r\n  private _cleanUpSubscriptions(): void {\r\n    if (this._backdropSubscription) {\r\n      this._backdropSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n}\r\n\r\n/**\r\n * Applies default options to the dialog config.\r\n * @param dialogConfig Config to be modified.\r\n * @returns The new configuration object.\r\n */\r\nfunction _applyConfigDefaults(dialogConfig: Md2DialogConfig): Md2DialogConfig {\r\n  return extendObject(new Md2DialogConfig(), dialogConfig);\r\n}\r\n","<ng-template md2DialogPortal>\r\n  <div class=\"md2-dialog-panel\" [attr.role]=\"config?.role\">\r\n    <!--[@state]=\"_visibility\" (@state.done)=\"_onPanelDone()\"-->\r\n    <div class=\"md2-dialog-content\">\r\n      <div class=\"md2-dialog-header\">\r\n        <button *ngIf=\"!config.disableClose\" type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"close()\">&times;</button>\r\n        <h2 *ngIf=\"dialogTitle\" class=\"md2-dialog-title\" id=\"myDialogLabel\" [innerHtml]=\"dialogTitle\"></h2>\r\n        <ng-content select=\"md2-dialog-title\"></ng-content>\r\n      </div>\r\n      <div class=\"md2-dialog-body\">\r\n        <ng-content select=\"md2-dialog-content\"></ng-content>\r\n        <ng-content></ng-content>\r\n      </div>\r\n      <ng-content select=\"md2-dialog-footer\"></ng-content>\r\n      <ng-content select=\"md2-dialog-actions\"></ng-content>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OverlayModule, MdCommonModule } from '../core/index';\r\nimport { PlatformModule } from '../core/platform/index';\r\nimport {\r\n  Md2Dialog,\r\n  Md2DialogTitle,\r\n  Md2DialogContent,\r\n  Md2DialogActions,\r\n  Md2DialogPortal\r\n} from './dialog';\r\n\r\n\r\n@NgModule({\r\n  imports: [CommonModule, OverlayModule, MdCommonModule, PlatformModule],\r\n  exports: [\r\n    Md2Dialog,\r\n    Md2DialogTitle,\r\n    Md2DialogContent,\r\n    Md2DialogActions,\r\n    Md2DialogPortal\r\n  ],\r\n  declarations: [\r\n    Md2Dialog,\r\n    Md2DialogTitle,\r\n    Md2DialogContent,\r\n    Md2DialogActions,\r\n    Md2DialogPortal\r\n  ]\r\n})\r\nexport class Md2DialogModule { }\r\n\r\n\r\nexport * from './dialog';\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n  selector: '[md2-menu-content]',\r\n  host: { 'role': 'menu' },\r\n  template: '<ng-content></ng-content>',\r\n  styleUrls: ['menu.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class Md2MenuContent { }\r\n","import {\r\n  Component,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n  selector: '[md2-menu-item]',\r\n  host: {\r\n    'role': 'menuitem'\r\n  },\r\n  template: '<ng-content></ng-content>'\r\n})\r\nexport class Md2MenuItem { }\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Renderer2,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[md2-menu-trigger]',\r\n  host: {\r\n    'aria-haspopup': 'true',\r\n    '(click)': '_toggleMenu()',\r\n  },\r\n  exportAs: 'md2MenuTrigger'\r\n})\r\nexport class Md2MenuTrigger {\r\n\r\n  private _handleClick: any;\r\n\r\n  constructor(private _element: ElementRef, private _renderer: Renderer2) { }\r\n\r\n  ngAfterViewInit() {\r\n    this._handleClick = this._renderer.listen('document', 'click', (event: Event) => {\r\n      if (!this._hasChildMenu(event)) {\r\n        this._closeMenu();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._handleClick = null;\r\n  }\r\n\r\n  _toggleMenu() {\r\n    if (this._hasClass(this._getParentElement(), 'open')) {\r\n      this._closeMenu();\r\n    } else {\r\n      this._openMenu();\r\n    }\r\n  }\r\n\r\n  _openMenu() {\r\n    this._getParentElement().classList.add('open');\r\n    let siblingElements = this._getSiblingElements(this._getParentElement());\r\n    siblingElements.forEach((el: Element) => {\r\n      el.classList.remove('open');\r\n      this._closeChildrenMenu(el);\r\n    });\r\n  }\r\n\r\n  _closeMenu() {\r\n    this._getParentElement().classList.remove('open');\r\n    this._closeChildrenMenu(this._getParentElement());\r\n  }\r\n\r\n  _closeChildrenMenu(element: Element) {\r\n    [].forEach.call(element.querySelectorAll('.open'), (el: Element) => {\r\n      el.classList.remove('open');\r\n    });\r\n  }\r\n\r\n  _getHostElement(): HTMLElement {\r\n    return this._element.nativeElement;\r\n  }\r\n\r\n  _getParentElement(): HTMLElement {\r\n    return this._element.nativeElement.parentNode;\r\n  }\r\n\r\n  _getSiblingElements(element: Element) {\r\n    let siblingElements: Array<Node> = [];\r\n    let el = element.parentNode.firstChild;\r\n    for (; el; el = el.nextSibling) {\r\n      if (el.nodeType == 1 && el !== element) {\r\n        siblingElements.push(el);\r\n      }\r\n    }\r\n    return siblingElements;\r\n  }\r\n\r\n  _getClosestElement(element: Element, target: string): Element {\r\n    if (element.hasAttribute(target)) {\r\n      return element;\r\n    }\r\n\r\n    let parentEl: Element;\r\n    while (element) {\r\n      parentEl = element.parentElement;\r\n      if (parentEl && parentEl.hasAttribute(target)) {\r\n        return parentEl;\r\n      }\r\n      element = parentEl;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  _hasClass(element: Element, className: string) {\r\n    return (' ' + element.className + ' ').indexOf(' ' + className + ' ') > -1;\r\n  }\r\n\r\n  _hasChildMenu(event: any) {\r\n    let el = this._getClosestElement(event.target, 'md2-menu-trigger');\r\n    if (el && el === this._getHostElement()) {\r\n      return true;\r\n    } else if (this._getParentElement().contains(event.target)) {\r\n      el = this._getClosestElement(event.target, 'md2-menu-item');\r\n      if (el && el.querySelectorAll('[md2-menu-content]').length > 0) {\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n}\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  NgModule,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Md2MenuContent } from './menu-content';\r\nimport { Md2MenuItem } from './menu-item';\r\nimport { Md2MenuTrigger } from './menu-trigger';\r\nexport { Md2MenuContent } from './menu-content';\r\nexport { Md2MenuItem } from './menu-item';\r\nexport { Md2MenuTrigger } from './menu-trigger';\r\n\r\n\r\n@Component({\r\n  selector: '[md2-menu]',\r\n  template: '<ng-content></ng-content>',\r\n  styleUrls: ['menu.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class Md2Menu { }\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  exports: [Md2Menu, Md2MenuContent, Md2MenuItem, Md2MenuTrigger],\r\n  declarations: [Md2Menu, Md2MenuContent, Md2MenuItem, Md2MenuTrigger],\r\n})\r\nexport class Md2MenuModule { }\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ContentChildren,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  QueryList,\r\n  TemplateRef,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n  NgModule,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/** Change event object that is emitted when the tab has changed. */\r\nexport class Md2TabChange {\r\n  constructor(public tab: Md2Tab, public index: number) { }\r\n}\r\n\r\n@Directive({ selector: '[md2Transclude]' })\r\nexport class Md2Transclude {\r\n\r\n  private _md2Transclude: TemplateRef<any>;\r\n\r\n  constructor(public viewRef: ViewContainerRef) { }\r\n\r\n  @Input()\r\n  get md2Transclude() { return this._md2Transclude; }\r\n  set md2Transclude(templateRef: TemplateRef<any>) {\r\n    this._md2Transclude = templateRef;\r\n    if (templateRef) {\r\n      this.viewRef.createEmbeddedView(templateRef);\r\n    }\r\n  }\r\n\r\n}\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-tab',\r\n  template: `<ng-content></ng-content>`,\r\n  host: {\r\n    '[class]': 'class',\r\n    '[class.active]': 'active'\r\n  }\r\n})\r\nexport class Md2Tab {\r\n\r\n  @Input() label: string;\r\n\r\n  @Input() active: boolean;\r\n\r\n  @Input() disabled: boolean;\r\n\r\n  @Input() class: string;\r\n\r\n  labelRef: TemplateRef<any>;\r\n\r\n}\r\n\r\n@Directive({ selector: '[md2-tab-label]' })\r\nexport class Md2TabLabel {\r\n  constructor(public templateRef: TemplateRef<any>, tab: Md2Tab) {\r\n    tab.labelRef = templateRef;\r\n  }\r\n}\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-tabs',\r\n  templateUrl: 'tabs.html',\r\n  styleUrls: ['tabs.scss'],\r\n  host: {\r\n    '[class]': 'class',\r\n    '(window:resize)': 'onWindowResize()'\r\n  },\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2Tabs implements AfterContentInit {\r\n\r\n  @ContentChildren(Md2Tab) tabs: QueryList<Md2Tab>;\r\n\r\n  private _isInitialized: boolean = false;\r\n  private _focusIndex: number = 0;\r\n  private _selectedIndex: number = 0;\r\n  _shouldPaginate: boolean = false;\r\n  _offsetLeft: number = 0;\r\n  _inkBarLeft: string = '0';\r\n  _inkBarWidth: string = '0';\r\n\r\n  @Input() class: string;\r\n\r\n  @Input()\r\n  get selectedIndex() { return this._selectedIndex; }\r\n  set selectedIndex(value: any) {\r\n    if (typeof value === 'string') { value = parseInt(value); }\r\n    if (value !== this._selectedIndex) {\r\n      this._selectedIndex = value;\r\n      this.adjustOffset(value);\r\n      this._updateInkBar();\r\n      if (this.tabs) {\r\n        const tabs = this.tabs.toArray();\r\n        if (!tabs[value].disabled) {\r\n          tabs.forEach(tab => tab.active = false);\r\n          tabs[value].active = true;\r\n        }\r\n      }\r\n      if (this._isInitialized) {\r\n        this._emitChangeEvent();\r\n        this.selectedIndexChange.emit(value);\r\n      }\r\n    }\r\n  }\r\n\r\n  get focusIndex(): number { return this._focusIndex; }\r\n  set focusIndex(value: number) {\r\n    this._focusIndex = value;\r\n    this.adjustOffset(value);\r\n  }\r\n\r\n  get element() {\r\n    const elements: any = {\r\n      root: this.elementRef.nativeElement,\r\n      wrapper: null,\r\n      canvas: null,\r\n      paging: null,\r\n      tabs: null\r\n    };\r\n    elements.wrapper = elements.root.querySelector('.md2-tabs-header-wrapper');\r\n    elements.canvas = elements.wrapper.querySelector('.md2-tabs-canvas');\r\n    elements.paging = elements.canvas.querySelector('.md2-tabs-header');\r\n    elements.tabs = elements.paging.querySelectorAll('.md2-tab-label');\r\n    return elements;\r\n  }\r\n\r\n  @Output() change: EventEmitter<Md2TabChange> = new EventEmitter<Md2TabChange>();\r\n  @Output() selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n  constructor(private elementRef: ElementRef) { }\r\n\r\n  /**\r\n   * After Content Init\r\n   */\r\n  ngAfterContentInit() {\r\n    setTimeout(() => {\r\n      this.updatePagination();\r\n    }, 0);\r\n    setTimeout(() => {\r\n      const tabs = this.tabs.toArray();\r\n      if (this.selectedIndex) {\r\n        if (this.selectedIndex >= tabs.length) {\r\n          this.selectedIndex = 0;\r\n        }\r\n        tabs.forEach(tab => tab.active = false);\r\n        tabs[this.selectedIndex].active = true;\r\n        this.adjustOffset(this.selectedIndex);\r\n      } else {\r\n        let index = tabs.findIndex((t: any) => t.active);\r\n        if (index < 0) {\r\n          tabs[0].active = true;\r\n        } else {\r\n          this.selectedIndex = index;\r\n        }\r\n      }\r\n      this._updateInkBar();\r\n    }, 0);\r\n    this._isInitialized = true;\r\n  }\r\n\r\n  /**\r\n   * Calculates the styles from the selected tab for the ink-bar.\r\n   */\r\n  private _updateInkBar(): void {\r\n    let elements = this.element;\r\n    if (!elements.tabs[this.selectedIndex]) { return; }\r\n    let tab = elements.tabs[this.selectedIndex];\r\n    this._inkBarLeft = tab.offsetLeft + 'px';\r\n    this._inkBarWidth = tab.offsetWidth + 'px';\r\n  }\r\n\r\n  /** Emits an event when the user selects an option. */\r\n  _emitChangeEvent(): void {\r\n    let index = this._selectedIndex;\r\n    this.change.emit(new Md2TabChange(this.tabs.toArray()[index], index));\r\n  }\r\n\r\n  /**\r\n   * Focus next Tab\r\n   */\r\n  focusNextTab() { this.incrementIndex(1); }\r\n\r\n  /**\r\n   * Focus previous Tab\r\n   */\r\n  focusPreviousTab() { this.incrementIndex(-1); }\r\n\r\n  /**\r\n   * Mouse Wheel scroll\r\n   * @param event\r\n   */\r\n  scroll(event: any) {\r\n    if (!this._shouldPaginate) { return; }\r\n    event.preventDefault();\r\n    this._offsetLeft = this.fixOffset(this._offsetLeft - event.wheelDelta);\r\n  }\r\n\r\n  /**\r\n   * Next Page\r\n   */\r\n  nextPage() {\r\n    let elements = this.element;\r\n    let viewportWidth = elements.canvas.clientWidth,\r\n      totalWidth = viewportWidth + this._offsetLeft,\r\n      i: number, tab: any;\r\n    for (i = 0; i < elements.tabs.length; i++) {\r\n      tab = elements.tabs[i];\r\n      if (tab.offsetLeft + tab.offsetWidth > totalWidth) { break; }\r\n    }\r\n    this._offsetLeft = this.fixOffset(tab.offsetLeft);\r\n  }\r\n\r\n  /**\r\n   * Previous Page\r\n   */\r\n  previousPage() {\r\n    let i: number, tab: any, elements = this.element;\r\n\r\n    for (i = 0; i < elements.tabs.length; i++) {\r\n      tab = elements.tabs[i];\r\n      if (tab.offsetLeft + tab.offsetWidth >= this._offsetLeft) { break; }\r\n    }\r\n    this._offsetLeft = this.fixOffset(tab.offsetLeft +\r\n      tab.offsetWidth - elements.canvas.clientWidth);\r\n  }\r\n\r\n  /**\r\n   * On Window Resize\r\n   * @param event\r\n   */\r\n  onWindowResize() {\r\n    this._offsetLeft = this.fixOffset(this._offsetLeft);\r\n    this.updatePagination();\r\n  }\r\n\r\n  /**\r\n   * Can page Back\r\n   */\r\n  canPageBack() { return this._offsetLeft > 0; }\r\n\r\n  /**\r\n   * Can page Previous\r\n   */\r\n  canPageForward() {\r\n    let elements = this.element;\r\n    let lastTab = elements.tabs[elements.tabs.length - 1];\r\n    return lastTab && lastTab.offsetLeft + lastTab.offsetWidth > elements.canvas.clientWidth +\r\n      this._offsetLeft;\r\n  }\r\n\r\n  /**\r\n   * Update Pagination\r\n   */\r\n  updatePagination() {\r\n    let canvasWidth = this.element.root.clientWidth;\r\n    let tabs: any[] = this.element.tabs ? this.element.tabs : [];\r\n    for (let i = 0; i < tabs.length; i++) {\r\n      canvasWidth -= tabs[i].offsetWidth;\r\n    }\r\n    this._shouldPaginate = canvasWidth < 0;\r\n  }\r\n\r\n  /**\r\n   * Increment Focus Tab\r\n   * @param inc\r\n   */\r\n  incrementIndex(inc: any) {\r\n    let newIndex: number,\r\n      index = this.focusIndex;\r\n    for (newIndex = index + inc;\r\n      this.tabs.toArray()[newIndex] && this.tabs.toArray()[newIndex].disabled;\r\n      newIndex += inc) { }\r\n    if (this.tabs.toArray()[newIndex]) {\r\n      this.focusIndex = newIndex;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adjust Offset of Tab\r\n   * @param index\r\n   */\r\n  adjustOffset(index: number) {\r\n    let elements = this.element;\r\n    if (!elements.tabs[index]) { return; }\r\n    let tab = elements.tabs[index],\r\n      left = tab.offsetLeft,\r\n      right = tab.offsetWidth + left;\r\n    this._offsetLeft = Math.max(this._offsetLeft,\r\n      this.fixOffset(right - elements.canvas.clientWidth + 32 * 2));\r\n    this._offsetLeft = Math.min(this._offsetLeft, this.fixOffset(left));\r\n  }\r\n\r\n  /**\r\n   * Fix Offset of Tab\r\n   * @param value\r\n   * @return value\r\n   */\r\n  fixOffset(value: any) {\r\n    let elements = this.element;\r\n    if (!elements.tabs.length || !this._shouldPaginate) { return 0; }\r\n    let lastTab = elements.tabs[elements.tabs.length - 1],\r\n      totalWidth = lastTab.offsetLeft + lastTab.offsetWidth;\r\n    value = Math.min(totalWidth - elements.canvas.clientWidth, value);\r\n    value = Math.max(0, value);\r\n    return value;\r\n  }\r\n\r\n}\r\n\r\nexport const MD2_TABS_DIRECTIVES: any[] = [Md2TabLabel, Md2Tabs, Md2Tab];\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  exports: MD2_TABS_DIRECTIVES,\r\n  declarations: [Md2Transclude, Md2TabLabel, Md2Tabs, Md2Tab],\r\n})\r\nexport class Md2TabsModule { }\r\n","<div class=\"md2-tabs-header-wrapper\">\r\n  <div role=\"button\" class=\"md2-prev-button\" [class.disabled]=\"!canPageBack()\" *ngIf=\"_shouldPaginate\" (click)=\"previousPage()\">\r\n    <em class=\"prev-icon\">Prev</em>\r\n  </div>\r\n  <div role=\"button\" class=\"md2-next-button\" [class.disabled]=\"!canPageForward()\" *ngIf=\"_shouldPaginate\" (click)=\"nextPage()\">\r\n    <em class=\"next-icon\">Next</em>\r\n  </div>\r\n  <div class=\"md2-tabs-canvas\" [class.md2-paginated]=\"_shouldPaginate\" role=\"tablist\" tabindex=\"0\" (keydown.arrowRight)=\"focusNextTab()\" (keydown.arrowLeft)=\"focusPreviousTab()\" (keydown.enter)=\"selectedIndex = focusIndex\" (mousewheel)=\"scroll($event)\">\r\n    <div class=\"md2-tabs-header\" [style.marginLeft.px]=\"-_offsetLeft\">\r\n      <div class=\"md2-tab-label\" role=\"tab\" *ngFor=\"let tab of tabs; let i = index\" [class.focus]=\"focusIndex === i\" [class.active]=\"selectedIndex === i\" [class.disabled]=\"tab.disabled\" (click)=\"focusIndex = selectedIndex = i\">\r\n        <span [md2Transclude]=\"tab.labelRef\">{{tab.label}}</span>\r\n      </div>\r\n      <div class=\"md2-tab-ink-bar\" [style.left]=\"_inkBarLeft\" [style.width]=\"_inkBarWidth\"></div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div class=\"md2-tabs-body-wrapper\">\r\n  <ng-content></ng-content>\r\n</div>\r\n","import {\r\n  AfterContentInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n  NG_VALUE_ACCESSOR,\r\n  ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport {\r\n  coerceBooleanProperty,\r\n  LEFT_ARROW,\r\n  RIGHT_ARROW,\r\n  BACKSPACE,\r\n  DELETE,\r\n  TAB,\r\n  ESCAPE\r\n} from '../core/core';\r\n\r\nconst noop = () => { };\r\n\r\nlet nextId = 0;\r\n\r\nexport class Tag {\r\n  text: string;\r\n  value: string;\r\n\r\n  constructor(source: any, textKey: string, valueKey: string) {\r\n    if (typeof source === 'string') {\r\n      this.text = this.value = source;\r\n    }\r\n    if (typeof source === 'object') {\r\n      this.text = source[textKey];\r\n      this.value = valueKey ? source[valueKey] : source;\r\n    }\r\n  }\r\n}\r\n\r\nexport const MD2_TAGS_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => Md2Tags),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  \r\n  selector: 'md2-tags',\r\n  templateUrl: 'tags.html',\r\n  styleUrls: ['tags.scss'],\r\n  host: {\r\n    'role': 'tags',\r\n    '[id]': 'id',\r\n    '[class.focus]': '_inputFocused || _selectedTag >= 0',\r\n    '[class.md2-tags-disabled]': 'disabled',\r\n    '[tabindex]': 'disabled ? -1 : tabindex',\r\n    '[attr.aria-disabled]': 'disabled'\r\n  },\r\n  providers: [MD2_TAGS_CONTROL_VALUE_ACCESSOR],\r\n  encapsulation: ViewEncapsulation.None,\r\n  exportAs: 'md2Tags'\r\n})\r\n\r\nexport class Md2Tags implements AfterContentInit, ControlValueAccessor {\r\n\r\n  constructor(private _element: ElementRef) { }\r\n\r\n  ngAfterContentInit() { this._isInitialized = true; }\r\n\r\n  @Output() change: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  private _value: any = '';\r\n  private _disabled: boolean = false;\r\n  private _isInitialized: boolean = false;\r\n  private _onTouchedCallback: () => void = noop;\r\n  private _onChangeCallback: (_: any) => void = noop;\r\n\r\n  private _tags: Array<any> = [];\r\n  _list: Array<Tag> = [];\r\n  _items: Array<Tag> = [];\r\n\r\n  _focusedTag: number = 0;\r\n  _selectedTag: number = -1;\r\n  _inputValue: string = '';\r\n  _inputFocused: boolean = false;\r\n  private noBlur: boolean = true;\r\n\r\n  @Input() id: string = 'md2-tags-' + (++nextId);\r\n  @Input() tabindex: number = 0;\r\n  @Input() placeholder: string = '';\r\n  @Input('md2-tag-text') textKey: string = 'text';\r\n  @Input('md2-tag-value') valueKey: string = null;\r\n\r\n  @Input()\r\n  get disabled(): boolean { return this._disabled; }\r\n  set disabled(value) { this._disabled = coerceBooleanProperty(value); }\r\n\r\n  @Input('md2-tags')\r\n  set tags(value: Array<any>) { this._tags = value; }\r\n\r\n  @Input()\r\n  get value(): any { return this._value; }\r\n  set value(value: any) { this.setValue(value); }\r\n\r\n  /**\r\n   * setup value\r\n   * @param value\r\n   */\r\n  private setValue(value: any) {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this._items = [];\r\n      if (value && value.length && typeof value === 'object' && Array.isArray(value)) {\r\n        for (let i = 0; i < value.length; i++) {\r\n          let selItm = this._tags.find((t: any) => this.equals(this.valueKey ?\r\n            t[this.valueKey] : t, value[i]));\r\n          if (selItm) { this._items.push(new Tag(selItm, this.textKey, this.valueKey)); }\r\n        }\r\n      }\r\n      if (this._isInitialized) {\r\n        this._onChangeCallback(value);\r\n        this.change.emit(this._value);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Compare two vars or objects\r\n   * @param o1 compare first object\r\n   * @param o2 compare second object\r\n   * @return boolean comparation result\r\n   */\r\n  private equals(o1: any, o2: any) {\r\n    if (o1 === o2) { return true; }\r\n    if (o1 === null || o2 === null) { return false; }\r\n    if (o1 !== o1 && o2 !== o2) { return true; }\r\n    let t1 = typeof o1, t2 = typeof o2, key: any, keySet: any;\r\n    if (t1 === t2 && t1 === 'object') {\r\n      keySet = Object.create(null);\r\n      for (key in o1) {\r\n        if (!this.equals(o1[key], o2[key])) { return false; }\r\n        keySet[key] = true;\r\n      }\r\n      for (key in o2) {\r\n        if (!(key in keySet) && key.charAt(0) !== '$' && o2[key]) { return false; }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  get isMenuVisible(): boolean {\r\n    return ((this._inputFocused || this.noBlur) && this._inputValue &&\r\n      this._list && this._list.length) ? true : false;\r\n  }\r\n\r\n  /**\r\n   * update scroll of tags suggestion menu\r\n   */\r\n  private updateScroll() {\r\n    if (this._focusedTag < 0) { return; }\r\n    let menuContainer = this._element.nativeElement.querySelector('.md2-tags-menu');\r\n    if (!menuContainer) { return; }\r\n\r\n    let choices = menuContainer.querySelectorAll('.md2-option');\r\n    if (choices.length < 1) { return; }\r\n\r\n    let highlighted: any = choices[this._focusedTag];\r\n    if (!highlighted) { return; }\r\n\r\n    let top: number = highlighted.offsetTop + highlighted.clientHeight - menuContainer.scrollTop;\r\n    let height: number = menuContainer.offsetHeight;\r\n\r\n    if (top > height) {\r\n      menuContainer.scrollTop += top - height;\r\n    } else if (top < highlighted.clientHeight) {\r\n      menuContainer.scrollTop -= highlighted.clientHeight - top;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * input key listener\r\n   * @param event\r\n   */\r\n  _handleInputKeydown(event: KeyboardEvent) {\r\n    // Backspace\r\n    if (event.keyCode === 8 && !this._inputValue) {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n      if (this._items.length && this._selectedTag < 0) {\r\n        this.selectAndFocusTagSafe(this._items.length - 1);\r\n      }\r\n      if (this._items.length && this._selectedTag > -1) {\r\n        this.removeAndSelectAdjacentTag(this._selectedTag);\r\n      }\r\n      return;\r\n    }\r\n    // Del Key\r\n    if (event.keyCode === 46 && !this._inputValue) { return; }\r\n    // Left / Right Arrow\r\n    if ((event.keyCode === 37 || event.keyCode === 39) && !this._inputValue) { return; }\r\n    // Down Arrow\r\n    if (event.keyCode === 40) {\r\n      if (!this.isMenuVisible) { return; }\r\n      event.stopPropagation();\r\n      event.preventDefault();\r\n      this._focusedTag = (this._focusedTag === this._list.length - 1) ?\r\n        0 : Math.min(this._focusedTag + 1, this._list.length - 1);\r\n      this.updateScroll();\r\n      return;\r\n    }\r\n    // Up Arrow\r\n    if (event.keyCode === 38) {\r\n      if (!this.isMenuVisible) { return; }\r\n      event.stopPropagation();\r\n      event.preventDefault();\r\n      this._focusedTag = (this._focusedTag === 0) ?\r\n        this._list.length - 1 : Math.max(0, this._focusedTag - 1);\r\n      this.updateScroll();\r\n      return;\r\n    }\r\n    // Tab Key\r\n    if (event.keyCode === 9) { return; }\r\n    // Enter / Space\r\n    if (event.keyCode === 13 || event.keyCode === 32) {\r\n      if (!this._inputValue || !this.isMenuVisible) { event.preventDefault(); return; }\r\n      event.preventDefault();\r\n      this._addTag(event, this._focusedTag);\r\n      return;\r\n    }\r\n    // Escape Key\r\n    if (event.keyCode === 27) {\r\n      event.stopPropagation();\r\n      event.preventDefault();\r\n      if (this._inputValue) { this._inputValue = ''; }\r\n      if (this._selectedTag >= 0) { this._handleFocus(); }\r\n      return;\r\n    }\r\n    // reset selected tag\r\n    if (this._selectedTag >= 0) { this.resetselectedTag(); }\r\n    // filter\r\n    setTimeout(() => {\r\n      this.filterMatches();\r\n    }, 10);\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    if (this.disabled || this._inputValue) { return; }\r\n    switch (event.keyCode) {\r\n      case BACKSPACE:\r\n      case DELETE:\r\n        if (this._selectedTag < 0) { return; }\r\n        event.preventDefault();\r\n        this.removeAndSelectAdjacentTag(this._selectedTag);\r\n        break;\r\n\r\n      case TAB:\r\n      case ESCAPE:\r\n        if (this._selectedTag < 0) { return; }\r\n        event.preventDefault();\r\n        this._handleFocus();\r\n        break;\r\n\r\n      case LEFT_ARROW:\r\n        event.preventDefault();\r\n        if (this._selectedTag < 0) { this._selectedTag = this._items.length; }\r\n        if (this._items.length) { this.selectAndFocusTagSafe(this._selectedTag - 1); }\r\n        break;\r\n      case RIGHT_ARROW:\r\n        event.preventDefault();\r\n        if (this._selectedTag >= this._items.length) { this._selectedTag = -1; }\r\n        this.selectAndFocusTagSafe(this._selectedTag + 1);\r\n        break;\r\n    }\r\n  }\r\n\r\n  private removeAndSelectAdjacentTag(index: number) {\r\n    let selIndex = this.getAdjacentTagIndex(index);\r\n    this.removeTag(index);\r\n    this.selectAndFocusTagSafe(selIndex);\r\n  }\r\n\r\n  private resetselectedTag() {\r\n    this._selectedTag = -1;\r\n  }\r\n\r\n  private getAdjacentTagIndex(index: number) {\r\n    let len = this._items.length - 1;\r\n    return (len === 0) ? -1 :\r\n      (index === len) ? index - 1 : index;\r\n  }\r\n\r\n  /**\r\n   * add tag\r\n   * @param event\r\n   * @param index index of the specific tag\r\n   */\r\n  _addTag(event: Event, index: number) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    this._items.push(this._list[index]);\r\n    this._inputValue = '';\r\n    this.updateValue();\r\n  }\r\n\r\n  _removeTagAndFocusInput(index: number) {\r\n    this.removeTag(index);\r\n    this._handleFocus();\r\n  }\r\n\r\n  /**\r\n   * remove tag\r\n   * @param index\r\n   */\r\n  private removeTag(index: number) {\r\n    this._items.splice(index, 1);\r\n    this.updateValue();\r\n  }\r\n\r\n  /**\r\n   * update value\r\n   */\r\n  private updateValue() {\r\n    this._value = new Array<any>();\r\n    for (let i = 0; i < this._items.length; i++) {\r\n      this._value.push(this._items[i].value);\r\n    }\r\n    this._onChangeCallback(this._value);\r\n    this.change.emit(this._value);\r\n  }\r\n\r\n  private selectAndFocusTagSafe = function (index: number) {\r\n    if (!this._items.length) {\r\n      this._selectTag(-1);\r\n      this._handleFocus();\r\n      return;\r\n    }\r\n    if (index === this._items.length) { return this._handleFocus(); }\r\n    index = Math.max(index, 0);\r\n    index = Math.min(index, this._items.length - 1);\r\n    this._selectTag(index);\r\n  };\r\n\r\n  /**\r\n   * select tag\r\n   * @param index of select tag\r\n   */\r\n  _selectTag(index: number) {\r\n    if (index >= -1 && index <= this._items.length) {\r\n      this._selectedTag = index;\r\n    }\r\n  }\r\n\r\n  @HostListener('focus')\r\n  _handleFocus() {\r\n    this._element.nativeElement.querySelector('input').focus();\r\n    this.resetselectedTag();\r\n  }\r\n\r\n  _onInputFocus() {\r\n    this._inputFocused = true;\r\n    this.resetselectedTag();\r\n  }\r\n\r\n  _onInputBlur() {\r\n    this._inputFocused = false;\r\n  }\r\n\r\n  _listEnter() { this.noBlur = true; }\r\n\r\n  _listLeave() { this.noBlur = false; }\r\n\r\n  /**\r\n   * update suggestion menu with filter\r\n   * @param query\r\n   */\r\n  private filterMatches() {\r\n    let tempList = this._tags.map((tag: any) => new Tag(tag, this.textKey, this.valueKey));\r\n    this._list = tempList.filter((t: Tag) =>\r\n      (new RegExp(this._inputValue, 'ig').test(t.text) &&\r\n        !this._items.find((i: Tag) => t.text === i.text)));\r\n    if (this._list.length > 0) {\r\n      this._focusedTag = 0;\r\n    }\r\n  }\r\n\r\n  writeValue(value: any) {\r\n    if (value !== this._value) {\r\n      this._value = value;\r\n      this._items = [];\r\n      if (value && value.length && typeof value === 'object' && Array.isArray(value)) {\r\n        for (let i = 0; i < value.length; i++) {\r\n          let selItm = this._tags.find((t: any) => this.equals(this.valueKey ?\r\n            t[this.valueKey] : t, value[i]));\r\n          if (selItm) { this._items.push(new Tag(selItm, this.textKey, this.valueKey)); }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any) { this._onChangeCallback = fn; }\r\n\r\n  registerOnTouched(fn: any) { this._onTouchedCallback = fn; }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n}\r\n","<div class=\"md2-tags-container\">\r\n  <span *ngFor=\"let t of _items; let i = index;\" class=\"md2-tag\" [class.active]=\"_selectedTag === i\" (click)=\"_selectTag(i)\">\r\n    <span class=\"md2-tag-text\">{{t.text}}</span>\r\n    <svg (click)=\"_removeTagAndFocusInput(i)\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n      <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n    </svg>\r\n  </span>\r\n  <div class=\"md2-tag-add\">\r\n    <input [(ngModel)]=\"_inputValue\" type=\"text\" tabs=\"false\" autocomplete=\"off\" tabindex=\"-1\" [disabled]=\"disabled\" class=\"md2-tags-input\" [placeholder]=\"placeholder\" (focus)=\"_onInputFocus()\" (blur)=\"_onInputBlur()\" (keydown)=\"_handleInputKeydown($event)\" (change)=\"$event.stopPropagation()\" />\r\n    <ul *ngIf=\"isMenuVisible\" class=\"md2-tags-menu\" (mouseenter)=\"_listEnter()\" (mouseleave)=\"_listLeave()\">\r\n      <li class=\"md2-tag-option\" *ngFor=\"let l of _list; let i = index;\" [class.focused]=\"_focusedTag === i\" (click)=\"_addTag($event, i)\">\r\n        <span class=\"md2-tag-option-text\" [innerHtml]=\"l.text | highlight:_inputValue\"></span>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Md2AutocompleteModule } from '../autocomplete/index';\r\nimport { Md2Tags } from './tags';\r\n\r\nexport * from './tags';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, FormsModule, Md2AutocompleteModule],\r\n  exports: [Md2Tags],\r\n  declarations: [Md2Tags],\r\n})\r\nexport class Md2TagsModule { }\r\n","import {\r\n  Component,\r\n  Injectable,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n  Overlay,\r\n  OverlayState,\r\n  OverlayRef,\r\n  ComponentPortal,\r\n} from '../core/index';\r\n\r\nexport class Toast {\r\n  id: number;\r\n  isVisible: boolean;\r\n  constructor(public message: string) { }\r\n}\r\n\r\n@Injectable()\nexport class Md2ToastConfig {\r\n  duration: number = 3000;\r\n  viewContainerRef?: ViewContainerRef = null;\r\n}\r\n\r\n@Injectable()\r\nexport class Md2Toast {\r\n  private index: number = 0;\r\n\r\n  _overlayRef: OverlayRef;\r\n  _toastInstance: Md2ToastComponent;\r\n\r\n  constructor(private _overlay: Overlay, private _config: Md2ToastConfig) { }\r\n\r\n  /**\r\n   * toast message\r\n   * @param toast string or object with message and other properties of toast\r\n   */\r\n  toast(message: string, duration?: number) {\r\n    this.show(message, duration);\r\n  }\r\n\r\n  /**\r\n   * show toast\r\n   * @param toastObj string or object with message and other properties of toast\r\n   */\r\n  show(message: string, duration?: number) {\r\n    if (!message || !message.trim()) { return; }\r\n\r\n    if (duration) { this._config.duration = duration; }\r\n\r\n    let toast: Toast;\r\n    toast = new Toast(message);\r\n\r\n    if (toast) {\r\n      if (!this._toastInstance) {\r\n        this._createToast();\r\n      }\r\n\r\n      this._setToastMessage(toast);\r\n    }\r\n  }\r\n\r\n  /** Create the toast to display */\r\n  private _createToast(): void {\r\n    this._createOverlay();\r\n    let portal = new ComponentPortal(Md2ToastComponent, this._config.viewContainerRef);\r\n    this._toastInstance = this._overlayRef.attach(portal).instance;\r\n  }\r\n\r\n  /** Create the overlay config and position strategy */\r\n  private _createOverlay(): void {\r\n    if (!this._overlayRef) {\r\n      let config = new OverlayState();\r\n      config.positionStrategy = this._overlay.position()\r\n        .global()\r\n        .top('0').right('0');\r\n\r\n      this._overlayRef = this._overlay.create(config);\r\n    }\r\n  }\r\n\r\n  /** Disposes the current toast and the overlay it is attached to */\r\n  private _disposeToast(): void {\r\n    this._overlayRef.dispose();\r\n    this._overlayRef = null;\r\n    this._toastInstance = null;\r\n  }\r\n\r\n  /** Updates the toast message and repositions the overlay according to the new message length */\r\n  private _setToastMessage(toast: Toast) {\r\n    toast.id = ++this.index;\r\n    this._toastInstance.addToast(toast);\r\n    setTimeout(() => {\r\n      this.clearToast(toast.id);\r\n    }, this._config.duration);\r\n  }\r\n\r\n  /**\r\n   * clear specific toast\r\n   * @param toastId\r\n   */\r\n  private clearToast(toastId: number) {\r\n    if (this._toastInstance) {\r\n      this._toastInstance.removeToast(toastId);\r\n      setTimeout(() => {\r\n        if (!this._toastInstance.hasToast()) { this._disposeToast(); }\r\n      }, 250);\r\n\r\n    }\r\n  }\r\n\r\n  /**\r\n   * clear all toasts\r\n   */\r\n  clearAllToasts() {\r\n    if (this._toastInstance) {\r\n      this._toastInstance.removeAllToasts();\r\n      setTimeout(() => {\r\n        if (!this._toastInstance.hasToast()) { this._disposeToast(); }\r\n      }, 250);\r\n\r\n    }\r\n  }\r\n\r\n}\r\n\r\n@Component({\r\n  selector: 'md2-toast',\r\n  templateUrl: 'toast.html',\r\n  styleUrls: ['toast.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class Md2ToastComponent {\r\n  toasts: Toast[] = [];\r\n  maxShown = 5;\r\n\r\n  /**\r\n   * add toast\r\n   * @param toast toast object with all parameters\r\n   */\r\n  addToast(toast: Toast) {\r\n    setTimeout(() => {\r\n      toast.isVisible = true;\r\n    }, 1);\r\n    this.toasts.push(toast);\r\n    if (this.toasts.length > this.maxShown) {\r\n      this.toasts[0].isVisible = false;\r\n      setTimeout(() => {\r\n        this.toasts.splice(0, (this.toasts.length - this.maxShown));\r\n      }, 250);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * remove toast\r\n   * @param toastId number of toast id\r\n   */\r\n  removeToast(toastId: number) {\r\n    this.toasts.forEach((t: any) => { if (t.id === toastId) { t.isVisible = false; } });\r\n    setTimeout(() => {\r\n      this.toasts = this.toasts.filter((toast) => { return toast.id !== toastId; });\r\n    }, 250);\r\n  }\r\n\r\n  /**\r\n   * remove all toasts\r\n   * @param toastId number of toast id\r\n   */\r\n  removeAllToasts() {\r\n    this.toasts.forEach((t: any) => { t.isVisible = false; });\r\n    setTimeout(() => {\r\n      this.toasts = [];\r\n    }, 250);\r\n  }\r\n\r\n  /**\r\n   * check has any toast\r\n   * @return boolean\r\n   */\r\n  hasToast(): boolean { return this.toasts.length > 0; }\r\n\r\n}\r\n","<div *ngFor=\"let toast of toasts\"\r\n     class=\"md2-toast\"\r\n     [class.in]=\"toast.isVisible\"\r\n     (click)=\"removeToast(toast.id)\"\r\n     [innerHTML]=\"toast.message\">\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OverlayModule, MdCommonModule } from '../core/index';\r\nimport { PlatformModule } from '../core/platform/index';\r\nimport { Md2Toast, Md2ToastConfig, Md2ToastComponent } from './toast';\r\n\r\nexport * from './toast';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    OverlayModule,\r\n    MdCommonModule,\r\n    PlatformModule\r\n  ],\r\n  exports: [Md2ToastComponent, MdCommonModule],\r\n  declarations: [Md2ToastComponent],\r\n  providers: [Md2Toast, Md2ToastConfig],\r\n})\r\nexport class Md2ToastModule { }\r\n","import {\r\n  Component,\r\n  Directive,\r\n  Input,\r\n  ElementRef,\r\n  ViewContainerRef,\r\n  NgZone,\r\n  Optional,\r\n  OnDestroy,\r\n  Renderer2,\r\n  ChangeDetectorRef,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n  style,\r\n  trigger,\r\n  state,\r\n  transition,\r\n  animate,\r\n  AnimationEvent,\r\n} from '@angular/animations';\r\nimport {\r\n  Overlay,\r\n  OverlayState,\r\n  OverlayRef,\r\n  ComponentPortal,\r\n  OverlayConnectionPosition,\r\n  OriginConnectionPosition,\r\n} from '../core/index';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\nimport { Dir } from '../core/rtl/dir';\r\nimport { Platform } from '../core/platform/index';\r\nimport { ScrollDispatcher } from '../core/overlay/scroll/scroll-dispatcher';\r\nimport { coerceBooleanProperty } from '../core/coercion/boolean-property';\r\n\r\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\r\n\r\n/** Time in ms to delay before changing the tooltip visibility to hidden */\r\nexport const TOUCHEND_HIDE_DELAY = 1500;\r\n\r\n/** Time in ms to throttle repositioning after scroll events. */\r\nexport const SCROLL_THROTTLE_MS = 20;\r\n\r\n/** Throws an error if the user supplied an invalid tooltip position. */\r\nexport function throwMd2TooltipInvalidPositionError(position: string) {\r\n  throw new Error(`Tooltip position \"${position}\" is invalid.`);\r\n}\r\n\r\n/**\r\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\r\n * hiding of a tooltip provided position (defaults to below the element).\r\n *\r\n * https://material.google.com/components/tooltips.html\r\n */\r\n@Directive({\r\n  selector: '[tooltip]',\r\n  host: {\r\n    '(longpress)': 'show()',\r\n    '(touchend)': 'hide(' + TOUCHEND_HIDE_DELAY + ')',\r\n  },\r\n  exportAs: 'md2Tooltip',\r\n})\r\nexport class Md2Tooltip implements OnDestroy {\r\n  _overlayRef: OverlayRef;\r\n  _tooltipInstance: Md2TooltipComponent;\r\n\r\n  private _position: TooltipPosition = 'below';\r\n  private _disabled: boolean = false;\r\n\r\n  /** Allows the user to define the position of the tooltip relative to the parent element */\r\n  @Input('tooltip-position')\r\n  get position(): TooltipPosition { return this._position; }\r\n  set position(value: TooltipPosition) {\r\n    if (value !== this._position) {\r\n      this._position = value;\r\n\r\n      // TODO(andrewjs): When the overlay's position can be dynamically changed, do not destroy\r\n      // the tooltip.\r\n      if (this._tooltipInstance) {\r\n        this._disposeTooltip();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Disables the display of the tooltip. */\r\n  @Input('tooltipDisabled')\r\n  get disabled(): boolean { return this._disabled; }\r\n  set disabled(value) {\r\n    this._disabled = coerceBooleanProperty(value);\r\n\r\n    // If tooltip is disabled, hide immediately.\r\n    if (this._disabled) {\r\n      this.hide(0);\r\n    }\r\n  }\r\n\r\n  /** The default delay in ms before showing the tooltip after show is called */\r\n  @Input('tooltip-delay') showDelay = 0;\r\n\r\n  /** The default delay in ms before hiding the tooltip after hide is called */\r\n  @Input('tooltip-hide-delay') hideDelay = 0;\r\n\r\n  private _message: string;\r\n\r\n  /** The message to be displayed in the tooltip */\r\n  @Input('tooltip') get message() { return this._message; }\r\n  set message(value: string) {\r\n    this._message = value;\r\n    if (this._tooltipInstance) {\r\n      this._setTooltipMessage(this._message);\r\n    }\r\n  }\r\n\r\n  constructor(private _overlay: Overlay,\r\n    private _elementRef: ElementRef,\r\n    private _scrollDispatcher: ScrollDispatcher,\r\n    private _viewContainerRef: ViewContainerRef,\r\n    private _ngZone: NgZone,\r\n    private _renderer: Renderer2,\r\n    private _platform: Platform,\r\n    @Optional() private _dir: Dir) {\r\n\r\n    // The mouse events shouldn't be bound on iOS devices, because\r\n    // they can prevent the first tap from firing its click event.\r\n    if (!_platform.IOS) {\r\n      _renderer.listen(_elementRef.nativeElement, 'mouseenter', () => this.show());\r\n      _renderer.listen(_elementRef.nativeElement, 'mouseleave', () => this.hide());\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Dispose the tooltip when destroyed.\r\n   */\r\n  ngOnDestroy() {\r\n    if (this._tooltipInstance) {\r\n      this._disposeTooltip();\r\n    }\r\n  }\r\n\r\n  /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\r\n  show(delay: number = this.showDelay): void {\r\n    if (this.disabled || !this._message || !this._message.trim()) { return; }\r\n\r\n    if (!this._tooltipInstance) {\r\n      this._createTooltip();\r\n    }\r\n\r\n    this._setTooltipMessage(this._message);\r\n    this._tooltipInstance.show(this._position, delay);\r\n  }\r\n\r\n  /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\r\n  hide(delay: number = this.hideDelay): void {\r\n    if (this._tooltipInstance) {\r\n      this._tooltipInstance.hide(delay);\r\n    }\r\n  }\r\n\r\n  /** Shows/hides the tooltip */\r\n  toggle(): void {\r\n    this._isTooltipVisible() ? this.hide() : this.show();\r\n  }\r\n\r\n  /** Returns true if the tooltip is currently visible to the user */\r\n  _isTooltipVisible(): boolean {\r\n    return !!this._tooltipInstance && this._tooltipInstance.isVisible();\r\n  }\r\n\r\n  /** Create the tooltip to display */\r\n  private _createTooltip(): void {\r\n    this._createOverlay();\r\n    let portal = new ComponentPortal(Md2TooltipComponent, this._viewContainerRef);\r\n    this._tooltipInstance = this._overlayRef.attach(portal).instance;\r\n\r\n    // Dispose the overlay when finished the shown tooltip.\r\n    this._tooltipInstance.afterHidden().subscribe(() => {\r\n      // Check first if the tooltip has already been removed through this components destroy.\r\n      if (this._tooltipInstance) {\r\n        this._disposeTooltip();\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Create the overlay config and position strategy */\r\n  private _createOverlay(): void {\r\n    let origin = this._getOrigin();\r\n    let position = this._getOverlayPosition();\r\n\r\n    // Create connected position strategy that listens for scroll events to reposition.\r\n    // After position changes occur and the overlay is clipped by a parent scrollable then\r\n    // close the tooltip.\r\n    let strategy = this._overlay.position().connectedTo(this._elementRef, origin, position);\r\n    strategy.withScrollableContainers(this._scrollDispatcher.getScrollContainers(this._elementRef));\r\n    strategy.onPositionChange.subscribe((change: any) => {\r\n      if (change.scrollableViewProperties.isOverlayClipped &&\r\n        this._tooltipInstance && this._tooltipInstance.isVisible()) {\r\n        this.hide(0);\r\n      }\r\n    });\r\n\r\n    let config = new OverlayState();\r\n\r\n    config.direction = this._dir ? this._dir.value : 'ltr';\r\n    config.positionStrategy = strategy;\r\n    config.scrollStrategy = this._overlay.scrollStrategies.reposition({\r\n      scrollThrottle: SCROLL_THROTTLE_MS\r\n    });\r\n\r\n    this._overlayRef = this._overlay.create(config);\r\n  }\r\n\r\n  /** Disposes the current tooltip and the overlay it is attached to */\r\n  private _disposeTooltip(): void {\r\n    this._overlayRef.dispose();\r\n    this._overlayRef = null;\r\n    this._tooltipInstance = null;\r\n  }\r\n\r\n  /** Returns the origin position based on the user's position preference */\r\n  _getOrigin(): OriginConnectionPosition {\r\n    if (this.position == 'above' || this.position == 'below') {\r\n      return { originX: 'center', originY: this.position == 'above' ? 'top' : 'bottom' };\r\n    }\r\n\r\n    const isDirectionLtr = !this._dir || this._dir.value == 'ltr';\r\n    if (this.position == 'left' ||\r\n      this.position == 'before' && isDirectionLtr ||\r\n      this.position == 'after' && !isDirectionLtr) {\r\n      return { originX: 'start', originY: 'center' };\r\n    }\r\n\r\n    if (this.position == 'right' ||\r\n      this.position == 'after' && isDirectionLtr ||\r\n      this.position == 'before' && !isDirectionLtr) {\r\n      return { originX: 'end', originY: 'center' };\r\n    }\r\n\r\n    throwMd2TooltipInvalidPositionError(this.position);\r\n  }\r\n\r\n  /** Returns the overlay position based on the user's preference */\r\n  _getOverlayPosition(): OverlayConnectionPosition {\r\n    if (this.position == 'above') {\r\n      return { overlayX: 'center', overlayY: 'bottom' };\r\n    }\r\n\r\n    if (this.position == 'below') {\r\n      return { overlayX: 'center', overlayY: 'top' };\r\n    }\r\n\r\n    const isLtr = !this._dir || this._dir.value == 'ltr';\r\n    if (this.position == 'left' ||\r\n      this.position == 'before' && isLtr ||\r\n      this.position == 'after' && !isLtr) {\r\n      return { overlayX: 'end', overlayY: 'center' };\r\n    }\r\n\r\n    if (this.position == 'right' ||\r\n      this.position == 'after' && isLtr ||\r\n      this.position == 'before' && !isLtr) {\r\n      return { overlayX: 'start', overlayY: 'center' };\r\n    }\r\n\r\n    throwMd2TooltipInvalidPositionError(this.position);\r\n  }\r\n\r\n  /** Updates the tooltip message and repositions the overlay according to the new message length */\r\n  private _setTooltipMessage(message: string) {\r\n    // Must wait for the message to be painted to the tooltip so that the overlay can properly\r\n    // calculate the correct positioning based on the size of the text.\r\n    this._tooltipInstance.message = message;\r\n    this._tooltipInstance._markForCheck();\r\n\r\n    this._ngZone.onMicrotaskEmpty.pipe(first()).subscribe(() => {\r\n      if (this._tooltipInstance) {\r\n        this._overlayRef.updatePosition();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\r\n\r\n/**\r\n * Internal component that wraps the tooltip's content.\r\n * @docs-private\r\n */\r\n@Component({\r\n  \r\n  selector: 'md2-tooltip',\r\n  templateUrl: 'tooltip.html',\r\n  styleUrls: ['tooltip.scss'],\r\n  animations: [\r\n    trigger('state', [\r\n      state('void', style({ transform: 'scale(0)' })),\r\n      state('initial', style({ transform: 'scale(0)' })),\r\n      state('visible', style({ transform: 'scale(1)' })),\r\n      state('hidden', style({ transform: 'scale(0)' })),\r\n      transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')),\r\n      transition('* => hidden', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')),\r\n    ])\r\n  ],\r\n  host: {\r\n    '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\r\n    '(body:click)': 'this._handleBodyInteraction()'\r\n  },\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class Md2TooltipComponent {\r\n  /** Message to display in the tooltip */\r\n  message: string;\r\n\r\n  /** The timeout ID of any current timer set to show the tooltip */\r\n  _showTimeoutId: number;\r\n\r\n  /** The timeout ID of any current timer set to hide the tooltip */\r\n  _hideTimeoutId: number;\r\n\r\n  /** Property watched by the animation framework to show or hide the tooltip */\r\n  _visibility: TooltipVisibility = 'initial';\r\n\r\n  /** Whether interactions on the page should close the tooltip */\r\n  _closeOnInteraction: boolean = false;\r\n\r\n  /** The transform origin used in the animation for showing and hiding the tooltip */\r\n  _transformOrigin: string = 'bottom';\r\n\r\n  /** Subject for notifying that the tooltip has been hidden from the view */\r\n  private _onHide: Subject<any> = new Subject();\r\n\r\n  constructor( @Optional() private _dir: Dir, private _changeDetectorRef: ChangeDetectorRef) { }\r\n\r\n  /**\r\n   * Shows the tooltip with an animation originating from the provided origin\r\n   * @param position Position of the tooltip.\r\n   * @param delay Amount of milliseconds to the delay showing the tooltip.\r\n   */\r\n  show(position: TooltipPosition, delay: number): void {\r\n    // Cancel the delayed hide if it is scheduled\r\n    if (this._hideTimeoutId) {\r\n      clearTimeout(this._hideTimeoutId);\r\n    }\r\n\r\n    // Body interactions should cancel the tooltip if there is a delay in showing.\r\n    this._closeOnInteraction = true;\r\n\r\n    this._setTransformOrigin(position);\r\n    this._showTimeoutId = setTimeout(() => {\r\n      this._visibility = 'visible';\r\n\r\n      // If this was set to true immediately, then a body click that triggers show() would\r\n      // trigger interaction and close the tooltip right after it was displayed.\r\n      this._closeOnInteraction = false;\r\n\r\n      // Mark for check so if any parent component has set the\r\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\r\n      this._markForCheck();\r\n      setTimeout(() => this._closeOnInteraction = true, 0);\r\n    }, delay);\r\n  }\r\n\r\n  /**\r\n   * Begins the animation to hide the tooltip after the provided delay in ms.\r\n   * @param delay Amount of milliseconds to delay showing the tooltip.\r\n   */\r\n  hide(delay: number): void {\r\n    // Cancel the delayed show if it is scheduled\r\n    if (this._showTimeoutId) {\r\n      clearTimeout(this._showTimeoutId);\r\n    }\r\n\r\n    this._hideTimeoutId = setTimeout(() => {\r\n      this._visibility = 'hidden';\r\n      this._closeOnInteraction = false;\r\n\r\n      // Mark for check so if any parent component has set the\r\n      // ChangeDetectionStrategy to OnPush it will be checked anyways\r\n      this._markForCheck();\r\n    }, delay);\r\n  }\r\n\r\n  /**\r\n   * Returns an observable that notifies when the tooltip has been hidden from view\r\n   */\r\n  afterHidden(): Observable<void> {\r\n    return this._onHide.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Whether the tooltip is being displayed\r\n   */\r\n  isVisible(): boolean {\r\n    return this._visibility === 'visible';\r\n  }\r\n\r\n  /** Sets the tooltip transform origin according to the tooltip position */\r\n  _setTransformOrigin(value: TooltipPosition) {\r\n    const isLtr = !this._dir || this._dir.value == 'ltr';\r\n    switch (value) {\r\n      case 'before': this._transformOrigin = isLtr ? 'right' : 'left'; break;\r\n      case 'after': this._transformOrigin = isLtr ? 'left' : 'right'; break;\r\n      case 'left': this._transformOrigin = 'right'; break;\r\n      case 'right': this._transformOrigin = 'left'; break;\r\n      case 'above': this._transformOrigin = 'bottom'; break;\r\n      case 'below': this._transformOrigin = 'top'; break;\r\n      default: throwMd2TooltipInvalidPositionError(value);\r\n    }\r\n  }\r\n\r\n  _afterVisibilityAnimation(e: AnimationEvent): void {\r\n    if (e.toState === 'hidden' && !this.isVisible()) {\r\n      this._onHide.next();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Interactions on the HTML body should close the tooltip immediately as defined in the\r\n   * material design spec.\r\n   * https://material.google.com/components/tooltips.html#tooltips-interaction\r\n   */\r\n  _handleBodyInteraction(): void {\r\n    if (this._closeOnInteraction) {\r\n      this.hide(0);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Marks that the tooltip needs to be checked in the next change detection run.\r\n   * Mainly used for rendering the initial text before positioning a tooltip, which\r\n   * can be problematic in components with OnPush change detection.\r\n   */\r\n  _markForCheck(): void {\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n}\r\n","<div class=\"md2-tooltip\"\r\n     [style.transform-origin]=\"_transformOrigin\"\r\n     [@state]=\"_visibility\"\r\n     (@state.done)=\"_afterVisibilityAnimation($event)\"\r\n     [innerHTML]=\"message\">\r\n</div>","import {NgModule} from '@angular/core';\r\nimport {OverlayModule, MdCommonModule, PlatformModule} from '../core/index';\r\nimport {Md2Tooltip, Md2TooltipComponent} from './tooltip';\r\n\r\n\r\n@NgModule({\r\n  imports: [OverlayModule, MdCommonModule, PlatformModule],\r\n  exports: [Md2Tooltip, Md2TooltipComponent, MdCommonModule],\r\n  declarations: [Md2Tooltip, Md2TooltipComponent],\r\n})\r\nexport class Md2TooltipModule {}\r\n\r\n\r\nexport * from './tooltip';\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport {\r\n  MdRippleModule,\r\n  RtlModule,\r\n  PortalModule,\r\n  OverlayModule,\r\n  A11yModule,\r\n  CompatibilityModule,\r\n  MdNativeDateModule,\r\n} from './core/index';\r\n\r\nimport { Md2AccordionModule } from './accordion/index';\r\nimport { Md2AutocompleteModule } from './autocomplete/index';\r\nimport { Md2ChipsModule } from './chips/chips';\r\nimport { Md2CollapseModule } from './collapse/index';\r\nimport { Md2ColorpickerModule } from './colorpicker/index';\r\nimport { Md2DataTableModule } from './data-table/data-table';\r\nimport { Md2DatepickerModule } from './datepicker/index';\r\nimport { Md2DialogModule } from './dialog/index';\r\nimport { Md2MenuModule } from './menu/menu';\r\nimport { Md2SelectModule } from './select/index';\r\nimport { Md2TabsModule } from './tabs/tabs';\r\nimport { Md2TagsModule } from './tags/index';\r\nimport { Md2ToastModule } from './toast/index';\r\nimport { Md2TooltipModule } from './tooltip/index';\r\n\r\nimport { PlatformModule } from './core/platform/index';\r\nimport { StyleModule } from './core/style/index';\r\n\r\nconst MD2_MODULES = [\r\n  Md2AccordionModule,\r\n  Md2AutocompleteModule,\r\n  Md2ChipsModule,\r\n  Md2CollapseModule,\r\n  Md2ColorpickerModule,\r\n  Md2DataTableModule,\r\n  Md2DatepickerModule,\r\n  Md2DialogModule,\r\n  Md2MenuModule,\r\n  MdRippleModule,\r\n  Md2SelectModule,\r\n  Md2TabsModule,\r\n  Md2TagsModule,\r\n  Md2ToastModule,\r\n  Md2TooltipModule,\r\n  OverlayModule,\r\n  PortalModule,\r\n  RtlModule,\r\n  StyleModule,\r\n  A11yModule,\r\n  PlatformModule,\r\n  CompatibilityModule,\r\n  MdNativeDateModule,\r\n];\r\n\r\n@NgModule({\r\n  imports: MD2_MODULES,\r\n  exports: MD2_MODULES,\r\n})\r\nexport class Md2Module { }\r\n","/*\r\n * Public API Surface of md\r\n */\r\n\r\nexport * from './lib/core/index';\r\n\r\nexport * from './lib/accordion/index';\r\nexport * from './lib/autocomplete/index';\r\nexport * from './lib/chips/index';\r\nexport * from './lib/collapse/index';\r\nexport * from './lib/colorpicker/index';\r\nexport * from './lib/data-table/index';\r\nexport * from './lib/datepicker/index';\r\nexport * from './lib/datepicker/datepicker-toggle';\r\nexport * from './lib/datepicker/calendar';\r\nexport * from './lib/dialog/index';\r\nexport * from './lib/menu/index';\r\nexport * from './lib/select/index';\r\nexport * from './lib/tabs/index';\r\nexport * from './lib/tags/index';\r\nexport * from './lib/toast/index';\r\nexport * from './lib/tooltip/index';\r\n\r\nexport * from './lib/md.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Platform","i1.ScrollDispatcher","i2.ViewportRuler","_uniqueIdCounter","i2.MdRipple","i3.MatPrefixRejector","i3.MdPrefixRejector","i4","i5.MdPseudoCheckbox","i1.ViewportRuler","i1.ScrollStrategyOptions","i2.OverlayContainer","i3.OverlayPositionBuilder","i1.Overlay","i2.Dir","i1.InteractivityChecker","i2.Platform","SUPPORTS_INTL_API","DEFAULT_MONTH_NAMES","DEFAULT_DATE_NAMES","range","DEFAULT_DAY_OF_WEEK_NAMES","i1.Md2Accordion","nextId","i3.HighlightPipe","i3.Md2Autocomplete","i2.ColorUtil","i3","i1.Md2Optgroup","fadeInContent","i5.ConnectedOverlayDirective","i5.OverlayOrigin","i3.Md2Select","i4.Md2Option","i4.Md2CalendarBody","i3.Md2CalendarBody","i1.DateLocale","i2.DateUtil","i4.Md2MonthView","i5.Md2YearView","i6.Md2Clock","i1.FocusTrapDirective","i2.Md2Calendar","i3.Overlay","i4.DateLocale","i5.DateUtil","i6.Dir","i7","i2","i2.ScrollDispatcher","i3.Platform","i4.Dir"],"mappings":"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"}