@angular/material 5.2.1 → 5.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/_theming.scss +13 -10
  2. package/autocomplete/typings/index.metadata.json +1 -1
  3. package/bundles/material-autocomplete.umd.js +1 -1
  4. package/bundles/material-autocomplete.umd.js.map +1 -1
  5. package/bundles/material-autocomplete.umd.min.js +1 -1
  6. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  7. package/bundles/material-button.umd.js +2 -2
  8. package/bundles/material-button.umd.js.map +1 -1
  9. package/bundles/material-button.umd.min.js +1 -1
  10. package/bundles/material-button.umd.min.js.map +1 -1
  11. package/bundles/material-chips.umd.js +4 -0
  12. package/bundles/material-chips.umd.js.map +1 -1
  13. package/bundles/material-chips.umd.min.js +1 -1
  14. package/bundles/material-chips.umd.min.js.map +1 -1
  15. package/bundles/material-core.umd.js +64 -33
  16. package/bundles/material-core.umd.js.map +1 -1
  17. package/bundles/material-core.umd.min.js +1 -1
  18. package/bundles/material-core.umd.min.js.map +1 -1
  19. package/bundles/material-dialog.umd.js +12 -9
  20. package/bundles/material-dialog.umd.js.map +1 -1
  21. package/bundles/material-dialog.umd.min.js +1 -1
  22. package/bundles/material-dialog.umd.min.js.map +1 -1
  23. package/bundles/material-expansion.umd.js +1 -1
  24. package/bundles/material-expansion.umd.js.map +1 -1
  25. package/bundles/material-expansion.umd.min.js +1 -1
  26. package/bundles/material-expansion.umd.min.js.map +1 -1
  27. package/bundles/material-grid-list.umd.js +7 -7
  28. package/bundles/material-grid-list.umd.js.map +1 -1
  29. package/bundles/material-grid-list.umd.min.js +1 -1
  30. package/bundles/material-grid-list.umd.min.js.map +1 -1
  31. package/bundles/material-list.umd.js +46 -41
  32. package/bundles/material-list.umd.js.map +1 -1
  33. package/bundles/material-list.umd.min.js +3 -3
  34. package/bundles/material-list.umd.min.js.map +1 -1
  35. package/bundles/material-menu.umd.js +5 -5
  36. package/bundles/material-menu.umd.js.map +1 -1
  37. package/bundles/material-menu.umd.min.js +1 -1
  38. package/bundles/material-menu.umd.min.js.map +1 -1
  39. package/bundles/material-paginator.umd.js +2 -2
  40. package/bundles/material-paginator.umd.js.map +1 -1
  41. package/bundles/material-paginator.umd.min.js +1 -1
  42. package/bundles/material-paginator.umd.min.js.map +1 -1
  43. package/bundles/material-progress-spinner.umd.js +7 -3
  44. package/bundles/material-progress-spinner.umd.js.map +1 -1
  45. package/bundles/material-progress-spinner.umd.min.js +1 -1
  46. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  47. package/bundles/material-select.umd.js +3 -3
  48. package/bundles/material-select.umd.js.map +1 -1
  49. package/bundles/material-select.umd.min.js +1 -1
  50. package/bundles/material-select.umd.min.js.map +1 -1
  51. package/bundles/material-sidenav.umd.js +22 -31
  52. package/bundles/material-sidenav.umd.js.map +1 -1
  53. package/bundles/material-sidenav.umd.min.js +1 -1
  54. package/bundles/material-sidenav.umd.min.js.map +1 -1
  55. package/bundles/material-tabs.umd.js +13 -13
  56. package/bundles/material-tabs.umd.js.map +1 -1
  57. package/bundles/material-tabs.umd.min.js +1 -1
  58. package/bundles/material-tabs.umd.min.js.map +1 -1
  59. package/bundles/material.umd.js +186 -148
  60. package/bundles/material.umd.js.map +1 -1
  61. package/bundles/material.umd.min.js +17 -17
  62. package/bundles/material.umd.min.js.map +1 -1
  63. package/button/typings/index.metadata.json +1 -1
  64. package/core/typings/datetime/native-date-adapter.d.ts +17 -0
  65. package/core/typings/index.metadata.json +1 -1
  66. package/core/typings/ripple/ripple-renderer.d.ts +4 -1
  67. package/core/typings/ripple/ripple.d.ts +12 -2
  68. package/dialog/typings/index.metadata.json +1 -1
  69. package/esm2015/autocomplete.js +1 -1
  70. package/esm2015/autocomplete.js.map +1 -1
  71. package/esm2015/button.js +2 -2
  72. package/esm2015/button.js.map +1 -1
  73. package/esm2015/chips.js +4 -0
  74. package/esm2015/chips.js.map +1 -1
  75. package/esm2015/core.js +43 -26
  76. package/esm2015/core.js.map +1 -1
  77. package/esm2015/dialog.js +12 -9
  78. package/esm2015/dialog.js.map +1 -1
  79. package/esm2015/expansion.js +1 -1
  80. package/esm2015/expansion.js.map +1 -1
  81. package/esm2015/grid-list.js +7 -7
  82. package/esm2015/grid-list.js.map +1 -1
  83. package/esm2015/list.js +45 -36
  84. package/esm2015/list.js.map +1 -1
  85. package/esm2015/material.js +4 -4
  86. package/esm2015/material.js.map +1 -1
  87. package/esm2015/menu.js +2 -2
  88. package/esm2015/menu.js.map +1 -1
  89. package/esm2015/paginator.js +2 -2
  90. package/esm2015/paginator.js.map +1 -1
  91. package/esm2015/progress-spinner.js +13 -9
  92. package/esm2015/progress-spinner.js.map +1 -1
  93. package/esm2015/select.js +3 -3
  94. package/esm2015/select.js.map +1 -1
  95. package/esm2015/sidenav.js +18 -17
  96. package/esm2015/sidenav.js.map +1 -1
  97. package/esm2015/tabs.js +4 -4
  98. package/esm2015/tabs.js.map +1 -1
  99. package/esm5/autocomplete.es5.js +1 -1
  100. package/esm5/autocomplete.es5.js.map +1 -1
  101. package/esm5/button.es5.js +2 -2
  102. package/esm5/button.es5.js.map +1 -1
  103. package/esm5/chips.es5.js +4 -0
  104. package/esm5/chips.es5.js.map +1 -1
  105. package/esm5/core.es5.js +64 -33
  106. package/esm5/core.es5.js.map +1 -1
  107. package/esm5/dialog.es5.js +12 -9
  108. package/esm5/dialog.es5.js.map +1 -1
  109. package/esm5/expansion.es5.js +1 -1
  110. package/esm5/expansion.es5.js.map +1 -1
  111. package/esm5/grid-list.es5.js +7 -7
  112. package/esm5/grid-list.es5.js.map +1 -1
  113. package/esm5/list.es5.js +47 -42
  114. package/esm5/list.es5.js.map +1 -1
  115. package/esm5/material.es5.js +4 -4
  116. package/esm5/material.es5.js.map +1 -1
  117. package/esm5/menu.es5.js +2 -2
  118. package/esm5/menu.es5.js.map +1 -1
  119. package/esm5/paginator.es5.js +2 -2
  120. package/esm5/paginator.es5.js.map +1 -1
  121. package/esm5/progress-spinner.es5.js +7 -3
  122. package/esm5/progress-spinner.es5.js.map +1 -1
  123. package/esm5/select.es5.js +3 -3
  124. package/esm5/select.es5.js.map +1 -1
  125. package/esm5/sidenav.es5.js +19 -27
  126. package/esm5/sidenav.es5.js.map +1 -1
  127. package/esm5/tabs.es5.js +4 -4
  128. package/esm5/tabs.es5.js.map +1 -1
  129. package/expansion/typings/index.metadata.json +1 -1
  130. package/list/typings/index.metadata.json +1 -1
  131. package/list/typings/list.d.ts +1 -2
  132. package/list/typings/selection-list.d.ts +10 -7
  133. package/menu/typings/index.d.ts +2 -2
  134. package/menu/typings/index.metadata.json +1 -1
  135. package/package.json +4 -4
  136. package/paginator/typings/index.metadata.json +1 -1
  137. package/prebuilt-themes/deeppurple-amber.css +1 -1
  138. package/prebuilt-themes/indigo-pink.css +1 -1
  139. package/prebuilt-themes/pink-bluegrey.css +1 -1
  140. package/prebuilt-themes/purple-green.css +1 -1
  141. package/progress-spinner/typings/index.metadata.json +1 -1
  142. package/select/typings/index.metadata.json +1 -1
  143. package/select/typings/select.d.ts +1 -1
  144. package/sidenav/typings/drawer.d.ts +2 -6
  145. package/sidenav/typings/index.metadata.json +1 -1
  146. package/tabs/typings/index.d.ts +4 -4
  147. package/tabs/typings/index.metadata.json +1 -1
  148. package/typings/autocomplete/index.metadata.json +1 -1
  149. package/typings/button/index.metadata.json +1 -1
  150. package/typings/core/datetime/native-date-adapter.d.ts +17 -0
  151. package/typings/core/index.metadata.json +1 -1
  152. package/typings/core/ripple/ripple-renderer.d.ts +4 -1
  153. package/typings/core/ripple/ripple.d.ts +12 -2
  154. package/typings/dialog/index.metadata.json +1 -1
  155. package/typings/esm5/autocomplete/index.metadata.json +1 -1
  156. package/typings/esm5/button/index.metadata.json +1 -1
  157. package/typings/esm5/core/datetime/native-date-adapter.d.ts +17 -0
  158. package/typings/esm5/core/index.metadata.json +1 -1
  159. package/typings/esm5/core/ripple/ripple-renderer.d.ts +4 -1
  160. package/typings/esm5/core/ripple/ripple.d.ts +12 -2
  161. package/typings/esm5/dialog/index.metadata.json +1 -1
  162. package/typings/esm5/expansion/index.metadata.json +1 -1
  163. package/typings/esm5/index.metadata.json +1 -1
  164. package/typings/esm5/list/index.metadata.json +1 -1
  165. package/typings/esm5/list/list.d.ts +1 -2
  166. package/typings/esm5/list/selection-list.d.ts +10 -7
  167. package/typings/esm5/menu/index.d.ts +2 -2
  168. package/typings/esm5/menu/index.metadata.json +1 -1
  169. package/typings/esm5/paginator/index.metadata.json +1 -1
  170. package/typings/esm5/progress-spinner/index.metadata.json +1 -1
  171. package/typings/esm5/select/index.metadata.json +1 -1
  172. package/typings/esm5/select/select.d.ts +1 -1
  173. package/typings/esm5/sidenav/drawer.d.ts +2 -6
  174. package/typings/esm5/sidenav/index.metadata.json +1 -1
  175. package/typings/esm5/tabs/index.d.ts +4 -4
  176. package/typings/esm5/tabs/index.metadata.json +1 -1
  177. package/typings/expansion/index.metadata.json +1 -1
  178. package/typings/index.metadata.json +1 -1
  179. package/typings/list/index.metadata.json +1 -1
  180. package/typings/list/list.d.ts +1 -2
  181. package/typings/list/selection-list.d.ts +10 -7
  182. package/typings/menu/index.d.ts +2 -2
  183. package/typings/menu/index.metadata.json +1 -1
  184. package/typings/paginator/index.metadata.json +1 -1
  185. package/typings/progress-spinner/index.metadata.json +1 -1
  186. package/typings/select/index.metadata.json +1 -1
  187. package/typings/select/select.d.ts +1 -1
  188. package/typings/sidenav/drawer.d.ts +2 -6
  189. package/typings/sidenav/index.metadata.json +1 -1
  190. package/typings/tabs/index.d.ts +4 -4
  191. package/typings/tabs/index.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../../src/lib/tabs/index.ts","../../../src/lib/tabs/public-api.ts","../../../src/lib/tabs/tab-nav-bar/index.ts","../../../src/lib/tabs/tabs-module.ts","../../../src/lib/tabs/tab-nav-bar/tab-nav-bar.ts","../../../src/lib/tabs/tab-header.ts","../../../src/lib/tabs/tab-label-wrapper.ts","../../../src/lib/tabs/tab-group.ts","../../../src/lib/tabs/tab-body.ts","../../../src/lib/tabs/tabs-animations.ts","../../../src/lib/tabs/tab.ts","../../../src/lib/tabs/tab-label.ts","../../../src/lib/tabs/ink-bar.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MatTabBase as ɵe,_MatTabMixinBase as ɵf} from './tab';\nexport {MatTabHeaderBase as ɵa,_MatTabHeaderMixinBase as ɵb} from './tab-header';\nexport {MatTabLabelWrapperBase as ɵc,_MatTabLabelWrapperMixinBase as ɵd} from './tab-label-wrapper';\nexport {MatTabLinkBase as ɵi,MatTabNavBase as ɵg,_MatTabLinkMixinBase as ɵj,_MatTabNavMixinBase as ɵh} from './tab-nav-bar/tab-nav-bar';","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './tabs-module';\nexport * from './tab-group';\nexport {MatInkBar} from './ink-bar';\nexport {\n MatTabBody,\n MatTabBodyOriginState,\n MatTabBodyPositionState,\n MatTabBodyPortal\n} from './tab-body';\nexport {MatTabHeader, ScrollDirection} from './tab-header';\nexport {MatTabLabelWrapper} from './tab-label-wrapper';\nexport {MatTab} from './tab';\nexport {MatTabLabel} from './tab-label';\nexport {MatTabNav, MatTabLink} from './tab-nav-bar/index';\nexport * from './tabs-animations';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './tab-nav-bar';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {ScrollDispatchModule, VIEWPORT_RULER_PROVIDER} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatInkBar} from './ink-bar';\nimport {MatTab} from './tab';\nimport {MatTabBody, MatTabBodyPortal} from './tab-body';\nimport {MatTabGroup} from './tab-group';\nimport {MatTabHeader} from './tab-header';\nimport {MatTabLabel} from './tab-label';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {MatTabLink, MatTabNav} from './tab-nav-bar/tab-nav-bar';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n ScrollDispatchModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabLink,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader\n ],\n providers: [VIEWPORT_RULER_PROVIDER],\n})\nexport class MatTabsModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple,\n HasTabIndex,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex, RippleConfig,\n RippleGlobalOptions,\n RippleRenderer,\n RippleTarget,\n ThemePalette,\n} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {takeUntil} from 'rxjs/operators/takeUntil';\nimport {Subject} from 'rxjs/Subject';\nimport {MatInkBar} from '../ink-bar';\n\n\n// Boilerplate for applying mixins to MatTabNav.\n/** @docs-private */\nexport class MatTabNavBase {\n constructor(public _elementRef: ElementRef) {}\n}\nexport const _MatTabNavMixinBase = mixinColor(MatTabNavBase, 'primary');\n\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\n@Component({\n moduleId: module.id,\n selector: '[mat-tab-nav-bar]',\n exportAs: 'matTabNavBar, matTabNav',\n inputs: ['color'],\n templateUrl: 'tab-nav-bar.html',\n styleUrls: ['tab-nav-bar.css'],\n host: {'class': 'mat-tab-nav-bar'},\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatTabNav extends _MatTabNavMixinBase implements AfterContentInit, CanColor,\n OnDestroy {\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n _activeLinkChanged: boolean;\n _activeLinkElement: ElementRef;\n\n @ViewChild(MatInkBar) _inkBar: MatInkBar;\n\n /** Query list of all tab links of the tab navigation. */\n @ContentChildren(forwardRef(() => MatTabLink), {descendants: true})\n _tabLinks: QueryList<MatTabLink>;\n\n /** Background color of the tab nav. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const nativeElement: HTMLElement = this._elementRef.nativeElement;\n\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Whether ripples should be disabled for all links or not. */\n @Input()\n get disableRipple() { return this._disableRipple; }\n set disableRipple(value: boolean) {\n this._disableRipple = coerceBooleanProperty(value);\n this._setLinkDisableRipple();\n }\n private _disableRipple: boolean = false;\n\n constructor(elementRef: ElementRef,\n @Optional() private _dir: Directionality,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler) {\n super(elementRef);\n }\n\n /** Notifies the component that the active link has been changed. */\n updateActiveLink(element: ElementRef) {\n this._activeLinkChanged = this._activeLinkElement != element;\n this._activeLinkElement = element;\n\n if (this._activeLinkChanged) {\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit(): void {\n this._ngZone.runOutsideAngular(() => {\n const dirChange = this._dir ? this._dir.change : observableOf(null);\n\n return merge(dirChange, this._viewportRuler.change(10)).pipe(takeUntil(this._onDestroy))\n .subscribe(() => this._alignInkBar());\n });\n\n this._setLinkDisableRipple();\n }\n\n /** Checks if the active link has been changed and, if so, will update the ink bar. */\n ngAfterContentChecked(): void {\n if (this._activeLinkChanged) {\n this._alignInkBar();\n this._activeLinkChanged = false;\n }\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n /** Aligns the ink bar to the active link. */\n _alignInkBar(): void {\n if (this._activeLinkElement) {\n this._inkBar.alignToElement(this._activeLinkElement.nativeElement);\n }\n }\n\n /** Sets the `disableRipple` property on each link of the navigation bar. */\n private _setLinkDisableRipple() {\n if (this._tabLinks) {\n this._tabLinks.forEach(link => link.disableRipple = this.disableRipple);\n }\n }\n}\n\n\n// Boilerplate for applying mixins to MatTabLink.\nexport class MatTabLinkBase {}\nexport const _MatTabLinkMixinBase =\n mixinTabIndex(mixinDisableRipple(mixinDisabled(MatTabLinkBase)));\n\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\n@Directive({\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabIndex]': 'tabIndex',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n '(click)': '_handleClick($event)'\n }\n})\nexport class MatTabLink extends _MatTabLinkMixinBase\n implements OnDestroy, CanDisable, CanDisableRipple, HasTabIndex, RippleTarget {\n\n /** Whether the tab link is active or not. */\n private _isActive: boolean = false;\n\n /** Reference to the RippleRenderer for the tab-link. */\n private _tabLinkRipple: RippleRenderer;\n\n /** Whether the link is active. */\n @Input()\n get active(): boolean { return this._isActive; }\n set active(value: boolean) {\n this._isActive = value;\n if (value) {\n this._tabNavBar.updateActiveLink(this._elementRef);\n }\n }\n\n /**\n * Ripple configuration for ripples that are launched on pointer down.\n * @docs-private\n */\n rippleConfig: RippleConfig = {};\n\n /**\n * Whether ripples are disabled on interaction\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return this.disabled || this.disableRipple;\n }\n\n constructor(private _tabNavBar: MatTabNav,\n private _elementRef: ElementRef,\n ngZone: NgZone,\n platform: Platform,\n @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions: RippleGlobalOptions,\n @Attribute('tabindex') tabIndex: string) {\n super();\n\n this._tabLinkRipple = new RippleRenderer(this, ngZone, _elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(_elementRef.nativeElement);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n\n if (globalOptions) {\n this.rippleConfig = {\n terminateOnPointerUp: globalOptions.terminateOnPointerUp,\n speedFactor: globalOptions.baseSpeedFactor,\n animation: globalOptions.animation,\n };\n }\n }\n\n ngOnDestroy() {\n this._tabLinkRipple._removeTriggerEvents();\n }\n\n /**\n * Handles the click event, preventing default navigation if the tab link is disabled.\n */\n _handleClick(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, HOME, END} from '@angular/cdk/keycodes';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisableRipple, mixinDisableRipple} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subscription} from 'rxjs/Subscription';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {MatInkBar} from './ink-bar';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\n\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n\n// Boilerplate for applying mixins to MatTabHeader.\n/** @docs-private */\nexport class MatTabHeaderBase {}\nexport const _MatTabHeaderMixinBase = mixinDisableRipple(MatTabHeaderBase);\n\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-header',\n templateUrl: 'tab-header.html',\n styleUrls: ['tab-header.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n})\nexport class MatTabHeader extends _MatTabHeaderMixinBase\n implements AfterContentChecked, AfterContentInit, OnDestroy, CanDisableRipple {\n\n @ContentChildren(MatTabLabelWrapper) _labelWrappers: QueryList<MatTabLabelWrapper>;\n @ViewChild(MatInkBar) _inkBar: MatInkBar;\n @ViewChild('tabListContainer') _tabListContainer: ElementRef;\n @ViewChild('tabList') _tabList: ElementRef;\n\n /** The tab index that is focused. */\n private _focusIndex: number = 0;\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistance = 0;\n\n /** Whether the header should scroll to the selected index after the view has been checked. */\n private _selectedIndexChanged = false;\n\n /** Combines listeners that will re-align the ink bar whenever they're invoked. */\n private _realignInkBar = Subscription.EMPTY;\n\n /** Whether the controls for pagination should be displayed */\n _showPaginationControls = false;\n\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n _disableScrollAfter = true;\n\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n _disableScrollBefore = true;\n\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n private _tabLabelCount: number;\n\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n private _scrollDistanceChanged: boolean;\n\n private _selectedIndex: number = 0;\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number { return this._selectedIndex; }\n set selectedIndex(value: number) {\n value = coerceNumberProperty(value);\n this._selectedIndexChanged = this._selectedIndex != value;\n this._selectedIndex = value;\n this._focusIndex = value;\n }\n\n /** Event emitted when the option is selected. */\n @Output() readonly selectFocusedIndex = new EventEmitter();\n\n /** Event emitted when a label is focused. */\n @Output() readonly indexFocused = new EventEmitter();\n\n constructor(private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() private _dir: Directionality) {\n super();\n }\n\n ngAfterContentChecked(): void {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._labelWrappers.length) {\n this._updatePagination();\n this._tabLabelCount = this._labelWrappers.length;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n _handleKeydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case RIGHT_ARROW:\n this._focusNextTab();\n break;\n case LEFT_ARROW:\n this._focusPreviousTab();\n break;\n case HOME:\n this._focusFirstTab();\n event.preventDefault();\n break;\n case END:\n this._focusLastTab();\n event.preventDefault();\n break;\n case ENTER:\n case SPACE:\n this.selectFocusedIndex.emit(this.focusIndex);\n event.preventDefault();\n break;\n }\n }\n\n /**\n * Aligns the ink bar to the selected tab on load.\n */\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf(null);\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n };\n\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame(realign) : realign();\n this._realignInkBar = merge(dirChange, resize).subscribe(realign);\n }\n\n ngOnDestroy() {\n this._realignInkBar.unsubscribe();\n }\n\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Updating the view whether pagination should be enabled or not\n */\n _updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value: number) {\n if (!this._isValidIndex(value) || this._focusIndex == value) { return; }\n\n this._focusIndex = value;\n this.indexFocused.emit(value);\n this._setTabFocus(value);\n }\n\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex(): number { return this._focusIndex; }\n\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index: number): boolean {\n if (!this._labelWrappers) { return true; }\n\n const tab = this._labelWrappers ? this._labelWrappers.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex: number) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n\n if (this._labelWrappers && this._labelWrappers.length) {\n this._labelWrappers.toArray()[tabIndex].focus();\n\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n\n /**\n * Moves the focus towards the beginning or the end of the list depending on the offset provided.\n * Valid offsets are 1 and -1.\n */\n _moveFocus(offset: number) {\n if (this._labelWrappers) {\n const tabs: MatTabLabelWrapper[] = this._labelWrappers.toArray();\n\n for (let i = this.focusIndex + offset; i < tabs.length && i >= 0; i += offset) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n return;\n }\n }\n }\n }\n\n /** Increment the focus index by 1 until a valid tab is found. */\n _focusNextTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? 1 : -1);\n }\n\n /** Decrement the focus index by 1 until a valid tab is found. */\n _focusPreviousTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? -1 : 1);\n }\n\n /** Focuses the first tab. */\n private _focusFirstTab(): void {\n for (let i = 0; i < this._labelWrappers.length; i++) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n break;\n }\n }\n }\n\n /** Focuses the last tab. */\n private _focusLastTab(): void {\n for (let i = this._labelWrappers.length - 1; i > -1; i--) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n break;\n }\n }\n }\n\n /** The layout direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n this._tabList.nativeElement.style.transform = `translate3d(${translateX}px, 0, 0)`;\n }\n\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance(): number { return this._scrollDistance; }\n set scrollDistance(v: number) {\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), v));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n }\n\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(scrollDir: ScrollDirection) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n // Move the scroll distance one-third the length of the tab list's viewport.\n this.scrollDistance += (scrollDir == 'before' ? -1 : 1) * viewLength / 3;\n }\n\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex: number) {\n const selectedLabel = this._labelWrappers ? this._labelWrappers.toArray()[labelIndex] : null;\n\n if (!selectedLabel) { return; }\n\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n let labelBeforePos: number, labelAfterPos: number;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = selectedLabel.getOffsetLeft();\n labelAfterPos = labelBeforePos + selectedLabel.getOffsetWidth();\n } else {\n labelAfterPos = this._tabList.nativeElement.offsetWidth - selectedLabel.getOffsetLeft();\n labelBeforePos = labelAfterPos - selectedLabel.getOffsetWidth();\n }\n\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n const isEnabled =\n this._tabList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._showPaginationControls = isEnabled;\n }\n\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance(): number {\n const lengthOfTabList = this._tabList.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return (lengthOfTabList - viewLength) || 0;\n }\n\n /** Tells the ink-bar to align itself to the current label wrapper */\n private _alignInkBarToSelectedTab(): void {\n const selectedLabelWrapper = this._labelWrappers && this._labelWrappers.length ?\n this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement :\n null;\n\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\n\n// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nexport class MatTabLabelWrapperBase {}\nexport const _MatTabLabelWrapperMixinBase = mixinDisabled(MatTabLabelWrapperBase);\n\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled'\n }\n})\nexport class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase implements CanDisable {\n constructor(public elementRef: ElementRef) {\n super();\n }\n\n /** Sets focus on the wrapper element */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n getOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n\n getOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MatTab} from './tab';\nimport {MatTabHeader} from './tab-header';\nimport {merge} from 'rxjs/observable/merge';\nimport {\n CanColor,\n CanDisableRipple,\n mixinColor,\n mixinDisableRipple,\n ThemePalette\n} from '@angular/material/core';\n\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n/** A simple change event emitted on focus or selection changes. */\nexport class MatTabChangeEvent {\n /** Index of the currently-selected tab. */\n index: number;\n /** Reference to the currently-selected tab. */\n tab: MatTab;\n}\n\n/** Possible positions for the tab header. */\nexport type MatTabHeaderPosition = 'above' | 'below';\n\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nexport class MatTabGroupBase {\n constructor(public _elementRef: ElementRef) {}\n}\nexport const _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(MatTabGroupBase), 'primary');\n\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://www.google.com/design/spec/components/tabs.html\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-group',\n exportAs: 'matTabGroup',\n templateUrl: 'tab-group.html',\n styleUrls: ['tab-group.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color', 'disableRipple'],\n host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n },\n})\nexport class MatTabGroup extends _MatTabGroupMixinBase implements AfterContentInit,\n AfterContentChecked, OnDestroy, CanColor, CanDisableRipple {\n\n @ContentChildren(MatTab) _tabs: QueryList<MatTab>;\n\n @ViewChild('tabBodyWrapper') _tabBodyWrapper: ElementRef;\n\n /** The tab index that should be selected after the content has been checked. */\n private _indexToSelect: number | null = 0;\n\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n private _tabBodyWrapperHeight: number = 0;\n\n /** Subscription to tabs being added/removed. */\n private _tabsSubscription = Subscription.EMPTY;\n\n /** Subscription to changes in the tab labels. */\n private _tabLabelSubscription = Subscription.EMPTY;\n\n /** Whether the tab group should grow to the size of the active tab. */\n @Input()\n get dynamicHeight(): boolean { return this._dynamicHeight; }\n set dynamicHeight(value: boolean) { this._dynamicHeight = coerceBooleanProperty(value); }\n private _dynamicHeight: boolean = false;\n\n /**\n * @deprecated\n * @deletion-target 6.0.0\n */\n @Input('mat-dynamic-height')\n get _dynamicHeightDeprecated(): boolean { return this._dynamicHeight; }\n set _dynamicHeightDeprecated(value: boolean) { this._dynamicHeight = value; }\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number | null { return this._selectedIndex; }\n set selectedIndex(value: number | null) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n private _selectedIndex: number | null = null;\n\n /** Position of the tab header. */\n @Input() headerPosition: MatTabHeaderPosition = 'above';\n\n /** Background color of the tab group. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const nativeElement: HTMLElement = this._elementRef.nativeElement;\n\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when focus has changed within a tab group. */\n @Output() readonly focusChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>();\n\n /** Event emitted when the body animation has completed */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the tab selection has changed. */\n @Output() readonly selectedTabChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>(true);\n\n /**\n * Event emitted when the tab selection has changed.\n * @deprecated Use `selectedTabChange` instead.\n * @deletion-target 6.0.0\n */\n @Output() readonly selectChange: EventEmitter<MatTabChangeEvent> = this.selectedTabChange;\n\n private _groupId: number;\n\n constructor(elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef) {\n super(elementRef);\n this._groupId = nextId++;\n }\n\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Clamp the next selected index to the boundsof 0 and the tabs length.\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n let indexToSelect = this._indexToSelect =\n Math.min(this._tabs.length - 1, Math.max(this._indexToSelect || 0, 0));\n\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect && this._selectedIndex != null) {\n const tabChangeEvent = this._createChangeEvent(indexToSelect);\n this.selectedTabChange.emit(tabChangeEvent);\n // Emitting this value after change detection has run\n // since the checked content may contain this variable'\n Promise.resolve().then(() => this.selectedIndexChange.emit(indexToSelect));\n }\n\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab: MatTab, index: number) => {\n tab.position = index - indexToSelect;\n tab.isActive = index === indexToSelect;\n\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit() {\n this._subscribeToTabLabels();\n\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n this._subscribeToTabLabels();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n\n _focusChanged(index: number) {\n this.focusChange.emit(this._createChangeEvent(index));\n }\n\n private _createChangeEvent(index: number): MatTabChangeEvent {\n const event = new MatTabChangeEvent;\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n private _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n\n this._tabLabelSubscription = merge(\n ...this._tabs.map(tab => tab._disableChange),\n ...this._tabs.map(tab => tab._labelChange)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i: number): string {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n\n /** Returns a unique id for each tab content element */\n _getTabContentId(i: number): string {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight: number): void {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) { return; }\n\n const wrapper: HTMLElement = this._tabBodyWrapper.nativeElement;\n\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight(): void {\n this._tabBodyWrapperHeight = this._tabBodyWrapper.nativeElement.clientHeight;\n this._tabBodyWrapper.nativeElement.style.height = '';\n this.animationDone.emit();\n }\n\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab: MatTab, tabHeader: MatTabHeader, idx: number) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = idx;\n }\n }\n\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab: MatTab, idx: number): number | null {\n if (tab.disabled) {\n return null;\n }\n return this.selectedIndex === idx ? 0 : -1;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n Component,\n Input,\n Inject,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n ElementRef,\n Directive,\n Optional,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ComponentFactoryResolver,\n ViewContainerRef,\n forwardRef,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {TemplatePortal, CdkPortalOutlet} from '@angular/cdk/portal';\nimport {Directionality, Direction} from '@angular/cdk/bidi';\nimport {Subscription} from 'rxjs/Subscription';\nimport {matTabsAnimations} from './tabs-animations';\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * psuedo-prior state.\n */\nexport type MatTabBodyPositionState =\n 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type MatTabBodyOriginState = 'left' | 'right';\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({\n selector: '[matTabBodyHost]'\n})\nexport class MatTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n /** A subscription to events for when the tab body begins centering. */\n private _centeringSub: Subscription;\n /** A subscription to events for when the tab body finishes leaving from center position. */\n private _leavingSub: Subscription;\n\n constructor(\n _componentFactoryResolver: ComponentFactoryResolver,\n _viewContainerRef: ViewContainerRef,\n @Inject(forwardRef(() => MatTabBody)) private _host: MatTabBody) {\n super(_componentFactoryResolver, _viewContainerRef);\n }\n\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit(): void {\n if (this._host._isCenterPosition(this._host._position)) {\n this.attach(this._host._content);\n }\n this._centeringSub = this._host._beforeCentering.subscribe((isCentering: boolean) => {\n if (isCentering) {\n if (!this.hasAttached()) {\n this.attach(this._host._content);\n }\n }\n });\n\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n this.detach();\n });\n }\n\n /** Clean up centering subscription. */\n ngOnDestroy(): void {\n if (this._centeringSub && !this._centeringSub.closed) {\n this._centeringSub.unsubscribe();\n }\n\n if (this._leavingSub && !this._leavingSub.closed) {\n this._leavingSub.unsubscribe();\n }\n }\n}\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-body',\n templateUrl: 'tab-body.html',\n styleUrls: ['tab-body.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [matTabsAnimations.translateTab],\n host: {\n 'class': 'mat-tab-body',\n },\n})\nexport class MatTabBody implements OnInit {\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n @Output() readonly _onCentering: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _afterLeavingCenter: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the tab completes its animation towards the center. */\n @Output() readonly _onCentered: EventEmitter<void> = new EventEmitter<void>(true);\n\n /** The tab body content to display. */\n @Input('content') _content: TemplatePortal;\n\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n @Input()\n set position(position: number) {\n if (position < 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'left' : 'right';\n } else if (position > 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'right' : 'left';\n } else {\n this._position = 'center';\n }\n }\n _position: MatTabBodyPositionState;\n\n /** The origin position from which this tab should appear when it is centered into view. */\n @Input()\n set origin(origin: number) {\n if (origin == null) { return; }\n\n const dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n this._origin = 'left';\n } else {\n this._origin = 'right';\n }\n }\n _origin: MatTabBodyOriginState;\n\n constructor(private _elementRef: ElementRef,\n @Optional() private _dir: Directionality) { }\n\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this._origin) {\n this._position = this._origin == 'left' ? 'left-origin-center' : 'right-origin-center';\n }\n }\n\n _onTranslateTabStarted(e: AnimationEvent): void {\n const isCentering = this._isCenterPosition(e.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n\n _onTranslateTabComplete(e: AnimationEvent): void {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(e.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n\n if (this._isCenterPosition(e.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n }\n\n /** The text direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position: MatTabBodyPositionState|string): boolean {\n return position == 'center' ||\n position == 'left-origin-center' ||\n position == 'right-origin-center';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/** Animations used by the Material tabs. */\nexport const matTabsAnimations: {\n readonly translateTab: AnimationTriggerMetadata;\n} = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({transform: 'none'})),\n state('left', style({transform: 'translate3d(-100%, 0, 0)'})),\n state('right', style({transform: 'translate3d(100%, 0, 0)'})),\n transition('* => left, * => right, left => center, right => center',\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({transform: 'translate3d(-100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({transform: 'translate3d(100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ])\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\nimport {MatTabLabel} from './tab-label';\n\n\n// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nexport class MatTabBase {}\nexport const _MatTabMixinBase = mixinDisabled(MatTabBase);\n\n@Component({\n moduleId: module.id,\n selector: 'mat-tab',\n templateUrl: 'tab.html',\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n exportAs: 'matTab',\n})\nexport class MatTab extends _MatTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\n /** Content for the tab label given by `<ng-template mat-tab-label>`. */\n @ContentChild(MatTabLabel) templateLabel: MatTabLabel;\n\n /** Template inside the MatTab view that contains an `<ng-content>`. */\n @ViewChild(TemplateRef) _content: TemplateRef<any>;\n\n /** The plain text label for the tab, used when there is no template label. */\n @Input('label') textLabel: string = '';\n\n /** The portal that will be the hosted content of the tab */\n private _contentPortal: TemplatePortal | null = null;\n\n /** @docs-private */\n get content(): TemplatePortal | null {\n return this._contentPortal;\n }\n\n /** Emits whenever the label changes. */\n readonly _labelChange = new Subject<void>();\n\n /** Emits whenever the disable changes */\n readonly _disableChange = new Subject<void>();\n\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n position: number | null = null;\n\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n origin: number | null = null;\n\n /**\n * Whether the tab is currently active.\n */\n isActive = false;\n\n constructor(private _viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel')) {\n this._labelChange.next();\n }\n\n if (changes.hasOwnProperty('disabled')) {\n this._disableChange.next();\n }\n }\n\n ngOnDestroy(): void {\n this._disableChange.complete();\n this._labelChange.complete();\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {CdkPortal} from '@angular/cdk/portal';\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n selector: '[mat-tab-label], [matTabLabel]',\n})\nexport class MatTabLabel extends CdkPortal {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, NgZone} from '@angular/core';\n\n\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\n@Directive({\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n },\n})\nexport class MatInkBar {\n constructor(\n private _elementRef: ElementRef,\n private _ngZone: NgZone) {}\n\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element: HTMLElement) {\n this.show();\n\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._setStyles(element));\n });\n } else {\n this._setStyles(element);\n }\n }\n\n /** Shows the ink bar. */\n show(): void {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n\n /** Hides the ink bar. */\n hide(): void {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n\n /**\n * Sets the proper styles to the ink bar element.\n * @param element\n */\n private _setStyles(element: HTMLElement) {\n const inkBar: HTMLElement = this._elementRef.nativeElement;\n\n inkBar.style.left = element ? (element.offsetLeft || 0) + 'px' : '0';\n inkBar.style.width = element ? (element.offsetWidth || 0) + 'px' : '0';\n }\n}\n"],"names":["observableOf"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AYQA;;;;AAaA,AAAA,MAAA,SAAA,CAAA;;;;;IACE,WAAF,CACY,WADZ,EAEY,OAFZ,EAAA;QACY,IAAZ,CAAA,WAAuB,GAAX,WAAW,CAAvB;QACY,IAAZ,CAAA,OAAmB,GAAP,OAAO,CAAnB;KAA+B;;;;;;;IAO7B,cAAc,CAAC,OAAoB,EAArC;QACI,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAArC;gBACQ,qBAAqB,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;aACvD,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC1B;KACF;;;;;IAGD,IAAI,GAAN;QACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;KAC7D;;;;;IAGD,IAAI,GAAN;QACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;KAC5D;;;;;;IAMO,UAAU,CAAC,OAAoB,EAAzC;QACI,uBAAM,MAAM,GAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAE3D,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;;;;IA9C3E,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW;gBACT,QAAQ,EAAE,aAAa;gBACvB,IAAI,EAAE;oBACJ,OAAO,EAAE,aAAa;iBACvB;aACF,EAAD,EAAA;;;;IAZA,EAAA,IAAA,EAAmB,UAAU,GAA7B;IAAA,EAAA,IAAA,EAA+B,MAAM,GAArC;;;;;;;;ADAA,AACA;;;AAMA,AAAA,MAAA,WAAyB,SAAQ,SAAS,CAA1C;;;;;IACE,WAAF,CAAc,WAA6B,EAAE,gBAAkC,EAA/E;QACI,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;KACtC;;;IANH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW;gBACT,QAAQ,EAAE,gCAAgC;aAC3C,EAAD,EAAA;;;;IANA,EAAA,IAAA,EAAmB,WAAW,GAA9B;IAAA,EAAA,IAAA,EAAgC,gBAAgB,GAAhD;;;;;;;;ADAA,AACA,AAcA,AACA,AACA;;;AAKA,AAAA,MAAA,UAAA,CAAA;CAA0B;AAC1B,AAAO,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAY1D,AAAA,MAAA,MAAoB,SAAQ,gBAAgB,CAA5C;;;;IAyCE,WAAF,CAAsB,iBAAmC,EAAzD;QACI,KAAK,EAAE,CAAC;QADU,IAAtB,CAAA,iBAAuC,GAAjB,iBAAiB,CAAkB;;;;QAjCzD,IAAA,CAAA,SAAA,GAAsC,EAAE,CAAxC;;;;QAGA,IAAA,CAAA,cAAA,GAAkD,IAAI,CAAtD;;;;QAQA,IAAA,CAAA,YAAA,GAA0B,IAAI,OAAO,EAAQ,CAA7C;;;;QAGA,IAAA,CAAA,cAAA,GAA4B,IAAI,OAAO,EAAQ,CAA/C;;;;;QAMA,IAAA,CAAA,QAAA,GAA4B,IAAI,CAAhC;;;;;QAMA,IAAA,CAAA,MAAA,GAA0B,IAAI,CAA9B;;;;QAKA,IAAA,CAAA,QAAA,GAAa,KAAK,CAAlB;KAIG;;;;;IA7BD,IAAI,OAAO,GAAb;QACI,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;;IA6BD,WAAW,CAAC,OAAsB,EAApC;QACI,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YACvC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC1B;QAED,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC5B;KACF;;;;IAED,WAAW,GAAb;QACI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;;;;IAED,QAAQ,GAAV;QACI,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACjF;;;IAxEH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW,CAAX,QAAA,EAAA,SAAA;gBACE,QAAQ,EAAE,sDAAZ;gBACE,MAAF,EAAU,CAAV,UAAqB,CAArB;gBACE,eAAF,EAAA,uBAAA,CAAA,MAAA;gBACE,aAAF,EAAA,iBAAA,CAAA,IAAA;gBACE,mBAAF,EAAA,KAAA;gBACE,QAAF,EAAA,QAAA;aACA,EAAA,EAAA;CACA,CAAA;;;;;AArBA,MAAA,CAAA,cAAA,GAAA;;;IAyBA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,CAAA,OAAA,EAAA,EAAgB,EAAhB;CAGA,CAAA,AAGA;;;;;;AD5CA;;;AAUA,AAAO,MAAM,iBAAiB,GAE1B;;IAEF,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE;;QAEpC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,0BAA0B,EAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,yBAAyB,EAAC,CAAC,CAAC;QAC7D,UAAU,CAAC,wDAAwD,EAC/D,OAAO,CAAC,sCAAsC,CAAC,CAAC;QACpD,UAAU,CAAC,4BAA4B,EAAE;YACvC,KAAK,CAAC,EAAC,SAAS,EAAE,0BAA0B,EAAC,CAAC;YAC9C,OAAO,CAAC,sCAAsC,CAAC;SAChD,CAAC;QACF,UAAU,CAAC,6BAA6B,EAAE;YACxC,KAAK,CAAC,EAAC,SAAS,EAAE,yBAAyB,EAAC,CAAC;YAC7C,OAAO,CAAC,sCAAsC,CAAC;SAChD,CAAC;KACH,CAAC;CACH,CAAC;;;;;;;AD7BF,AAkBA,AACA,AAEA;;;;AA8BA,AAAA,MAAA,gBAA8B,SAAQ,eAAe,CAArD;;;;;;IAME,WAAF,CACI,yBAAmD,EACnD,iBAAmC,EACW,KAHlD,EAAA;QAIM,KAAK,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,CAAC;QADR,IAAlD,CAAA,KAAuD,GAAL,KAAK,CAAvD;KAEG;;;;;IAGD,QAAQ,GAAV;QACI,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAoB,KAApF;YACM,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;oBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;iBAClC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAhE;YACM,IAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;KACJ;;;;;IAGD,WAAW,GAAb;QACI,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACpD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAChD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;SAChC;KACF;;;IA3CH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW;gBACT,QAAQ,EAAE,kBAAkB;aAC7B,EAAD,EAAA;;;;IArCA,EAAA,IAAA,EAAE,wBAAwB,GAA1B;IACA,EAAA,IAAA,EAAE,gBAAgB,GAAlB;IAiGA,EAAA,IAAA,EAAa,UAAU,EAAvB,UAAA,EAAA,CAAA,EAAA,IAAA,EAnDK,MAAM,EAmDX,IAAA,EAAA,CAnDY,UAAU,CAAC,MAAM,UAAU,CAAC,EAmDxC,EAAA,EAAA,EAAA;;;;;;AAAA,AAAA,MAAA,UAAA,CAAA;;;;;IA2CE,WAAF,CAAsB,WAAuB,EACX,IADlC,EAAA;QAAsB,IAAtB,CAAA,WAAiC,GAAX,WAAW,CAAY;QACX,IAAlC,CAAA,IAAsC,GAAJ,IAAI,CAAtC;;;;QA1CA,IAAA,CAAA,YAAA,GAA0D,IAAI,YAAY,EAAU,CAApF;;;;QAGA,IAAA,CAAA,gBAAA,GAA+D,IAAI,YAAY,EAAW,CAA1F;;;;QAGA,IAAA,CAAA,mBAAA,GAAkE,IAAI,YAAY,EAAW,CAA7F;;;;QAGA,IAAA,CAAA,WAAA,GAAuD,IAAI,YAAY,CAAO,IAAI,CAAC,CAAnF;KAiC2D;;;;;;IA1B3D,IAAM,QAAQ,CAAC,QAAgB,EAA/B;QACI,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;SACzE;aAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC3B;;;;;;;IAML,IAAM,MAAM,CAAC,MAAc,EAA3B;QACI,IAAI,MAAM,IAAI,IAAI,EAAE;YAAE,OAAO;SAAE;QAE/B,uBAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;YACjE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;;;;;;;IAWH,QAAQ,GAAV;QACI,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;SACxF;KACF;;;;;IAED,sBAAsB,CAAC,CAAiB,EAA1C;QACI,uBAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;SACrE;KACF;;;;;IAED,uBAAuB,CAAC,CAAiB,EAA3C;;QAEI,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC/E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzB;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClF,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;SACjC;KACF;;;;;IAGD,mBAAmB,GAArB;QACI,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KAC/D;;;;;;IAGD,iBAAiB,CAAC,QAAwC,EAA5D;QACI,OAAO,QAAQ,IAAI,QAAQ;YACvB,QAAQ,IAAI,oBAAoB;YAChC,QAAQ,IAAI,qBAAqB,CAAC;KACvC;;;IAlGH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW,CAAX,QAAA,EAAA,cAAA;gBACE,QAAQ,EAAE,+OAAZ;gBACE,MAAF,EAAU,CAAV,oLAAA,CAAA;gBACE,aAAa,EAAf,iBAAA,CAAA,IAAA;gBACE,mBAAF,EAAA,KAA4B;gBAC1B,eAAe,EAAjB,uBAAA,CAAA,MAAA;gBACE,UAAF,EAAA,CAAA,iBAAA,CAAA,YAAA,CAAA;gBACE,IAAF,EAAA;oBACA,OAAA,EAAe,cAAf;iBACA;aACA,EAAA,EAAA;CACA,CAAA;;;;;CArGA,CAAA;AAWA,UAAA,CAAA,cAAA,GAAA;;;IA8FA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA;IAGA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA;IAGA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAG,EAAH,CAAA,SAAA,EAAA,EAAA,EAAA;IAGA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,EAAS;IAGT,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAQ,EAAR;CAGA,CAAA,AAaA;;;;;;;AD7IA,AAgBA,AACA,AACA,AAEA,AACA;;;AAUA,IAAI,MAAM,GAAG,CAAC,CAAC;;;;AAGf,AAAA,MAAA,iBAAA,CAAA;CAKC;;;;AAOD,AAAA,MAAA,eAAA,CAAA;;;;IACE,WAAF,CAAqB,WAAuB,EAA5C;QAAqB,IAArB,CAAA,WAAgC,GAAX,WAAW,CAAY;KAAI;CAC/C;AACD,AAAO,MAAM,qBAAqB,GAAG,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;;;;;;AAuBhG,AAAA,MAAA,WAAyB,SAAQ,qBAAqB,CAAtD;;;;;IAmFE,WAAF,CAAc,UAAsB,EACd,kBADtB,EAAA;QAEI,KAAK,CAAC,UAAU,CAAC,CAAC;QADA,IAAtB,CAAA,kBAAwC,GAAlB,kBAAkB,CAAxC;;;;QA5EA,IAAA,CAAA,cAAA,GAA0C,CAAC,CAA3C;;;;QAGA,IAAA,CAAA,qBAAA,GAA0C,CAAC,CAA3C;;;;QAGA,IAAA,CAAA,iBAAA,GAA8B,YAAY,CAAC,KAAK,CAAhD;;;;QAGA,IAAA,CAAA,qBAAA,GAAkC,YAAY,CAAC,KAAK,CAApD;QAMA,IAAA,CAAA,cAAA,GAAoC,KAAK,CAAzC;QAgBA,IAAA,CAAA,cAAA,GAA0C,IAAI,CAA9C;;;;QAGA,IAAA,CAAA,cAAA,GAAkD,OAAO,CAAzD;;;;QAmBA,IAAA,CAAA,mBAAA,GAAiE,IAAI,YAAY,EAAU,CAA3F;;;;QAIA,IAAA,CAAA,WAAA,GAAM,IAAI,YAAY,EAAqB,CAA3C;;;;QAGA,IAAA,CAAA,aAAA,GAAyD,IAAI,YAAY,EAAQ,CAAjF;;;;QAIA,IAAA,CAAA,iBAAA,GAAM,IAAI,YAAY,CAAoB,IAAI,CAAC,CAA/C;;;;;;QAOA,IAAA,CAAA,YAAA,GAAqE,IAAI,CAAC,iBAAiB,CAA3F;QAOI,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;KAC1B;;;;;IAlEH,IAAM,aAAa,GAAnB,EAAiC,OAAO,IAAI,CAAC,cAAc,CAAC,EAA5D;;;;;IACE,IAAI,aAAa,CAAC,KAAc,EAAlC,EAAsC,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;IAQ3F,IAAM,wBAAwB,GAA9B,EAA4C,OAAO,IAAI,CAAC,cAAc,CAAC,EAAvE;;;;;IACE,IAAI,wBAAwB,CAAC,KAAc,EAA7C,EAAiD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,EAAE;;;;;IAI/E,IAAM,aAAa,GAAnB,EAAuC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAlE;;;;;IACE,IAAI,aAAa,CAAC,KAAoB,EAAxC;QACI,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACzD;;;;;IAQH,IAAM,eAAe,GAArB,EAAwC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAArE;;;;;IACE,IAAI,eAAe,CAAC,KAAmB,EAAzC;QACI,uBAAM,aAAa,GAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAElE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAnC,eAAA,EAAqD,IAAI,CAAC,eAAe,CAAzE,CAA2E,CAAC,CAAC;QAEzE,IAAI,KAAK,EAAE;YACT,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAlC,eAAA,EAAoD,KAAK,CAAzD,CAA2D,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KAC/B;;;;;;;;IAsCD,qBAAqB,GAAvB;;;;;QAKI,qBAAI,aAAa,GAAG,IAAI,CAAC,cAAc;YACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;QAI3E,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YACvE,uBAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;YAG5C,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SAC5E;;QAGD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,KAAa,KAAlD;YACM,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;YACrC,GAAG,CAAC,QAAQ,GAAG,KAAK,KAAK,aAAa,CAAC;;;YAIvC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACnE,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;YACzC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;KACF;;;;IAED,kBAAkB,GAApB;QACI,IAAI,CAAC,qBAAqB,EAAE,CAAC;;;QAI7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAA1D;YACM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;;;;IAED,WAAW,GAAb;QACI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;KAC1C;;;;;IAED,aAAa,CAAC,KAAa,EAA7B;QACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;;;;;IAEO,kBAAkB,CAAC,KAAa,EAA1C;QACI,uBAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC;QACpC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SACzC;QACD,OAAO,KAAK,CAAC;;;;;;;;;IASP,qBAAqB,GAA/B;QACI,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;SAC1C;QAED,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAC9B,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,EAC5C,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MAF9D;YAGM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC,CAAC,CAAC;;;;;;;IAIL,cAAc,CAAC,CAAS,EAA1B;QACI,OAAO,CAAX,cAAA,EAA4B,IAAI,CAAC,QAAQ,CAAzC,CAAA,EAA6C,CAAC,CAA9C,CAAgD,CAAC;KAC9C;;;;;;IAGD,gBAAgB,CAAC,CAAS,EAA5B;QACI,OAAO,CAAX,gBAAA,EAA8B,IAAI,CAAC,QAAQ,CAA3C,CAAA,EAA+C,CAAC,CAAhD,CAAkD,CAAC;KAChD;;;;;;;IAMD,wBAAwB,CAAC,SAAiB,EAA5C;QACI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAAE,OAAO;SAAE;QAEpE,uBAAM,OAAO,GAAgB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAEhE,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;;;QAIzD,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE;YACnD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;SACzC;KACF;;;;;IAGD,2BAA2B,GAA7B;QACI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;;;;;;;;IAGD,YAAY,CAAC,GAAW,EAAE,SAAuB,EAAE,GAAW,EAAhE;QACI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC;SACjD;KACF;;;;;;;IAGD,YAAY,CAAC,GAAW,EAAE,GAAW,EAAvC;QACI,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,aAAa,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5C;;;IAlPH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW,CAAX,QAAA,EAAA,eAAA;gBACE,QAAQ,EAAE,aAAZ;gBACE,QAAQ,EAAE,s0CAAZ;gBACE,MAAF,EAAU,CAAV,8qCAAA,CAAA;gBACE,aAAa,EAAf,iBAAA,CAAA,IAAA;gBACE,mBAAF,EAAA,KAAA;gBACE,eAAe,EAAjB,uBAAA,CAAA,MAAA;gBACE,MAAF,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA;gBACE,IAAF,EAAA;oBACA,OAAA,EAAA,eAAA;oBACM,sCAAN,EAAA,eAAA;oBACI,uCAAJ,EAAA,4BAAA;iBACA;aACA,EAAA,EAAA;CACA,CAAA;;;;;CA/DA,CAAA;AAHA,WAAA,CAAE,cAAF,GAAmB;;;IAuEnB,eAAA,EAAA,CAAG,EAAH,IAAA,EAAA,KAAA,EAAkB,EAAlB;IAEA,0BAAA,EAAG,CAAH,EAAA,IAAA,EAAY,KAAZ,EAAA,IAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA;IAeA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAG,KAAK,EAAR,EAAA;IASA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,EAAA;IAKA,iBAAA,EAAA,CAAA,EAAA,IAAG,EAAH,KAAA,EAAA,EAAA;IAQA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAQ,MAAR,EAAA,EAAA;IAGA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA;IAgBA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAG,EAAH,EAAA;IAGA,mBAAA,EAAA,CAAA,EAAG,IAAH,EAAS,MAAT,EAAA,EAAA;IAIA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA;CAGA,CAAA,AAQA;;;;;;;ADvJA,AACA;;;AAIA,AAAA,MAAA,sBAAA,CAAA;CAAsC;AACtC,AAAO,MAAM,4BAA4B,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;;;;;AAalF,AAAA,MAAA,kBAAgC,SAAQ,4BAA4B,CAApE;;;;IACE,WAAF,CAAqB,UAAsB,EAA3C;QACI,KAAK,EAAE,CAAC;QADS,IAArB,CAAA,UAA+B,GAAV,UAAU,CAAY;KAExC;;;;;IAGD,KAAK,GAAP;QACI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACvC;;;;IAED,aAAa,GAAf;QACI,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;KACjD;;;;IAED,cAAc,GAAhB;QACI,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;KAClD;;;IAvBH,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW;gBACT,QAAQ,EAAE,sBAAsB;gBAChC,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,IAAI,EAAE;oBACJ,0BAA0B,EAAE,UAAU;iBACvC;aACF,EAAD,EAAA;;;;IAlBA,EAAA,IAAA,EAAmB,UAAU,GAA7B;;;;;;;;ADAA,AACA,AACA,AAiBA,AACA,AACA,AACA,AACA,AACA,AACA,AACA;;;;AAcA,MAAM,sBAAsB,GAAG,EAAE,CAAC;;;;AAIlC,AAAA,MAAA,gBAAA,CAAA;CAAgC;AAChC,AAAO,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;;;;;;;;AAwB3E,AAAA,MAAA,YAA0B,SAAQ,sBAAsB,CAAxD;;;;;;;IAwDE,WAAF,CAAsB,WAAuB,EACvB,kBADtB,EAEsB,cAFtB,EAGkC,IAHlC,EAAA;QAII,KAAK,EAAE,CAAC;QAJU,IAAtB,CAAA,WAAiC,GAAX,WAAW,CAAY;QACvB,IAAtB,CAAA,kBAAwC,GAAlB,kBAAkB,CAAxC;QACsB,IAAtB,CAAA,cAAoC,GAAd,cAAc,CAApC;QACkC,IAAlC,CAAA,IAAsC,GAAJ,IAAI,CAAtC;;;;QAlDA,IAAA,CAAA,WAAA,GAAgC,CAAC,CAAjC;;;;QAGA,IAAA,CAAA,eAAA,GAA4B,CAAC,CAA7B;;;;QAGA,IAAA,CAAA,qBAAA,GAAkC,KAAK,CAAvC;;;;QAGA,IAAA,CAAA,cAAA,GAA2B,YAAY,CAAC,KAAK,CAA7C;;;;QAGA,IAAA,CAAA,uBAAA,GAA4B,KAAK,CAAjC;;;;QAGA,IAAA,CAAA,mBAAA,GAAwB,IAAI,CAA5B;;;;QAGA,IAAA,CAAA,oBAAA,GAAyB,IAAI,CAA7B;QAWA,IAAA,CAAA,cAAA,GAAmC,CAAC,CAApC;;;;QAaA,IAAA,CAAA,kBAAA,GAA0C,IAAI,YAAY,EAAE,CAA5D;;;;QAGA,IAAA,CAAA,YAAA,GAAoC,IAAI,YAAY,EAAE,CAAtD;KAOG;;;;;IAnBH,IAAM,aAAa,GAAnB,EAAgC,OAAO,IAAI,CAAC,cAAc,CAAC,EAA3D;;;;;IACE,IAAI,aAAa,CAAC,KAAa,EAAjC;QACI,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;;;;IAeD,qBAAqB,GAAvB;;QAEI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACjD,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;;;QAID,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;;;QAID,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;KACF;;;;;IAED,cAAc,CAAC,KAAoB,EAArC;QACI,QAAQ,KAAK,CAAC,OAAO;YACnB,KAAK,WAAW;gBACd,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,IAAI;gBACP,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,GAAG;gBACN,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACR,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;SACT;KACF;;;;;IAKD,kBAAkB,GAApB;QACI,uBAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAGA,EAAY,CAAC,IAAI,CAAC,CAAC;QACpE,uBAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,uBAAM,OAAO,GAAG,MAApB;YACM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC,CAAC;;;QAIF,OAAO,qBAAqB,KAAK,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;QAC1F,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACnE;;;;IAED,WAAW,GAAb;QACI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACnC;;;;;IAKD,iBAAiB,GAAnB;QACI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KACxC;;;;;IAKD,iBAAiB,GAAnB;QACI,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;;;;;;IAGD,IAAI,UAAU,CAAC,KAAa,EAA9B;QACI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;YAAE,OAAO;SAAE;QAExE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC1B;;;;;IAGD,IAAI,UAAU,GAAhB,EAA6B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;;;;;IAMrD,aAAa,CAAC,KAAa,EAA7B;QACI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QAE1C,uBAAM,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC9E,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC/B;;;;;;;IAMD,YAAY,CAAC,QAAgB,EAA/B;QACI,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACrD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;;;;YAKhD,uBAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YACzD,uBAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAEvC,IAAI,GAAG,IAAI,KAAK,EAAE;gBAChB,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;aAC5B;iBAAM;gBACL,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;aAC5E;SACF;KACF;;;;;;;IAMD,UAAU,CAAC,MAAc,EAA3B;QACI,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,uBAAM,IAAI,GAAyB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAEjE,KAAK,qBAAI,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE;gBAC7E,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;oBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACpB,OAAO;iBACR;aACF;SACF;KACF;;;;;IAGD,aAAa,GAAf;QACI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/D;;;;;IAGD,iBAAiB,GAAnB;QACI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/D;;;;;IAGO,cAAc,GAAxB;QACI,KAAK,qBAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,MAAM;aACP;SACF;;;;;;IAIK,aAAa,GAAvB;QACI,KAAK,qBAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxD,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,MAAM;aACP;SACF;;;;;;IAIH,mBAAmB,GAArB;QACI,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KAC/D;;;;;IAGD,wBAAwB,GAA1B;QACI,uBAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,uBAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,KAAK,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QAE3F,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAlD,YAAA,EAAiE,UAAU,CAA3E,SAAA,CAAsF,CAAC;KACpF;;;;;IAGD,IAAI,cAAc,GAApB,EAAiC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;;;;;IAC7D,IAAI,cAAc,CAAC,CAAS,EAA9B;QACI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;;QAI9E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;;;;;;;;;;;IAUD,aAAa,CAAC,SAA0B,EAA1C;QACI,uBAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;;QAGpE,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;KAC1E;;;;;;;;;IAQD,cAAc,CAAC,UAAkB,EAAnC;QACI,uBAAM,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAE7F,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO;SAAE;;QAG/B,uBAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;QAEpE,qBAAI,cAAsB,mBAAE,aAAqB,CAAC;QAClD,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,EAAE;YACvC,cAAc,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;YAC/C,aAAa,GAAG,cAAc,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;SACjE;aAAM;YACL,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;YACxF,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;SACjE;QAED,uBAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,uBAAM,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEzD,IAAI,cAAc,GAAG,gBAAgB,EAAE;;YAErC,IAAI,CAAC,cAAc,IAAI,gBAAgB,GAAG,cAAc,GAAG,sBAAsB,CAAC;SACnF;aAAM,IAAI,aAAa,GAAG,eAAe,EAAE;;YAE1C,IAAI,CAAC,cAAc,IAAI,aAAa,GAAG,eAAe,GAAG,sBAAsB,CAAC;SACjF;KACF;;;;;;;;;;IAUD,uBAAuB,GAAzB;QACI,uBAAM,SAAS,GACX,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAEzF,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;SACzB;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,uBAAuB,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;QAED,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;KAC1C;;;;;;;;;;;IAWD,uBAAuB,GAAzB;;QAEI,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/E,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KACxC;;;;;;;;;IASD,qBAAqB,GAAvB;QACI,uBAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;QAChE,uBAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;QACpE,OAAO,CAAC,eAAe,GAAG,UAAU,KAAK,CAAC,CAAC;KAC5C;;;;;IAGO,yBAAyB,GAAnC;QACI,uBAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM;YAC1E,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,aAAa;YAC1E,IAAI,CAAC;QAET,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;;;;IA5YtD,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW,CAAX,QAAA,EAAA,gBAAA;gBACE,QAAQ,EAAE,89BAAZ;gBACE,MAAF,EAAU,CAAV,i5DAAA,CAAA;gBACE,MAAF,EAAA,CAAA,eAAA,CAAA;gBACE,aAAF,EAAA,iBAAA,CAAA,IAAA;gBACE,mBAAF,EAAA,KAAA;gBACE,eAAe,EAAjB,uBAAA,CAAA,MAAA;gBACE,IAAF,EAAA;oBACA,OAAA,EAAA,gBAAA;oBACM,oDAAN,EAAA,yBAAA;oBACI,4BAAJ,EAAA,gCAAA;iBACA;aACA,EAAA,EAAA;CACA,CAAA;;;;;IA1DA,EAAA,IAAA,EAAE,aAAF,GAAA;IAHA,EAAA,IAAA,EAAE,cAAF,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA;CAoBA,CAAA;AA1BA,YAAmB,CAAnB,cAAA,GAAA;;;IAwEA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA;IACA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAa,CAAb,SAAA,EAAA,EAAA,EAAA;IACA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,EAAA;IACA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAa,EAAb;IAmCA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAQ,EAAR,EAAA;CAUA,CAAA,AAGA;;;;;;AD5HA,AACA,AACA,AACA,AACA,AAmBA,AAeA,AACA,AACA,AACA,AACA;;;AAKA,AAAA,MAAA,aAAA,CAAA;;;;IACE,WAAF,CAAqB,WAAuB,EAA5C;QAAqB,IAArB,CAAA,WAAgC,GAAX,WAAW,CAAY;KAAI;CAC/C;AACD,AAAO,MAAM,mBAAmB,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;;;;;AAkBxE,AAAA,MAAA,SAAuB,SAAQ,mBAAmB,CAAlD;;;;;;;;IAwCE,WAAF,CAAc,UAAsB,EACF,IADlC,EAEsB,OAFtB,EAGsB,kBAHtB,EAIsB,cAJtB,EAAA;QAKI,KAAK,CAAC,UAAU,CAAC,CAAC;QAJY,IAAlC,CAAA,IAAsC,GAAJ,IAAI,CAAtC;QACsB,IAAtB,CAAA,OAA6B,GAAP,OAAO,CAA7B;QACsB,IAAtB,CAAA,kBAAwC,GAAlB,kBAAkB,CAAxC;QACsB,IAAtB,CAAA,cAAoC,GAAd,cAAc,CAApC;;;;QAxCA,IAAA,CAAA,UAAA,GAAgC,IAAI,OAAO,EAAQ,CAAnD;QAkCA,IAAA,CAAA,cAAA,GAAoC,KAAK,CAAzC;KAQG;;;;;IA7BH,IAAM,eAAe,GAArB,EAAwC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAArE;;;;;IACE,IAAI,eAAe,CAAC,KAAmB,EAAzC;QACI,uBAAM,aAAa,GAAgB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAElE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAnC,eAAA,EAAqD,IAAI,CAAC,eAAe,CAAzE,CAA2E,CAAC,CAAC;QAEzE,IAAI,KAAK,EAAE;YACT,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAlC,eAAA,EAAoD,KAAK,CAAzD,CAA2D,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KAC/B;;;;;IAKH,IAAM,aAAa,GAAnB,EAAwB,OAAO,IAAI,CAAC,cAAc,CAAC,EAAnD;;;;;IACE,IAAI,aAAa,CAAC,KAAc,EAAlC;QACI,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;;;;;;IAYD,gBAAgB,CAAC,OAAmB,EAAtC;QACI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC;QAC7D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAElC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;KACF;;;;IAED,kBAAkB,GAApB;QACI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAnC;YACM,uBAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAGA,EAAY,CAAC,IAAI,CAAC,CAAC;YAEpE,OAAO,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACnF,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;;;;;IAGD,qBAAqB,GAAvB;QACI,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;SACjC;KACF;;;;IAED,WAAW,GAAb;QACI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC5B;;;;;IAGD,YAAY,GAAd;QACI,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;SACpE;KACF;;;;;IAGO,qBAAqB,GAA/B;QACI,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;SACzE;;;;IAzGL,EAAA,IAAA,EAAC,SAAS,EAAV,IAAA,EAAA,CAAW,CAAX,QAAA,EAAA,mBAAA;gBACE,QAAQ,EAAE,yBAAZ;gBACE,MAAF,EAAU,CAAV,OAAA,CAAA;gBACE,QAAQ,EAAE,gIAAZ;gBACE,MAAM,EAAE,CAAC,i0BAAX,CAAA;gBACE,IAAF,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA;gBACE,aAAF,EAAA,iBAAA,CAAA,IAAA;gBACE,mBAAF,EAAA,KAAA;gBACE,eAAe,EAAjB,uBAAA,CAAA,MAAA;aACA,EAAA,EAAA;CACA,CAAA;;;;;IAtDA,EAAA,IAAA,EAAE,MAAF,GAAA;IAZA,EAAA,IAAA,EAAQ,iBAAR,GAAA;IAgBA,EAAA,IAAA,EAAE,aAAF,GAAA;CARA,CAAA;AALA,SAAA,CAAA,cAAA,GAAA;;;IA0EA,iBAAA,EAAA,CAAG,EAAH,IAAA,EAAA,KAAA,EAAA,EAAA;IAGA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,EAAA;CAIA,CAAA;AAgBA;;AAmEA,AAAA,MAAA,oBAAA,GAAA,aAAA,CAAA,kBAAA,CAAA,aAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;QAqDA,IAAA,CAAA,UAAA,GAA2C,UAA3C,CAAA;QAMI,IAAJ,CAAS,WAAT,GAAA,WAAA,CAAA;;;;;;;;;;;QAhBA,IAAA,CAAA,cAAA,CAA+B,kBAA/B,CAAA,WAAA,CAAA,aAAA,CAAA,CAAA;QAkBI,IAAI,CAAC,QAAT,GAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAA4C;QACxC,IAAI,aAAR,EAAuB;YAEf,IAAR,CAAA,YAAA,GAA4B;gBAE5B,oBAAA,EAAA,aAAA,CAAA,oBAAA;gBACU,WAAV,EAAuB,aAAvB,CAAA,eAAA;gBACQ,SAAR,EAAA,aAAA,CAAA,SAAA;aACA,CAAA;SACA;KACA;;;;;;;;;;;;QAvCM,IAAN,KAAA,EAAA;YACQ,IAAR,CAAA,UAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA;SACA;KACA;;;;;;;;KAcA;;;;;;KA0BA;;;;;;;;YAOA,KAAe,CAAf,cAAA,EAAA,CAAA;SACA;KACA;CACA;AACA,UAAA,CAAA,UAAA,GAAA;;;gBA/EA,QAAA,EAAA,YAAA;gBACE,MAAF,EAAU,CAAV,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA;gBACE,IAAF,EAAA;oBACA,OAAA,EAAA,cAAA;oBACM,sBAAN,EAAA,qBAAA;oBACI,iBAAJ,EAAA,UAAA;oBACI,0BAAJ,EAAA,UAAA;oBACI,8BAAJ,EAAA,QAAA;oBACI,SAAJ,EAAA,sBAAA;iBACA;aACA,EAAA,EAAA;CACA,CAAA;;;;;IArHA,EAAA,IAAA,EAAa,MAAb,GAAsB;IAxDtB,EAAA,IAAA,EAAE,QAAF,GAAA;IAIA,EAAA,IAAA,EAAE,SAAF,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,EAAA;IAdA,EAAA,IAAA,EAAQ,SAAR,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,EAAA;CA8NA,CAAA;AACA,UAAA,CAAA,cAAA,GAAA;;EA5BA;;;;;;;ADpMA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AAmCA,AAAA,MAAA,aAAA,CAAA;;;IAhCA,EAAA,IAAA,EAAC,QAAQ,EAAT,IAAA,EAAA,CAAU;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,eAAe;oBACf,YAAY;oBACZ,eAAe;oBACf,eAAe;oBACf,oBAAoB;iBACrB;;gBAED,OAAO,EAAE;oBACP,eAAe;oBACf,WAAW;oBACX,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,UAAU;iBACX;gBACD,YAAY,EAAE;oBACZ,WAAW;oBACX,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,kBAAkB;oBAClB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,gBAAgB;oBAChB,YAAY;iBACb;gBACD,SAAS,EAAE,CAAC,uBAAuB,CAAC;aACrC,EAAD,EAAA;;;;;;;;GD/CA,AAA8B;;;;;GDA9B,AACA,AACA,AACA,AAMA,AACA,AACA,AACA,AACA,AACA,AAAkC;;;;;;;;GDlBlC,AAEA,AACA,AACA,AACA,AAAA;;"}
1
+ {"version":3,"file":"tabs.js","sources":["../../../src/lib/tabs/index.ts","../../../src/lib/tabs/public-api.ts","../../../src/lib/tabs/tab-nav-bar/index.ts","../../../src/lib/tabs/tabs-module.ts","../../../src/lib/tabs/tab-nav-bar/tab-nav-bar.ts","../../../src/lib/tabs/tab-header.ts","../../../src/lib/tabs/tab-label-wrapper.ts","../../../src/lib/tabs/tab-group.ts","../../../src/lib/tabs/tab-body.ts","../../../src/lib/tabs/tabs-animations.ts","../../../src/lib/tabs/tab.ts","../../../src/lib/tabs/tab-label.ts","../../../src/lib/tabs/ink-bar.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MatTabBase as ɵe,_MatTabMixinBase as ɵf} from './tab';\nexport {MatTabHeaderBase as ɵa,_MatTabHeaderMixinBase as ɵb} from './tab-header';\nexport {MatTabLabelWrapperBase as ɵc,_MatTabLabelWrapperMixinBase as ɵd} from './tab-label-wrapper';\nexport {MatTabLinkBase as ɵi,MatTabNavBase as ɵg,_MatTabLinkMixinBase as ɵj,_MatTabNavMixinBase as ɵh} from './tab-nav-bar/tab-nav-bar';","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './tabs-module';\nexport * from './tab-group';\nexport {MatInkBar} from './ink-bar';\nexport {\n MatTabBody,\n MatTabBodyOriginState,\n MatTabBodyPositionState,\n MatTabBodyPortal\n} from './tab-body';\nexport {MatTabHeader, ScrollDirection} from './tab-header';\nexport {MatTabLabelWrapper} from './tab-label-wrapper';\nexport {MatTab} from './tab';\nexport {MatTabLabel} from './tab-label';\nexport {MatTabNav, MatTabLink} from './tab-nav-bar/index';\nexport * from './tabs-animations';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './tab-nav-bar';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {ScrollDispatchModule, VIEWPORT_RULER_PROVIDER} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatInkBar} from './ink-bar';\nimport {MatTab} from './tab';\nimport {MatTabBody, MatTabBodyPortal} from './tab-body';\nimport {MatTabGroup} from './tab-group';\nimport {MatTabHeader} from './tab-header';\nimport {MatTabLabel} from './tab-label';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {MatTabLink, MatTabNav} from './tab-nav-bar/tab-nav-bar';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n ScrollDispatchModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabLink,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader\n ],\n providers: [VIEWPORT_RULER_PROVIDER],\n})\nexport class MatTabsModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple,\n HasTabIndex,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex, RippleConfig,\n RippleGlobalOptions,\n RippleRenderer,\n RippleTarget,\n ThemePalette,\n} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {takeUntil} from 'rxjs/operators/takeUntil';\nimport {Subject} from 'rxjs/Subject';\nimport {MatInkBar} from '../ink-bar';\n\n\n// Boilerplate for applying mixins to MatTabNav.\n/** @docs-private */\nexport class MatTabNavBase {\n constructor(public _elementRef: ElementRef) {}\n}\nexport const _MatTabNavMixinBase = mixinColor(MatTabNavBase, 'primary');\n\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\n@Component({\n moduleId: module.id,\n selector: '[mat-tab-nav-bar]',\n exportAs: 'matTabNavBar, matTabNav',\n inputs: ['color'],\n templateUrl: 'tab-nav-bar.html',\n styleUrls: ['tab-nav-bar.css'],\n host: {'class': 'mat-tab-nav-bar'},\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatTabNav extends _MatTabNavMixinBase implements AfterContentInit, CanColor,\n OnDestroy {\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n _activeLinkChanged: boolean;\n _activeLinkElement: ElementRef;\n\n @ViewChild(MatInkBar) _inkBar: MatInkBar;\n\n /** Query list of all tab links of the tab navigation. */\n @ContentChildren(forwardRef(() => MatTabLink), {descendants: true})\n _tabLinks: QueryList<MatTabLink>;\n\n /** Background color of the tab nav. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const nativeElement: HTMLElement = this._elementRef.nativeElement;\n\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Whether ripples should be disabled for all links or not. */\n @Input()\n get disableRipple() { return this._disableRipple; }\n set disableRipple(value: boolean) {\n this._disableRipple = coerceBooleanProperty(value);\n this._setLinkDisableRipple();\n }\n private _disableRipple: boolean = false;\n\n constructor(elementRef: ElementRef,\n @Optional() private _dir: Directionality,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler) {\n super(elementRef);\n }\n\n /** Notifies the component that the active link has been changed. */\n updateActiveLink(element: ElementRef) {\n this._activeLinkChanged = this._activeLinkElement != element;\n this._activeLinkElement = element;\n\n if (this._activeLinkChanged) {\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit(): void {\n this._ngZone.runOutsideAngular(() => {\n const dirChange = this._dir ? this._dir.change : observableOf(null);\n\n return merge(dirChange, this._viewportRuler.change(10)).pipe(takeUntil(this._onDestroy))\n .subscribe(() => this._alignInkBar());\n });\n\n this._setLinkDisableRipple();\n }\n\n /** Checks if the active link has been changed and, if so, will update the ink bar. */\n ngAfterContentChecked(): void {\n if (this._activeLinkChanged) {\n this._alignInkBar();\n this._activeLinkChanged = false;\n }\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n /** Aligns the ink bar to the active link. */\n _alignInkBar(): void {\n if (this._activeLinkElement) {\n this._inkBar.alignToElement(this._activeLinkElement.nativeElement);\n }\n }\n\n /** Sets the `disableRipple` property on each link of the navigation bar. */\n private _setLinkDisableRipple() {\n if (this._tabLinks) {\n this._tabLinks.forEach(link => link.disableRipple = this.disableRipple);\n }\n }\n}\n\n\n// Boilerplate for applying mixins to MatTabLink.\nexport class MatTabLinkBase {}\nexport const _MatTabLinkMixinBase =\n mixinTabIndex(mixinDisableRipple(mixinDisabled(MatTabLinkBase)));\n\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\n@Directive({\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabIndex]': 'tabIndex',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n '(click)': '_handleClick($event)'\n }\n})\nexport class MatTabLink extends _MatTabLinkMixinBase\n implements OnDestroy, CanDisable, CanDisableRipple, HasTabIndex, RippleTarget {\n\n /** Whether the tab link is active or not. */\n private _isActive: boolean = false;\n\n /** Reference to the RippleRenderer for the tab-link. */\n private _tabLinkRipple: RippleRenderer;\n\n /** Whether the link is active. */\n @Input()\n get active(): boolean { return this._isActive; }\n set active(value: boolean) {\n this._isActive = value;\n if (value) {\n this._tabNavBar.updateActiveLink(this._elementRef);\n }\n }\n\n /**\n * Ripple configuration for ripples that are launched on pointer down.\n * @docs-private\n */\n rippleConfig: RippleConfig = {};\n\n /**\n * Whether ripples are disabled on interaction\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return this.disabled || this.disableRipple;\n }\n\n constructor(private _tabNavBar: MatTabNav,\n private _elementRef: ElementRef,\n ngZone: NgZone,\n platform: Platform,\n @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions: RippleGlobalOptions,\n @Attribute('tabindex') tabIndex: string) {\n super();\n\n this._tabLinkRipple = new RippleRenderer(this, ngZone, _elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(_elementRef.nativeElement);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n\n if (globalOptions) {\n this.rippleConfig = {\n terminateOnPointerUp: globalOptions.terminateOnPointerUp,\n speedFactor: globalOptions.baseSpeedFactor,\n animation: globalOptions.animation,\n };\n }\n }\n\n ngOnDestroy() {\n this._tabLinkRipple._removeTriggerEvents();\n }\n\n /**\n * Handles the click event, preventing default navigation if the tab link is disabled.\n */\n _handleClick(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, HOME, END} from '@angular/cdk/keycodes';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisableRipple, mixinDisableRipple} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subscription} from 'rxjs/Subscription';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {MatInkBar} from './ink-bar';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\n\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n\n// Boilerplate for applying mixins to MatTabHeader.\n/** @docs-private */\nexport class MatTabHeaderBase {}\nexport const _MatTabHeaderMixinBase = mixinDisableRipple(MatTabHeaderBase);\n\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-header',\n templateUrl: 'tab-header.html',\n styleUrls: ['tab-header.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n})\nexport class MatTabHeader extends _MatTabHeaderMixinBase\n implements AfterContentChecked, AfterContentInit, OnDestroy, CanDisableRipple {\n\n @ContentChildren(MatTabLabelWrapper) _labelWrappers: QueryList<MatTabLabelWrapper>;\n @ViewChild(MatInkBar) _inkBar: MatInkBar;\n @ViewChild('tabListContainer') _tabListContainer: ElementRef;\n @ViewChild('tabList') _tabList: ElementRef;\n\n /** The tab index that is focused. */\n private _focusIndex: number = 0;\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistance = 0;\n\n /** Whether the header should scroll to the selected index after the view has been checked. */\n private _selectedIndexChanged = false;\n\n /** Combines listeners that will re-align the ink bar whenever they're invoked. */\n private _realignInkBar = Subscription.EMPTY;\n\n /** Whether the controls for pagination should be displayed */\n _showPaginationControls = false;\n\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n _disableScrollAfter = true;\n\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n _disableScrollBefore = true;\n\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n private _tabLabelCount: number;\n\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n private _scrollDistanceChanged: boolean;\n\n private _selectedIndex: number = 0;\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number { return this._selectedIndex; }\n set selectedIndex(value: number) {\n value = coerceNumberProperty(value);\n this._selectedIndexChanged = this._selectedIndex != value;\n this._selectedIndex = value;\n this._focusIndex = value;\n }\n\n /** Event emitted when the option is selected. */\n @Output() readonly selectFocusedIndex = new EventEmitter();\n\n /** Event emitted when a label is focused. */\n @Output() readonly indexFocused = new EventEmitter();\n\n constructor(private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() private _dir: Directionality) {\n super();\n }\n\n ngAfterContentChecked(): void {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._labelWrappers.length) {\n this._updatePagination();\n this._tabLabelCount = this._labelWrappers.length;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n _handleKeydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case RIGHT_ARROW:\n this._focusNextTab();\n break;\n case LEFT_ARROW:\n this._focusPreviousTab();\n break;\n case HOME:\n this._focusFirstTab();\n event.preventDefault();\n break;\n case END:\n this._focusLastTab();\n event.preventDefault();\n break;\n case ENTER:\n case SPACE:\n this.selectFocusedIndex.emit(this.focusIndex);\n event.preventDefault();\n break;\n }\n }\n\n /**\n * Aligns the ink bar to the selected tab on load.\n */\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf(null);\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n };\n\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame(realign) : realign();\n this._realignInkBar = merge(dirChange, resize).subscribe(realign);\n }\n\n ngOnDestroy() {\n this._realignInkBar.unsubscribe();\n }\n\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Updating the view whether pagination should be enabled or not\n */\n _updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value: number) {\n if (!this._isValidIndex(value) || this._focusIndex == value) { return; }\n\n this._focusIndex = value;\n this.indexFocused.emit(value);\n this._setTabFocus(value);\n }\n\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex(): number { return this._focusIndex; }\n\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index: number): boolean {\n if (!this._labelWrappers) { return true; }\n\n const tab = this._labelWrappers ? this._labelWrappers.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex: number) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n\n if (this._labelWrappers && this._labelWrappers.length) {\n this._labelWrappers.toArray()[tabIndex].focus();\n\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n\n /**\n * Moves the focus towards the beginning or the end of the list depending on the offset provided.\n * Valid offsets are 1 and -1.\n */\n _moveFocus(offset: number) {\n if (this._labelWrappers) {\n const tabs: MatTabLabelWrapper[] = this._labelWrappers.toArray();\n\n for (let i = this.focusIndex + offset; i < tabs.length && i >= 0; i += offset) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n return;\n }\n }\n }\n }\n\n /** Increment the focus index by 1 until a valid tab is found. */\n _focusNextTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? 1 : -1);\n }\n\n /** Decrement the focus index by 1 until a valid tab is found. */\n _focusPreviousTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? -1 : 1);\n }\n\n /** Focuses the first tab. */\n private _focusFirstTab(): void {\n for (let i = 0; i < this._labelWrappers.length; i++) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n break;\n }\n }\n }\n\n /** Focuses the last tab. */\n private _focusLastTab(): void {\n for (let i = this._labelWrappers.length - 1; i > -1; i--) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n break;\n }\n }\n }\n\n /** The layout direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n this._tabList.nativeElement.style.transform = `translate3d(${translateX}px, 0, 0)`;\n }\n\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance(): number { return this._scrollDistance; }\n set scrollDistance(v: number) {\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), v));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n }\n\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(scrollDir: ScrollDirection) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n // Move the scroll distance one-third the length of the tab list's viewport.\n this.scrollDistance += (scrollDir == 'before' ? -1 : 1) * viewLength / 3;\n }\n\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex: number) {\n const selectedLabel = this._labelWrappers ? this._labelWrappers.toArray()[labelIndex] : null;\n\n if (!selectedLabel) { return; }\n\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n let labelBeforePos: number, labelAfterPos: number;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = selectedLabel.getOffsetLeft();\n labelAfterPos = labelBeforePos + selectedLabel.getOffsetWidth();\n } else {\n labelAfterPos = this._tabList.nativeElement.offsetWidth - selectedLabel.getOffsetLeft();\n labelBeforePos = labelAfterPos - selectedLabel.getOffsetWidth();\n }\n\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n const isEnabled =\n this._tabList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._showPaginationControls = isEnabled;\n }\n\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance(): number {\n const lengthOfTabList = this._tabList.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return (lengthOfTabList - viewLength) || 0;\n }\n\n /** Tells the ink-bar to align itself to the current label wrapper */\n private _alignInkBarToSelectedTab(): void {\n const selectedLabelWrapper = this._labelWrappers && this._labelWrappers.length ?\n this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement :\n null;\n\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\n\n// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nexport class MatTabLabelWrapperBase {}\nexport const _MatTabLabelWrapperMixinBase = mixinDisabled(MatTabLabelWrapperBase);\n\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled'\n }\n})\nexport class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase implements CanDisable {\n constructor(public elementRef: ElementRef) {\n super();\n }\n\n /** Sets focus on the wrapper element */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n getOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n\n getOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MatTab} from './tab';\nimport {MatTabHeader} from './tab-header';\nimport {merge} from 'rxjs/observable/merge';\nimport {\n CanColor,\n CanDisableRipple,\n mixinColor,\n mixinDisableRipple,\n ThemePalette\n} from '@angular/material/core';\n\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n/** A simple change event emitted on focus or selection changes. */\nexport class MatTabChangeEvent {\n /** Index of the currently-selected tab. */\n index: number;\n /** Reference to the currently-selected tab. */\n tab: MatTab;\n}\n\n/** Possible positions for the tab header. */\nexport type MatTabHeaderPosition = 'above' | 'below';\n\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nexport class MatTabGroupBase {\n constructor(public _elementRef: ElementRef) {}\n}\nexport const _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(MatTabGroupBase), 'primary');\n\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://www.google.com/design/spec/components/tabs.html\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-group',\n exportAs: 'matTabGroup',\n templateUrl: 'tab-group.html',\n styleUrls: ['tab-group.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color', 'disableRipple'],\n host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n },\n})\nexport class MatTabGroup extends _MatTabGroupMixinBase implements AfterContentInit,\n AfterContentChecked, OnDestroy, CanColor, CanDisableRipple {\n\n @ContentChildren(MatTab) _tabs: QueryList<MatTab>;\n\n @ViewChild('tabBodyWrapper') _tabBodyWrapper: ElementRef;\n\n /** The tab index that should be selected after the content has been checked. */\n private _indexToSelect: number | null = 0;\n\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n private _tabBodyWrapperHeight: number = 0;\n\n /** Subscription to tabs being added/removed. */\n private _tabsSubscription = Subscription.EMPTY;\n\n /** Subscription to changes in the tab labels. */\n private _tabLabelSubscription = Subscription.EMPTY;\n\n /** Whether the tab group should grow to the size of the active tab. */\n @Input()\n get dynamicHeight(): boolean { return this._dynamicHeight; }\n set dynamicHeight(value: boolean) { this._dynamicHeight = coerceBooleanProperty(value); }\n private _dynamicHeight: boolean = false;\n\n /**\n * @deprecated\n * @deletion-target 6.0.0\n */\n @Input('mat-dynamic-height')\n get _dynamicHeightDeprecated(): boolean { return this._dynamicHeight; }\n set _dynamicHeightDeprecated(value: boolean) { this._dynamicHeight = value; }\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number | null { return this._selectedIndex; }\n set selectedIndex(value: number | null) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n private _selectedIndex: number | null = null;\n\n /** Position of the tab header. */\n @Input() headerPosition: MatTabHeaderPosition = 'above';\n\n /** Background color of the tab group. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const nativeElement: HTMLElement = this._elementRef.nativeElement;\n\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when focus has changed within a tab group. */\n @Output() readonly focusChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>();\n\n /** Event emitted when the body animation has completed */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the tab selection has changed. */\n @Output() readonly selectedTabChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>(true);\n\n /**\n * Event emitted when the tab selection has changed.\n * @deprecated Use `selectedTabChange` instead.\n * @deletion-target 6.0.0\n */\n @Output() readonly selectChange: EventEmitter<MatTabChangeEvent> = this.selectedTabChange;\n\n private _groupId: number;\n\n constructor(elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef) {\n super(elementRef);\n this._groupId = nextId++;\n }\n\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Clamp the next selected index to the boundsof 0 and the tabs length.\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n let indexToSelect = this._indexToSelect =\n Math.min(this._tabs.length - 1, Math.max(this._indexToSelect || 0, 0));\n\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect && this._selectedIndex != null) {\n const tabChangeEvent = this._createChangeEvent(indexToSelect);\n this.selectedTabChange.emit(tabChangeEvent);\n // Emitting this value after change detection has run\n // since the checked content may contain this variable'\n Promise.resolve().then(() => this.selectedIndexChange.emit(indexToSelect));\n }\n\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab: MatTab, index: number) => {\n tab.position = index - indexToSelect;\n tab.isActive = index === indexToSelect;\n\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit() {\n this._subscribeToTabLabels();\n\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n this._subscribeToTabLabels();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n\n _focusChanged(index: number) {\n this.focusChange.emit(this._createChangeEvent(index));\n }\n\n private _createChangeEvent(index: number): MatTabChangeEvent {\n const event = new MatTabChangeEvent;\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n private _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n\n this._tabLabelSubscription = merge(\n ...this._tabs.map(tab => tab._disableChange),\n ...this._tabs.map(tab => tab._labelChange)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i: number): string {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n\n /** Returns a unique id for each tab content element */\n _getTabContentId(i: number): string {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight: number): void {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) { return; }\n\n const wrapper: HTMLElement = this._tabBodyWrapper.nativeElement;\n\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight(): void {\n this._tabBodyWrapperHeight = this._tabBodyWrapper.nativeElement.clientHeight;\n this._tabBodyWrapper.nativeElement.style.height = '';\n this.animationDone.emit();\n }\n\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab: MatTab, tabHeader: MatTabHeader, idx: number) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = idx;\n }\n }\n\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab: MatTab, idx: number): number | null {\n if (tab.disabled) {\n return null;\n }\n return this.selectedIndex === idx ? 0 : -1;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n Component,\n Input,\n Inject,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n ElementRef,\n Directive,\n Optional,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ComponentFactoryResolver,\n ViewContainerRef,\n forwardRef,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {TemplatePortal, CdkPortalOutlet} from '@angular/cdk/portal';\nimport {Directionality, Direction} from '@angular/cdk/bidi';\nimport {Subscription} from 'rxjs/Subscription';\nimport {matTabsAnimations} from './tabs-animations';\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * psuedo-prior state.\n */\nexport type MatTabBodyPositionState =\n 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type MatTabBodyOriginState = 'left' | 'right';\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({\n selector: '[matTabBodyHost]'\n})\nexport class MatTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n /** A subscription to events for when the tab body begins centering. */\n private _centeringSub: Subscription;\n /** A subscription to events for when the tab body finishes leaving from center position. */\n private _leavingSub: Subscription;\n\n constructor(\n _componentFactoryResolver: ComponentFactoryResolver,\n _viewContainerRef: ViewContainerRef,\n @Inject(forwardRef(() => MatTabBody)) private _host: MatTabBody) {\n super(_componentFactoryResolver, _viewContainerRef);\n }\n\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit(): void {\n if (this._host._isCenterPosition(this._host._position)) {\n this.attach(this._host._content);\n }\n this._centeringSub = this._host._beforeCentering.subscribe((isCentering: boolean) => {\n if (isCentering) {\n if (!this.hasAttached()) {\n this.attach(this._host._content);\n }\n }\n });\n\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n this.detach();\n });\n }\n\n /** Clean up centering subscription. */\n ngOnDestroy(): void {\n if (this._centeringSub && !this._centeringSub.closed) {\n this._centeringSub.unsubscribe();\n }\n\n if (this._leavingSub && !this._leavingSub.closed) {\n this._leavingSub.unsubscribe();\n }\n }\n}\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-body',\n templateUrl: 'tab-body.html',\n styleUrls: ['tab-body.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [matTabsAnimations.translateTab],\n host: {\n 'class': 'mat-tab-body',\n },\n})\nexport class MatTabBody implements OnInit {\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n @Output() readonly _onCentering: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _afterLeavingCenter: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the tab completes its animation towards the center. */\n @Output() readonly _onCentered: EventEmitter<void> = new EventEmitter<void>(true);\n\n /** The tab body content to display. */\n @Input('content') _content: TemplatePortal;\n\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n @Input()\n set position(position: number) {\n if (position < 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'left' : 'right';\n } else if (position > 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'right' : 'left';\n } else {\n this._position = 'center';\n }\n }\n _position: MatTabBodyPositionState;\n\n /** The origin position from which this tab should appear when it is centered into view. */\n @Input()\n set origin(origin: number) {\n if (origin == null) { return; }\n\n const dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n this._origin = 'left';\n } else {\n this._origin = 'right';\n }\n }\n _origin: MatTabBodyOriginState;\n\n constructor(private _elementRef: ElementRef,\n @Optional() private _dir: Directionality) { }\n\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this._origin) {\n this._position = this._origin == 'left' ? 'left-origin-center' : 'right-origin-center';\n }\n }\n\n _onTranslateTabStarted(e: AnimationEvent): void {\n const isCentering = this._isCenterPosition(e.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n\n _onTranslateTabComplete(e: AnimationEvent): void {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(e.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n\n if (this._isCenterPosition(e.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n }\n\n /** The text direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position: MatTabBodyPositionState|string): boolean {\n return position == 'center' ||\n position == 'left-origin-center' ||\n position == 'right-origin-center';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/** Animations used by the Material tabs. */\nexport const matTabsAnimations: {\n readonly translateTab: AnimationTriggerMetadata;\n} = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({transform: 'none'})),\n state('left', style({transform: 'translate3d(-100%, 0, 0)'})),\n state('right', style({transform: 'translate3d(100%, 0, 0)'})),\n transition('* => left, * => right, left => center, right => center',\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({transform: 'translate3d(-100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({transform: 'translate3d(100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ])\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\nimport {MatTabLabel} from './tab-label';\n\n\n// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nexport class MatTabBase {}\nexport const _MatTabMixinBase = mixinDisabled(MatTabBase);\n\n@Component({\n moduleId: module.id,\n selector: 'mat-tab',\n templateUrl: 'tab.html',\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n exportAs: 'matTab',\n})\nexport class MatTab extends _MatTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\n /** Content for the tab label given by `<ng-template mat-tab-label>`. */\n @ContentChild(MatTabLabel) templateLabel: MatTabLabel;\n\n /** Template inside the MatTab view that contains an `<ng-content>`. */\n @ViewChild(TemplateRef) _content: TemplateRef<any>;\n\n /** The plain text label for the tab, used when there is no template label. */\n @Input('label') textLabel: string = '';\n\n /** The portal that will be the hosted content of the tab */\n private _contentPortal: TemplatePortal | null = null;\n\n /** @docs-private */\n get content(): TemplatePortal | null {\n return this._contentPortal;\n }\n\n /** Emits whenever the label changes. */\n readonly _labelChange = new Subject<void>();\n\n /** Emits whenever the disable changes */\n readonly _disableChange = new Subject<void>();\n\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n position: number | null = null;\n\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n origin: number | null = null;\n\n /**\n * Whether the tab is currently active.\n */\n isActive = false;\n\n constructor(private _viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel')) {\n this._labelChange.next();\n }\n\n if (changes.hasOwnProperty('disabled')) {\n this._disableChange.next();\n }\n }\n\n ngOnDestroy(): void {\n this._disableChange.complete();\n this._labelChange.complete();\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {CdkPortal} from '@angular/cdk/portal';\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n selector: '[mat-tab-label], [matTabLabel]',\n})\nexport class MatTabLabel extends CdkPortal {\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef, NgZone} from '@angular/core';\n\n\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\n@Directive({\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n },\n})\nexport class MatInkBar {\n constructor(\n private _elementRef: ElementRef,\n private _ngZone: NgZone) {}\n\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element: HTMLElement) {\n this.show();\n\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._setStyles(element));\n });\n } else {\n this._setStyles(element);\n }\n }\n\n /** Shows the ink bar. */\n show(): void {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n\n /** Hides the ink bar. */\n hide(): void {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n\n /**\n * Sets the proper styles to the ink bar element.\n * @param element\n */\n private _setStyles(element: HTMLElement) {\n const inkBar: HTMLElement = this._elementRef.nativeElement;\n\n inkBar.style.left = element ? (element.offsetLeft || 0) + 'px' : '0';\n inkBar.style.width = element ? (element.offsetWidth || 0) + 'px' : '0';\n }\n}\n"],"names":["observableOf"],"mappings":"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"}
@@ -219,7 +219,7 @@ var MatAutocomplete = /** @class */ (function (_super) {
219
219
  MatAutocomplete.decorators = [
220
220
  { type: Component, args: [{selector: 'mat-autocomplete',
221
221
  template: "<ng-template><div class=\"mat-autocomplete-panel\" role=\"listbox\" [id]=\"id\" [ngClass]=\"_classList\" #panel><ng-content></ng-content></div></ng-template>",
222
- styles: [".mat-autocomplete-panel{-webkit-backface-visibility:hidden;backface-visibility:hidden;min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}"],
222
+ styles: [".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}"],
223
223
  encapsulation: ViewEncapsulation.None,
224
224
  preserveWhitespaces: false,
225
225
  changeDetection: ChangeDetectionStrategy.OnPush,